主要构成部分:
- AVR CPU部分。
- 程序存储器Flash。
- 数据存储器RAM和EEPROM。
- 各种功能的外围接口、I/O口,以及它们相关的数据、控制、状态寄存器等。
中央处理器CPU
包括:
- 算术逻辑单元ALU
- 程序计数器PC
- 指令寄存器
- 指令译码器
- 32个8位快速访问通用寄存器组
运算逻辑单元ALU
功能:进行算术运算和逻辑运算;可对半字节(4位)、单字节等数据进行操作。
操作结果的状态,如产生进位、结果为零的状态信息将影响到状态寄存器SREG相应的标志位。
运算逻辑单元ALU还包含一个布尔处理器,用来处理位操作。它可执行置位、清0、取反等操作。
还能实现无符号数、有符号数以及浮点数的硬件乘法操作。一次硬件乘法操作的时间为2个时钟周期。
程序计数器PC、指令寄存器和指令译码器
程序计数器PC用来存放下一条需要执行指令在程序存储器空间的地址(指向Flash空间)。
取出的指令存放在指令寄存器中。
然后送入指令译码器产生各种控制信号,控制CPU的运行(执行指令)。
通用工作寄存器组
AVR中,由命名R0~R31的32个8位通用工作寄存器构成一个“通用快速寄存器组”。
AVR CPU中的ALU与这32个通用工作寄存器直接相连,为了使ALU能够高效、灵活地对寄存器组进行访问操作,通用寄存器组提供和支持ALU使用以下4种不同的数据输入/输出的操作方式:
- 提供一个8位源操作数,并保存一个8位结果。
- 提供两个8位源操作数,并保存一个8位结果。
- 提供两个8位源操作数,并保存一个16位结果。
- 提供一个16位员操作数,并保存一个16位结果。
这样一来,AVR大多数操作工作寄存器组的指令都可以直接访问所有的寄存器,而且这样的指令的执行时间都只有一个时钟周期。
系统时钟部件
系统时钟
ATmega16的片内含有4种频率(1/2/4/8MHz)的RC振荡源,可直接作为系统的工作时钟使用。同时片内还设有一个由反向放大器所构成的OSC(Oseillator)振荡电路,外围引脚XTAL1和XTAL2分别为OSC振荡电路的输入端和输出端,用于外接石英晶体等,构成高精度的或其他标称频率的系统时钟系统。
ATmega16最高的工作频率为16MHz,但频率越高耗电量也会更大。
为AEmega16提供系统时钟源有以下3种方式:
- 直接使用片内的1/2/4/8MHz的RC振荡源
- 在引脚XTAL1和XTAL2上外接由石英晶体和电容组成的谐振回路,配合片内的OSC振荡电路构成的振荡源。
- 直接使用外部的时钟源输出的脉冲信号。
看门狗时钟
在AVR片内还集成了一个1MHz的独立的时钟电路,它仅供片内的看门狗定时器(WDT)使用。因此,AVR片内的WDT是独立硬件形式的看门狗,使用AVR可以省掉外部的WDT芯片,使用WDT可以有效地提高系统运行的可靠性。
CPU的工作时序
AVR CPU的工作是由系统时钟直接驱动的,在片内不再进行分频。
CPU在启动后的第一个时钟周期取出第一条指令,在第二个时钟周期执行取出的指令,同时有取出第二条指令,依次进行。如此,按流水线的形式进行取指,使AVR单片机可以以非常高的速度执行指令。
存储器
AVR芯片内集成了Flash程序存储器、SRAM数据存储器、EEPROM数据存储器,3个存储器空间相互独立,物理结构也不同。
存储器 | 一个存储单元 | 其他 |
---|---|---|
Flash存储器 | 16位(字) | 作为数据读取时,以字节为单位;作为擦除、写入时,以页为单位 |
SRAM数据存储器 | 8位(字节) | 编址方式采用与工作寄存器组、I/O寄存器和SRAM统一寻址的方式 |
EEPROM数据存储器 | 8位(字节) | 读/写操作都以字节为单位 |
I/O端口
ATmega16有4个8位的双向I/O端口PA、PB、PC、PD,它们对外对应32个I/O引脚,每一位都可以独立地用于逻辑信号的输入和输出。在5V工作电压下:
- 输出高电平时,每个引脚可输出达20mA的驱动电路。
- 输出低电平时,每个引脚可吸收最大为40mA的电流,可直接驱动发光二极管LED和小型继电器。