AVR I/O 使用方法 AVR 单片机寄存器 DDRx PORTx PINx 与对应IO 端口之间的关系(x 代表某个端口,如A端口、B 端口等) 下表以端口B 的第2 位PB2 为例子加以说明,并且假设PB2 为悬空状态 DDRB
2 PORTB
2 读取PINB
2 的结果 引脚PB2 的状态 1 1 1 PB2 推挽输出 1 1 0 0 PB2 推挽输出 0 0 1 1 PB2 弱上拉,可作输入 0 0 × PB2 高阻抗,可作输入 读取PINB
2 时,就是读取PB2 引脚的实际电平, 如果PB2 直接接VCC,那么任何时候读取PINB
2 的结果都是1 如果PB2 直接接GND,那么任何时候读取PINB
2 的结果都是0 下面是一个标准C 语言例子: #include unsigned char abc; //定义一个变量 void main(void) //主函数 { DDRB = 0b11110000; PORTB = 0b11001100; while (1) //主循环 { abc = PINB; //读取B 端口的实际电平 } } 如果整个B 端口都是悬空的话,那么abc 的结果就是:0b110011** 如果B 端口第7 位接GND 、第0 位接VCC 、其它位悬空,那么abc 的结果就是:0b010011*1 (PB7 工作在“短路”状态) 其中“*”表示不确定,理想状态下可以看作0 端口声明:include #include "D:\ICC_H\CmmICC
H" #define OUT_BUZ sbi(DDRB,3) //PB3 #define BUZ_ON cbi(PORTB,3) #define BUZ_OFF sbi(PORTB,3) /*--------------------------------------------------