单片机普通I/O口是最常用的功能之一,下面通过AVR单片机控制发光二极管点亮和熄灭来学习单片机的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=""> //其余位的状态,平时程序中推荐这种使用方法 //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 的值。 |
|