有个习惯,新的C环境我都会测一下对于数据运算的支持,最怕的是类型隐式转换,这次第一个测试就出了问题,
PIC16F887, PICC16 v9.70(用的是坛里的破解)
void main(void)
{
unsigned int a,b;
a=258;
a -=256;
b=a>>1;
while(b);
}
仿真结果如下:
(原文件名:test.JPG)
a -= 256, 结果应当是2,但窗口中出现了0xff02!
有几点都不妥当:
1. clrf 0x3. 这条指令应该不妥吧? 据说操作status得不到预期结果
2.a-=256汇编出来的结果 btfss 0x3,0 这是有什么根据呢? 就是前面clrf 0x3结果正确, 但我只减256,没要求减C啊?
另外, a-=257是不会有错的,因为它编译出来如下:
;a -= 257;
07EF 3001 MOVLW 0x1
07F0 02F2 SUBWF 0x72, F
07F1 1C03 BTFSS 0x3, 0
07F2 03F3 DECF 0x73, F
07F3 02F3 SUBWF 0x73, F
好像这个问题是编译器太聪明了,但是也没优化成直接赋值
————你声明的a是无符号整型变量,就是两个字节的,在涉及两个字节操作的时候,都为了使两个字节不发生错误,当然需要用到借位标志位了。
并且不建议使用破解版的,我用MPLAB 8.50自带的for PIC10/12/16 MCUs (Lite Mode)V9.70,就没有你的问题。但BTFSS 0x3, 0这个是必须有的,因为你是两个字节的操作。而你用的单片机是8位的。
(原文件名:QQ截图未命名.gif)
一周热门 更多>