关于PIC程序问题,C语言

2020-02-08 12:28发布

直接贴测试程序,用的是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都没遇到这问题,有点懵...
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
21条回答
kobe008hs
2020-02-09 01:35
回复【6楼】lalapunk1983
回复【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寄存器)的值了!

一周热门 更多>