新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC16C5X的I/O口

        PIC16C5X的I/O口

        作者: 時間:2016-12-02 來源:網絡 收藏
        PIC16C5X系列單片機所有I/O口都可被獨立定義為輸入或輸出口。參見圖1。作輸入口時,這些端口不鎖存,外部輸入信號必須保持到讀指令讀入為止。輸出信號被鎖存并保持不變,直到被改變為止。要定義一個口為輸出,可直接設定對應控制位為“0”,某位端口用于輸入,則相應TRIS位須為“1”。

        當“TRIS f”送入“1”時,Q1、Q2都截止,I/O腳成高阻狀態,此時為輸入態。當執行指令如MOVF 6,W,把當前I/O口的狀態讀入數據總線。當“TRIS f”送出“0”時,Q1、Q2的導通情況取決于數據鎖存器Q(非)的狀態。當寫入數據為“1”時,Q(非)輸出“0”,Q1導通,Q2,截止,I/O口輸出高電平。當數據為“0”時,Q(非)輸出“1”,Q2導通,Q1截止,I/O口輸出低電平。無論I/O腳置成輸入或輸出,執行指令(如MOVF 6,W)都是將I/O端口的狀態讀入數據總線。

        一些指令先讀后寫,如BCF、BSF指令整個端口狀態讀入CPU,執行位操作后再將結果寫回去覆蓋原來的內容,即輸出結果放在I/O口的數據鎖存器上,這點程序員需加以注意。特別當一個端口中一條或幾條引腳一會兒作輸入,一會兒又作輸出而又執行BCF、BSF指令時。舉例說明:BSF 6,5指令的目的是要把B口的第5位置為高電平“1”,執行這條指令時,先把整個B口當前的狀態讀入CPU,把第5位置成“1”后再把結果(8個位)重新輸出到B口的數據鎖存鎖存器。如果B口的某位用作雙向I/O口,且它在這時被定義為輸入態,則在這條I/O腳上出現的輸入信號被再寫入這個I/O腳數據鎖存器,從而覆蓋原來的內容。如果這個I/O腳保留為輸入方式,不會出現問題。但如果稍后這個I/O腳改為輸出態,則數據鎖存器bit1端內容可能和先前的不同了。

        I/O輸出電路為CMOS互補推挽電路,有很強的帶負載能力,高電平輸出時具有20mA的拉電流,低電平輸出時允許25mA的灌電流。這種特性可直接用于驅動LED顯示器,為了改變某各引腳上的電平,這個引腳有效地輸出“0”或“1”時,不應該同時又受到外部設備的驅動,因為由此引起的高輸出電流可能損壞芯片。

        I/O操作指令周期的最后寫I/O口,如果為讀,數據須在指令周期開始前準備好。對于同一個口執行先寫后讀,必須小心。指令序列應滿足要求:在下一條讀I/O數據的指令執行之前,應使引腳的電平穩定,否則引腳的先前狀態會被讀入CPU,而不是新狀態。建議最好用NOP指令或其他非I/O操作指令把讀寫指令隔開。

        電磁干擾環境惡劣的情況下,如鍵盤處于靜電放電ESD(Electronic Static Discharge)的環境中,由于電磁噪聲干擾,寄存器的內容將受影響。若I/O控制寄存器的內容發生改變,即使一只引腳從輸入變成輸出狀態,程序依然繼續運行。此時程序從這一引腳讀取數據,結果可能是錯誤的。面對這種情況,我們建議在一定時間間隔內需重新定義I/O口的輸入和輸出狀態。如果程序安排上允許,最好是每次讀寫數據時設置I/O控制寄存器,雖然對于大多數時候不需要這樣做,只是提醒程序員注意電磁噪聲干擾問題。



        關鍵詞: PIC16C5XIO

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 舞钢市| 新营市| 武乡县| 汉川市| 扶风县| 长泰县| 灵石县| 华亭县| 武川县| 安徽省| 灌云县| 南康市| 巨野县| 庐江县| 新化县| 肇庆市| 郑州市| 苍南县| 北辰区| 定边县| 奎屯市| 安阳市| 南皮县| 黔南| 南岸区| 福鼎市| 阿拉善右旗| 庆阳市| 徐州市| 新河县| 佛山市| 涞水县| 三明市| 静宁县| 五河县| 黑龙江省| 洮南市| 赣州市| 焦作市| 临湘市| 南部县|