找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機擴展外部中斷口,需要檢測下降沿或者上升沿

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:735148 發(fā)表于 2020-8-5 23:21 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
現(xiàn)在用的單片機是STC12C5608AD,宏晶的51單片機,只有兩個外部中斷口。因為需要檢測四個外部中斷源信號,檢測到下降沿或者上升沿后用定時器計時,到下次中斷出現(xiàn)清零,以此類推來獲得方波信號源的周期時間。想過用遍尋的方式,試了之后效果不好,因為很有可能多個信號源出現(xiàn)變化的時間很貼近,很容易丟失。因此,想要通過擴展外部中斷口的方式進行檢測?吹骄W(wǎng)上很多都是用二極管擴展,但是,當我的一個信號變成低電平之后,另外一個也變成低電平就沒有辦法同時檢測到。因此,來這里尋求大神們的指點,有什么辦法可以在現(xiàn)有的基礎(chǔ)上精確的檢測到四個信號源。不勝感激!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2020-8-6 07:08 | 只看該作者
用與門電路擴展為多路輸入,任何一路或多路信號都會觸發(fā)中斷,在中斷函數(shù)中判斷某一路或多路信號。

  1. #include "reg51.h"

  2. void main()
  3. {
  4.     IT0 = 1;
  5.     EX0 = 1;
  6.     EA = 1;     
  7.     while (1);
  8. }
  9. void exint0() interrupt 0
  10. {
  11.         unsigned char i;
  12.         i=P3&0xf0;
  13.         switch(i)
  14.         {
  15.                 case 0xe0: /*任務(wù)1*/ break;
  16.                 case 0xd0: /*任務(wù)2*/ break;
  17.                 case 0xb0: /*任務(wù)3*/ break;
  18.                 case 0x70: /*任務(wù)4*/ break;
  19.         //  case /*0xN0: 任務(wù)N*/ break;
  20.         }
  21. }
復(fù)制代碼



回復(fù)

使用道具 舉報

板凳
ID:86926 發(fā)表于 2020-8-6 08:13 | 只看該作者
按照你的說法是單片機處理速度不夠快,如果可以提高時鐘頻率可以試試,不過希望不大。要不然就只能換芯片了
回復(fù)

使用道具 舉報

地板
ID:804115 發(fā)表于 2020-8-6 09:05 來自手機 | 只看該作者
可以用4編碼器試試,4輸入信號編碼為兩中斷信號,然后中斷服務(wù)程序中解碼判斷是哪個中斷或者哪幾個中斷到來。
回復(fù)

使用道具 舉報

5#
ID:735148 發(fā)表于 2020-8-6 10:11 | 只看該作者
藍魄 發(fā)表于 2020-8-6 08:13
按照你的說法是單片機處理速度不夠快,如果可以提高時鐘頻率可以試試,不過希望不大。要不然就只能換芯片了 ...

我用的晶振是11.0592,使用的頻率是19200,一會準備改成115200去試試
回復(fù)

使用道具 舉報

6#
ID:806146 發(fā)表于 2020-8-6 10:32 | 只看該作者
四條線并聯(lián),每條線上串聯(lián)一個信號源,進行檢測,就成了唄
回復(fù)

使用道具 舉報

7#
ID:639106 發(fā)表于 2020-8-7 15:25 | 只看該作者
把單片機換成STC8A8K16S4A12
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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