【问题标题】:Assembler to C conversion INCF and CPFSLT汇编器到 C 的转换 INCF 和 CPFSLT
【发布时间】:2012-01-09 10:41:42
【问题描述】:
这两个代码意思一样吗?
Assambler ->
_asm
INCF PR4,0,ACCESS
CPFSLT TMR4,ACCESS
_endasm
C->
++PR4;
if (PR4 < TMR4)
PIR3bits.TMR4IF = 1;
如果不是,assambler 代码应该如何翻译?
亲切的问候:)
【问题讨论】:
标签:
c
microchip
interrupt
pic18
【解决方案1】:
第一个答案是否定的,但我不知道怎么翻译!
INCF PR4,0,ACCESS //(INCF f,d) (增量 f) (f + 1 -> d)
ACCESS中的“递增PR4寄存器”工作寄存器(累加器)“换句话说:
获得 PR +1 到 WREG
WREG = PR +1;
CPFSLT TMR4,ACCESS //(CPFSLT f) (比较 f/w,如果 f
=> 如果 TMR4 如果 TMR4 >= WREG
应该给予:
if (TMR4 >= WREG)
WREG = PR4 + 1;
嗯……对吗?
【解决方案2】:
谁能验证一下,我认为下面的代码是正确的!
_asm
INCF PR4,0,ACCESS //PR4+1 destination WREG, Access bank
CPFSLT TMR4,ACCESS //Compare TMR4 with contents of WREG in Access bank, Skip if TMR4 < WREG
_endasm
/* Above says: if (TMR4 <= PR4 + 1)*/
PIR3bits.TMR4IF = 1; // Then do this line