1. 输入/输出(I/O)端口
AVR 内核上有各种输入/输出(I/O)端口,用于与外部通信,实际上就是指3.1.1 节所介绍的硬件接口。
(1)并行 I/O 通信端口:用于外部扩展和扩充并行存储器芯片或者并行I/O 芯片等使用,包括数据总线和读/写控制信号。
(2)通用数字I/O 端口:用于外部逻辑电路信号的输入和输出控制。
(3)功能单元的I/O 端口,如定时器/计数器的计数脉冲输入、外部中断源信号的输入等。
(4)串行 I/O 通信端口:用于系统之间或者采用专用串行协议的外围芯片之间连接和交换数据,如树莓派与Arduino 通信可以通过SPI 串行接口及USB 串行接口。
(5)其他专用接口:在单片机上集成了专用功能模块的接口,如Arduino UNO 及Mega 系列上的A/D 输入、数字I/O 的输入端口、模拟比较输入端口等。
2. 操作管理寄存器
操作管理寄存器是单片机芯片的重要组成部分之一,负责管理、协调、控制单片机芯片中的各功能单元的使用和运行,如状态寄存器、控制寄存器、数据寄存器、地址寄存器等。
(1)状态寄存器:状态寄存器用来存放两类信息,一类是体现当前指令执行结果的各种状态信息,如有结果正负、奇偶标志位等;另一类是存放控制信息,如允许中断、跟踪标志等。
(2)控制寄存器:用于控制和确定处理器的操作模式以及当前执行任务的特性,如设置串口通信模式,用串口控制寄存器设计串口波特率。
(3)数据储存器:用来暂时存放计算过程中所用到的操作数、结果和信息。
(4)地址寄存器:持有存储器地址,用来访问存储器。
3. 定时器/计数器(www.daowen.com)
如图3-2-1 所示,AVR 的定时器/计数器实质就是一个加1 计数器,通过软件对其控制寄存器的操作,来实现定时、计数功能及转换。AVR中的定时器/计算器来源于两种方式。第一种,来源于CPU 内核中的振荡器和时钟电路;第二种,来源于外部的时钟源。
定时器/计数器使用灵活,用途广泛,如延时、物理信号的测量、信号的周期、频率、脉宽测量、产生定时脉冲信号、捕捉输入,还可以实现PWM 输出,用于D/A 功能、电动机的无级调速等。ATmega16 有三个定时器/计数器T/C0、T/C1、T/C2,其中T/C0、T/C2 为8 位定时器/计数器,T/C1 为16 位定时器/计数器。
4. 模数转换器
模数转换器是将模拟信号(如电流、电压、温度等)变成数字量信号的电子元件。大多数AVR 芯片包含8 位、10 位或12 位模数转换器。在ATmega328 中有6 个10 位的模数转换器(A0、A1、A2、A3、A4、A5),即精度为10 位,返回值为0~1 023。就是说,当输入电压为5 V时,读取精度为5 V/1 024 个单位,约等于4.9 mV。
AVR 使用了名为“逐次逼近”(Successive Approximation)的ADC(模拟数字转换器)电路。ADC 连接到一个8 通道模拟多路复用器,该多路复用器允许从端口a 的引脚构造8 个单端电压输入,单端电压输入为0 V(GND)。ADC 包含一个采样和保持电路,确保ADC 的输入电压在转换期间保持在恒定的水平。ADC 的框图如图3-2-3 所示。
图3-2-3 AVR 模数转换器框图
5. 模拟比较器
模拟比较器比较正引脚AIN0 和负引脚AIN1 上的输入值。当正引脚AIN0 上的电压高于负引脚 AIN1 上的电压时,设置模拟比较器输出(ACO)。此外,比较器可以触发一个单独的中断,这个中断是模拟比较器所独有的。用户可以在比较器输出上升、下降或切换时选择中断触发。比较器及其周围逻辑的框图如图3-2-4 所示。
图3-2-4 AVR 模拟比较器框图
6. 中 断
CPU 执行时原本是按程序指令一条一条向下顺序执行的。但如果此时发生了某一事件B 请求CPU 迅速去处理(中断发生),CPU 暂时中断当前的工作,转去处理事件B(中断响应和中断服务)。待CPU 将事件B处理完毕后,再回到原来被中断的地方继续执行程序(中断返回),这一过程称为中断。
例如:假如你正在读书(主程序),这时电话响了(中断触发)。你放下手中的书,去接电话(中断响应)。接完电话后,再继续回来读书(主程序),并从原来读的地方继续往下读。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。