繁体中文
高级搜索
 
首页 | 电子技术应用 | 行业最新动态 | 行业最新产品 | 软件资料下载 | 电路图纸欣赏 | 博客文章精选 | 电子精品论坛 | 电子技术贴吧

当前位置:首页 >> 博客文章精选 >> 单片机-----博客 >> 义隆单片机risc指令:bsbc指令一个容易忽略导致问题的现象
义隆单片机risc指令:bsbc指令一个容易忽略导致问题的现象
作者:   来源: 发表时间:2006-12-08  字号:  

bs,bc指令慢慢解 [zt]


各位大侠是否有碰到过这样得情况:就是没个IO口电位莫名其妙的变化,从而出现你不希望的结果?别急,这很有可能就是bs、bc指令在作怪,欲知为何,且听俺慢慢解来。
要回答这个问题,首先要对IO PORT的结构要有所了解。具体io 口电路结构图请参照相关资料。在EMC单片机中,不能单独更改一个位的数据。当试图更改没个IO 口(或RAM)中的一个位时,其8个位的数据都将被取入ALU中,然后执行AND/OR指令之后再写回io port(RAM)。
举个例子,将PORT 6 bit 0 置1,指令为bs 0X06,0。指令的执行过程是这样,首先将整个PORT 6的数据取到ALU,然后用二进制数据“00000001”跟取回的数据执行“或”操作,最后将结果写入port 6;相反的,如果要将它清零,那么会用11111110与之相与再写回去。
那么为什么可能产生错误呢?有两种情况,用port6 bit7举例,一种情况是port6.7设置为input,另一种则为output,现用第一种情况分析一下错误是怎么产生的。bit 7设置为input,此时bit7锁存器上的值为0或1;当在port6 bit0-6上执行bs或bc指令改变bit0-6上的值时,如上所述的,bit7io port(不是latch)上的值也会被读入ALU,之后再写入bit7之data latch,尽管你并没有如此意图。如此,bit7上之data latch上的值就有可能不经意的被改变了。当bit7由input转变为output时,意想不到的错误就可能发生了。另一种情况就不罗嗦了。
可以发现,这种影响只会影响io port的其他位,对本身不会影响;对于非io port的RAM,也不会有这种影响出现;除了bs,bc指令外,如下指令也可能出现上述情况:XOR/AND/or R,A;DEC R;RRC R;RLC R;SWAP R;MOV R,R;COM R;DJZ R;SWAP R;JZ R;JBC R,B;JBS R,B;等等,这里如果R不是io port而是RAN,则错误不会发生。
所以,在程序中把一个io的某些位,从输入态转为输出态,注意要把输出重置一下。防止此类问题发生。

!注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决!
  • 上一篇: 义隆单片机HT1380实时时钟驱动程序(EMC)
  • 下一篇: 为arm,51与优盘进行串口通信的东东

  • >> 联系我们请给我们留言·留言本
    本站所有提供的信息软件资料均来自网络,版权及著作权归原作者所有,如果无意中侵犯了您的相关权利或触及法律法规,请给我们留言, 我们将在24小时内删除。
      浙ICP备05071687号  电子技术精品网