AVR USART接收中斷程序
使用AVR的USART進(jìn)行自發(fā)自收(將發(fā)送引腳RXD短接到接收引腳TXD),發(fā)出數(shù)據(jù):0,1,2。。。數(shù)據(jù),能接收到自己發(fā)出的數(shù)據(jù):0,1,2。。。使用LED作出簡單指示。
USART自發(fā)自收,使用PB口的LED指示接收到的數(shù)據(jù),觀察是否與發(fā)送的數(shù)據(jù)一致。
#include
#define DISP_PORT PORTB
#define DISP_DDR DDRB
/*
程序功能:初始化UART為:8位,9.6K,接收中斷
注意事項(xiàng):基于7.3728M晶振
程序名稱:UART初始化程序
*/
void uart0_init (void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00; //U2X = 0,不加倍數(shù)率
UCSRC = 0x86; //固定的
/* 設(shè)置幀格式 : 8 個數(shù)據(jù)位 , 2 個停止位 */
//UCSRC = (1< UBRRL = 47; //set baud rate lo,波特率為9.6K //UBRRL=(fosc/16/(baud+1))%256; fosc是晶振,baud為波特率 UBRRH = 0x00; //set baud rate hi UCSRB = 0x98; //接收中斷允許,接收緩沖自動清空,接收允許 } /*程序名稱:UART接收中斷服務(wù)程序*/ #pragma interrupt_handler uart0_rx_isr:12 void uart0_rx_isr(void) { DISP_PORT = UDR;//顯示接收到的數(shù)據(jù) //如:接收到"1",顯示0X31 //delay50ms(1); } void mcu_init(void) { CLI(); uart0_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts } void main() { uint8 counter=0; mcu_init(); DISP_DDR=0xFF; while(1) { UDR=counter++; //發(fā)送數(shù)據(jù),數(shù)據(jù)為變量counter while(!(UCSRA&0x40)); //等待發(fā)送結(jié)束 //Bit 6 – TXC: USART 發(fā)送結(jié)束 //發(fā)送移位緩沖器中的數(shù)據(jù)被送出,且當(dāng)發(fā)送緩沖器 (UDR) 為空時 //TXC 置位。執(zhí)行發(fā)送結(jié)束中斷時 TXC 標(biāo)志自動清零, //也可以通過寫 1 進(jìn)行清除操作。 UCSRA|=0x40; //清除發(fā)送結(jié)束標(biāo)志位 delay50ms(4); } }
上一篇:AVR 看門狗使用
- 富士通數(shù)字退火芯片DAU明年登場[18年05月19日 12:37]
- 高通總裁拜訪OPPO,傳拿下R15S訂單[18年05月19日 12:37]
- 經(jīng)濟(jì)學(xué)人:臺積電先進(jìn)制程將超越英特爾[18年05月19日 12:36]
- 高通恩智浦并購獲批前景樂觀 恩智浦股價創(chuàng)本周最大漲幅[18年05月19日 12:35]
- 共建智慧家庭美好未來!2018中國智慧家庭高峰論壇精彩盤點(diǎn)[18年05月19日 12:33]
- 樂鑫ESP32開發(fā)板正式通過Amazon FreeRTOS的驗(yàn)證[18年05月18日 21:30]