AVR单片机的I/O操作(ATmega16为例)
1、简介
AVR的I/O端口
ATmega16,共有32个I/O端口,分别是PA(8位),PB(8位),PC(8位),PD(8位)。这32个I/O端口都是可以作为双向I/O端口使用的,和51比起来要强些。PA,PB,PC,PD这些端口,既可以作为普通的I/O端口使用又有其他附加功能。
下面是简要介绍:
PA:PA口可以作为8路ADC使用。
PB:PB7~PB4是SPI接口。
PC:PC0~PC1是双线串行总线接口,亦可以作为I2C接口。PC2~PC5是JTAG接口,PC6~PC7为定时器外部的时钟源。
2、输入输出端口的使用
AVR单片机的I/O端口标准的双向口,每个端口对应3个寄存器,即DDRX,PORTX,和PINX(X为相应端口,如对于PA口来说,X为A)。其端口定义如下表:
DDRXn |
PORTXn |
I/O |
上拉 |
备注 |
0 |
0 |
输入 |
关闭 |
三态(高阻) |
0 |
1 |
输入 |
打开 |
提供弱上拉,低电平必须有外电路拉低,
PXn脚输出电流 |
1 |
0 |
输出 |
关闭 |
输出0 |
1 |
1 |
输出 |
关闭 |
输出1 |
3,寄存器介绍:
DDRX:端口方向寄存器
当DDRX的某一位置1时,相应引脚作为输出使用。反之置0时,为输入使用。
例如:DDRB=0xF0;
此时PB0~PB3位设为输入,PB4~PB7为输出。
PORTX:端口数据寄存器
如果引脚设为输出,则对PROTX进行写操作即改变引脚的输出值。
例如:DDRA=0XFF; //端口A为输出
PORTA=0XAB //端口A输出为10101011
如果引脚为输入,则PORTX的数据决定相应端口的引脚是否打开上拉功能。
例如:DDRA=0X00; //端口A为输入
PORTA=0XF0; //端口A的0~3位不上拉,在没有输入的情况下处于高阻态
PINX:端口输入引脚地址
如果希望读取引脚的逻辑电平值,一定要读取PINX,而不是PORTX。注意,PIINX是只读的,不能对其赋值。
例如:DDRA=0X00;
result=PINA; //读取A口路基电平值,赋值给result
阅读(8020) | 评论(1) | 转发(0) |