![]() |
發布時間: 2018-11-9 16:17
正文摘要:用的普中科技C51 單片機開發板。 現在想實現AD轉換,我有一個直線電位計,單片機通過AD轉換將電位計的數值顯示在動態數碼管上,同時增加一個串口,從串口助手上發送1,單片機將當前直線電位計的數值返回串口助手, ... |
15942379927 發表于 2018-11-13 15:38 你的意思 就是 我 把receiveData=='1' 這里的1 改成0x0a嗎?這樣可以,但是并沒有解決返回值是亂碼的問題。。 現在問題的原因找到了,就是Read_AD_Data(0xE4)返回的是數字,而串口傳過去的是字符串,所以就是亂碼了。但是我不知道怎么寫。。 我嘗試用數組把數字摘出來 ,一個一個傳 void Usart() interrupt 4 { u8 receiveData; u8 str[4]; u8 i; u8 j; if(RI == 1) { RI = 0;//清除接收中斷標志位 receiveData=SBUF;//儲存接收到的數據 for(j=1;j<5;j++) { if(receiveData=='1') { i=Read_AD_Data(0xE4); str[1]=i/1000+48; str[2]=i%1000/100+48; str[3]=i%1000%100/10+48; str[4]=i%1000%100%10+48; SBUF=str[j]; } else { SBUF=receiveData; } } } while(!TI); //等待發送數據完成 TI=0; //清除發送完成標志位 } 但是這樣也不對。。。 |
guangshi_wq 發表于 2018-11-13 14:42 Read_AD_Data(0xE4) 這個里面就是0-4095,一共4096個數,是我采直線電位計的返回值。。。現在確定就是中斷這塊的問題,而且是 Read_AD_Data(0xE4) 里面的數字和字符串之間的矛盾,如果我把 Read_AD_Data(0xE4) 改成48,那么串口助手上的返回值就是0。。。。但是現在關鍵是 不知道這里怎么處理。 |
你可以試一試用八位的碼去驗證 比如說0x0a 是1 0x0b是2 。。。。。無非就是在case那里改一下 |
1貌似跟停止位重復了 ,串口分不清楚到底是數據位還是停止位 我的分析![]() |
SBUF=Read_AD_Data(0xE4); 沒有看見你的子涵數。不知道怎么調用啊。 |
為什么沒人來,能不能把這個貼子轉到問答區啊 |
沒人嗎?呃 |