Atmel AVR微控制器:功能、编程与应用详解
1. 引脚与I/O内存
在使用Atmel AVR微控制器时,引脚的使用存在一定限制。部分引脚功能存在重叠,这意味着某些设备集不能同时使用。例如,如果正在使用端口B,就不能同时使用通用异步收发传输器(UART)。
I/O内存不仅用于与外部设备交互,还存储着CPU当前状态的信息。例如,AVR状态寄存器(SREG)位于I/O地址0x3F(SRAM地址0x5F),其中的位描述了当前CPU的状态,比如最近一次计算结果是否为0或负数。栈指针存储在地址0x3D(0x5D),它定义了活动栈在SRAM中的位置。由于这些寄存器在编程上被视为内存位置,因此与I/O外设的交互就如同存储和读取内存位置一样简单。
2. 汇编语言
2.1 指令格式
AVR的寄存器没有特定的结构,其汇编语言指令采用双参数格式,目标操作数在前,源操作数在后。例如:
ADD R0, R1 ; R0 = R0 + R1
该指令会将R1的值加到R0上,并将结果存储在R0中,同时设置SREG的各个位以反映计算结果。值得注意的是,数字0和1与更易理解的R0和R1在汇编器中通常都能被接受。
2.2 算术和逻辑运算
AVR提供了常见的算术和逻辑运算指令,如下表所示:
| 指令 | 功能 |
| ---- | ---- |
| ADD | 加法 |
| SUB | 减法 |
| MUL | 无符号乘法 |
| MULS | 有符号乘法