0

我在将微芯片 pic 的汇编代码转换为 C 语言时遇到问题,它是两部分,第一部分是

movlw HIGH RevTable ; get MS byte of table

桌子是

RevTable
        retlw B’00000000’ ; invalid
        retlw B’00100001’ ; phase /6
        retlw B’00000110’ ; phase /4
        retlw B’00100100’ ; phase /5
        retlw B’00011000’ ; phase /2
        retlw B’00001001’ ; phase /1
        retlw B’00010010’ ; phase /3
        retlw B’00000000’ ; invalid

那是什么意思?我不明白

第二个问题是

incfsz ADC,w ; if ADC is 0xFF we’re at full speed - skip timer add

怎么可能在 C 中,非常感谢

4

1 回答 1

4

您的代码示例不足,因此我无法告诉您所有信息:

movlw HIGH RevTable ; get MS byte of table

这只是计算表跳转的一部分。您的 asm 代码必须类似于:

movlw HIGH RevTable
movwf PCLATH            ;set high byte RevTable address
movf  TableIndex, w
movwf PCL               ;set low byte RevTable address this is computed table jump
;The return value is in wreg so one from RevTable table depend of TableIndex value

在 c 中类似于:

char RevTable[] = {'0','6','4','5','2','1','3','0'};

char TableIndex = 1;
char ValueFromTable;

ValueFromTable = RevTable[TableIndex] ;

第二部分代码:

incfsz ADC,w ; if ADC is 0xFF we’re at full speed - skip timer add

这里缺少执行或不依赖于 ADC 值的第二条 asm 指令,例如:

 if (ADC != 255) ...
于 2013-04-15T08:16:46.457 回答