分享

单片机:普通I/O口的应用

 岐岐feng 2018-06-14

单片机普通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="">

//其余位的状态,平时程序中推荐这种使用方法

//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 的值。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多