Gracias. Ya que estamos, si no os importa, os copio el programa en cuestión que no hago funcionar y no sé por qué.
El reloj es un cristal externo de 20Mhz (¿con uno menor iría mejor?) así que al programar le digo que el oscilador es XT, y también habilito el wathdogtimer, aunque no sé si es necesario.
El programa lo unico que hace es esperar a que se pulsen uno de los tres pulsadores y en función del que ha sido pulsado incrementa o decremente la salida.
#include <16F870.h>
#use delay(clock=20000000)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#byte port_b=0x06
#byte port_c=0x07
void main()
{
typedef short bit;
bit e0, e1, e2;
int nivel, estado;
int const tension[6]={0x20,0x30,0x3F,0x4B,0x55,0x6D};
set_tris_a(0xFF);
set_tris_b(0x00);
set_tris_c(0x00);
nivel=0x00;
estado=0x20;
e0=input(PIN_A0);
e1=input(PIN_A1);
e2=input(PIN_A2);
port_b=estado;
port_c=estado;
while(TRUE)
{
restart_wdt();
if(e0!=input(PIN_A0))
{
nivel++;
if (nivel==6) { nivel=0; }
estado=tension[nivel];
port_b=estado;
port_c=estado;
e0=input(PIN_A0);
}
if(e1!=input(PIN_A1))
{
estado++;
port_b=estado;
port_c=estado;
e1=input(PIN_A1);
}
if(e2!=input(PIN_A2))
{
estado--;
port_b=estado;
port_c=estado;
e2=input(PIN_A2);
}
}
}