『壹』 單片機串口通信問題,電腦接收到的數據出現錯誤項。
晶振如果是12MHz,波特率設置為9600的話誤碼率有點大,將波特率放低一點試一試(如TL1=0xf3; TH1=0xf3 即波特率2400)!
『貳』 51單片機的串口接收數據並分析
可惜我不能貼圖
12864去電子城買時找專做顯示屏的櫃台買。
只要是專業生產LCD的公司,都會配有c語言的驅動程序(通常是51的程序),還有電子檔LCD說明書
買來稍微修改就可以用啦
『叄』 單片機串口如何接收
在主程序中對接收到的數據串進行處理,查找幀頭、提取有效數據、進行業務判斷。
首先,要知道中斷應當盡量簡潔,所以中斷裡面只做數據接收和下標移動。
其次,要知道每幀的最大長度。幀長度要是毫無限制那緩沖區就不好開了,得採用適用性更強的緩沖技術,這里就不提了。舉例假定數據量最多10位元組,則最長幀為13位元組,可開辟16位元組緩沖區。
再次,要知道通信協議是怎麼樣的,傳輸速率如何(與單片機處理能力相比),每幀的數據之間有多少間隔,幀與幀之間有多少間隔。
間隔太短的話需要增加許多額外的處理,例如幀頭識別、幀分割,必要時又得用較大容量的循環緩沖區……這里也不提了。舉例假定幀間有足夠多的間隔時間。
『肆』 單片機接收串口數據
你通過串口助手要接受字元串或一組數據需要在單片機端開辟一個緩沖區,否則可能丟失數據。
以下程序是較為通用的串口收發常式,開辟一個16位元組的緩沖區,兩個指針,一個存數指針,一個取數指針,兩指針相等,證明沒有新的接收數據。
#include<reg51.h>
#define uchar unsigned char
uchar buf[16],getptr,putptr;
void uart_isr() interrupt 4
{
if(RI)
{
RI=0;
buf[putptr]=SBUF;
putptr++;
putptr&=0x0f;
}
}
main()
{
TMOD=0x20;
SCON=0x50;
TH1=TL1=0xfd;
TR1=1;
ES=1;
EA=1;
putptr=0;
getptr=0;
while(1)
{
if(getptr!=putptr) //取數指針和存數指針如果不等
{
SBUF=buf[getptr];
getptr++;
getptr&=0x0f;
while(!TI);
TI=0;
}
}
}