AVR與RS232——一個簡單易懂的串口通訊例子程序
RS232電路圖
本程序在本站的開發(fā)板上通過,絕對沒有問題,歡迎討論。
測試效果,啟動時發(fā)送http://www.avrvi.com加回車換行,然后,收到什么,返回什么,如果給它發(fā)送一個小a,會多發(fā)回一個OK,如果發(fā)的是大A,則發(fā)回Hello字符串。
串口程序測試
// ICC-AVR application builder : 2007-5-20 17:21:25
// Target : M16
// Crystal: 7.3728Mhz
// AVR mega16 串口測試
// AVR與虛擬儀器http://www.avrvi.com古欣
#include
#include
#define F_CPU 7372800
const unsigned char buffer[]="http://www.avrvi.com";
void USART_Init( unsigned int baud )
{
unsigned int tmp;
tmp= F_CPU/baud/16-1;
UBRRH = (unsigned char)(tmp>>8);
UBRRL = (unsigned char)tmp;
UCSRB = (1<
UCSRC = (1<
// ICC 生成的初始化
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9600 (0.0%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x2F; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x18;
}
//下面兩個函數(shù)直接從數(shù)據(jù)手冊上拷貝過來的
// 數(shù)據(jù)發(fā)送【發(fā)送5 到8 位數(shù)據(jù)位的幀】
void USART_Transmit( unsigned char data )
{
while ( !( UCSRA & (1<
UDR = data;
}
// 數(shù)據(jù)接收【以5 到8 個數(shù)據(jù)位的方式接收數(shù) 據(jù)幀】
unsigned char USART_Receive( void )
{
while ( !(UCSRA & (1<
return UDR;
}
//連續(xù)發(fā)送字符
void USART_Transmit_2( void )
{
while ( !( UCSRA & (1<
UDR = H;
while ( !( UCSRA & (1<
UDR = e;
while ( !( UCSRA & (1<
UDR = l;
while ( !( UCSRA & (1<
UDR = l;
while ( !( UCSRA & (1<
UDR = o;
}
void main(void)
{
unsigned char n=0,tmp=0;
USART_Init(9600); //波特率9600 初始化串口
// uart0_init();
for(i=0;n<20;n++) //發(fā)送數(shù)組里面的字符串,http://www.avrvi.com
{
USART_Transmit(buffer[n]);
}
USART_Transmit(0x0d); //發(fā)送一個回車
USART_Transmit(0x0a); //發(fā)送一個換行
while(1)
{
if(UCSRA&(1<
}
}
}
測試效果,啟動時發(fā)送http://www.avrvi.com加回車換行,然后,收到什么,返回什么,如果給它發(fā)送一個小a,會多發(fā)回一個OK,如果發(fā)的是大A,則發(fā)回Hello字符串。
評論