久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1526|回復: 6
打印 上一主題 下一主題
收起左側(cè)

單片機小白有關串口通信的問題

[復制鏈接]
回帖獎勵 1 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次(中獎概率 50%)
跳轉(zhuǎn)到指定樓層
樓主
ID:997070 發(fā)表于 2021-12-28 09:02 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
有大佬知道為什么我這接收端接收到的數(shù)據(jù)在為什么在1602上不顯示嗎?這是部分程序,我自己寫的感覺問題很大,lcd驅(qū)動程序就不放上來了,下面有仿真圖

單片機源程序如下:
  1. #include <reg51.h>
  2. #include "lcd.h"

  3. void LcdInit();
  4. void LcdDisplay();
  5. void delay(unsigned int i);
  6. void UART_T();
  7. void UART_init(void);
  8. uchar TIME[7];
  9. unsigned char receiveData=0;
  10. char r = 0;
  11. unsigned char rec[7];

  12. void UART_init(void)
  13. {
  14.         SCON=0X50;
  15.         TMOD=0X20;
  16.         PCON=0x80;
  17.         TH1=0XF3;
  18.         TL1=0XF3;
  19.   TR1=1;
  20.         TI=0;
  21.         ES=1;
  22.         EA=1;
  23. }

  24.         void UART_T() interrupt 4
  25. {
  26.          if(RI)
  27.         {
  28.                 receiveData = SBUF;
  29.                 if((receiveData==0x59))
  30.                 {
  31.                         r = 0;        
  32.                 }
  33.                 rec[r] = receiveData;
  34.            r++;
  35.                  while(!RI);
  36.                  RI = 0;
  37.         }
  38.         RI = 0;
  39.         }
  40. void main()
  41. {
  42.         LcdInit();
  43.         delay(1000);
  44.         UART_init();
  45.         while (1)
  46.         {
  47.                 TIME[0]=rec[0];
  48.                 TIME[1]=rec[1];
  49.                 TIME[2]=rec[2];
  50.                 TIME[3]=rec[3];
  51.                 TIME[4]=rec[4];
  52.                 TIME[5]=rec[5];
  53.                 TIME[6]=rec[6];
  54.                 delay(100);
  55.     LcdDisplay();
  56.         }
  57. }
  58. void LcdDisplay()
  59.         {
  60.   LcdWriteCom(0x80 + 0x40);
  61.         LcdWriteData('0'+TIME[4] / 16);
  62.         LcdWriteData('0' + (TIME[4] & 0x0f));
  63.         LcdWriteData(':');
  64.         LcdWriteData('0' + TIME[5] / 16);
  65.         LcdWriteData('0' + (TIME[5] & 0x0f));
  66.         LcdWriteData(':');
  67.         LcdWriteData('0' + TIME[6] / 16);
  68.         LcdWriteData('0' + (TIME[6] & 0x0f));
  69.         LcdWriteCom(0x80);
  70.         LcdWriteData('2');
  71.         LcdWriteData('0');
  72.         LcdWriteData('0' + TIME[0] / 16);
  73.         LcdWriteData('0' + (TIME[0] & 0x0f));
  74.         LcdWriteData('-');
  75.         LcdWriteData('0' + TIME[1] / 16);
  76.         LcdWriteData('0' + (TIME[1] & 0x0f));
  77.         LcdWriteData('-');
  78.         LcdWriteData('0' + TIME[2] / 16);
  79.         LcdWriteData('0' + (TIME[2] & 0x0f));
  80.         LcdWriteCom(0x8B);
  81.         LcdWriteData('0' + (TIME[3] & 0x07));
  82. }
  83. void delay(unsigned int i)
  84. {
  85.         while(i--);        
  86. }
復制代碼

屏幕截圖 2021-12-28 090444.png (134.66 KB, 下載次數(shù): 31)

屏幕截圖 2021-12-28 090444.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:997070 發(fā)表于 2021-12-28 09:38 | 只看該作者
我自己已經(jīng)搞了兩天了沒有什么頭緒
回復

使用道具 舉報

板凳
ID:161164 發(fā)表于 2021-12-28 11:22 | 只看該作者
因為代碼不全
只能推測
第27行串口代碼有點問題
試改為
  1. void UART_T() interrupt 4
  2. {
  3.         if(RI)
  4.         {
  5.                 receiveData = SBUF;
  6.                 if((receiveData==0x59))
  7.                 {
  8.                         r = 0;
  9.                 }else{                       
  10.                         rec[r] = receiveData;
  11.                         r++;
  12.                 }
  13.                 while(!RI);
  14.                 RI = 0;
  15.                 }
  16.         RI = 0;
  17. }
復制代碼



然后輸入59 19 06 07 05 07 30 44
回復

使用道具 舉報

地板
ID:997070 發(fā)表于 2021-12-28 13:56 | 只看該作者
lkc8210 發(fā)表于 2021-12-28 11:22
因為代碼不全
只能推測
第27行串口代碼有點問題

沒用啊,我是在做電子鐘,要求是要通過串口通信將單片機實物與仿真環(huán)境里的電子鐘時間同步顯示,數(shù)據(jù)不能只發(fā)一段,要實時不停發(fā)送,但是數(shù)據(jù)能發(fā)送出去,但是接收端這邊有問題,LCD能正常顯示,但沒法顯示我發(fā)送過去的數(shù)據(jù),我就是這里不知道問題出在哪。還有這上面就是我接收端的整個代碼了(除了LCD的驅(qū)動程序)。
回復

使用道具 舉報

5#
ID:313048 發(fā)表于 2021-12-28 14:19 | 只看該作者
確定是否收到數(shù)據(jù)了,收到了再去顯示肯定就沒問題
回復

使用道具 舉報

6#
ID:997070 發(fā)表于 2021-12-28 14:57 | 只看該作者
AUG 發(fā)表于 2021-12-28 14:19
確定是否收到數(shù)據(jù)了,收到了再去顯示肯定就沒問題

我加了個蜂鳴器在里面,只有把蜂鳴器響的條件改為數(shù)據(jù)為0的時候才會響,這是表示沒有收到數(shù)據(jù)嗎?
回復

使用道具 舉報

7#
ID:213173 發(fā)表于 2021-12-28 21:40 | 只看該作者
最容易看懂的處理方法如下
自定義通信協(xié)議
0xAA'2' '1' '1' '2' '2' '8' '2' '1' '2' '2' '4' '0' '2'0x55
表示21年12月28日21點22分40秒星期二

unsigned char rec_buf[15];//接收緩存

void UARTInterrupt() interrupt 4
{
        static uchar i=0;                //靜態(tài)計數(shù)變量
        RI=0;                                        //接收中斷請求標志位清0
        rec_buf[num]=SBUF;                //接收到的數(shù)據(jù)串保存在緩存數(shù)組
        if(rec_buf[0]==0xAA)        //驗證數(shù)據(jù)頭(起始位)
        {
                i++;
                if(i>=15)
                {
                        flag=1;                        //一幀數(shù)據(jù)接收完成標志置1
                        i=0;                        //計數(shù)變量清0
                }
        }
}
在主函數(shù)中驗證數(shù)據(jù)尾無誤,再把收到的字符顯示在LCD相應位置
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区在线视频 | 一本色道精品久久一区二区三区 | 国产精品久久久久久婷婷天堂 | 国产又爽又黄的视频 | 久久人人爽人人爽 | 精品欧美一区二区三区久久久 | 国产激情视频在线 | 久久99国产精品 | 国产精品久久久久久久一区探花 | 91在线看| 欧美综合久久久 | 国产精品一区二区三 | 99精品视频在线观看 | 久久国产高清 | 婷婷在线网站 | 欧美激情一区二区 | 久久中文字幕一区 | 黄片毛片免费观看 | 久久午夜视频 | 精品久久久久久久 | 亚洲一区二区久久 | 一区二区三区在线播放 | 91在线电影| 国产在线资源 | 男女污污动态图 | 日韩精品专区在线影院重磅 | 久久黄网| 狠狠干狠狠操 | 欧美日韩一区二区在线播放 | 天堂成人国产精品一区 | 中文字幕在线第一页 | 亚洲精品综合 | 中文字幕亚洲精品 | 亚洲精品一区二区二区 | 男人天堂网av | 91久久夜色 | 日韩中文久久 | 农夫在线精品视频免费观看 | 欧美一级观看 | 一级片免费在线观看 | 欧美另类视频 |