请问,代码中的错误在哪里(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。
答案 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);
}
}
}