【发布时间】:2013-04-14 16:56:24
【问题描述】:
我在将微芯片 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 中的表现如何 非常感谢
【问题讨论】:
-
到目前为止我们可以 C 你的
C代码 -
对于第二个问题,程序集是 Loop call ReadADC ;从 ADC incfsz ADC,w 获得速度控制;如果 ADC 为 0xFF,我们处于全速状态 - 跳过计时器添加转到 PWM;将 Timer0 添加到 ADC 用于 PWM movf DriveWord,w ;强制条件 goto Drive ;继续,C 是 void main (void) { char ADCReading;初始化();换向(); //确定当前电机位置 ADCReading = ReadADC(); //从ADC获取速度控制 if(ADCReading == ) }
-
第一个问题 Commutate movlw SensorMask ;仅保留传感器位和 wf SensorPort,w ;获取传感器数据 xorwf LastSensor,w ;测试是否检测到运动 btfsc STATUS,Z ;如果没有变化返回零;没有变化 - 回到 PWM 循环 xorwf LastSensor,f ;用当前 btfss DirectionBit 替换最后的传感器数据;测试方向位 goto FwdCom ;位为零——正向换向;反向换相 movlw HIGH RevTable ;获取表 movwf PCLATH 的 MS 字节;准备计算的 GOTO movlw LOW RevTable ;获取表的 LS 字节 goto Com2
-
和 C 是 void Commutate (void) { char result;结果 = (SensorPort&SensorMask); if((result^LastSensor) != 0) { LastSensor = 结果; if (DirectionBit == 0) { } else { } } else { /*什么都不做*/ } }
-
第一部分可以使用 switch/case 语句简单地完成。第二种是简单地将 ADC 加 1 并使用 if/else 语句检查它是否达到 255。