请问TI的这个例子是否出错呢?

z4126   2006-3-29 13:43 楼主
在利用定时器A模拟串口的时候,有这样一个函数
;-----------------------------------------------------------------------------
TX_Byte; Subroutine that will TX Byte from RXTXData Buffer
;-----------------------------------------------------------------------------
TX_1 mov.w &TAR,&CCR0 ; Current state of TA counter
cmp.w &TAR,&CCR0 ; !!Prevent async capature!!
jne TX_1 ;
add.w #Bitime,&CCR0 ; Some time till first bit
mov.w #OUTMOD2+OUTMOD0+CCIE,&CCTL0 ;
TX_Wait bit.w #CCIE,&CCTL0 ; Wait for TX completion
jnz TX_Wait ;
ret ; Return from subroutine

其中
jnz TX_Wait ;
ret ; Return from subroutine
是否有误呢?我认为应当是

jz TX_Wait ;
ret ; Return from subroutine

因为如果CCIE修改成功,那么执行bit.w #CCIE,&CCTL0 指令后,Z=0,那么程序就应该结束。而不是跳转到TX_Wait。

请某位高手指点一番!

回复评论 (5)

希望有点指点一下
点赞  2006-3-29 15:09
这是个子程序,有可能被中断服务挂起,从中断返回时,CCIE位可能为0,正好退出。
否则,上一条语句刚将CCIE位置1,下一条语句就百分百退出,那还有什么意义呢?
你说呢?
点赞  2006-3-29 15:11
请在指点一下,我对你的话理解不是很透彻,我对
jnz TX_Wait ;
ret ;
这个语句有疑问,我认为应当是
jz TX_Wait ;
ret ;
点赞  2006-3-29 15:18
引用:

请mmtcyq在指点一下,我对你的话理解不是很透彻,我对
jnz TX_Wait ;
ret ;
这个语句有疑问,我认为应当是
jz TX_Wait ;
ret ;
先将CCIE打开,允许中断。
然后就等。
相应中断可能会关闭CCIE,看中断程序是怎么写了。
等到中断程序执行完之后,就从子程序返回。
点赞  2006-3-29 16:28
终于明白了 谢谢各位大侠
点赞  2006-3-29 16:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复