|
用初學(xué)者能看懂的方式寫個示例
- /*****************************************************
- IN_1、IN_2低電平觸發(fā),OUT1、OUT2輸出高電平并經(jīng)延時后
- 恢復(fù)低電平,兩路控制獨立工作,互不關(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ù)制代碼 |
|