#include <16f628.h>
#fuses INTRC_IO
#fuses NOWDT
#fuses PROTECT
#fuses NOPUT
#fuses BROWNOUT
#fuses NOMCLR
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
#define encoder_A input(pin_b4)
#define encoder_B input(pin_b5)
#byte tx_reg = 0x19
char bufer[10];
int1 est_ant_1,est_ant_2,flag_cambio_encoder = 0;
int32 encoder = 0;
int16 valor;
int1 enviar = 0;
int8 contador = 0,cont;
#INT_RB
void lectura_encoder(void)
{
int8 XXX;
if(encoder_A != est_ant_1)
{
if(encoder_A){if(!encoder_B){encoder++;}else{encoder--;}}//
else {if(encoder_B){encoder++;}else{encoder--;}}//
}
else if (encoder_B != est_ant_2)
{
if(encoder_B){if(encoder_A){encoder++;}else{encoder--;}}//
else {if(!encoder_A){encoder++;}else{encoder--;}}//
}
est_ant_1 = encoder_A;
est_ant_2 = encoder_B;
flag_cambio_encoder = 1;
XXX = input_b();
}
#INT_TBE
void tx (void)
{
if(bufer[cont])
{
tx_reg = bufer[cont++];
}
else
{
disable_interrupts(INT_TBE);
}
}
#INT_TIMER1
void tmer1(void)
{
set_timer1(valor);
if(++contador > 10)
{
contador = 0;
enviar = 1;
}
}
void main() {
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //CONFIGURACION DE TIMER1
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_RB);
enable_interrupts(global); //ATIVACION DE INTERRUPCION GENERAL
set_tris_b (0b11111011); //PUERTO B SALIDAS
valor = 3040;
set_timer1(valor);
while(true)
{
if(enviar)
{
sprintf(bufer
,"@%6lu%c",encoder
,13); cont = 0;
tx_reg = bufer[cont++];
enable_interrupts(INT_TBE);
enviar = 0;
}
}//
}//