標題: [已解決]關于單片機串口通訊的疑惑 [打印本頁]

作者: zhczlzhang    時間: 2017-11-8 09:21
標題: [已解決]關于單片機串口通訊的疑惑
我按照老師給的程序運行了下,如下。
  1. #include <reg52.h>
  2. void ConfigUART(unsigned int baud);

  3. void main()
  4. {
  5.     EA = 1;   //使能總中斷
  6.     ConfigUART(9600);  //配置波特率為9600
  7.     while (1);
  8. }
  9. /* 串口配置函數(shù),baud-通信波特率 */
  10. void ConfigUART(unsigned int baud)
  11. {
  12.     SCON  = 0x50;  //配置串口為模式1
  13.     TMOD &= 0x0F;  //清零T1的控制位
  14.     TMOD |= 0x20;  //配置T1為模式2
  15.     TH1 = 256 - (11059200/12/32)/baud;  //計算T1重載值
  16.     TL1 = TH1;     //初值等于重載值
  17.     ET1 = 0;       //禁止T1中斷
  18.     ES  = 1;       //使能串口中斷
  19.     TR1 = 1;       //啟動T1
  20. }
  21. /* UART中斷服務函數(shù) */
  22. void InterruptUART() interrupt 4
  23. {
  24.     if (RI)  //接收到字節(jié)
  25.     {
  26.         RI = 0;   //手動清零接收中斷標志位
  27.         SBUF = SBUF;  //接收的數(shù)原路返回,左邊是發(fā)送SBUF,右邊是接收SBUF
  28.     }
  29.     if (TI)  //字節(jié)發(fā)送完畢
  30.     {
  31.         TI = 0;   //手動清零發(fā)送中斷標志位
  32.     }
  33. }
復制代碼
按理來說,我按照字符類發(fā)送0,接收是十六進制,他應該給我返回的是30,結果給我返回的是B0,我按照字符類發(fā)送1,接收是十六進制,他應該給我返回的是31,結果給我返回的是B1.
按照返回的值B0轉換為十進制是176,減128是48,48的ASCLL值是0.
按照返回的值B1轉換為十進制是177,減128是49,48的ASCLL值是1.
我有點理解不了他為什么給我返回的不是是30而是B0,為什么為這樣,求解答?



QQ截圖20171108092057.png (73.51 KB, 下載次數(shù): 87)

QQ截圖20171108092057.png

QQ截圖20171108092111.png (42.68 KB, 下載次數(shù): 84)

QQ截圖20171108092111.png

作者: HC6800-ES-V2.0    時間: 2017-11-8 11:34
看了你的電路圖,可能問題出在你的晶振上。
你程序用的時鐘11.0592MHz,但電路圖中用的是12M,而12M晶振情況下,要誤差小,最大波特率為4800加倍。你設置的9600,誤差6.99%。一般都不可能接收到正確的信息了。
另外,你的STC-ISP程序太老了吧,下載一個新的。新版的可以看到波特率設置的誤差。




作者: zhczlzhang    時間: 2017-11-8 13:56
HC6800-ES-V2.0 發(fā)表于 2017-11-8 11:34
看了你的電路圖,可能問題出在你的晶振上。
你程序用的時鐘11.0592MHz,但電路圖中用的是12M,而12M晶振情 ...

晶振沒有錯誤,仿真設置里面我設置的是11.0592MHZ,只是沒有改外面的的標號。
作者: 長帆888    時間: 2017-11-8 14:21
仿真中單片機的晶振沒改,
作者: zhczlzhang    時間: 2017-11-8 14:29
問題已解決了,感謝長帆888,我重建了一個新的仿真用的12M來測試發(fā)現(xiàn)沒問題,然后檢查原來的仿真設計,發(fā)現(xiàn)我的串口設置跟晶振時鐘設置沒有問題,主要是單片機內部還有一個時鐘忘記設置了,所以出現(xiàn)了這個問題,謝謝長帆888。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1