AVR單片機串口通信程序
AVR單片機的串口通信功能可謂強大啊,下面就簡單說下我在學習時的一些經驗。
本文引用地址:http://m.butianyuan.cn/article/201611/323494.htm實驗板是AVR-ATMEGA128A單片機,晶振8MHz。
1、初始化:設置波特率前,要關閉 USART0 的所有使用,包括使能和中斷。
2、設置 UCSR0A: UCSR0A 能寫的有 Bit0,Bit1,Bit6,其他 5 位為狀態(tài)位.我們一般使用的有 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 的設置和這些參數(shù)有關:U2X0,CPU 頻率,波特率
5、然后就是設置 UCSR0B:Bit7-RXCIE0 為接收結束中斷使能,Bit6-TXCIE0 為發(fā)送結束中斷使 ,Bit4-RXEN0 為接收使能,Bit3-TXEN0 為發(fā)送使能。一般情況下,接收使用中斷方式,所以使用接收結束中斷使能。
下面是源代碼:
/*
* 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) //將上位機發(fā)送的數(shù)據發(fā)送回上位機顯示
{
temp=UDR0;
PORTA=~temp;
UDR0=temp;
}
評論