Microchip
直播中

李叱镡

7年用户 183经验值
私信 关注
[问答]

代码自动重置并重新开始问题

每次在第一次“.(1)”循环之后打开代码(pic12f1572)时,我都会遇到一个奇怪的问题,代码会自动重置并重新开始。这是代码:如果有人遇到过这样的问题,请AdveBrr,丹尼尔

以上来自于百度翻译


      以下为原文

    i have a strange problem every time i turn on the code (pic12f1572) after the first "while (1)" loop the code reset itself and starts all over again. this is the code :
void main(void) {
   
   
    // initialize the device
    SYSTEM_Initialize();
    int first_delay;

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();
   

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();
    PI_DAT_SetHigh();
    __delay_ms(100);
    PI_DAT_SetLow();
    __delay_ms(100);
    do{
        while (1){
        PIR2bits.C1IF = 0;
        INTCONbits.IOCIE = 0;
        //first start delay
        first_delay = 0;
        TMR1_Initialize();
        SD_SetHigh();
        while (first_delay <= 5){
            if (TMR1IF){
                first_delay++;
                TMR1_Initialize();
            }
        }
        //watch dog
        INTCONbits.IOCIF = 0;
        IOCAF3 = 0;
        INTCONbits.IOCIE = 1;
        tictimer = 0;
        TMR1_Initialize();
        //start of WD
        for (int w=0;w<3;w++){
            PI_DAT_SetHigh();
            __delay_ms(100);
            PI_DAT_SetLow();
            __delay_ms(100);
        }
        while (tictimer < 10){
            //volt_sampling();
            if (TMR1IF){
                tictimer++;
                TMR1_Initialize();
            }
            if (WD>=10){
                INTCONbits.IOCIE = 0;
                WD=0;
                //test
                volt_sampling();
                INTCONbits.IOCIE = 1;
            }
        }
        SD_SetLow();
        __delay_ms (4000);
        SD_SetHigh();
        }
    } while (1);
}
if any one have encountered this kind of problem please advice

BR,
daniel

回帖(3)

康辅佑

2019-7-17 11:24:28
为什么在地球上,如果不先编写代码来为它们提供服务,那么您能启用中断吗?

以上来自于百度翻译


      以下为原文

    Why on Earth are you enabling interrupts without first writing the code for servicing them?
举报

张娜

2019-7-17 11:34:49
***

以上来自于百度翻译


      以下为原文

    ****
举报

王焕树

2019-7-17 11:54:46
常见的误解,认为你必须使中断能够轮询中断标志位。

以上来自于百度翻译


      以下为原文

    Common misunderstanding, thinking you have to enable interrupts to be able to poll the interrupt flag bits.
 
举报

更多回帖

发帖
×
20
完善资料,
赚取积分