请问,代码中的错误在哪里(使用16F628)?
OUT1-LED1
OUT2-LED2
仅闪烁LED1(OUT1)。计数器不起作用(整数错误?)。
硬件还可以...
我的代码:
#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。
最佳答案
变量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);
}
}
}