单片机的串口在许多时分都是一个有用的通讯接口,比如要修正单片机内部的一些变量,就可以直接运用串口通讯,将参数发送到单片机,就省去了从头编译下载的费事。
AVR单片机的串口通讯功用可谓强壮啊,下面就简略说下我在学习时的一些经历。
试验板是AVR-ATMEGA128A单片机,晶振8MHz。
1、初始化:设置波特率前,要封闭 USART0 的一切运用,包含使能和中止。
2、设置 UCSR0A: UCSR0A 能写的有 Bit0,Bit1,Bit6,其他 5 位为状况位.咱们一般运用的有 Bit1-U2X0,当这一位为 1 时,波特率的分频因子从 16 降到 8,可以有用的将异步通讯形式的传输速率加倍,可是这一位仅对异步操作有影响,运用同步操作时应将此位清零。
3、设置 UCSR0C: Bit6-UMSEL0:USART0 的形式挑选0为异步形式,1为同步形式。
Bit5:4-UPM01:0:奇偶校验形式,00 制止,01,保存,10 偶校验,11奇校验。
Bit3-USBS0:中止位的挑选 0-中止位为1bit,1 中止位为 2bits
Bit2:1-UCSZ01:0:字符长度 当 UCSZ02 为0时:00 表明 5 位,01 表明 6 位,10 表明7 位,11表明 8 位。当 UCSZ02 为 1 时,11 表明 9 位(UCSZ02 为 UCSR0B 里的一位寄存器)。
4、设置 UBRR: UBRR 的设置和这些参数有关:U2X0,CPU 频率,波特率
5、然后便是设置 UCSR0B:Bit7-RXCIE0 为接纳完毕中止使能,Bit6-TXCIE0 为发送完毕中止使 ,Bit4-RXEN0 为接纳使能,Bit3-TXEN0 为发送使能。一般情况下,接纳运用中止方法,所以运用接纳完毕中止使能。
下面是源代码:
/*
* usart.c
*
* Created: 2011/7/2 15:48:36
* Author: YIN
*/
#include <avr/io.h>
#include interrupt.h>
#include
volatile unsigned char temp;
void init()
{
UCSR0B=0x00;
UBRR0H=0x00;
UBRR0L=51;
UCSR0A=0x00;
UCSR0C=0x06;
UCSR0B=0x98;
sei();
DDRF=0xff;
PORTF=0xff;
DDRD=0xf0;
DDRA=0xff;
}
void delay()
{
unsigned int i;
i=100;
while(i–);
}
int main(void)
{
init();
while (1); //等候中止
}
SIGNAL(SIG_UART0_RECV) //将上位机发送的数据发送回上位机显现
{
temp=UDR0;
PORTA=~temp;
UDR0=temp;
}