|
本帖最后由 TEC 于 2022-1-28 02:00 編輯
在測(cè)試上位機(jī)接收STC89C52RC單片機(jī)高速發(fā)送字節(jié)數(shù)據(jù)準(zhǔn)確率的時(shí)候,發(fā)現(xiàn)一個(gè)現(xiàn)象,描述如下:
1、結(jié)尾沒有延時(shí)(0xff自減到0),結(jié)束字節(jié)不是'\n',上位機(jī)顯示的是亂碼,16位顯示有規(guī)律,波特率降到1200也不行。
2、結(jié)尾有延時(shí)(短了不行,0xff自減到0可以),結(jié)尾發(fā)送的不管是不是'\n',上位機(jī)都能正常顯示字符。
3、結(jié)尾發(fā)送的是'\n',有沒有延時(shí),上位機(jī)都可以正常顯示字符。
這是怎么回事呢?我在aduc7061板子上也會(huì)遇到同樣的問題,aduc7061需要0x5ff自減到0的延時(shí)。
- #include<reg52.h>
- void usart_init()
- {
- TMOD=0x20;
- TH1=0xfd;
- TL1=0xfd;
- SM0=0;
- SM1=1;
- REN=1;
- ES=1;
- EA=1;
- TR1=1;
- }
- void main()
- {
- unsigned int z;
- usart_init();
- while(1)
- {
- //z=0xff;//延時(shí)初值
- ES=0;
- TI=0;
- SBUF='a';
- while(!TI);
- TI=0;
- SBUF='b';
- while(!TI);
- TI=0;
- SBUF='c';
- while(!TI);
- TI=0;
- SBUF='d';
- while(!TI);
- TI=0;
- SBUF='e';
- while(!TI);
- TI=0;
- SBUF='g';
- while(!TI);
- TI=0;
- SBUF='h';
- while(!TI);
- TI=0;
- // SBUF='\n'; //加結(jié)束符,正常顯示
- // while(!TI);
- // TI=0;
- ES=1;
- // while(z--);//加延時(shí),顯示正常。
- }
- }
復(fù)制代碼
亂碼.PNG (64.35 KB, 下載次數(shù): 32)
下載附件
2022-1-28 01:44 上傳
加延時(shí)2.PNG (29.87 KB, 下載次數(shù): 44)
下載附件
2022-1-28 01:44 上傳
正常.PNG (41.92 KB, 下載次數(shù): 33)
下載附件
2022-1-28 01:44 上傳
|
|