Hola, he hecho un programa muy simple para aprender, consiste en un contador ascedente 0-9 y descendente 9-0 mientras se pulsa un botón. Uso un 7 segmentos de ánodo común.
Voy guiándome con algunos ejercicios ya resueltos.
El problema está en que me gusta más poner el loop infinito while de manera que en su interior se encuentre el código a repetir y no al final como algunos hacen. Así que después de comprobar que el programa funciona he querido poner el "while(1)" a mi gusto.
Pero al compilar me da error.
Alguien podría decirme porque??
Adjunto programa funcionando Ok:
Y el programa con el "while (1)" donde yo quiero ponerlo:
En este segundo programa me da error en la llave de cierre del while.
Porqué??
Saludos
Voy guiándome con algunos ejercicios ya resueltos.
El problema está en que me gusta más poner el loop infinito while de manera que en su interior se encuentre el código a repetir y no al final como algunos hacen. Así que después de comprobar que el programa funciona he querido poner el "while(1)" a mi gusto.
Pero al compilar me da error.
Alguien podría decirme porque??
Adjunto programa funcionando Ok:
PHP:
/*
* File: main.c
* Author: nimio
*
* 16F84A
*
* Programa contador en display 7 segmentos. de 0-9 y 9-0
* con pulsador. Según la posición del pulsador contará ascendente o descendentemente.
*
* DISPLAY 7 SEGMENTOS DE ÁNODO COMÚN.
*
* Created on 8 de noviembre de 2012, 18:13
*/
#include <xc.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC=XT, WDTE=OFF, PWRTE=ON, CP=OFF
//DECLARACIÓN DE VARIABLES GLOBALES:
int contador; //Variable contador que se irá incrementando o decrementando según el pulsador
int tabla7seg [10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98}; //Vector de
//10 posiciones
//con los números
//de 0-9 en HEX.
//DECLARACIÓN DE FUNCIONES:
void up (void) {
if (contador<9) {
contador++;
}
}
void down (void) {
if (contador>0) {
contador--;
}
}
//PROGRAMA PRINCIPAL:
void main(void) {
TRISAbits.TRISA0=1; // Pin 0 Puerto A definido como entrada.
TRISB=0;
PORTB=0;
if (RA0=1) { //Pulsador en RA0 = 1 lógico (sin pulsar pulsador).
contador=-1; //Contador para modo ascendente.
//Se pone a -1 (más bajo de 0) para que visualice el 0.
}
else { //Pulsador pulsado (0 lógico).
contador=10; //Contador para modo descendente.
}
do {
if (RA0=1) {
up();
}
else {
down();
}
PORTB=tabla7seg[contador];
__delay_ms(1000);
}
while(1);
}
Y el programa con el "while (1)" donde yo quiero ponerlo:
PHP:
/*
* File: main.c
* Author: nimio
*
* 16F84A
*
* Programa contador en display 7 segmentos. de 0-9 y 9-0
* con pulsador. Según la posición del pulsador contará ascendente o descendentemente.
*
* DISPLAY 7 SEGMENTOS DE ÁNODO COMÚN.
*
* Created on 8 de noviembre de 2012, 18:13
*/
#include <xc.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC=XT, WDTE=OFF, PWRTE=ON, CP=OFF
//DECLARACIÓN DE VARIABLES GLOBALES:
int contador; //Variable contador que se irá incrementando o decrementando según el pulsador
int tabla7seg [10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98}; //Vector de
//10 posiciones
//con los números
//de 0-9 en HEX.
//DECLARACIÓN DE FUNCIONES:
void up (void) {
if (contador<9) {
contador++;
}
}
void down (void) {
if (contador>0) {
contador--;
}
}
//PROGRAMA PRINCIPAL:
void main(void) {
TRISAbits.TRISA0=1; // Pin 0 Puerto A definido como entrada.
TRISB=0;
PORTB=0;
while (1) {
if (RA0=1) { //Pulsador en RA0 = 1 lógico (sin pulsar pulsador).
contador=-1; //Contador para modo ascendente.
//Se pone a -1 (más bajo de 0) para que visualice el 0.
}
else { //Pulsador pulsado (0 lógico).
contador=10; //Contador para modo descendente.
}
do {
if (RA0=1) {
up();
}
else {
down();
}
PORTB=tabla7seg[contador];
__delay_ms(1000);
}
} // Cierro llave de While (1)
}
En este segundo programa me da error en la llave de cierre del while.
Porqué??
Saludos