Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

programa para 89C51 en sdcc no funciona como deberia

Ir abajo

programa para 89C51 en sdcc no funciona como deberia Empty programa para 89C51 en sdcc no funciona como deberia

Mensaje por josb86 Miér 14 Nov 2012 - 16:58

Este es mi primer tema en el foro ynecesito ayuda con un problema que se me esta
presentando, siemre he programado en pic en ccs y en estos dias me
pusieron un trabajo en el cual tengo que progarmar un 89c51 en SDCC para
eso utilizamos el IDE M-IDE MCS-51. El ejercicio es el siguiente.

1. Cuando la entrada HABILITA esta desactivada, la salida ALARMA se apaga.
2. Cuando la entrada HABILITA esta activada, la salida ALARMA depende de la entrada PULSO.
3. Cuando la entrada PULSO se activa con un período menor a 1s, la salida ALARMA se enciende. En caso contrarío se apaga.

en el programa a continuacion hay un while (2) con el cual cuento los
ciclos y ai aproxcimo a lo que deberia ser el segundo. pero parece que
no hiciera la comparacion con 1millon (0xF4240). algui me puede dar una
mano?

adjunto el proteus

//inclusion de librerias
#include
#include
#include
#include
#include

//declaracion de variables globales
__sbit __at 0xB3 HAB; //PORT 3 BIT 3
__sbit __at 0xB2 PUL; //PORT 3 BIT 2
__sbit __at 0xB7 alarma;//PORT 3 BIT 7
__sfr __at 0xB0 P3; //PORT 3
__sfr __at 0xA0 P2; //PORT 3

//funcion principal
void main()
{

__bit PULSADOR = 1;
unsigned long cnt = 0; //4294967295
alarma = 1;

while(1){ //while 1

if(HAB == 1){
alarma = 1;
cnt = 0;
}
else{ //else 1

PULSADOR = PUL;

if(PULSADOR == 0){

PULSADOR = PUL;

while(PULSADOR == 0){ //while 2
cnt++;
PULSADOR = PUL;
} // while 2

if(PUL == 1){

if(cnt < 0xF4240){ //0xF4240 - en enteros 1000000
alarma = 0;
cnt = 0;
}
else{
alarma = 1;
cnt = 0;
}
}
}
} //end else 1
} //end while 1
} //end void


el problema es que al parecer la variable cnt no queda declarada como una variable de 32bits si no de 16 por que el contador llega solo a 65535 asi deje presionado el tiempo que sea el pulsador PUL, ademas el pin alarma siempre enciende y solo deberia hacerlo si el contador es menor que 1000000. me pueden decir si es que no se pueden declarar variables de 32bit en sdcc o el micro? o es que hay algun error en el programa?

josb86
Nuevo Usuario
Nuevo Usuario

Mensajes : 1
Fecha de inscripción : 14/11/2012

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.