標(biāo)題:
單片機(jī)同時檢測兩個端口,并且延時輸出?
[打印本頁]
作者:
貴菁521
時間:
2022-9-2 23:09
標(biāo)題:
單片機(jī)同時檢測兩個端口,并且延時輸出?
有四個IO,1入1出,2入2出,當(dāng)1入有信號時,1出然后延時幾秒,在此過程中當(dāng)2入有信號時也2出然后延時幾秒。求指導(dǎo)
在此過程中彼此互不干擾
作者:
wulin
時間:
2022-9-3 07:20
用初學(xué)者能看懂的方式寫個示例
/*****************************************************
IN_1、IN_2低電平觸發(fā),OUT1、OUT2輸出高電平并經(jīng)延時后
恢復(fù)低電平,兩路控制獨(dú)立工作,互不關(guān)聯(lián)
觸發(fā)電平寬度與延時時間無關(guān),延時輸出期間重復(fù)觸發(fā)無效
*****************************************************/
#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;//觸發(fā)信號狀態(tài)標(biāo)志位變量
//主函數(shù)
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;
//主循環(huán)
while(1)
{
if(!IN_1)
{
if(!sign_1 && time_1==0)
{
sign_1=1;
time_1=2000;//預(yù)置時間2s
OUT1=1;
}
}
else sign_1=0;
if(!IN_2)
{
if(!sign_2 && time_2==0)
{
sign_2=1;
time_2=5000;//預(yù)置時間5s
OUT2=2;
}
}
else sign_2=0;
}
}
//定時器0中斷服務(wù)函數(shù)
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;
}
}
復(fù)制代碼
作者:
yzwzfyz
時間:
2022-9-3 08:11
不存在難度,因?yàn)樵揪托枰訒r。程序在延時的過程中可以做做多事,判斷兩個輸入,自然不成問題。
不知樓主困在哪里了。輪流進(jìn)行判讀,或一次讀入,輪流判斷都可以,然后再延時輸出。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1