PIC16F628坏计数器?

时间:2016-06-10 11:11:14

标签: c pic microchip

请问,代码中的错误在哪里(16F628)?

OUT1 - LED1 OUT2 - LED2

仅闪烁LED1(OUT1)。计数器不工作(坏整数?)。 HW还可以...... 我的代码:

#include "PIC16F628.h"
#include "pic.h"

#pragma config FOSC = INTOSCIO

#define OUT1 RB1
#define OUT2 RB2

#define _XTAL_FREQ 4000000

//******************************************

void main()
{
    int x;
    TRISB1=0;
    TRISB2=0;
    OUT1=0;
    OUT2=0;

    if (x < 10)
    {
        x++;
        OUT1=1; 
         __delay_ms(1000);

        OUT1=0; 
         __delay_ms(1000);
    } 

    else if (x >= 10)
    {       
         x = 0;
        OUT2=1; 
         __delay_ms(1000);

        OUT2=0; 
         __delay_ms(1000);             
    }    
}

在此代码中只闪烁OUT2:

#include "PIC16F628.h"
#include "pic.h"
#include <stdio.h>
#include <stdlib.h>
#include "stdint.h"

#pragma config FOSC = INTOSCIO

#define OUT1 RB1
#define OUT2 RB2

#define _XTAL_FREQ 4000000

uint8_t x = 10;

//************************

void main()
{
    TRISB1=0;
    TRISB2=0;
    OUT1=0;
    OUT2=0;


    while(1)
    {  
        if (x < 10)
        {
            x++;
            OUT1=1; 
             __delay_ms(1000);

            OUT1=0; 
             __delay_ms(1000);
        } 

        else if (x >= 10)
        {       
             x = 0;
            OUT2=1; 
             __delay_ms(1000);

            OUT2=0; 
             __delay_ms(1000);             
        }  
    }   
}

同样在调试器中,变量x不会改变。编译器是XC8。

1 个答案:

答案 0 :(得分:0)

变量x未初始化。给它一个初始值。

编译时是否有任何警告?因为你读取未初始化变量的值,你的编译器肯定应该显示警告。如果您是C语言的初学者,请确保您的编译器显示所有警告并仔细阅读。他们在这里是有原因的。

如果你希望它多次运行,你还必须将if / else语句置于无限循环中。通常嵌入式c中的一个非常简单的程序如下所示:

void main()
{
    //Initialization stuff

    while(1) {
        //main loop : Everything happens here forever and ever
    }
}

除了使用RTOS但不是主题的应用程序。

试试这个主要内容:

void main() {
    int x;
    TRISB1=0;
    TRISB2=0;
    OUT1=0;
    OUT2=0;

    while(1) {
        if (x < 10) {
            x++;
            OUT1=1; 
            __delay_ms(1000);

            OUT1=0; 
            __delay_ms(1000);
        } 

        else if (x >= 10) {       
            x = 0;
            OUT2=1; 
            __delay_ms(1000);

            OUT2=0; 
            __delay_ms(1000);             
        }    
    }
}