如何将这部分代码从汇编转换为C语言

时间:2013-04-14 16:56:25

标签: c assembly pic microchip

我在将微芯片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中 非常感谢

1 个答案:

答案 0 :(得分: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

类似于:

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

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

 if (ADC != 255) ...