历史上的今天
今天是:2025年06月09日(星期一)
2018年06月09日 | 单片机在清除标志位时不要用位操作
2018-06-09 来源:eefocus
这两天在调试一个项目的时候,一台主机与两台从机通信,但是有一台从机的报文收不到,仔细阅读代码,发现寄存器等配置都正常,自信阅读代码发现在清接收完成寄存器的时候用到了位域,猜想这就是问题所在,于是修改了程序,下载后一切正常。在单片机中一般的标志寄存器都是写1清0,好多中断标志等都是这样设计的,这时候就要注意在清除标志的时候不能用位域,因为好多单片机不不支持位操作的。
比如要清除IrqReg寄存器的BIT5,IrqReg.bit5 = 1;在没有位操作的单片机中会编译成
IrqReg |= BIT5;这条语句分三步执行,先读IrqReg寄存器,进行位或操作,最后把位或的结果写入该寄存器,这样问题就产生了,如果这句操作之前IrqReg中BIT5和BIT6都是置位的,那么写的时候本来是清除BIT5的现在BIT6也清除了,正确的操作应该是IrqReg=BIT5
这个问题在最开始学习AVR单片机的时候在AVR的技术手册中看到过,所以这次解决这个问题没有费太大的周折,要不然真是很难想到这里会出问题。
史海拾趣
|
你开发的项目文档化了吗?看看老外是怎么做的。希望参与项目管理的朋友都进来看看 出差报告 引言 我于8月24日~10月22日在瑞典研究所出差,为期2个月,这里把工作情况做一下回顾和总结,以期对今后自己以及产品今后的工作和发展有一点作用。 任务完成情况 此次到瑞典研究所主要是 ...… 查看全部问答> |
|
请问谁有dopod P800的10脚miniUSB插口引脚定义,另:它的电池有6个引脚,只用到其中的两个作为电源吗? 它的miniUSB接口可以用于充电、USB传输、耳麦, 我没能找到它的引脚定义。 谁有还请麻烦指点一二, 如有封装图,更是感激不尽! … 查看全部问答> |
|
今天调程序老师出现这样的错误, 想知道是怎么回事 Error: VHDL error at keyb12_11.vhd(82): can\'t infer register for signal \"tem_press\" because signal does not hold its value outside clock edge 我也问了有些人,有的说是保持时间不 ...… 查看全部问答> |
|
把STM32按照正确的时序进入待机模式之后, 一开始都还正常..外部中断是不能唤醒的, 除非在PA0(WAKE UP PIN)上加一个上升沿. 但是很奇怪的是, 我发现我开一下台灯, 系统居然自己复位了, 就好像我按了复位键或者按了PA0一样....随后发现,貌似外 ...… 查看全部问答> |




