El codigo en c es este:
#include <16f84A.h>
#fuses NOWDT, XT
#use delay(clock=4000000)
#include <lcd.c>
#BYTE PORTA = 0x03
#BYTE PORTB = 0x04
int z; //flag para que no empiece a contar si el switch esta encendido nada mas empezar
int segundos;
int minutos;
int16 contador; //variable para conseguir tiempos de un segundo
#INT_RTCC
void lcd(void)
{
if(input(pin_a2) && (z == 1))
{
output_high(pin_a3);
lcd_gotoxy(1, 1);
lcd_putc("TIEMPO RESTANTE");
if(contador == 261)
{
if(segundos == 0)
{
segundos = 60;
minutos --;
}
segundos--;
if(segundos < 10)
{
lcd_gotoxy(9, 2);
printf(lcd_putc,"%02i", segundos);
}
if(segundos >= 10)
{
lcd_gotoxy(9, 2);
printf(lcd_putc,"%2i", segundos);
}
if((segundos == 0) && (minutos == 0))
{
lcd_putc("\f");
lcd_putc("RETIRE PLACA");
while(1)
{
output_low(pin_a3);
}
}
lcd_gotoxy(6, 2);
printf(lcd_putc,"%02i", minutos);
contador = 0;
}
contador ++;
}
}
void main(void)
{
z = 0;
segundos = 0;
minutos = 0;
lcd_init();
output_low(pin_a3);
lcd_gotoxy(2, 1);
lcd_putc("ELEGIR TIEMPO");
while(input(pin_a2))
{
}
set_timer0(5);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_4);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while(1)
{
if(input(pin_a0))
{
delay_ms(200);
minutos++;
z = 1;
if(minutos > 59)
{
minutos = 0;
}
lcd_gotoxy(6, 2);
printf(lcd_putc,"%02i", minutos);
lcd_gotoxy(9, 2);
printf(lcd_putc,"%02i", segundos);
}
if(input(pin_a1))
{
delay_ms(200);
segundos ++;
z = 1;
if(segundos > 59)
{
segundos = 0;
}
lcd_gotoxy(6, 2);
printf(lcd_putc,"%02i", minutos);
lcd_gotoxy(9, 2);
printf(lcd_putc,"%02i", segundos);
}
}
}