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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1915|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

兩個(gè)51單片機(jī)串口通信程序遇到的疑惑

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
大家好最近學(xué)習(xí)單片機(jī)串口通信,教材給出的例子是一個(gè)數(shù)字密碼(935467)從甲傳遞給乙,再顯示到數(shù)碼管上。但通過(guò)Proteus仿真,一直顯示“8.8.8.8.8.8”,看不出問(wèn)題在哪里。
發(fā)送端代碼如下:
  1. //程序:ex6_1.c
  2. //功能:甲機(jī)發(fā)送數(shù)據(jù)程序,采用查詢方式實(shí)現(xiàn)
  3. #include <reg51.h>  //包含頭文件reg51.h,定義51單片機(jī)的專用寄存器
  4. void main()                        //主函數(shù)
  5. {
  6.   unsigned char i;
  7. unsigned char send[]={9,3,5,4,6,7};  //定義要發(fā)送的動(dòng)態(tài)密碼數(shù)據(jù)
  8.         TMOD=0x20;        //定時(shí)器T1工作于方式2
  9.         TL1=0xf4;         //波特率為2400bps
  10.         TH1=0xf4;
  11.         TR1=1;        
  12.         SCON=0x40;        //定義串行口工作于方式1
  13.     for (i=0;i<6;i++)
  14.     {
  15.             SBUF=send[i];     // 發(fā)送第i個(gè)數(shù)據(jù)
  16.             while(TI==0);     // 查詢等待發(fā)送是否完成
  17.             TI=0;                  // 發(fā)送完成,TI由軟件清0
  18.         }
  19.     while(1);
  20. }
復(fù)制代碼


接收端代碼如下:
  1. //程序:ex6_2.c
  2. //功能:乙機(jī)接收及顯示程序,采用查詢方式實(shí)現(xiàn),采用中斷方式實(shí)現(xiàn)的程序參見(jiàn)
  3.       //6.3節(jié)中的ex6_5.c程序
  4. #include <reg51.h>     //包含頭文件reg51.h,定義51單片機(jī)的專用寄存器
  5. code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  6.                                                 //定義0~9共陽(yáng)極顯示字型碼
  7. unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};//定義接收數(shù)據(jù)緩沖區(qū)
  8. void disp(void);    //顯示函數(shù)聲明
  9. void main()                        //主函數(shù)
  10. {
  11.     unsigned char i;
  12.         TMOD=0x20;      //定時(shí)器T1工作于方式2
  13.         TL1=0xf4;       //波特率定義
  14.         TH1=0xf4;
  15.         TR1=1;
  16.     SCON=0x40;      //定義串行口工作于方式1
  17.     REN=1;                 //接收允許
  18.     for(i=0;i<6;i++)
  19.     {
  20.              while(RI==0);                           //查詢等待,RI為1時(shí),表示接收到數(shù)據(jù)
  21.              buffer[i]=SBUF;                         //接收數(shù)據(jù)
  22.              RI=0;                                            //RI由軟件清0
  23.     }
  24.     for(;;) disp();                                //顯示接收數(shù)據(jù)
  25. }
  26. //函數(shù)名:disp
  27. //函數(shù)功能:在6個(gè)LED上顯示buffer中的6個(gè)數(shù)
  28. //入口參數(shù):無(wú)
  29. //出口參數(shù):無(wú)
  30. void disp()
  31. {
  32.    unsigned char w,i,j;
  33.    w=0x01;              //位碼賦初值
  34.    for(i=0;i<6;i++)
  35.    {
  36.      P1=tab[buffer[i]]; // 送共陽(yáng)極顯示字型段碼,buffer[i]作為數(shù)組分量的下標(biāo)
  37.      P2=~w;             // 送反相后的位碼
  38.      for(j=0;j<100;j++);// 顯示延時(shí)
  39.      w<<=1;                     // w左移一位
  40.    }
  41. }
復(fù)制代碼


因?yàn)橐业腜2引腳電平一直沒(méi)有變化,懷疑是延時(shí)和串口通信沖突,又重新加載了接收端為中斷機(jī)制的程序:
  1. //程序:ex6_5.c
復(fù)制代碼

奇怪的是,仿真結(jié)果成了這樣,各位均為短橫"-":


P2電平狀態(tài)能正常切換,但字形依然不能正常顯示,似乎并沒(méi)有數(shù)據(jù)從甲成功傳遞。

各位大佬有知道的請(qǐng)指點(diǎn)一下,不勝感謝!

仿真程序.7z (22.31 KB, 下載次數(shù): 6)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:235200 發(fā)表于 2023-6-6 01:05 | 只看該作者
P2口輸出經(jīng)過(guò)了反相器74LS04,所以在程序中的P1和P2輸出剛好反好,應(yīng)該為
P1=~tab[buffer[i]]; // 送共陽(yáng)極顯示字型段碼,buffer[i]作為數(shù)組分量的下標(biāo)
     P2=w;             // 送反相后的位碼
另外仿真時(shí),數(shù)碼管顯示未消影,所以最終要把程序改成如下就對(duì)了:
P1=0;
P1=~tab[buffer[i]]; // 送共陽(yáng)極顯示字型段碼,buffer[i]作為數(shù)組分量的下標(biāo)
P2=w;             // 送反相后的位碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2023-6-6 10:21 | 只看該作者
void disp()
{
        unsigned char w,i,j;
        w=0x01;                //位碼賦初值
        for(i=0;i<6;i++)
        {
                P2=0xff;           // 消隱
                P1=tab[buffer[i]]; // 送共陽(yáng)極顯示字型段碼,buffer[i]作為數(shù)組分量的下標(biāo)
                P2=~w;             // 送反相后的位碼
                for(j=0;j<100;j++);// 顯示延時(shí)
                w<<=1;             // w左移一位
        }
}
回復(fù)

使用道具 舉報(bào)

地板
ID:1008259 發(fā)表于 2023-6-7 00:41 | 只看該作者
多謝樓上的回復(fù),但似乎不是消隱的問(wèn)題。
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2023-6-7 07:03 | 只看該作者
Intel2006 發(fā)表于 2023-6-7 00:41
多謝樓上的回復(fù),但似乎不是消隱的問(wèn)題。

消隱是問(wèn)題之一,從你的圖片看明顯是數(shù)碼管用錯(cuò)了,要用共陽(yáng)。
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2023-6-7 07:04 | 只看該作者
Intel2006 發(fā)表于 2023-6-7 00:41
多謝樓上的回復(fù),但似乎不是消隱的問(wèn)題。


回復(fù)

使用道具 舉報(bào)

7#
ID:1008259 發(fā)表于 2023-6-7 08:01 | 只看該作者

是的,我昨晚也發(fā)現(xiàn)它用的是共陰極了。教材還是國(guó)家特等獎(jiǎng),但例程不止這一個(gè)有問(wèn)題。
回復(fù)

使用道具 舉報(bào)

8#
ID:1008259 發(fā)表于 2023-6-7 13:15 | 只看該作者

多謝,但是我設(shè)置了消隱并修改了硬件為7SEG-MPX6-CA之后,顯示是6個(gè)“0”,還是沒(méi)解決?感覺(jué)甲機(jī)的數(shù)據(jù)傳送到乙(串口助手可以檢測(cè)到數(shù)據(jù)發(fā)送),但并沒(méi)有成功給buffer[]賦值,使得這個(gè)數(shù)組還是初始化的樣子。請(qǐng)問(wèn)您知道里面的原因嗎?
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2023-6-7 15:49 | 只看該作者
Intel2006 發(fā)表于 2023-6-7 13:15
多謝,但是我設(shè)置了消隱并修改了硬件為7SEG-MPX6-CA之后,顯示是6個(gè)“0”,還是沒(méi)解決。扛杏X(jué)甲機(jī)的數(shù)據(jù) ...

你仔細(xì)看一下甲機(jī)代碼,只在初始化時(shí)發(fā)送一次,如果乙機(jī)還沒(méi)有準(zhǔn)備好,當(dāng)然收不到,后續(xù)也沒(méi)有信號(hào)了。
回復(fù)

使用道具 舉報(bào)

10#
ID:1008259 發(fā)表于 2023-6-8 11:03 | 只看該作者
wulin 發(fā)表于 2023-6-7 15:49
你仔細(xì)看一下甲機(jī)代碼,只在初始化時(shí)發(fā)送一次,如果乙機(jī)還沒(méi)有準(zhǔn)備好,當(dāng)然收不到,后續(xù)也沒(méi)有信號(hào)了。

多謝,我再好好琢磨~
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品91久久久久久 | 在线播放一区二区三区 | 成人黄色电影在线观看 | 综合九九 | 欧美日韩福利视频 | 国产在线看片 | 色爱综合| 亚洲三区在线观看 | 日韩精品免费视频 | 欧美日韩福利 | 中文精品久久 | 欧美一区二区免费 | 国产精品视频导航 | 久久久久国产精品一区二区 | 精品国产乱码久久久久久果冻传媒 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 国产区精品 | 超碰在线97国产 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 亚洲欧美在线视频 | 欧美888 | 91av在线免费播放 | 精品国产免费一区二区三区演员表 | 91精品久久久久久久久 | av影音在线 | 伊人超碰 | 超碰在线免费公开 | 91福利在线导航 | 国产精品成人一区二区三区 | 91精品国产色综合久久不卡98 | 亚洲精品一区二区二区 | 91精品国产综合久久久动漫日韩 | 黄色男女网站 | 在线观看视频中文字幕 | 亚洲精久久 | 逼逼视频| 免费在线一区二区 | 国产一区二区黑人欧美xxxx | 九九国产 | 欧美黄色片 | 四色永久 |