在利用定时器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。
请某位高手指点一番!
这是个子程序,有可能被中断服务挂起,从中断返回时,CCIE位可能为0,正好退出。
否则,上一条语句刚将CCIE位置1,下一条语句就百分百退出,那还有什么意义呢?
你说呢?
请在指点一下,我对你的话理解不是很透彻,我对
jnz TX_Wait ;
ret ;
这个语句有疑问,我认为应当是
jz TX_Wait ;
ret ;
引用:
请mmtcyq在指点一下,我对你的话理解不是很透彻,我对
jnz TX_Wait ;
ret ;
这个语句有疑问,我认为应当是
jz TX_Wait ;
ret ;
|
|
先将CCIE打开,允许中断。
然后就等。
相应中断可能会关闭CCIE,看中断程序是怎么写了。
等到中断程序执行完之后,就从子程序返回。