TCNT1、OCR1A/B与ICR1是AVR CPU 通过8位数据总线可以访问的16位寄存器。读写16位寄存器需要两次操作。
每个16位计时器都有一个8位临时寄存器用来存放其高8位数据。每个16 位定时器所属的16 位寄存器共用相同的临时寄存器。访问低字节会触发16位读或写操作。当CPU 写入数据到16 位寄存器的低字节时,写入的8 位数据与存放在临时寄存器中的高8 位数据组成一个16 位数据,同步写入到16 位寄存器中。当CPU 读取16 位寄存器的低字节时,高字节内容在读低字节操作的同时被放置于临时辅助寄存器中。
并非所有的16 位访问都涉及临时寄存器。
对OCR1A/B 寄存器的读操作就不涉及临时寄存器。
写16 位寄存器时,应先写入该寄存器的高位字节。而读16 位寄存器时应先读取该寄存器的低位字节。
下面的例程说明了如何访问16 位定时器寄存器。前提是假设不会发生更新临时寄存器内
容的中断。同样的原则也适用于对OCR1A/B 与ICR1 寄存器的访问。使用“C” 语言时,
编译器会自动处理16 位操作。
Note: 1. 本代码假定已经包含了合适的头文件。
汇编代码例程中TCNT1 的返回值在r17:r16 寄存器对中。
注意到16 位寄存器的访问是一个基本操作是非常重要的。在对16 位寄存器操作时,最
好首先屏蔽中断响应,防止在主程序读写16 位寄存器的两条指令之间发生这样的中断:
它也访问同样的寄存器或其他的16 位寄存器,从而更改了临时寄存器。如果这种情况发
生,那么中断返回后临时寄存器中的内容已经改变,造成主程序对16 位寄存器的读写错
误。
汇编代码例程(1)
...
; 设置TCNT1 为0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNT1H,r17
out TCNT1L,r16
; 将 TCNT1 读入r17:r16
in r16,TCNT1L
in r17,TCNT1H
...
C 代码例程
unsigned int i;
...
/* 设置TCNT1 为0x01FF */
TCNT1 = 0x1FF;
/* 将TCNT1 读入i */
i = TCNT1;
汇编代码例程中TCNT1 的返回值在r17:r16 寄存器对中。
注意到16 位寄存器的访问是一个基本操作是非常重要的。在对16 位寄存器操作时,最
好首先屏蔽中断响应,防止在主程序读写16 位寄存器的两条指令之间发生这样的中断:
它也访问同样的寄存器或其他的16 位寄存器,从而更改了临时寄存器。如果这种情况发
生,那么中断返回后临时寄存器中的内容已经改变,造成主程序对16 位寄存器的读写错
误。
关键字:AVR ATmega16 寄存器
引用地址:
AVR ATmega16访问16 位寄存器
推荐阅读最新更新时间:2024-03-16 15:06
基于单片机应用AVR 18B20程序编写
#include//包含型号头文件#include//包含“位”操作头文件#include//标准输入输出头文件#include//包含自定义常量头文件#include“SMG.C”//包含数码管显示函数/***************************************** #include//包含型号头文件 #include//包含“位”操作头文件 #include//标准输入输出头文件 #include《AVR_PQ1A.h》//包含自定义常量头文件 #include“SMG.C”//包含数码管显示函数 /******************************************* 函数名称:B2
[单片机]
AVR单片机的CPU内部结构的详细资料说明
学单片机那么久了,感觉想要深入,还得看汇编语言,至少得了解单片机内部结构。下面就以ATmega16为例,介绍一下AVR单片机结构和汇编语言。 如上两图,左图是虚线框内AVR CPU的内核结构,右图是AVR单片机内核结构的方框图,可以看出AVR单片机的数据总线 (CPU字长)是8位的,也就说它是8位单片机。 AVR采用了Harvard结构,具有独立的数据和程序总线,CPU在执行一条指令的同时,就将PC中指定的下一条指令取出,构成了一级流水线运行方式,实现了一个时钟周期执行一条指令,数据吞吐量高达1MIPS/MHz。 AVR CPU内核由几个重要的部分组成,它们分别是: A.算数逻辑单元ALU(Arithmetic
[单片机]
基于AVR单片机atmega32的PID和PWM液体流量控制系统研究
1. 引言 液体流量控制通常采用电磁阀实现,近年来,电磁阀的结构和控制方式发生了很大的变 化,随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控制的开关功率元件进行脉宽调制(pulse width modulation ,简称PWM)控制方式得到了广泛的应用。这种控制方式很容易在单片机中实现,从而为电磁阀的控制数字化提供了契机。 将偏差的比例(proportion)、积分(integral)、微分(differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称PID控制器。PID控制器最早出现在模拟控制系统中,传统的模拟PID控制器是通过硬件(电子元件、气动和液压元件)来实现
[单片机]
AVR操作EEPROM应注意的问题
简介:本文介绍了AVR单片机在实际使用时电源检测的问题。 作为一个正式的系统或产品,当系统基本功能调试完成后,一旦进行现场测试阶段,请注意马上改写熔丝位的配置,启用AVR的电源检测(BOD)功能。 对于5V系统,设置BOD电平为4.0V;对于3V系统,设置BOD电平为2.7V。然后允许BOD检测。 这样,一旦AVR的供电电压低于BOD电平,AVR进入RESET(不执行程序了)。而当电源恢复到BOD电平以上,AVR才正式开始从头执行程序。保证了系统的可靠性! 原因分析如下: AVR是宽电压工作的芯片,当电压跌至2.5V,系统程序还能工作。这是有2个可怕的现象可能出现, 1、外围芯片工作已经混乱,AVR读到的东
[单片机]
ATtiny13 掉电模式
当 SM1..0 为 10 时,SLEEP 指令将使 MCU 进入掉电模式。在此模式下,外部晶体停振, 而外部中断及看门狗(如果使能的话)继续工作。只有外部复位、看门狗复位、BOD 复 位、外部电平中断 INT0 或引脚变化中断可以使 MCU 脱离掉电模式。这个睡眠模式停止 了所有的时钟,只有异步模块可以继续工作。 当使用外部电平中断方式将 MCU 从掉电模式唤醒时,必须保持外部电平一定的时间。具 体请参见 P51“ 外部中断 ” 。
[单片机]
基于ATmega16 的电液伺服阀反馈控制器设计方案
简介:本文针对电液伺服阀在实践应用中的不足,设计了电液伺服阀控制器,显着提高了电液伺服阀在实践应用中的稳定性和精确性。 0 引言 电液伺服阀在工程系统中有着广泛的应用。尽管液压系统具有维护困难、泄漏、噪声比大等缺点,但是对于大功率的自动控制系统,液压控制是其他控制形式所不能替代的。 随着电液伺服系统应用领域的拓展,对电液伺服阀提出了更高的要求,如控制精度高、动态响应快、成本低等。但由于外部环境的干扰或电液伺服阀本身的性能不足,会出现伺服阀输出压力抖动过大、输出压力偏高或偏低的问题。故设计此电液伺服阀反馈控制器,可实现电液伺服阀稳定精确地输出压力。 1 总体设计 电液伺服阀反馈控制器核心控制芯片采用AT-mega
[单片机]
stm32中的寄存器地址映射
外设基地址——》3大外设总线基地址(APB1、APB2、AHB)——》对应的外设基地址——》结构体与寄存器对应映射
[单片机]
爱特梅尔推出带有集成LCD控制器的AVR XMEGA系列
爱特梅尔公司(Atmel® Corporation)宣布将LCD控制器加入广受欢迎的AVR® XMEGA®微控制器(MCU)系列器件中。将LCD控制器集成进MCU能够帮助设计人员减低设计复杂性和总体系统成本,同时为智能仪表、家庭自动化、电动工具和其它需要用户界面的应用提供超低功耗特性。
带有集成LCD控制器的AVR XMEGA系列整合了在LCD显示器上运行图块所需的全部特性,降低了整体设计复杂性。这些器件还包括一个能够实现LCD信号内部重路由(re-routing)的创新SWAP模式,帮助设计人员简化PCB设计和减低复杂性。这些AVR XMEGA微控制器采用爱特梅尔 picoPower®技术,能够实现超低功耗,新器件所用的电流
[单片机]