fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Problemilla con un ...
 
Avisos
Vaciar todo

Problemilla con un programa Simple en C

9 Respuestas
3 Usuarios
0 Reactions
3,504 Visitas
vcs
Respuestas: 114
 vcs
Topic starter
(@vcs)
Estimable Member
Registrado: hace 18 años

Total despues de haber intentado programar en PicBasic Pro y de terner algunos problemillas que no fui capaz de solucionar me he pasado al C, y por tanto no tengo practicamente ni idea, asi que he trincado los manuales y ejemplillos y lo he hecho andar, con cosas simples como encender un led de forma intermitente, sacar por el puerto una serie de valores, etc, ahora me pongo ha hacer algo mas "complicado", (con cuatro condicionales) y no soy capaz de hacerlo andar, seguro que porque no se programar en C, ¿alguien me sabe decir porque cuando pongo el siguiente codigo en lugar de hacer lo que deberia me pone a 1 los pines 0,1,2 y 7 del puerto B?

#include <16F84A>
#fuses XT,WDT
#use delay (clock=20000000)

#use fast_io(a)
#use fast_io(b)
#byte PORTA=0x05
#byte PORTB=0x06

void main(void)
{

disable_interrupts(GLOBAL);
set_tris_a(0xff);
set_tris_b(0x0);

do
{
if(PORTA |= 0)
{
PORTB=1;

}

if(PIN_A4 == 1)
{
PORTB=0;
}

}WHILE(TRUE);
}

Seguro que son errores de programacion, este codigo es asi porque es la modificacion de uno mas complejo pero para descartar problemas fui simplificando para ver si entraba en los bucles y tal y pascual, ya se que hay formas mas simples de hacer esto pero no es el objetivo, el objetico es saber por que razon con este programa que pienso deberia de funcionar no lo hace.

Responder
8 respuestas
gonzao
Respuestas: 218
(@gonzao)
Estimable Member
Registrado: hace 19 años

Hola
¿Puedes contarnos qué es lo que esperas que haga el programa?

Un saludo

Responder
gonzao
Respuestas: 218
(@gonzao)
Estimable Member
Registrado: hace 19 años

Como usas un cuarzo de 20MHz pon el fuse HS en lugar de XT
En cuanto a lo de WDT no lo he usado nunca pero habría que estar al loro de que no desborde el contador, no?. Estás usando el WatchDog conscientemente? Pon NOWDT o no pongas nada.

Por lo demás, en cuanto a lo que verá, parece que es lo siguiente:
Si A4 está activo, PORTB será 0
Si A4=0 y otro pin A está a 1, PORTB será 0x01

Responder
vcs
Respuestas: 114
 vcs
Topic starter
(@vcs)
Estimable Member
Registrado: hace 18 años

Gracias por responder

Por un lado el WDOG lo tengo activo porque cuando grabo el PIC con el ICPROG si no pongo WDOG activo creo que no funciona, lo del XT lo tengo asi porque es un Crital, de todas formas con estos Fuses otros programas si me funcionan bien.

Lo que deberia hacer el programa no tiene mayor importancia, efectivamente lo que deberia hacer es si por el puerto a no entra nada, activa la salida 0 del puerto B, y si la pata 4 del puerto A esta activa en el puerto B tiene que estar todo apagado, o algo así, pero desde luego lo que no deberia de hacer con un programa asi es encender las salidas 0,1,2 y 7 del puerto B ¿No? pues bueno, una simulacion con el Preteus hace esto, mientras que el resto de programas los simula bien

GRACIAS

Responder
furri
Respuestas: 2708
(@furri)
Ardero
Registrado: hace 19 años

Lo de no poder grabar el pic sin el Watchdog activo... me resulta raro pero cosas peores me han pasado a mi..

Si este WatchDog está activo tienes que resetearlo constantemente para que no salte y te resetee el micro, en ensamblador se hace con la orden

clrwdt

y en C (con CCS)

restart_wdt();

Lo principal es que ajustes el tiempo del watchdog a tus necesidades y despues poner esa orden en tu función main() de manera que el watchdog sepa que el micro no se ha colgado... ah... metelo tambien dentro de cada función larga que ejecute el micro.... por si las moscas.

saludos.
furri.

Responder
Página 1 / 2
Compartir: