[AVR单片机] ATMEGA16的datasheet中,为什么说“置1清除标记”?

[复制链接]
4481|17
 楼主| net.x 发表于 2010-6-23 13:36 | 显示全部楼层 |阅读模式
在看ATMEGA16的datasheet时,多处看到这样的描述:"通过写1来清除标志位"
例如在描述16bit定时计数器的中断标志寄存器TIFR时,

Bit 4 – OCF1A: T/C1 输出比较A 匹配标志位
  当TCNT1 与OCR1A匹配成功时,该位被设为"1”。
  强制输出比较(FOC1A) 不会置位OCF1A。
  执行强制输出比较匹配A 中断服务程序时OCF1A自动清零。也可以对其写入逻辑"1”来清除该标志位。

英文版里也有这句:
......OCF1A is automatically cleared when the Output Compare Match A Interrupt Vector is executed.Alternatively, OCF1A can be cleared by writing a logic one to its bit location.

这怎么理解?
难道程序里写OCF1A = 1,OCF1A才会清零?

datasheet中有多处这样的描述,不知应该怎么样理解?望前辈告知,谢谢
yidou 发表于 2010-6-23 21:52 | 显示全部楼层
写入逻辑"1”来清除该标志位,但不知道为什么
xiaohuai 发表于 2010-6-23 22:52 | 显示全部楼层
好像有很多人想问这个问题
mxh0506 发表于 2010-6-23 23:10 | 显示全部楼层
这是个老话题了,好处是操作方便,比如,这样操作就可以清TIFR的TOV0位:
TIFR = (1<<TOV0);
而不必像清除一般变量那样:
byte &= ~(1<<N)
其实,这是一种不错的操作方式,在有些单片机中,会分别有“置位”和“清零”寄存器来分别完成相应功能。

评分

参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!

查看全部评分

mxh0506 发表于 2010-6-23 23:15 | 显示全部楼层
简单地说,这种操作方式的优点是只经过一次写操作就可以达到目的;而不需要传统的“读-修改-写”操作,更加高效。
mxh0506 发表于 2010-6-23 23:17 | 显示全部楼层
说了这么多,再发一贴赚点分没意见吧:D
随便把发贴数凑到2^10:victory:
 楼主| net.x 发表于 2010-6-24 13:50 | 显示全部楼层
是不是能这样理解:
软件不能使得其置1,置1的过程只能由硬件来完成。只是用它来触发中断
而软件只要对其进行写操作,就是将其清零?
mxh0506 发表于 2010-6-24 14:31 | 显示全部楼层
不仅是写,还必须是写“1”;写“0”没有任何效果
 楼主| net.x 发表于 2010-6-24 14:35 | 显示全部楼层
不知道分别写完“1”和“0”然后再去读结果会怎样?
mxh0506 发表于 2010-6-24 16:06 | 显示全部楼层
被写1的位清零,写零的位没变化。
 楼主| net.x 发表于 2010-6-24 16:54 | 显示全部楼层
还是那句话,软件不能使其置1?
yidou 发表于 2010-6-24 22:28 | 显示全部楼层
写“0”没有任何效果
gsk1201 发表于 2011-8-17 01:12 | 显示全部楼层
这个问的好 我也纳闷呢?为什么必须写一
dqyubsh 发表于 2011-8-17 14:22 | 显示全部楼层
我怀疑这样写的目的是,中断触发和清除的内部电路用与非门实现的。
wushaorong88 发表于 2011-8-25 21:32 | 显示全部楼层
我也有同样的疑问
一般首席 发表于 2013-3-19 12:53 | 显示全部楼层
长见识了
qin552011373 发表于 2013-3-20 00:15 | 显示全部楼层
mxh0506 发表于 2010-6-23 23:17
说了这么多,再发一贴赚点分没意见吧
随便把发贴数凑到2^10

解释得很不错  我加分了
yhhsky 发表于 2013-3-30 18:58 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

46

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部