Cogiendo un ejemplo del Microcursillo en C que hay en los foros he creado este programa y me funciona perfecto en la pic 16F84A pero no en la 16F876 o 16F872.
Estas dos últimas tienen conversores A/D internos, por lo que puede que no me funcione el programa por lo que me decís, lo del registro ADCON1, pero lo tengo puesto: primero defino en que byte está y luego le doy el valor de todos los pins como salidas digitales, ... cuando decís salidas digitales os referis a entradas y salidas digitales o para entradas hay que poner otro valor?¿
Gracias
////////////////////////////////////// PREPROCESADO ///////////////////////////////////
#include <16F84a.h> //#include <16F876.h>
#use delay(clock=4000000)
#fuses RC,NOWDT//,NOPUT,NOLVP,NOBROWNOUT,NOWRT
#use fast_io(A)
#use fast_io(B)
#byte port_b=6
#byte ADCON1=0x9F
////////////////////////////////////// RUTINAS ///////////////////////////////////////
int entrada_activa()
{
if(input(PIN_A0))
{
// Esto se ejecuta si RA0 está a 1
return(0); // Devolvemos un 0
}else if(input(PIN_A1)) {
// Esto se ejecuta si RA1 está a 1
return(1); // Devolvemos un 1
}else if(input(PIN_A2)) {
// RA2 está a 1
return(2); // Devolvemos un 2
}else if(input(PIN_A3)) {
// RC3 está a 1
return(3);
}else if(input(PIN_A4)) {
// RA4 está a 1
return(4);
}/*else if(input(PIN_A5)) {
// RA5 está a 1
return(5);
}*/else {
// Si entramos aquí es que no se dió ninguno de los casos anteriores (todas a 0)
return(6);
}
}
////////////////////////////////////// PRINCIPAL //////////////////////////////////////
void main()
{
int pin_activo;
ADCON1 = 0x06; // Configurar todos los pins como salidas digitales
set_tris_b(0); //// declaramos el puerto B como salidas
port_b=0;
set_tris_a(0xff); // Puerto A configurado como entrada
while(TRUE) // Bucle infinito
{
pin_activo = entrada_activa(); /
if(entrada_activa() > 4)
{
port_b=0x00;
}else {
port_b=0xff;
}
}
}