标题:
单片机同时检测两个端口,并且延时输出?
[打印本页]
作者:
贵菁521
时间:
2022-9-2 23:09
标题:
单片机同时检测两个端口,并且延时输出?
有四个IO,1入1出,2入2出,当1入有信号时,1出然后延时几秒,在此过程中当2入有信号时也2出然后延时几秒。求指导
在此过程中彼此互不干扰
作者:
wulin
时间:
2022-9-3 07:20
用初学者能看懂的方式写个示例
/*****************************************************
IN_1、IN_2低电平触发,OUT1、OUT2输出高电平并经延时后
恢复低电平,两路控制独立工作,互不关联
触发电平宽度与延时时间无关,延时输出期间重复触发无效
*****************************************************/
#include <reg51.h>//头文件
//端口定义
sbit IN_1=P1^0;
sbit IN_2=P1^1;
sbit OUT1=P2^0;
sbit OUT2=P2^1;
//变量声明
unsigned int time_1=0,time_2=0;//定时时间变量
bit sign_1=0,sign_2;//触发信号状态标志位变量
//主函数
void main(void)
{
//初始化端口
IN_1=1;
IN_2=1;
OUT1=0;
OUT2=0;
//初始化定时器
TMOD = 0x01;
TH0 = 0xFC;//12MHz 1ms
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 1;
//主循环
while(1)
{
if(!IN_1)
{
if(!sign_1 && time_1==0)
{
sign_1=1;
time_1=2000;//预置时间2s
OUT1=1;
}
}
else sign_1=0;
if(!IN_2)
{
if(!sign_2 && time_2==0)
{
sign_2=1;
time_2=5000;//预置时间5s
OUT2=2;
}
}
else sign_2=0;
}
}
//定时器0中断服务函数
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0xFC;
TL0 = 0x18;
if(time_1>0)//1通道延时
{
time_1--;
if(time_1==0)
OUT1=0;
}
if(time_2>0)//2通道延时
{
time_2--;
if(time_2==0)
OUT2=0;
}
}
复制代码
作者:
yzwzfyz
时间:
2022-9-3 08:11
不存在难度,因为原本就需要延时。程序在延时的过程中可以做做多事,判断两个输入,自然不成问题。
不知楼主困在哪里了。轮流进行判读,或一次读入,轮流判断都可以,然后再延时输出。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1