AVR单片机寄存器 DDRx PORTx PINx 与对应IO端口之间的关系
2016-10-19 来源:eefocus
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
进入单片机查看更多内容>>
下表以端口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
相关文章