在将AVR的I/O口作为通用数字口使用时,要先根据系统的硬件设计情况,设定各个I/O口的工作方式:输入或输出工作方式,先正确设置DDRx方向寄存器,再进行I/O口的读写操作。如将I/O口定义为数字输入口时,还应注意是否需要将该口内部的上拉电阻设置为有效,在设计电路时,如能利用AVR内部I/O口的上拉电阻,可以节省外部的上拉电阻。
AVR汇编指令系统中,直接用于对I/O寄存器的操作指令有以下3类,全部为单周期指令。
(1)IN/OUT
IN/OUT指令实现了32个通用寄存器与I/O寄存器之间的数据交换,格式为:
(2)SBI/CBI
SBI/CBI指令实现了对I/O寄存器(地址空间为I/O空间的0x00~0x31)中指定位的置1或清零,格式为:
(3)SBIC/SBIS
SBIC/SBIS指令为转移类指令,它根据I/O寄存器(地址空间为I/O空间的0x00~0x31)的指定位的数值实现跳行转移(跳过后面紧接的一条指令,执行后序的第二条指令),格式为:
ATmega16的4个8位的端口共有12个I/O端口寄存器,它们在AVR的I/O空间的地址均在前32个之中,因此上面3类对I/O寄存器操作的指令都可以使用。
在ICCAVR中,我们可以直接使用C语句对I/O口寄存器进行操作,如:
●PA口配置为输出。
●PA口配置为不带上拉输入。(www.xing528.com)
●PA口配置为带上拉输入。
●BIT(x)定义为1<<(x),就是将1左移x位。
●将PB0定义为输出,且输出为高电平。
●将PB0、PB1定义为输出,PB0、PB1均为高电平。
●将PB0数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1。
●将PB0、PB1数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1。
●将PB2、PB3定义为输入,不带上拉电阻。
●将PB2、PB3定义为输入,带上拉电阻。没引用引脚时,默认值为高电平。
●DDRB=BIT(0)|BIT(1)与DDRB|=BIT(0)|BIT(1)的区别。
前一句会先清空以前的所有状态,后一句保留前面的状态。在实际应用中,后一句更常用。
●将PB口第三位置1的方法总结如下。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。