找回密码
 注册
关于网站域名变更的通知
查看: 236|回复: 3
打印 上一主题 下一主题

单片机串口通信程序求助

[复制链接]
  • TA的每日心情

    1643439839
  • 签到天数: 1 天

    跳转到指定楼层
    1#
    发表于 2022-2-22 09:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x

    刚学定时器和串口,项目要求是 按下key1之后led灯亮5s后熄灭(定时器定时),然后串口接收到6的时候led灯全部亮,然后按下key2之后让前面亮起来的led灯熄灭,并且向串口发送 “Hello World!”。  这三部分每一部分单独拿出来当作一个小程序都没有问题,但是这三部分合起来写成一个程序就出现问题了。         

        我写的这个程序运行之后,第一部分按下key1之后led灯亮五秒钟熄灭没任何问题; 第二部分串口接收到6的时候led灯也可以全亮,但是亮一段时间之后就会自动熄灭,按照要求应该是不让他熄灭的;第三部分是按下key2之后第二部分亮起来的led灯可以正常熄灭,但是不会向串口发送“Hello World!”。, \7 u1 b+ n% Y5 [0 W, M  `+ ?
         请帮我看一下是哪里有问题。

    • #include <reg52.h>
    • #include <intrins.h>
    • #include <stdio.h>
    • sbit key1=P3^0;
    • sbit key2=P3^1;
    • void delay(unsigned char z)//zms延时
    • {
    •         unsigned char i, j;
    •         while(z>0)
    •         {
    •                 _nop_();
    •                 i = 2;
    •                 j = 199;
    •                 do
    •                 {
    •                         while (--j);
    •                 } while (--i);
    •                 z--;
    •         }
    • }
    • void timer0Init()  //50ms
    • {
    •         TR0=1;
    •         TMOD|=0X01;
    •         TH0=(65535-46082)/256;
    •         TL0=(65535-46082)%256;
    • }
    • void UARTInit()
    • {
    •         EA=1;
    •         ES=1;
    •         REN=1;
    •         SM0=0; SM1=1;
    •         TR1=1;//打开定时器1
    •         TMOD|=0X20;
    •         TH1=0XFD;
    •         TL1=0XFD;
    • }
    • void main()
    • {                
    •         unsigned char msec;       
    •         while(1)
    •         {       
    •                 UARTInit();       
    •                 if(key1==0)
    •                 {       
    •                         delay(20); //消抖
    •                         if(key1==0)
    •                                 while(!key1) ;//松手检测
    •                         P1=0x00;
    •                         timer0Init();
    •                 }       
    •                 if(TF0==1)
    •                 {
    •                         TF0=0;
    •                         msec++;
    •                         TH0=(65535-46082)/256;
    •                         TL0=(65535-46082)%256;
    •                         if(msec==100)
    •                         {
    •                                 P1=0XFF;
    •                                 TR0=0;
    •                         }                       
    •                 }                       
    •                 if(key2==0)
    •                 {       
    •                         delay(20);
    •                         if(key2==0)
    •                                 while(!key2) ;
    •                         P1=0xff;
    •                         TI=1;
    •                         printf("Hello World!\n");
    •                         while(!TI) ;
    •                         TI=0;
    •                 }                               
    •         }
    • }
    • void UART() interrupt 4
    • {
    •         unsigned char temp;
    •         if(RI)
    •         {
    •                 RI=0;
    •                 temp=SBUF;
    •                 if(temp==6)
    •                         P1=0x00;
    •         }
    •         if(TI)
    •                 TI=0;
    • }

    • % w0 _: b2 \4 z

    1 @* n/ @, Q4 ^3 O/ C9 p
  • TA的每日心情
    开心
    2022-1-29 15:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-2-22 10:02 | 只看该作者
    UARTInit(); 要放在循环外面
  • TA的每日心情
    开心
    2022-1-24 15:10
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2022-2-22 10:48 | 只看该作者
    不要while(!key2);这样单片机不干活儿了
  • TA的每日心情
    开心
    2022-1-21 15:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2022-2-22 15:55 | 只看该作者
    看下,学习学习
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-19 14:39 , Processed in 0.078125 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表