基於AVR的串列埠與PC機通訊程式碼(uart8位資料)
為了以後根據此程式碼繼續改進功能,特意把程式碼放在此處,也和大家一起學習。
/************************************
AVR時鐘:8.00MHz*波特率9600(51)8位資料,1位停止,當波特率設定為19200時,UBRR=25,4800=103
*注:波特率設定9600最佳,別的資料不穩定,不同波特率對應的UBRR值參考手冊
*PC機向開發板傳送一個字元,開發板將其大寫字母回寫給PC機***********************************/
#include<iom16v.h>
#include<macros.h>
void USART_Init( unsigned int baud )
{
/* 設定波特率,baud的值查資料手冊*/
UBRRH = (unsigned char )(baud>>8);
UBRRL = (unsigned char )baud;
/* 接收器與傳送器使能*/
UCSRB = (1<<RXEN)|(1<<TXEN);
/* 設定幀格式: 8 個資料位, 2個停止位*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
void USART_Transmit( unsigned char data )
{
/* 等待傳送緩衝器為空 */
while ( !( UCSRA & (1<<UDRE)) )
;
/* 將資料放入緩衝器,傳送資料 */
UDR = data;
}
unsigned char USART_Receive( void )
{
/*等待接收資料*/
while ( !(UCSRA & (1<<RXC)) )
;
/* 從緩衝器中獲取並返回資料*/
return UDR;
}
void main()
{
unsigned char cr;
DDRD=0X02; //埠PD2(TXD)輸出,埠PD1(RXD)輸入上拉
PORTD=0XFF;
//CLR_PORTD(BUZZER);
USART_Init(51); //波特率對應的UBRR值做形參初始化
while(1)
{
cr = USART_Receive();
cr-=32;
USART_Transmit(cr);
}
}
//大寫字母和小寫字母的ASCII碼相差32,如果PC機傳送的是非小寫字母,開發板可能會發回亂碼。
相關文章
- AVR 微控制器串列埠和網口的通訊VR串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- java 實現微控制器與PC串列埠通訊Java串列埠
- FX-3U PLC串列埠與PC通訊除錯串列埠除錯
- 串列埠通訊上位機資料傳輸協議串列埠協議
- 基於WebSocket的modbus通訊(三)- websocket和串列埠Web串列埠
- 串列埠通訊串列埠
- 串列埠通訊 (轉)串列埠
- C#串列埠通訊程式SerialPort類C#串列埠
- 串列埠通訊系列六-串列埠與上位機通訊呼叫Flash及Flash視訊切換(非互動)串列埠
- linux 串列埠通訊Linux串列埠
- 串列埠通訊協議串列埠協議
- Android 串列埠通訊Android串列埠
- C# 串列埠通訊C#串列埠
- 11. 串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- (10)uart串列埠通訊串列埠
- 通過串列埠進行通訊 :串列埠
- 國內的 Stduino IDE 基於 STM32 的串列埠通訊與 LED 燈閃爍UIIDE串列埠
- VC++ 的串列埠通訊 (轉)C++串列埠
- 串列埠通訊與其他通訊方式相比有什麼優勢?串列埠
- 串列埠通訊應用程式的解決方案 (轉)串列埠
- 安卓串列埠通訊疑問安卓串列埠
- java串列埠通訊例項 -Java串列埠
- VC++ 串列埠通訊(轉)C++串列埠
- 串列埠無法正常通訊串列埠
- C#實現掃碼槍串列埠通訊C#串列埠
- Window 95串列埠通訊函式集合(只適用於32位) (轉)串列埠函式
- VC++串列埠通訊程式設計詳解C++串列埠程式設計
- C#串列埠通訊遇到的坑C#串列埠
- 樹莓派4B基於OpenCV的C++環境的串列埠通訊樹莓派OpenCVC++串列埠
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- ROS環境下串列埠通訊ROS串列埠
- Android藍芽串列埠通訊Android藍芽串列埠
- 小型plc串列埠通訊簡介串列埠
- 如何使用Java串列埠進行資料通訊及應用案例Java串列埠