【发布时间】:2019-01-29 14:17:56
【问题描述】:
我是新来的,我希望我做得很好并张贴在正确的部分 x)
我开始对 PIC 微控制器进行编程,但有时会卡住。 我对这段代码有疑问,这是一个二进制计数器,当位为 1 时打开 LED 并在每次计数时打开一个开关(RB7)。 当它开始时,它会一直运行到 add1() 然后停止,因为没有遵循 while 条件(它会一直运行到 add1() 语句的 click() ,然后不会继续重复 while 循环)。
这是C语言的代码
#pragma config OSC = HS
#pragma config WDT = OFF
#define _XTAL_FREQ 4000000 // Fosc frequency for _delay() library
#include <xc.h>
bit a = 0; //variabili per il conteggio binario (10 bit)
bit b = 0;
bit c = 0;
bit d = 0;
bit e = 0;
bit f = 0;
bit g = 0;
bit h = 0;
bit i = 0;
bit j = 0;
void click() {
if (a==1) {PORTAbits.RA2 = 1;}
if (a==0) {PORTAbits.RA2 = 0;}
if (b==1) {PORTAbits.RA3 = 1;}
if (b==0) {PORTAbits.RA3 = 0;}
if (c==1) {PORTBbits.RB1 = 1;}
if (c==0) {PORTBbits.RB1 = 0;}
if (d==1) {PORTBbits.RB2 = 1;}
if (d==0) {PORTBbits.RB2 = 0;}
if (e==1) {PORTBbits.RB3 = 1;}
if (e==0) {PORTBbits.RB3 = 0;}
if (f==1) {PORTAbits.RA1 = 1;}
if (f==0) {PORTAbits.RA1 = 0;}
if (g==1) {PORTAbits.RA0 = 1;}
if (g==0) {PORTAbits.RA0 = 0;}
if (h==1) {PORTBbits.RB6 = 1;}
if (h==0) {PORTBbits.RB6 = 0;}
if (i==1) {PORTBbits.RB5 = 1;}
if (i==0) {PORTBbits.RB5 = 0;}
if (j==1) {PORTBbits.RB4 = 1;}
if (j==0) {PORTBbits.RB4 = 0;}
PORTBbits.RB7 = 1;
__delay_ms(500);
PORTBbits.RB7 = 0;
__delay_ms(5);
}
void add9() {
if (a==0) {
a=1; b=0; c=0; d=0; e=0; f =0; g=0; h=0; i=0; j=0;
click();
}
if (a==1,b==1,c==1,d==1,e==1,f==1,g==1,h==1,i==1,j==1) {
//interrompe il contatore se sono tutti 1 e li azzera
a=0;b=0;c=0;d=0;e=0;f=0;g=0;h=0;i=0;j=0; click();
}
}
void add8() {
if (b==0) {
b=1; c=0; d=0; e=0; f =0; g=0; h=0; i=0; j=0; click();
}
else {
add9();
}
}
void add7() {
if (c==0) {
c=1; d=0; e=0; f =0; g=0; h=0; i=0; j=0; click();
}
else {
add8();
}
}
void add6() {
if (d==0) {
d=1; e=0; f =0; g=0; h=0; i=0; j=0; click();
}
else {
add7();
}
}
void add5() {
if (e==0) {
e=1; f =0; g=0; h=0; i=0; j=0; click();
}
else {
add6();
}
}
void add4() {
if (f==0) {
f =1; g=0; h=0; i=0; j=0; click();
}
else {
add5();
}
}
void add3() {
if (g==0) {
g=1; h=0; i=0; j=0; click();
}
else {
add4();
}
}
void add2() {
if (h==0) {
h=1; i=0; j=0; click();
}
else {
add3();
}
}
void add1() {
if (i==0) {
i=1; j=0; click();
}
else {
add2();
}
}
void add() {
if (j==0) {
j=1; click();
}
else {
add1();
}
}
void main(void) {
TRISA=0x00;
TRISB=0x00;
while(1) {
add();
}
return;
}
我错过了什么? 对不起,有些 cmets 是意大利语,但我来自意大利 x)
【问题讨论】:
-
您可以从以可读方式构建代码开始。