找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1880|回复: 2
收起左侧

单片机程序问题请大神指点,根据串口传输过来的数字进行低电平输出

[复制链接]
ID:730674 发表于 2020-5-15 21:39 | 显示全部楼层 |阅读模式
10黑币
这个程序是根据串口传输过来的数字进行低电平输出,前几次相同数据都很正常的输出低电平,但是突然就会一直输出低电平不恢复成高电平,直到再次传输相同数据才会恢复。比如一直传输1时,p2.0根据频率输出低电平再恢复高电平,到某一次传输1时,p2.0会一直处于低电平,停止传输也不恢复高电平。求大佬看看哪里需要修改
  1. sbit Relay1=P2^0;
  2. sbit Relay2=P2^2;
  3. sbit Relay3=P2^4;//引脚定义

  4. void main()
  5. {
  6. SCON=0x50; //串口定义
  7. TMOD=0x20;
  8. PCON=0x00;
  9. TH1=0xfd;
  10. TL1=0xfd;
  11. RI=0;
  12. TR1=1;
  13. REN=1;
  14. SM0=0;
  15. SM1=1;
  16. EA=1;
  17. Relay1=Relay2=Relay3=1;
  18. while(1)
  19. {
  20. if(RI) /
  21. {
  22. RI=0;
  23. switch(SBUF) //根据接收的字符
  24. {
  25. case '1': Relay1=~Relay1;Relay2=1;Relay3=1;break; //继电器1运动
  26. case '2': Relay2=~Relay2;Relay1=1;Relay3=1;break; /继电器2运动
  27. case '3': Relay3=~Relay3;Relay1=1;Relay2=1;break; //继电器3运动
  28. }
  29. }
  30. }
  31. }
复制代码

最佳答案

查看完整内容

你可以把 设置高电平放在while1里面,然后把翻转电平操作放在中断里面,这样一旦退出中断,就能保证引脚重新变为高电平。
回复

使用道具 举报

ID:752714 发表于 2020-5-15 21:39 | 显示全部楼层
你可以把 设置高电平放在while1里面,然后把翻转电平操作放在中断里面,这样一旦退出中断,就能保证引脚重新变为高电平。
回复

使用道具 举报

ID:730674 发表于 2020-5-16 16:07 | 显示全部楼层
本帖最后由 a10861771 于 2020-5-17 09:56 编辑

解决了解决了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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