基于AVR的串口與PC機通信代碼怎么寫,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
為托里等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及托里網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都做網(wǎng)站、托里網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
為了以后根據(jù)此代碼繼續(xù)改進(jìn)功能,特意把代碼放在此處,也和大家一起學(xué)習(xí)。
/************************************
AVR時鐘:8.00MHz
*波特率9600(51)8位數(shù)據(jù),1位停止,當(dāng)波特率設(shè)置為19200時,UBRR=25,4800=103
*注:波特率設(shè)置9600最佳,別的數(shù)據(jù)不穩(wěn)定,不同波特率對應(yīng)的UBRR值參考手冊
*PC機向開發(fā)板發(fā)送一個字符,開發(fā)板將其大寫字母回寫給PC機
***********************************/
#include
#include
void USART_Init( unsigned int baud )
{
/* 設(shè)置波特率,baud的值查數(shù)據(jù)手冊*/
UBRRH = (unsigned char )(baud>>8);
UBRRL = (unsigned char )baud;
/* 接收器與發(fā)送器使能*/
UCSRB = (1<
UCSRC = (1<
void USART_Transmit( unsigned char data )
{
/* 等待發(fā)送緩沖器為空 */
while ( !( UCSRA & (1<
/* 將數(shù)據(jù)放入緩沖器,發(fā)送數(shù)據(jù) */
UDR = data;
}
unsigned char USART_Receive( void )
{
/*等待接收數(shù)據(jù)*/
while ( !(UCSRA & (1<
/* 從緩沖器中獲取并返回數(shù)據(jù)*/
return UDR;
}
void main()
{
unsigned char cr;
DDRD=0X02; //端口PD2(TXD)輸出,端口PD1(RXD)輸入上拉
PORTD=0XFF;
//CLR_PORTD(BUZZER);
USART_Init(51); //波特率對應(yīng)的UBRR值做形參初始化
while(1)
{
cr = USART_Receive();
cr-=32;
USART_Transmit(cr);
}
}
//大寫字母和小寫字母的ASCII碼相差32,如果PC機發(fā)送的是非小寫字母,開發(fā)板可能會發(fā)回亂碼。
看完上述內(nèi)容,你們掌握基于AVR的串口與PC機通信代碼怎么寫的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!