![]() |
發布時間: 2021-9-14 10:13
正文摘要:接收判斷就是不行比如我用while(receiveData=="1")就是判斷不了,只能自己設一個中間變量flag輔助判斷,求大神指教。自己磨了好久。 #include<reg52.h> #include<intrins.h> #include<stdio.h> #inc ... |
你電腦串口助手, 發個 0x31 給單片機, 讓單片機收到0x31,給你回復0x13看看,是不是能正常干活,不能得話,就是單片機里波特率或者什么的設置不對, |
yzwzfyz 發表于 2021-9-14 14:46 沒有示波器...... |
黃youhui 發表于 2021-9-14 11:37 試了不行 |
lkc8210 發表于 2021-9-14 11:49 波特率4800我是知道的 |
188610329 發表于 2021-9-14 12:04 串口助手接收就是顯示31 |
zhai1995 發表于 2021-9-14 11:28 沒有配置打印這功能 |
注意通訊頻率。最好有示波器看,直觀,易找出問題之所在。 |
lkc8210 發表于 2021-9-14 11:49 就是字符1,用串口助手16進制接收就是顯示31 |
黃youhui 發表于 2021-9-14 11:37 改了不行 |
lkc8210 發表于 2021-9-14 11:49 這位大哥的回復好詳細,我試試 |
鄭漢松 發表于 2021-9-14 11:33 字符1,unsigned char a這類型,能寫成a==0x31嗎 |
程序結構有問題,串口中斷函數也寫錯。
|
首先, 你嘗試比較 while(receiveData==0x31) 如果這樣能成功的話, 你只要改成 while(receiveData=='1') 就能正常運行了. |
1. TH1=0XF4; TL1=0XF4; 對于12T 8051單片機8位定時器波特率加倍來說0xF4的波特率是4800 2. UsartInit()只需在開機時運行一次,不用放在while(1)里 3. while(receiveData=="1")<<雙引號是字串,比較字符要用單引號 ‘1’ |
1是數字1,串口接受16進制模式就是1 ‘1’是字符1,串口接受16進制模式就是0x31 “1”是字符串1,串口接受16進制模式就是‘1’ ‘\r’ '\n'三個字符,字符串必須用\r\n結束 |
鄭漢松 發表于 2021-9-14 11:33 你把“1”改成‘1‘試試,要不改成0X31也行 |
你給單片機發送的數據是 1 還是 '1' 呢?'1' 對應的數值是0x31,檢查一下 |
應該是你接收的數據不對。 你利用flag = 1;只是表示有串口數據發來,并不能對具體的數據進行處理。 建議配置打印,接收的數據再打印出來,分析問題在那。 |