找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6487|回復: 8
收起左側

51單片機串口通信問題(輸入什么字符或數(shù)字返回顯示程序)

[復制鏈接]
ID:440482 發(fā)表于 2019-4-9 15:40 | 顯示全部樓層 |閱讀模式
30黑幣
程序目的:輸入什么字符或數(shù)字返回顯示
主要問題:向單片機發(fā)送0時,返回80.麻煩能幫忙看下嗎?
860D7B3819404D60B4E04597BC8AE896.jpg

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void init()
  6. {
  7.         //串口
  8.                 REN=1;//允許串口接受數(shù)據(jù)
  9.                 SM0=0;//SM2和0為串口工作模式選擇
  10.                 SM1=1;
  11.                 ES=1;//允許串口中斷
  12.                 //定時器設置
  13.                 TMOD=0x20;//定時器工作模式選擇方式2        自動裝填
  14.                 TH1=0xfd; //TH1與TL1為定時器中T1寄存器的高8低8位;設置波特率用
  15.                 TL1=0xfd;
  16.                 EA=1;//允許總中斷
  17.                 TR1=1;//開啟T1定時器
  18. }
  19. void main()
  20. {         
  21.         init();
  22.         while(1)
  23.         {}
  24. }
  25. void ya(void) interrupt 4
  26. {
  27.         uchar a;
  28.         if(RI)
  29.         {  
  30.                 a=SBUF;
  31.                 RI=0;
  32.                 SBUF=a;
  33.         }
  34.         if(TI)
  35.                         TI=0;
  36. }
復制代碼

最佳答案

查看完整內容

程序本身沒有什么問題,主要是因為晶振頻率不合適,導致波特率誤差太大,需要設置加倍。 void UartInit(void) //4800bps@12.000MHz { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位數(shù)據(jù),可變波特率 TMOD = 0x20; //設定定時器1為8位自動重裝方式 TL1 = 0xF3; //設定定時初值 TH1 = 0xF3; //設定定時器重裝值 TR1 = 1; //啟動定時器1 ET1 = 0; //禁止定時器1中斷 EA ...

評分

參與人數(shù) 1黑幣 +10 收起 理由
豬腳 + 10 很給力!

查看全部評分

回復

使用道具 舉報

ID:213173 發(fā)表于 2019-4-9 15:40 | 顯示全部樓層
lizzz 發(fā)表于 2019-4-9 21:22
求指點呀,調了一下午加晚上了    頭疼

程序本身沒有什么問題,主要是因為晶振頻率不合適,導致波特率誤差太大,需要設置加倍。
void UartInit(void)                //4800bps@12.000MHz
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD = 0x20;                //設定定時器1為8位自動重裝方式
        TL1 = 0xF3;                //設定定時初值
        TH1 = 0xF3;                //設定定時器重裝值
        TR1 = 1;                       //啟動定時器1
        ET1 = 0;                        //禁止定時器1中斷
        EA=1;                       //允許總中斷
        ES=1;                    //允許串口中斷
}

評分

參與人數(shù) 1黑幣 +10 收起 理由
豬腳 + 10 贊一個!

查看全部評分

回復

使用道具 舉報

ID:440482 發(fā)表于 2019-4-9 16:22 | 顯示全部樓層
不要沉呀
回復

使用道具 舉報

ID:508043 發(fā)表于 2019-4-9 16:56 | 顯示全部樓層
等待大佬
回復

使用道具 舉報

ID:506093 發(fā)表于 2019-4-9 17:04 | 顯示全部樓層
你這里可能是串口初始化有問題 ,你看看用的是什么型號的單片機,然后在STC-ISP那個下載程序軟件里面可以找到對應型號的串口初始化程序,你修改一下應該就可以的了
回復

使用道具 舉報

ID:440482 發(fā)表于 2019-4-9 21:20 | 顯示全部樓層
后來發(fā)現(xiàn)和波特率的設置有問題,硬件單片機的晶振是12MHZ的。
修改后傳一些數(shù)沒問題,但傳某些數(shù)如CC就會出現(xiàn)端口不停傳一些不知道的數(shù).求指點呀
代碼如下
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar a,flag;

  5. void init()
  6. {
  7.         //串口輸ru
  8.                 SCON=0X50;
  9.                 ES=1;//允許串口中斷
  10.                 //定時器設置
  11.                 TMOD=0X20;//定時器工作模式選擇方式2        自動裝填
  12.                 TH1=0XF3; //TH1與TL1為定時器中T1寄存器的高8低8位;設置波特率用
  13.                 TL1=0XF3;//波特率4600
  14.                 PCON=0X80;
  15.                 EA=1;//允許總中斷
  16.                 TR1=1;//開啟T1定時器
  17. }
  18. void main()
  19. {         
  20.         init();
  21.         while(1);
  22. }
  23. void ya() interrupt 4
  24. {

  25.          a=SBUF;
  26.          RI=0;
  27.          ES=0;
  28.          SBUF=a;
  29.          while(!TI);
  30.          TI=0;
  31.          ES=1;
  32.         }
  33.        


復制代碼
回復

使用道具 舉報

ID:440482 發(fā)表于 2019-4-9 21:22 | 顯示全部樓層
求指點呀,調了一下午加晚上了    頭疼
回復

使用道具 舉報

ID:506093 發(fā)表于 2019-4-10 08:33 | 顯示全部樓層
lizzz 發(fā)表于 2019-4-9 21:20
后來發(fā)現(xiàn)和波特率的設置有問題,硬件單片機的晶振是12MHZ的。
修改后傳一些數(shù)沒問題,但傳某些數(shù)如CC就會 ...

你這里應該仍然是串口初始化問題,你這里的波特率設置4600,那串口調試助手那里也是設置為4600嗎?你的單片機型號是什么?我?guī)湍阈薷囊幌麓诔跏蓟绦,你再試試吧?/td>

評分

參與人數(shù) 1黑幣 +20 收起 理由
lizzz + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:440482 發(fā)表于 2019-4-10 10:21 | 顯示全部樓層
飛云 發(fā)表于 2019-4-10 08:33
你這里應該仍然是串口初始化問題,你這里的波特率設置4600,那串口調試助手那里也是設置為4600嗎?你的單 ...

謝謝,謝謝問題解決了。找到問題了上邊波特率我打錯了它是加倍下的4800,后來在普中(賣開發(fā)板的帶的串口調試工具)改了,問題就出現(xiàn)上述發(fā)送CC后串口不停返回值,之后又用了其他串口調試軟件,顯示就正常了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表