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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2097|回復: 9
打印 上一主題 下一主題
收起左側

單片機串口通信程序求助

[復制鏈接]
跳轉到指定樓層
樓主
ID:1002906 發表于 2022-2-19 16:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 AnRan_ 于 2022-2-19 21:16 編輯

       剛學定時器和串口,項目要求是 按下key1之后led燈亮5s后熄滅(定時器定時),然后串口接收到6的時候led燈全部亮,然后按下key2之后讓前面亮起來的led燈熄滅,并且向串口發送 “Hello World!”。  這三部分每一部分單獨拿出來當作一個小程序都沒有問題,但是這三部分合起來寫成一個程序就出現問題了。             我寫的這個程序運行之后,第一部分按下key1之后led燈亮五秒鐘熄滅沒任何問題; 第二部分串口接收到6的時候led燈也可以全亮,但是亮一段時間之后就會自動熄滅,按照要求應該是不讓他熄滅的;第三部分是按下key2之后第二部分亮起來的led燈可以正常熄滅,但是不會向串口發送“Hello World!”。
       請幫我看一下是哪里有問題。
單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>

  4. sbit key1=P3^0;
  5. sbit key2=P3^1;

  6. void delay(unsigned char z)//zms延時
  7. {
  8.         unsigned char i, j;
  9.         while(z>0)
  10.         {
  11.                 _nop_();
  12.                 i = 2;
  13.                 j = 199;
  14.                 do
  15.                 {
  16.                         while (--j);
  17.                 } while (--i);
  18.                 z--;
  19.         }
  20. }

  21. void timer0Init()  //50ms
  22. {
  23.         TR0=1;
  24.         TMOD|=0X01;
  25.         TH0=(65535-46082)/256;
  26.         TL0=(65535-46082)%256;
  27. }
  28. void UARTInit()
  29. {
  30.         EA=1;
  31.         ES=1;
  32.         REN=1;
  33.         SM0=0; SM1=1;
  34.         TR1=1;//打開定時器1
  35.         TMOD|=0X20;
  36.         TH1=0XFD;
  37.         TL1=0XFD;
  38. }
  39. void main()
  40. {                 
  41.         unsigned char msec;        

  42.         while(1)
  43.         {        
  44.                 UARTInit();        
  45.                 if(key1==0)
  46.                 {        
  47.                         delay(20); //消抖
  48.                         if(key1==0)
  49.                                 while(!key1) ;//松手檢測
  50.                         P1=0x00;
  51.                         timer0Init();
  52.                 }        
  53.                 if(TF0==1)
  54.                 {
  55.                         TF0=0;
  56.                         msec++;
  57.                         TH0=(65535-46082)/256;
  58.                         TL0=(65535-46082)%256;
  59.                         if(msec==100)
  60.                         {
  61.                                 P1=0XFF;
  62.                                 TR0=0;
  63.                         }                        
  64.                 }                        
  65.                 if(key2==0)
  66.                 {        
  67.                         delay(20);
  68.                         if(key2==0)
  69.                                 while(!key2) ;
  70.                         P1=0xff;
  71.                         TI=1;
  72.                         printf("Hello World!\n");
  73.                         while(!TI) ;
  74.                         TI=0;
  75.                 }                                
  76.         }
  77. }
  78. void UART() interrupt 4
  79. {
  80.         unsigned char temp;
  81.         if(RI)
  82.         {
  83.                 RI=0;
  84.                 temp=SBUF;
  85.                 if(temp==6)
  86.                         P1=0x00;
  87.         }
  88.         if(TI)
  89.                 TI=0;
  90. }


復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1003077 發表于 2022-2-19 19:51 | 只看該作者
按你描述的要求看程序,delay()沒有用到,所以是多余的,timer0Init()也沒有用用到,而在主程序里有TR0=1,所以定時不準。建議定時器用中斷。
回復

使用道具 舉報

板凳
ID:1002906 發表于 2022-2-19 20:46 | 只看該作者
Hjc12345678 發表于 2022-2-19 19:51
按你描述的要求看程序,delay()沒有用到,所以是多余的,timer0Init()也沒有用用到,而在主程序里有TR0=1, ...

這個定時是準的,就是5s,不過第二部分串口接收到6應該讓led燈一直亮著的,但是這個亮一會兒他會熄滅,并不是定時不準
回復

使用道具 舉報

地板
ID:161164 發表于 2022-2-19 22:56 | 只看該作者
真機實測
串口傳6沒有樓主說的自動關燈現像
KEY2如樓主所說不能傳回Hello world
但按代碼分析
分開寫也沒可能傳回Hello world
回復

使用道具 舉報

5#
ID:1002906 發表于 2022-2-19 23:07 | 只看該作者
lkc8210 發表于 2022-2-19 22:56
真機實測
串口傳6沒有樓主說的自動關燈現像
KEY2如樓主所說不能傳回Hello world

但是我這個單片機確實是會自動關燈..我等用我師兄的試試。key2向串口發送 hello world 的那一部分能改一下讓它能發送么?
回復

使用道具 舉報

6#
ID:625730 發表于 2022-2-19 23:10 | 只看該作者
AnRan_ 發表于 2022-2-19 20:46
這個定時是準的,就是5s,不過第二部分串口接收到6應該讓led燈一直亮著的,但是這個亮一會兒他會熄滅,并 ...

串口接收到的6是是字符,對應的ascii碼值是0x36;如果你要判斷應該用temp=='6';或者temp==0x36。
回復

使用道具 舉報

7#
ID:213173 發表于 2022-2-20 09:05 | 只看該作者
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>

  4. sbit key1=P3^0;
  5. sbit key2=P3^1;

  6. void delay(unsigned char z)//zms延時
  7. {
  8.         unsigned char i, j;
  9.         while(z--)
  10.         {
  11.                 _nop_();
  12.                 i = 2;
  13.                 j = 199;
  14.                 do
  15.                 {
  16.                         while (--j);
  17.                 } while (--i);
  18.         }
  19. }

  20. void timer0Init()  //50ms
  21. {
  22.         TMOD|=0X01;
  23.         TH0=(65535-46082)/256;
  24.         TL0=(65535-46082)%256;
  25.         TF0=0;
  26.         TR0=0;
  27. }

  28. void UARTInit()
  29. {
  30.         EA=1;
  31.         ES=1;
  32.         REN=1;
  33.         SM0=0; SM1=1;
  34.         TR1=1;//打開定時器1
  35.         TMOD|=0X20;
  36.         TH1=0XFD;
  37.         TL1=0XFD;
  38. }

  39. void Send_byte(unsigned char dat)
  40. {
  41.         SBUF = dat;
  42.         while(!TI);
  43.         TI = 0;
  44. }

  45. void Send_string(unsigned char *p)
  46. {
  47.         while(*p)
  48.         {
  49.                 Send_byte(*p++);
  50.         }
  51. }

  52. void main()
  53. {                 
  54.         unsigned char msec;        
  55.         delay(10);
  56.         timer0Init();
  57.         UARTInit();
  58.         while(1)
  59.         {               
  60.                 if(TF0==1)
  61.                 {
  62.                         TF0=0;
  63.                         TH0=(65535-46082)/256;
  64.                         TL0=(65535-46082)%256;
  65.                         msec++;
  66.                         if(msec==100)
  67.                         {
  68.                                 msec=0;
  69.                                 P1=0XFF;
  70.                                 TR0=0;
  71.                         }
  72.                 }   
  73.                 if(key1==0)
  74.                 {        
  75.                         delay(20); //消抖
  76.                         if(key1==0)
  77.                         {
  78.                                 P1=0x00;
  79.                                 TR0=1;
  80.                                 while(!key1);//松手檢測
  81.                         }
  82.                 }                             
  83.                 if(key2==0)
  84.                 {
  85.                         delay(20);
  86.                         if(key2==0)
  87.                         {
  88.                                 P1=0xff;
  89.                                 TR0=0;
  90.                                 TF0=0;
  91.                                 Send_string("Hello World!\n");
  92.                                 while(!key2);
  93.                         }
  94.                 }                                
  95.         }
  96. }

  97. void UART() interrupt 4
  98. {
  99.         if(RI)
  100.         {
  101.                 RI=0;
  102.                 if(SBUF==6)
  103.                         P1=0x00;
  104.         }
  105. }
復制代碼
回復

使用道具 舉報

8#
ID:1002906 發表于 2022-2-21 10:07 | 只看該作者

我剛試了,按下key2還是不能發送Hello World
回復

使用道具 舉報

9#
ID:1006035 發表于 2022-2-21 15:07 | 只看該作者
P3.0 P3.1不是串口嗎?你用它做了按鍵?
回復

使用道具 舉報

10#
ID:161164 發表于 2022-2-21 16:21 | 只看該作者
liuzz2k 發表于 2022-2-21 15:07
P3.0 P3.1不是串口嗎?你用它做了按鍵?

原來如此
大意了
難怪仿真時沒問題
我按仿真習慣把他改了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人三级视频 | 亚洲精品黄| 91精品国产一区二区三区动漫 | 综合久久综合久久 | 亚洲一区二区久久 | 国产高清一区二区三区 | 高清黄色| 国产一区二区av | 亚洲九色| 国产传媒视频在线观看 | 中国美女一级黄色片 | 中文字幕av第一页 | 国产成人网 | 欧美久久久久久久 | 亚洲久草视频 | 成人免费视频网址 | 精品欧美一区免费观看α√ | 成年无码av片在线 | 少妇性l交大片免费一 | 免费视频一区二区三区在线观看 | 91亚洲国产成人久久精品网站 | 国产99久久精品一区二区永久免费 | 日韩精品一区二区三区在线播放 | 亚洲国产一区二区视频 | 色婷婷综合久久久中文字幕 | 91电影在线播放 | www久久av | www.黄色网| 激情免费视频 | 日本亚洲一区 | 日韩欧美在线视频播放 | 精品乱人伦一区二区三区 | 黄色成人av| 日韩一级免费电影 | 怡红院成人在线视频 | 久久久久久91香蕉国产 | 久久香蕉网 | 99精品国产一区二区青青牛奶 | 五月婷婷 六月丁香 | 久久高清精品 | 黄网站在线播放 |