您的位置 首页 数字

AVR ATmega16拜访16 位寄存器

TCNT1、OCR1A/B与ICR1是AVRCPU通过8位数据总线可以访问的16位寄存器。读写16位寄存器需要两次操作。每个16位计时器都有一个8位临时寄存…

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 位寄存器的读写错
误。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/272950.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部