您好,歡迎訪問上海現易電子元器件有限公司網站!
使用AVR的USART進行自發自收(將發送引腳RXD短接到接收引腳TXD),發出數據:0,1,2。。。數據,能接收到自己發出的數據:0,1,2。。。使用LED作出簡單指示。
USART自發自收,使用PB口的LED指示接收到的數據,觀察是否與發送的數據一致。
#include
#define DISP_PORT PORTB
#define DISP_DDR DDRB
/*
程序功能:初始化UART為:8位,9.6K,接收中斷
注意事項:基于7.3728M晶振
程序名稱:UART初始化程序
*/
void uart0_init (void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00; //U2X = 0,不加倍數率
UCSRC = 0x86; //固定的
/* 設置幀格式 : 8 個數據位 , 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接收中斷服務程序*/
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
DISP_PORT = UDR;//顯示接收到的數據
//如:接收到"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++; //發送數據,數據為變量counter
while(!(UCSRA&0x40)); //等待發送結束
//Bit 6 – TXC: USART 發送結束
//發送移位緩沖器中的數據被送出,且當發送緩沖器 (UDR) 為空時
//TXC 置位。執行發送結束中斷時 TXC 標志自動清零,
//也可以通過寫 1 進行清除操作。
UCSRA|=0x40; //清除發送結束標志位
delay50ms(4);
}
}
上海現易電子元器件有限公司 版權所有 未經授權禁止復制或鏡像
CopyRight 2020-2025 www.urqm.cn All rights reserved 滬ICP備2020031792號