標(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é)者能看懂的方式寫個示例
  1. /*****************************************************
  2. IN_1、IN_2低電平觸發(fā),OUT1、OUT2輸出高電平并經(jīng)延時后
  3. 恢復(fù)低電平,兩路控制獨(dú)立工作,互不關(guān)聯(lián)
  4. 觸發(fā)電平寬度與延時時間無關(guān),延時輸出期間重復(fù)觸發(fā)無效
  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;//觸發(fā)信號狀態(tài)標(biāo)志位變量

  15. //主函數(shù)
  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. //主循環(huán)
  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;//預(yù)置時間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;//預(yù)置時間5s
  49.                                 OUT2=2;
  50.                         }
  51.                 }
  52.                 else sign_2=0;
  53.         }
  54. }
  55. //定時器0中斷服務(wù)函數(shù)
  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. }
復(fù)制代碼

作者: yzwzfyz    時間: 2022-9-3 08:11
不存在難度,因?yàn)樵揪托枰訒r。程序在延時的過程中可以做做多事,判斷兩個輸入,自然不成問題。
不知樓主困在哪里了。輪流進(jìn)行判讀,或一次讀入,輪流判斷都可以,然后再延時輸出。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1