找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1311|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)同時檢測兩個端口,并且延時輸出?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1043671 發(fā)表于 2022-9-2 23:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有四個IO,1入1出,2入2出,當(dāng)1入有信號時,1出然后延時幾秒,在此過程中當(dāng)2入有信號時也2出然后延時幾秒。求指導(dǎo)  
在此過程中彼此互不干擾
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

使用道具 舉報

板凳
ID:123289 發(fā)表于 2022-9-3 08:11 | 只看該作者
不存在難度,因為原本就需要延時。程序在延時的過程中可以做做多事,判斷兩個輸入,自然不成問題。
不知樓主困在哪里了。輪流進(jìn)行判讀,或一次讀入,輪流判斷都可以,然后再延時輸出。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表