欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3162|回復: 8
收起左側

單片機多個IO輸入端,有什么比較好的方法檢測出其中的IO口發生變化

[復制鏈接]
ID:878906 發表于 2021-3-3 18:24 | 顯示全部樓層 |閱讀模式
IAP15W系列的單片機芯片,假設有30個IO口(P0~P7都有用到)都作為輸入口,初始化時都默認為高電平。有什么比較好的方法檢測出其中的IO口發生變化(有可能是多個都變低)后去做相應動作?請各個大神指教?

回復

使用道具 舉報

ID:743654 發表于 2021-3-3 20:30 | 顯示全部樓層
最土的方法,全接LED燈,看燈的狀態。
回復

使用道具 舉報

ID:888199 發表于 2021-3-4 00:40 | 顯示全部樓層
不能輪詢或者定時中斷查詢嗎?
回復

使用道具 舉報

ID:470833 發表于 2021-3-4 08:41 | 顯示全部樓層
用萬用表測
回復

使用道具 舉報

ID:798631 發表于 2021-3-4 12:26 | 顯示全部樓層
設置各個口線觸發的任務序號           序號根據需要進行任務的輕重緩急進行分配 ,合理調度就可以了   
回復

使用道具 舉報

ID:451718 發表于 2021-3-4 14:35 | 顯示全部樓層
本帖最后由 robinsonlin 于 2021-3-4 14:37 編輯

//--------對于每個端口,定義一個結構體
struct ADDR
{
        unsigned char bit0: 1;
        unsigned char bit1: 1;
        unsigned char bit2: 1;
        unsigned char bit3: 1;
        unsigned char bit4: 1;
        unsigned char bit5: 1;
        unsigned char bit6: 1;
        unsigned char bit7: 1;
}addrP0;
//---------定義一個狀態變量
unsigned char Dev_AddrP0 ;
//---------端口狀態讀取函數
unsigned char ReadDevAddrP0(void)
{
        if(P0^0 == 1)addrP0.bit0 = 1;
        else addrP0.bit0 = 0;
        
        if(P0^1 == 1)addrP0.bit1 = 1;
        elseaddrP0.bit1 = 0;
        
        if(P0^2 == 1)addrP0.bit2 = 1;
        else addrP0.bit2 = 0;

       .........省略P0^3到P0^7的檢測語句
        
        Dev_AddrP0 = (*((unsigned char*)&addrP0)) & 0xff;
       return Dev_AddrP0;
}

檢測函數返回的值,就是端口對于IO口的狀態
回復

使用道具 舉報

ID:451718 發表于 2021-3-4 14:58 | 顯示全部樓層
補充:上貼是默認初始狀態都為低的。  如果初始狀態都為高,要檢測低電平事件,就把返回值按位取反就好了。
回復

使用道具 舉報

ID:883031 發表于 2021-3-4 21:34 | 顯示全部樓層
先保存初始端口值,再讀入端口值,若兩者不等,說明端口有變化,再將新讀入的值保存,反復判斷。
回復

使用道具 舉報

ID:858964 發表于 2021-3-5 14:31 | 顯示全部樓層
若僅是監測IO口變化而無須對變化作處理,
建議用cheney03推薦的做法:查看各路IO的LED燈亮/滅,
這一般的工控做法,用指示燈顯示外設狀態;
.
若須要對IO口發后變化進行實時處理,
建議用robinsonlin推薦的做法:
循環掃描各IO口的0/1狀態并作相應處理。

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表