MC9SD64微控制器快速入門 I/O暫存器
I/O的使用 資料方向暫存器和資料暫存器的配置
I/O輸入輸出的使用:
資料方向暫存器與資料暫存器
暫存器的概念:
暫存器,是積體電路中非常重要的一種儲存單元,通常由觸發器組成。在積體電路設計中,暫存器可分為電路內部使用的暫存器和充當內外部介面的暫存器這兩類。內部暫存器不能被外部電路或軟體訪問,只是為內部電路的實現儲存功能或滿足電路的時序要求。而介面暫存器可以同時被內部電路和外部電路或軟體訪問,CPU中的暫存器就是其中一種,作為軟硬體的介面,為廣泛的通用程式設計使用者所熟知。 在計算機領域,暫存器是CPU內部的元件,包括通用暫存器、專用暫存器和控制暫存器。暫存器擁有非常高的讀寫速度,所以在暫存器之間的PORTA、PORTB、PORTE和PORTK埠
DDRx決定對應引腳配置為輸出口還是輸入口,如果某位為“0”,則對應引腳設定為輸入口;如果某位為“1”,則對應引腳設定為輸出口。MCU復位後,DDRx值為0x00,引腳預設為輸入口。 需要注意的是,PORTE埠是一個特例,它的最低兩位只能為輸入口,所以PORTE埠的資料方向暫存器最低兩位是隻讀位,讀取這兩位始終返回“0”。
資料暫存器(Px)
資料暫存器Px中的8位對應每個埠中的相應引腳,如果某埠的引腳被定義為輸出時,寫入資料暫存器Px中的數值,則從對應引腳輸出;如果某埠的引腳被定義為輸入時,可以讀取資料暫存器Px對應引腳的電平值。 需要注意PORTE埠是一個特例,它的最低兩位只能為輸入口,所以PORTE埠的資料暫存器最低兩位是隻讀位。
簡單演示程式一、
1 #include <hidef.h> /* common defines and macros */ 2 #include "derivative.h" /* derivative-specific definitions */ 3 4 //************主函式************* 5 void main(void) 6 { 7 DDRA=0x0F;//資料方向暫存器7-0 八位設定為 十六進位制數0F 二進位制為0000 1111 高四位引腳為輸入 低四位引腳為輸出 8 PORTA=0x0A;//資料暫存器7-0 八位設定為 十六進位制數0A 二進位制為0000 1010 高四位引腳懸空 低四位引腳1號和三號輸出高電平0號和2號輸出低電平 9 }
此時,A埠0號和2號引腳所控制的 LED燈點亮,其餘燈滅。
原因:1號和3號引腳因輸出高電平而不亮。7號-4號因資料方向暫存器設定為輸入狀態,因此無法改變LED燈電路控制端(電路開斷)
疑問:為什麼輸出低電平LED燈會亮,高電平不亮?
解答:
在微控制器開發的過程中,LED燈的亮滅控制與傳統電路開關有所不同。統燈的亮滅控制由電路火線220V的開斷所控制,而微控制器開發中,LED燈的亮滅大多數需結合微控制器實際電路設計來對LED燈的控制端進行控制。
如圖:
微控制器控制引腳在二極體反向,此二極體功能為開關二極體。二極體在正向電壓作用下電阻很小,處於導通狀態,相當於一隻接通的開關;在反向電壓作用下,電阻很大,處於截止狀態,如同一隻斷開的開關。因此當微控制器控制引腳為輸出低電平時,二極體正向電壓>反向電壓 電路導通,LED燈亮。