找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 2742|回復(fù): 8
收起左側(cè)

單片機(jī)多個(gè)IO輸入端,有什么比較好的方法檢測(cè)出其中的IO口發(fā)生變化

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

回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:470833 發(fā)表于 2021-3-4 08:41 | 顯示全部樓層
用萬(wàn)用表測(cè)
回復(fù)

使用道具 舉報(bào)

ID:798631 發(fā)表于 2021-3-4 12:26 | 顯示全部樓層
設(shè)置各個(gè)口線觸發(fā)的任務(wù)序號(hào)           序號(hào)根據(jù)需要進(jìn)行任務(wù)的輕重緩急進(jìn)行分配 ,合理調(diào)度就可以了   
回復(fù)

使用道具 舉報(bào)

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

//--------對(duì)于每個(gè)端口,定義一個(gè)結(jié)構(gòu)體
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;
//---------定義一個(gè)狀態(tài)變量
unsigned char Dev_AddrP0 ;
//---------端口狀態(tài)讀取函數(shù)
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的檢測(cè)語(yǔ)句
        
        Dev_AddrP0 = (*((unsigned char*)&addrP0)) & 0xff;
       return Dev_AddrP0;
}

檢測(cè)函數(shù)返回的值,就是端口對(duì)于IO口的狀態(tài)
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:858964 發(fā)表于 2021-3-5 14:31 | 顯示全部樓層
若僅是監(jiān)測(cè)IO口變化而無(wú)須對(duì)變化作處理,
建議用cheney03推薦的做法:查看各路IO的LED燈亮/滅,
這一般的工控做法,用指示燈顯示外設(shè)狀態(tài);
.
若須要對(duì)IO口發(fā)后變化進(jìn)行實(shí)時(shí)處理,
建議用robinsonlin推薦的做法:
循環(huán)掃描各IO口的0/1狀態(tài)并作相應(yīng)處理。

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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