#include <16F88.h>
#fuses NOWDT, INTRC_IO, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NOMCLR
#use delay(clock=8000000)
#use fast_io(a)
#use fast_io(b)
/////////////////////////ETIQUETAS PUERTOS///////////////////////////////
#byte PORTA = 0x05 // Puerto A
#bit RA0 = 0x05.0 // RA0
#bit RA1 = 0x05.1 // RA1
#bit RA2 = 0x05.2 // RA2
#bit RA3 = 0x05.3 // RA3
#bit RA4 = 0x05.4 // RA4
#bit RA5 = 0x05.5 // RA5 SOLO ES ENTRADA
#bit RA6 = 0x05.6 // RA6
#bit RA7 = 0x05.7 // RA7
#byte PORTB = 0x06 // Puerto B
#bit RB0 = 0x06.0 // RB0
#bit RB1 = 0x06.1 // RB1
#bit RB2 = 0x06.2 // RB2
#bit RB3 = 0x06.3 // RB3
#bit RB4 = 0x06.4 // RB4
#bit RB5 = 0x06.5 // RB5
#bit RB6 = 0x06.6 // RB6
#bit RB7 = 0x06.7 // RB7
//////////////////variables//////////////////////////////
int16 control;
////////////////////////////////////////////////////////
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // oscilador interno preescaler 1
setup_timer_1(T1_DISABLED); // timer 1 deshabilitado
setup_timer_2(T2_DIV_BY_1,99,1); // timer 2 habilitado preescaler 1
// periodo 100 postescaler 1
// con un clock interno de 8MHz el periodo del PWM sera de: 50 microsegundos
// lo que implica una frecuencia de PWM de 20KHz
set_tris_A(0b11111111); // puerto A entradas
set_tris_B(0b00000000); // puerto B salidas
PORTA = 0; // puerto A todo a cero
PORTB = 0; // puerto B todo a cero
setup_ccp1(CCP_PWM);
set_pwm1_duty(0);
setup_comparator(NC_NC_NC_NC);
setup_oscillator(OSC_8MHZ|OSC_TIMER1);
control = 0;
do {
if (RA2 == 1) {
if (control < 99) {
control = control + 1;
set_pwm1_duty(control);
}
delay_ms(50);
}
if (RA3 == 1) {
if (control > 0){
control = control - 1;
set_pwm1_duty(control);
}
delay_ms(50);
}
}while (true); // bucle infinito
}