找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机同时检测两个端口,并且延时输出?

[复制链接]
ID:1043671 发表于 2022-9-2 23:09 | 显示全部楼层 |阅读模式
有四个IO,1入1出,2入2出,当1入有信号时,1出然后延时几秒,在此过程中当2入有信号时也2出然后延时几秒。求指导  
在此过程中彼此互不干扰
回复

使用道具 举报

ID:213173 发表于 2022-9-3 07:20 | 显示全部楼层
用初学者能看懂的方式写个示例
  1. /*****************************************************
  2. IN_1、IN_2低电平触发,OUT1、OUT2输出高电平并经延时后
  3. 恢复低电平,两路控制独立工作,互不关联
  4. 触发电平宽度与延时时间无关,延时输出期间重复触发无效
  5. *****************************************************/
  6. #include <reg51.h>//头文件
  7. //端口定义
  8. sbit IN_1=P1^0;
  9. sbit IN_2=P1^1;
  10. sbit OUT1=P2^0;
  11. sbit OUT2=P2^1;
  12. //变量声明
  13. unsigned int time_1=0,time_2=0;//定时时间变量
  14. bit sign_1=0,sign_2;//触发信号状态标志位变量

  15. //主函数
  16. void main(void)
  17. {
  18. //初始化端口
  19.         IN_1=1;
  20.         IN_2=1;
  21.         OUT1=0;
  22.         OUT2=0;
  23. //初始化定时器
  24.         TMOD = 0x01;
  25.         TH0 = 0xFC;//12MHz 1ms
  26.         TL0 = 0x18;
  27.         EA = 1;
  28.         ET0 = 1;
  29.         TR0 = 1;
  30. //主循环
  31.         while(1)
  32.         {
  33.                 if(!IN_1)
  34.                 {
  35.                         if(!sign_1 && time_1==0)
  36.                         {
  37.                                 sign_1=1;       
  38.                                 time_1=2000;//预置时间2s
  39.                                 OUT1=1;
  40.                         }
  41.                 }
  42.                 else sign_1=0;

  43.                 if(!IN_2)
  44.                 {
  45.                         if(!sign_2 && time_2==0)
  46.                         {
  47.                                 sign_2=1;       
  48.                                 time_2=5000;//预置时间5s
  49.                                 OUT2=2;
  50.                         }
  51.                 }
  52.                 else sign_2=0;
  53.         }
  54. }
  55. //定时器0中断服务函数
  56. void Timer0Interrupt(void) interrupt 1
  57. {
  58.         TH0 = 0xFC;
  59.         TL0 = 0x18;
  60.         if(time_1>0)//1通道延时
  61.         {
  62.                 time_1--;
  63.                 if(time_1==0)
  64.                         OUT1=0;
  65.         }

  66.         if(time_2>0)//2通道延时
  67.         {
  68.                 time_2--;
  69.                 if(time_2==0)
  70.                         OUT2=0;
  71.         }
  72. }
复制代码
回复

使用道具 举报

ID:123289 发表于 2022-9-3 08:11 | 显示全部楼层
不存在难度,因为原本就需要延时。程序在延时的过程中可以做做多事,判断两个输入,自然不成问题。
不知楼主困在哪里了。轮流进行判读,或一次读入,轮流判断都可以,然后再延时输出。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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