直接贴测试程序,用的是PIC16F886
#include <pic.h>
//CPU为PIC16F886
__CONFIG (0x0FE1);
__CONFIG (0xfeff);
unsigned int temp;
unsigned int i;
void InitPort()
{
TRISA = 0xff;//端口配置为输入
ANSEL = 0x00;//数字IO口
TRISB = 0xc0;//RB0~RB5为输出,RB6:PGC,RB7:PGD
ANSELH = 0x00;
IOCB = 0x00;//禁止电平变化中断
PORTB = 0x32; //RB0=0,RB1=1,RB2=0,RB4=1,RB5=1
TRISC = 0x80;//RX为输入,其他为输出
PORTC = 0x00;
}
void main()
{
InitPort();
for (i=0; i<10; i++)
{
temp = temp+1;
}
while (1){;}
}
问题:进入for循环后,i不是按1加,而是0x000c;如果i是在main函数里设置为unsigned char型,则是按0x18加!
请问这是为什么?实在找不到原因,以前用其他的CPU都没遇到这问题,有点懵...
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
回复【3楼】kobe008hs
-----------------------------------------------------------------------
头文件有问题能编译过?
-----------------------------------------------------------------------
只是以为是头文件的原因...
反汇编有几条语句不是太明白:
07EB 1003 BCF 0x3, 0
07EC 3000 MOVLW 0
07ED 1803 BTFSC 0x3, 0
07EE 3001 MOVLW 0x1
07EF 00F1 MOVWF 0x71
07F0 3001 MOVLW 0x1
07F1 00F0 MOVWF 0x70
07F2 0870 MOVF 0x70, W
07F3 07F1 ADDWF 0x71, F
这个“F”是指哪个寄存器啊?
这段执行后,0x71的值变为0x03寄存器(status寄存器)的值了!
project-build options-project - compiler - optimization setings
-----------------------------------------------------------------------
差不多找到原因了,不是优化的问题,我反汇编后,一步步的查看
是07F3 07F1 ADDWF 0x71, F这步出现问题,直接将F里面的值传给0x71(i)了...
原因很简单!你哪个“i”应该在主程序中定义!你现在是在外部定义,且定义的不是共公变量。
-----------------------------------------------------------------------
我在main函数中定义过的,只是定义为unsigned char型,i++也不是按1加,而是按0x18加
回复【7楼】bigz
project-build options-project - compiler - optimization setings
-----------------------------------------------------------------------
差不多找到原因了,不是优化的问题,我反汇编后,一步步的查看
是07f3 07f1 addwf 0x71, f这步出现问题,直接将f里面的值传给0x71(i)了...
-----------------------------------------------------------------------
这个F就是0x71.........
这个型号需要配置两下嘛
__CONFIG (0x0FE1);
__CONFIG (0xfeff);
??????
一周热门 更多>