AVR单片机I/O端口应用
时间:04-08 13:53 阅读:1359次
*温馨提示:点击图片可以放大观看高清大图
简介:由于ICC AVR中并不支持AVR单片机的直接位操作,所以我们并不能像在Keil中那样进行位定义,然后直接进行位操作,在ICC AVR中进行位操作需要一个非常重要的指令BIT(X)—使用BIT(X)指令需要包含头文件即#include。所谓的BIT(X)指令就是左移指令,BIT(X)表示参数“1”左移X位,如BIT(2)表示“1”左移2位。
1、端口寄存器及配置
作为通用数字I/O使用时,每个引脚都具有3个寄存器位:DDRxn、PORTxn、PINxn
2、配置实例
(1)PA配置为输出
DDRA = 0XFF;
PORTA = 0X03; //PA输出值为0x03
(2)PA口配置为不带上拉的输入
DDRA = 0X00;
PORTA = 0X00;
i = PINA; //将PA口输入的值赋给变量i
(3)PB口配置为带上拉的输入
DDRB = 0X00;
PORTB = 0XFF;
i = PINB; //将PB口输入的值赋给变量i
3、I/O口的位操作
由于ICC AVR中并不支持AVR单片机的直接位操作,所以我们并不能像在Keil中那样进行位定义,然后直接进行位操作,在ICC AVR中进行位操作需要一个非常重要的指令BIT(X)—使用BIT(X)指令需要包含头文件即#include。所谓的BIT(X)指令就是左移指令,BIT(X)表示参数“1”左移X位,如BIT(2)表示“1”左移2位。
(1)PA口最低位输出0,其余位不变
DDRA = DDRA | BIT(0); //只有最低位输出,其余位保持原有状态不变
PORTA = PORTA & (~BIT(0)); //最低位输出低电平,其余位不变
为达到优化代码及方便阅读的目的,上述代码亦可变为
DDRA |= BIT(0);
PORTA &= (~BIT(0));
(2)PA口最低位输出高电平,其余位不变
DDRA |= BIT(0);
PORTA |= BIT(0);
(3)PA口最低位输出低电平,最高位输出高电平,其余位保持原有状态不变
DDRA |= BIT(0) | BIT(7);
PORTA &= ~BIT(0);
PORTA &= ~BIT(7);