06.13 單片機:普通I

單片機普通I/O口是最常用的功能之一,下面通過AVR單片機控制發光二極管點亮和熄滅來學習單片機的I/O口功能。

單片機:普通I/O口的應用

RP1為排阻,1腳為公共端——接地,其餘串聯發光二極管後接單片機I/O口(PB0-PB7)。

單片機的PB0-PB7口中的任一個輸出高電平(5V),則相應的發光二極管點亮。

1、AVR單片機I/O口具有8個寄存器:方向控制寄存器(DDRx)、數據寄存器(PORTx)、輸入引腳寄存器(PINx)(其中x=A/B/C/D),I/O口的功能由這三個寄存器配置;

2、方向控制寄存器(DDRx)用於控制I/O口屬於輸入還是輸出,

DDRx=1時,I/O口為輸出,此時數據寄存器PORTx中的數據輸出到外部引腳。

DDRx=0時,I/O口為輸入,此時輸入引腳寄存器PINx中的數據就是外部引腳的實際電平。

3、輸入寄存器 PINx 實際不是一個寄存器,而是一個可選通的三態緩衝器,外部引腳通過該三態緩衝器與 MCU 的內部總線連接,因此,讀 PINx 時是讀取外部引腳上的真實和實際邏輯值,實現了外部信號的同步輸入。

例子程序:

int main(void) // main函數為主函數入口

{

DDRB = 0X01; //配置端口PB0為輸出口

//DDRB = 0XFF; //配置端口PB全部為輸出口

PORTB = 0X00; //初始化,PORTB輸出低電平,使LED熄滅

while(1)

{

//PORTB = 0X01; //使PB0輸出高電平,點亮PB0的LED,其餘各口保持原來狀態不變

PORTB |= (1 << PB0); //功能等同於PORTB = 0X01,但是這種設置方法不改變PB口

//其餘位的狀態,平時程序中推薦這種使用方法

//PORTB = 0XFF; //使PB的8個口全部輸出輸出高電平,當PB口全部置為輸出口後

//點亮所有8個LED

編寫代碼時注意事項:

1)AVR單片機中的端口配置寄存器: I/O口為標準的三態口(高電平、低電平、高阻態這三種狀態);

2) 使用 I/O 口時,首先要設置其為輸入還是輸出方式;

3) 當 I/O 為輸入端口時,讀取外部電平的值為PINxn 的值,不是PORTxn 的值;

4) 當 I/O 工作在輸入方式,要根據實際情況使用或不使用內部的上拉電阻;

5) 當I/O口由輸出設置成輸入後,必須等待一個時鐘週期後才能正確的讀到外部引腳 PINxn 的值。


分享到:


相關文章: