Hola a todos, soy muy nuevo en la programación de microcontroladores en lenguaje C, con el ASM si tengo experiencia pero con C muy poco.
Estoy haciendo unos ejercicios que tengo en un libro y uno de esos ejercicios es encender y apagar un led por medio de un interruptor, el puerto utilizado es el B, en el B0 está el interruptor y en el B1 el LED.
El PIC utilizado es el PIC16F876
Pues bien, el problema que tengo es que quiero modificar la práctica para utilizar el puerto A como entrada del interruptor (RA0), pero no me funciona
Si utilizo los puertos B y C el código me funciona perfectamente.
Llevo un par de días trabado con esto y no consigo sacarlo.
La verdad es que el libro va demasiado rápido y para alguien que empieza desde 0 en C se hace un poco difícil.
Para complementar tengo que utilizar otro libro de programación en C.
Si alguien me puede echar una mano y decir en que estoy fallando lo agradecería.
El código que he modificado es este
#include <16F876.h> //Librería del pic16f876
#fuses XT,NOWDT
#use delay( clock = 4000000 ) //Configuramos el relog a 4MHz
#BYTE TRISA = 0x85 //Define la posición de TRISA en la dirección 85h
#BYTE TRISB = 0x86 //definimos la posicion de TRISB en 86h
#BYTE PORTA = 0x05 //Define la posición de PORTA en la dirección 05h
#BYTE PORTB = 0x06 //definimos la posicion de PORTB en 06h
#BYTE OPTION_REG = 0x81 //definimos la posición de OPTION en 0x81
// zona de programa
void main () {
bit_clear(OPTION_REG,7); /*Habilitación del pull-up, poniendo a 0 el bit 7
del registro OPTION que su variable es RPBU*/
bit_set(TRISA,0); //Se configura el pin RA0 como entrada
bit_clear(TRISB,1); //Se configura el pin RB1 como salida
bit_clear(PORTB,1); //Apagamos el led en la salida RB1
while (TRUE){
if (bit_test(porta,0) == 1 ) //si RA0 es 1, apaga el LED que está en el puerto RB1
bit_clear(portb,1);
else
bit_set(portb,1); //si RA0 = 0, enciende el LED
}
}
Gracias a todos por la ayuda