搜索
bottom↓
回复: 4

TWI的控制寄存器不解之处?

[复制链接]

出0入0汤圆

发表于 2007-9-22 00:44:01 | 显示全部楼层 |阅读模式
1. TWCR = _BV(TWINT)|_BV(TWSTA)|_BV(TWEN)  //发送开始命令

2. while((TWCR & _BV(TWINT))==0);           //等待传送完毕

我对这第二句程序实在是迷惑,请马老师指点!

我的理解如下:
            1. TWINT位在第一句执行后就为零;
            2. 第2句本来的意图是等待TWINT置位,可是第一句执行完毕后,TWINT位为0,那么第二句(TWCR & _BV(TWINT))==0 的条件也满足,那么又是如何实现等待的功能的呢?我迷惑!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-9-22 10:23:44 | 显示全部楼层
第一行将TWINT写1(实际是清0),后面是发送开始。

第二行是等待TWINT为1(TWINT=1表示发送完成,中断请求标志置1)。
如果TWINT=0,则执行while的循环,实现了等代;一旦TWINT=1了,while循环结束,执行下面的语句。

把C语言好好再加强吧。

出0入0汤圆

 楼主| 发表于 2007-9-22 12:48:29 | 显示全部楼层
如果TWINT=0,则执行while的循环,实现了等代;一旦TWINT=1了,while循环结束,执行下面的语句。
******************************************************************************************
1. while语句我明白;
2. 当发送完成,中断请求标志置1,TWCR & _BV(TWINT)执行的结果为0我能理解;
3. 如果TWINT=0,那么TWCR & _BV(TWINT)执行的结果也是为0啊,也就是和上面的2结果一样,那怎么实现等待?照马老师的理解,TWINT=0的时候,TWCR & _BV(TWINT)执行的结果为1,我就不明白了,请马老师解释,昨天我在帖子里没说清楚我的问题所在。

出0入0汤圆

发表于 2007-9-22 18:20:14 | 显示全部楼层
_BV(TWINT)永远是10000000。

TWINT是7,表示TWINT是第7位,函数_BV(TWINT)将第7位置1,结果为10000000。然后与寄存器TWCR与操作,10000000相当一个屏蔽码,取出TWCR的第7位,如果TWCR的第7位为0,TWCR & _BV(TWINT)=0;当TWCR的第7位为1,TWCR & _BV(TWINT)=1。

认真把C语言再好好复习一下。

出0入0汤圆

 楼主| 发表于 2007-9-23 11:11:14 | 显示全部楼层
现在我理解了,谢谢马老师!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 16:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表