// LOS LED PRENDEN TODOS JUNTOS
// CUANDO SE CUMPLE EL DUTY DEL PRIMERO, SE APAGA
// CUANDO SE CUMPLE EL DUTY DEL SEGUNDO, SE APAGA
// CUANDO SE CUMPLE EL DUTY DEL TERCERO, SE APAGA
// CUANDO SE CUMPLE SE CUMPLE EL PERIODO, REINICIA
//
#include <18F4620.h>
#device adc=8
//CONFIGURACIÓN DE BITS
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
//LIBRERIAS INCLUIDAS
#include "flex_lcd.c"
//DEFINICIONES
#DEFINE TECLA1 PIN_A0
#DEFINE TECLA2 PIN_A1
#DEFINE TECLA3 PIN_A2
#DEFINE ROJO PIN_D2
#DEFINE VERDE PIN_D1
#DEFINE AZUL PIN_D3
//DECLARACION DE FUNCIONES
void fin_fin(void); //FIN PROGRAMA
void menu(void); //MENU
void boton_ok(void);
void antirebote(void);
void leds(void);
void display7(void);
void ad(void);
void rs232_in(void);
void pwm_led(void);
///DECLARACION DE VARIABLES GLOBALES
char dutyR=0;
char dutyG=0;
char dutyB=0;
char opcion=0; //MENU
char valor;
//INTERRUPCIONES
#int_TIMER0
TIMER0_isr() {
if(dutyR>0){
output_high(ROJO);
}
if(dutyG>0){
output_high(VERDE);
}
if(dutyB>0){
output_high(AZUL);
}
//set_timer0(1);
}
///PROGRAMA
void main(void){
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16|RTCC_8_BIT);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL); //ENABLE
set_tris_a(0b00000111); //PULSADORES
set_tris_b(0b00000000); //PORTB SALIDA
set_tris_c(0b00000000); //PORTC SALIDA
set_tris_d(0b00000000); //PORTD SALIDA
output_a(0b00000000);
output_b(0b00000000);
output_c(0b00000000);
output_d(0b00000000);
lcd_init();
delay_ms(20);
printf(lcd_putc("\f RJ VD AZ"));
//printf(lcd_putc,"\n%i %i %i ",dutyR,dutyG,dutyB);
//menu();
dutyR=0;
dutyG=128;
dutyB=28;
// printf(lcd_putc,"\n%3u %3u %3u ",dutyR,dutyG,dutyB);
while(1){
valor=(get_timer0() & 0xff);
if (valor>dutyR){
output_low(ROJO);
}
if (valor>dutyG){
output_low(VERDE);
}
if (valor>dutyB){
output_low(AZUL);
}
//printf(lcd_putc,"\n%3u %3u %3u ",dutyR,dutyG,dutyB);
}
}
//FUNCIONES
void antirebote(void) {
delay_ms(500);
}