//***************************************************
// CCS Compiler// Receptor IR (código RC5 de Philips)
//***************************************************
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // Los Fuses de siempre
#use delay(clock=4000000) // Oscilador a 4 Mhz
// Ojo a la libreria de LCD
#include <lcd1.c>
// selecciona la entrada del sensor IR
#define REC_IR PIN_B0
// ojo hay que ver donde se conecta el LCD
main(){
// define un bit
int1 bit;
// define enteros de 8 bits
int i, nbit, error;
byte buffer[2];
set_tris_c(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas
// inicializa el lcd y pone un mensaje
lcd_init();
printf(lcd_putc,"\fReceptor IR:");
lcd_gotoxy(1,2);
printf(lcd_putc,"RC5 de PHILIPS\n");
delay_ms(2000);
// El sensor receptor invierte el código
// RC5 del emisor (mando a distancia)
// bucle de trabajo
while(1)
{
buffer[0]=0; // pone a cero el primer Byte
buffer[1]=0; // pone a cero el segundo Byte
error=0;
nbit=0;
i=0;
while(input(REC_IR)==1);
// Espera al 1er bit de START (flanco de bajada) del receptor IR
delay_us(444);
// Se posiciona en el medio
// el codigo son 13 Bits ( 2 de start + 5 direccion + 6 comando)
while((nbit++ != 13) && (error == 0)) // 2º bit de START + 1 bit TOGGLE
{
// 5 bits DIR + 6 bits COMANDO
// nbit varía de 0 a 12 = 13 bits
delay_us (889);
// Mide en el primer semiperiodo del
// bit, para que invierta el código y
// dé el original RC5 del emisor
if(input(REC_IR)==0)
{
delay_us (889);
if(input(REC_IR) != 1)
error=1;
bit=0; // Es un 0
}
else
{
delay_us(889);
if (input(REC_IR) != 0)
error=1;
bit=1; // Es un 1
}
shift_left(buffer,2,bit); // buffer=buffer[0], 2·8=16bits, bit=0 ó 1
}
if(error) printf(lcd_putc,"\fError\n");
else printf(lcd_putc,"\f%x %x Comando %d\n",buffer[1],buffer[0],buffer[0]);
}
}
[end code]
Esto no me funciona y no se porque, no me lee nada en el LCD, ningun dato del IR, aunque los pulsos llegan bien, lo he comprobado sacandolos por otro pin del pic segun llegan y con el osciloscopio
// Explicacion del Protocolo RC5
// 1 = 899 Us salida a 0 y 899 useg salida a 1
// (un flanco de subida a mitad de un pulso de 1778 useg de duracion es un 1)
// 0 = 899 Us salida a 1 y 899 useg salida a 0
// (un flanco de bajada a mitad de un pulso de 1778 useg de duranciones un 0)
// Como el receptor IR necesita una modulacion de 38 Khz se usa el PWM para generar la modulacion
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
int duty = 12; // ajusta el ciclo del oscilador
int tempo = 25; // ajusta la frecuencia del oscilador, subir el valor baja la frecuencia
// FUNCION DE ENVIO DE PULSOS
// Genera los pulsos del protocolo RC5 para cada bit a enviar
// Genera los pulsos de longitud determinada al protocolo RC5
// y los flancos de subida o bajada correspondientes
void enviaIR(int1 bit) // envia un bit en el protocolo RC5
{
if(bit==1) // envia un 1
{
setup_ccp2(CCP_OFF); // Desactivo CCP2 (38 Khz)
delay_us(889); // espera 889 useg
setup_ccp2(CCP_PWM); // Activo CCP2 (38 khz)
delay_us(889); // espera 889 useg
}
else // envia un 0
{
setup_ccp2(CCP_PWM); // Desactivo CCP2 (38 khz)
delay_us(889); // espera 889 useg
setup_ccp2(CCP_OFF); // Activo CCP2 (38 khz)
delay_us(889); // espera 889 useg
}
}
void main()
{
int x; // variable auxiliar
// Hay que ajustar estos valores al codigo de RC5
// y sincronizarlo con el receptor que debe tener la misma address
// y actuar segun los mismos commands
// PROTOCOLO RC5
// dos bits de start a 1 y uno mas 0
// + cinco bits de address
// + seis bits de command
// los restantes se ignoran, pero el ultimo debe ser 0 para dejar desactivado
// el oscilador al finalizar el comando
// La direccion 00001 es la direccion de TV2
// el comando 000001 corresponde a la tecla 1 del mando a distancia RC5
// el comando 000010 corresponde a la tecla 2 del mando a distancia RC5
// el comando 000011 corresponde a la tecla 3 del mando a distancia RC5
// el comando 000100 corresponde a la tecla 4 del mando a distancia RC5
// el comando 000101 corresponde a la tecla 5 del mando a distancia RC5
char comando0 =0b1100000100000100;
char comando1 =0b1100000100001000;
char comando2= 0b1100000100001100;
char comando3= 0b1100000100010000;
char comando4= 0b1100000100010100;
setup_ccp2(CCP_PWM); // Configura CCP2 como PWM
setup_timer_2(T2_DIV_BY_1,tempo,1); // f=38KHz (t = 26us)
set_pwm2_duty(duty); // Determina tiempo en alto
// Se puede anular la siguiente linea de codigo si
// se quiere comprobar la frecuencia del oscilador
// ya que este estara oscilando fijo a 38 Khz
// hasta que se pulse la primera tecla
setup_ccp2(CCP_OFF); // desactiva inicialmente el oscilador de 38 Khz
do
{
// transmision del dato correspondiente al pulsador activado
// activaria RTCC segun comando RC5
if(!input(PIN_A0))
for(x=0;x<14;x++) // solo usas 13 bits por comando RC5
enviaIR(bit_test(comando0,x));
if(!input(PIN_A1))
for(x=0;x<14;x++)
enviaIR(bit_test(comando1,x));
if(!input(PIN_A2))
for(x=0;x<14;x++)
enviaIR(bit_test(comando2,x));
if(!input(PIN_A3))
for(x=0;x<14;x++)
enviaIR(bit_test(comando3,x));
if(!input(PIN_A4))
for(x=0;x<14;x++)
enviaIR(bit_test(comando4,x));
delay_ms(10); // retardo entre el envio de un comando y el siguiente
// si se deja pulsado un pulsador fijo
}while (TRUE);
}
include "modedefs.bas"
define OSC 10
CMCON=7
TRISB=%11111111
B0 var byte
inicio:
select case PORTB
case %00001110
SERout PORTA.1,N1200,[0,"F"]
case %00001101
serout PORTA.1,N1200,[0,"B"]
case %00001011
serout PORTA.1,N1200,[0,"L"]
case %00000111
serout PORTA.1,N1200,[0,"R"]
case %00001111
serout PORTA.1,N1200,[0,"P"]
end select
goto inicio
endinclude "modedefs.bas"
define OSC 10
B0 var byte
TRISB=%11000000
loop:
SERIN PORTC.0,N1200,B0
select case B0
case "F"
gosub adelante
case "B"
gosub atras
case "L"
gosub izquierda
case "R"
gosub derecha
case "P"
gosub parar
end select
goto loop
adelante:
high 0:low 1:high 2
high 3:low 4:high 5
return
atras:
high 0:high 1:low 2
high 3:high 4:low 5
return
izquierda:
high 0:low 1:high 2
high 3:high 4:low 5
return
derecha:
high 3:low 4:high 5
high 0:high 1:low 2
return
parar:
low 0:low 1:low 2
low 3:low 4:low 5
return
end
;Bloque de declaraciones y bla bla blah
; Nuestro formato de letras se llama codigo IEP el quebra cocos, es de 5 bits
;00000 nulo
;00001 A
;00010 B
;00011 C
;00100 D
;00101 E
;00110 F
;00111 G
;01000 H
;01001 I
;01010 J
;01011 K
;01100 L
;01101 M
;01110 N
;01111 ñ N_
;10000 O
;10001 P
;10010 Q
;10011 R
;10100 S
;10101 T
;10110 U
;10111 V
;11000 W
;11001 X
;11010 Y
;11011 Z
;11100 GUION BAJO _
;11101 <
;11110 >
;11111 secuencia de prueba
#INCLUDE <p18F4550.inc>
LECTURA EQU 0x0050 ;Variable de estado
LECTURA_PRUEBA EQU 0x0055 ;Variable de estado
temp EQU 0x0054
temp_retraso EQU 0x0051
temp2_retraso EQU 0x0052
temp3_retraso EQU 0x0053
Ind_Buf EQU 0x00 ; Contador de número de datos copiados
Buf_Dat EQU 0x20 ; Bufer de recepción/transmisión
ORG 0x00 ;Vectorizacion
; GOTO inicio
;------------------------------------------
. BCF INTCON,7 ;DESACTIVAR INTERRUPCIONES
BCF WDTCON,0 ;dESACTIVAR WDT
MOVLW b'00000000' ;timer 0 apagado
MOVWF T0CON ;
;registros de interrupciones
BCF INTCON,7 ;deshabilitar interrupciones
; configurar puertos
CLRF PORTB ; Initialize LATB by clearing output data latches
CLRF LATB ; Alternate method to clear output data latches
MOVLW 0Eh ; Set RB<4:0> as
MOVWF ADCON1 ; digital I/O pins (required if config bit PBADEN is set)
MOVLW 0xFF ; Value used to initialize data direction
MOVWF TRISB ; Set RB<3:0> as inputs RB<5:4> as outputs RB<7:6> as inputs
CLRF PORTD
CLRF LATD
MOVLW 0x00 ;d SALIDA DE MATRIZ DE LEDS
MOVWF TRISD
CLRF PORTC
CLRF LATC
MOVLW 0xFE ;C configuramos primero para leer si hay cambios
MOVWF TRISC ;en las entradas de transmision, si los hay se va
;11111110 ;al codigp para recivir datos,
; para entrar en modo de transmision, al haber 1 en
; rb5 se pasa al codigo de transmision que debera de cargar
; MOVLW b'11111100' a TRISC
;==========================================================================================
;=========antes de hacer algo primero debe de comparar si estara como transmisor o receptor
;==========================================================================================
inicio:
;goto secuencia_prueba
;BTG LATC,0,0
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
;goto LETRA_B
CALL transmisor
;BTG LATC,2,0
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
;goto LETRA_A
GOTO receptor
GOTO inicio ; aqui hay un ciclo infinito hasta que se precione B5 o reciba por primera vez
;============================================
;============TERMINA LA RECEPCION============
;============================================
;==PRUEBA PARA SACAR EL DATO QUE MANDAMOS EN EL PUERTO B
loop_infinito
goto loop_infinito
;==PRUEBA PARA SACAR EL DATO QUE MANDAMOS EN EL PUERTO B
; *****************
; *****************
; **TRANSMISOR*****
; *****************
; *****************
transmisor: ;C0=CLK CI=INFO
BCF LATC,0
CLRF LECTURA_PRUEBA ;BORRAME<,----------------
BSF LATC,0 ;c0=CLK=1 ESTO INDICARA AL RECEPTOR QUE EMEPIECE A RECIVIR, RECIBIRA DESPUES DEL SIGUEINTE PULSO ALTO
BCF TRISC,1 ;C1=OUT --> C1=INFO ; EVENTO A- ESTO PONE cIN COMO SALIA PARA TRANSMITIR INFO, AL FINALIZAR LA TRANSMISION DEBE REGRESAR A C1=OUT
CALL retraso_
BCF LATC,0 ;C0=O clk=0
BCF LATC,1 ; info=0
CALL retraso_
;LECTURA DE B0
BTFSC PORTB,0,0 ;leer B0 SI B0=1 C1=1, SI NO LO MANTIEN EN SU ESTADO ANTERIOR, OSEA 0
BSF LATC,1 ;C1=1 - INFO= 1
BSF LATC,0 ;C0=1 - CLK =1
CALL retraso_ ; aqui daremos u pequeño intervalo de tiempo para dalr tiempo al receptor en
; leer el codigo en c0 e interpretar el cambio de CLK
BCF LATC,0 ; CLK=0
BCF LATC,1 ; INFO=0----se borra para aplicar el criterio de coparacion siguietne
CALL retraso_
BTFSC PORTB,0
BSF LECTURA_PRUEBA,0
;LECTURA DE B1
BTFSC PORTB,1,0 ;leer B1 SI B1=1 C1=1, SI NO LO MANTIEN EN SU ESTADO ANTERIOR, OSEA 0
BSF LATC,1 ;C1=1 - INFO= 1
BSF LATC,0 ;C0=1 - CLK =1
CALL retraso_ ; aqui daremos u pequeño intervalo de tiempo para dalr tiempo al receptor en
; leer el codigo en c0 e interpretar el cambio de CLK
BCF LATC,0 ; CLK=0
BCF LATC,1 ; INFO=0----se borra para aplicar el criterio de coparacion siguietne
CALL retraso_
BTFSC PORTB,1
BSF LECTURA_PRUEBA,1
;LECTURA DE B2
BTFSC PORTB,2,0 ;leer B2 SI B2=1 C1=1, SI NO LO MANTIEN EN SU ESTADO ANTERIOR, OSEA 0
BSF LATC,1 ;C1=1 - INFO= 1
BSF LATC,0 ;C0=1 - CLK =1
CALL retraso_ ; aqui daremos u pequeño intervalo de tiempo para dalr tiempo al receptor en
; leer el codigo en c0 e interpretar el cambio de CLK
BCF LATC,0 ; CLK=0
BCF LATC,1 ; INFO=0----se borra para aplicar el criterio de coparacion siguietne
CALL retraso_
BTFSC PORTB,2
BSF LECTURA_PRUEBA,2
;LECTURA DE B3
BTFSC PORTB,3,0 ;leer B3 SI B3=1 C1=1, SI NO LO MANTIEN EN SU ESTADO ANTERIOR, OSEA 0
BSF LATC,1 ;C1=1 - INFO= 1
BSF LATC,0 ;C0=1 - CLK =1
CALL retraso_ ; aqui daremos u pequeño intervalo de tiempo para dalr tiempo al receptor en
; leer el codigo en c0 e interpretar el cambio de CLK
BCF LATC,0 ; CLK=0
BCF LATC,1 ; INFO=0----se borra para aplicar el criterio de coparacion siguietne
CALL retraso_
BTFSC PORTB,3
BSF LECTURA_PRUEBA,3
;LECTURA DE B4
BTFSC PORTB,4,0 ;leer B4 SI B4=1 C1=1, SI NO LO MANTIEN EN SU ESTADO ANTERIOR, OSEA 0
BSF LATC,1 ;C1=1 - INFO= 1
BSF LATC,0 ;C0=1 - CLK =1
CALL retraso_ ; aqui daremos u pequeño intervalo de tiempo para dalr tiempo al receptor en
; leer el codigo en c0 e interpretar el cambio de CLK
BCF LATC,0 ; CLK=0
BCF LATC,1 ; INFO=0----se borra para aplicar el criterio de coparacion siguietne
CALL retraso_
BTFSC PORTB,4
BSF LECTURA_PRUEBA,4
BSF TRISC,1 ;C1=INFO --> C1=IN ; EVENTO B- ESTO PONE cINFO COMO entrada PARA detectar una transmision
;proveniente de otro micro, AL zomenzar LA TRANSMISION DEBE cambiar C0=OUT-->C0=info recivida (evendo 'c')
;====================================
; FIN DE LA TRANSMISION
;====================================
; MOVFF LECTURA_PRUEBA,LATD; BORRAME<<<<<<<<<<<<<<<<<---------------
return ; REGRESARA DE DONDE LE HABLARON
;============================================
;============INICIA LA RECEPCION=============
;============================================
receptor: ;c0=info c1= clk
BSF TRISC,0 ; co=INFO OUT SE PONE EN IN Y RECIBIRA LA INFORMACION (evento 'c'), al temrinar debe de regresar c0=Cinfo --> C0=Cout
CLRF LECTURA
BTFSC PORTC,1,0 ;leer c1=clk y SALTARA hasta que clk=0 <<<salta si es cero>>>
goto receptor
; EMPIEZA CICLO PARA DIGITO 0
BTFSS PORTC,1,0 ;leer c1=clk SI ES 1 salta
BRA $-1
;LECTURA0
BTFSC PORTC,0,0 ;leer c0=INFO SI ES 1
BSF LECTURA,0 ;ACTIVA LECTURA0
BTFSC PORTC,1,0 ;leer c1=clk SI ES 0 SALTA
BRA $-1
BTFSS PORTC,1,0 ;leer c1=clk SI ES 1 SALTA
BRA $-1
; FINALIZA CICLO PARA DIGITO 0
;LECTURA1
BTFSC PORTC,0,0 ;leer c0=INFO SI ES 1
BSF LECTURA,1 ;ACTIVA LECTURA1
BTFSC PORTC,1,0 ;leer c1=clk SI ES 0 SALTA
BRA $-1
BTFSS PORTC,1,0 ;leer c1=clk SI ES 1 SALTA
BRA $-1
;LECTURA2
BTFSC PORTC,0,0 ;leer c0=INFO SI ES 1
BSF LECTURA,2 ;ACTIVA LECTURA2
BTFSC PORTC,1,0 ;leer c1=clk SI ES 0 SALTA
BRA $-1
BTFSS PORTC,1,0 ;leer c1=clk SI ES 1 SALTA
BRA $-1
;LECTURA3
BTFSC PORTC,0,0 ;leer c0=INFO SI ES 1
BSF LECTURA,3 ;ACTIVA LECTURA3
BTFSC PORTC,1,0 ;leer c1=clk SI ES 0 SALTA
BRA $-1
BTFSS PORTC,1,0 ;leer c1=clk SI ES 1 SALTA
BRA $-1
;LECTURA4
BTFSC PORTC,0,0 ;leer c0=INFO SI ES 1
BSF LECTURA,4 ;ACTIVA LECTURA4
BTFSC PORTC,1,0 ;leer c1=clk SI ES 0 SALTA
BRA $-1
BCF TRISC,0
;============================================
;============TERMINA LA RECEPCION============
;============================================
MOVFF LECTURA,LATD
; goto loop_infinito; BORRAME<<<<<<<<<<<<<<<<<---------------
;====================
;====================DISQUE TABLA DE COMPARACION===================
;====================
; PARA LETRA A
MOVLW 0x01
CPFSGT LECTURA ;Compara FILE con WREG, salto si FILE > WREG SALTA
GOTO LETRA_A ;Si LECTURA NO FUERA > 0x01 (en este caso no salta porque 01 = 01)
; no salta y me manda a A
; PARA LETRA B
MOVLW 0x02
CPFSGT LECTURA ;Compara FILE con WREG, salto si FILE > WREG SALTA
GOTO LETRA_B ;Si LECTURA NO FUERA > 0x02 (en este caso no salta porque 02 = 02)
; no salta y me manda a B
MOVLW 0x03
CPFSGT LECTURA
GOTO LETRA_C
MOVLW 0x04
CPFSGT LECTURA
GOTO LETRA_D
MOVLW 0x05
CPFSGT LECTURA
GOTO LETRA_E
MOVLW 0x06
CPFSGT LECTURA
GOTO LETRA_F
MOVLW 0x07
CPFSGT LECTURA
GOTO LETRA_G
MOVLW 0x08
CPFSGT LECTURA
GOTO LETRA_H
MOVLW 0x09
CPFSGT LECTURA
GOTO LETRA_I
MOVLW 0x0A
CPFSGT LECTURA
GOTO LETRA_J
MOVLW 0x0B
CPFSGT LECTURA
GOTO LETRA_K
MOVLW 0x0C
CPFSGT LECTURA
GOTO LETRA_L
MOVLW 0x0D
CPFSGT LECTURA
GOTO LETRA_M
MOVLW 0x0E
CPFSGT LECTURA
GOTO LETRA_N
MOVLW 0x0F
CPFSGT LECTURA
GOTO LETRA_N_
MOVLW 0x10
CPFSGT LECTURA
GOTO LETRA_O
MOVLW 0x11
CPFSGT LECTURA
GOTO LETRA_P
MOVLW 0x12
CPFSGT LECTURA
GOTO LETRA_Q
MOVLW 0x13
CPFSGT LECTURA
GOTO LETRA_R
MOVLW 0x14
CPFSGT LECTURA
GOTO LETRA_S
MOVLW 0x15
CPFSGT LECTURA
GOTO LETRA_T
MOVLW 0x16
CPFSGT LECTURA
GOTO LETRA_U
MOVLW 0x17
CPFSGT LECTURA
GOTO LETRA_V
MOVLW 0x18
CPFSGT LECTURA
GOTO LETRA_W
MOVLW 0x19
CPFSGT LECTURA
GOTO LETRA_X
MOVLW 0x1A
CPFSGT LECTURA
GOTO LETRA_Y
MOVLW 0x1B
CPFSGT LECTURA
GOTO LETRA_Z
MOVLW 0x1C
CPFSGT LECTURA
GOTO GUION_BAJO
MOVLW 0x1D
CPFSGT LECTURA
GOTO MENOR_QUE
MOVLW 0x1E
CPFSGT LECTURA
GOTO MAYOR_QUE
MOVLW 0x1F
CPFSGT LECTURA
GOTO SECUENCIA_DE_PRUEBA
LETRA_A:
MOVLW b'11011110'
MOVWF LATD
MOVLW b'10110100'
MOVWF LATD
MOVLW b'01111110'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_A
LETRA_B:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01101110'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_B
LETRA_C:
MOVLW b'11001110'
MOVWF LATD
MOVLW b'10110001'
MOVWF LATD
MOVLW b'01110001'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_C
LETRA_D:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10110001'
MOVWF LATD
MOVLW b'01101110'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_D
LETRA_E:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01110001'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_E
LETRA_F:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10110100'
MOVWF LATD
MOVLW b'01100001'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_F
LETRA_G:
MOVLW b'11001110'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01111101'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_G
LETRA_H:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10100100'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_H
LETRA_I:
MOVLW b'11010001'
MOVWF LATD
MOVLW b'10111111'
MOVWF LATD
MOVLW b'01110001'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_I
LETRA_J:
MOVLW b'11101000'
MOVWF LATD
MOVLW b'10100001'
MOVWF LATD
MOVLW b'01101111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_J
LETRA_K:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10101010'
MOVWF LATD
MOVLW b'01110001'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_K
LETRA_L:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10100001'
MOVWF LATD
MOVLW b'01110000'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_L
LETRA_M:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10101100'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_M
LETRA_N:
MOVLW b'11011110'
MOVWF LATD
MOVLW b'10100100'
MOVWF LATD
MOVLW b'01111100'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_N
LETRA_N_:
MOVLW b'11011101'
MOVWF LATD
MOVLW b'10110100'
MOVWF LATD
MOVLW b'01111101'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_N_
LETRA_O:
MOVLW b'11001110'
MOVWF LATD
MOVLW b'10110001'
MOVWF LATD
MOVLW b'01101110'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_O
LETRA_P:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10110100'
MOVWF LATD
MOVLW b'01100111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_P
LETRA_Q:
MOVLW b'11000010'
MOVWF LATD
MOVLW b'10110100'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_Q
LETRA_R:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10110100'
MOVWF LATD
MOVLW b'01111010'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_R
LETRA_S:
MOVLW b'11010010'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01101001'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_S
LETRA_T:
MOVLW b'11000001'
MOVWF LATD
MOVLW b'10111111'
MOVWF LATD
MOVLW b'01100001'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_T
LETRA_U:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10100001'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_U
LETRA_V:
MOVLW b'11001111'
MOVWF LATD
MOVLW b'10100001'
MOVWF LATD
MOVLW b'01101111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_V
LETRA_W:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10100110'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_W
LETRA_X:
MOVLW b'11011011'
MOVWF LATD
MOVLW b'10100100'
MOVWF LATD
MOVLW b'01111011'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_X
LETRA_Y:
MOVLW b'11000111'
MOVWF LATD
MOVLW b'10100111'
MOVWF LATD
MOVLW b'01100111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_Y
LETRA_Z:
MOVLW b'11011001'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01110011'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO LETRA_Z
;==============CARACTERES==========
GUION_BAJO:
MOVLW b'11010000'
MOVWF LATD
MOVLW b'10100001'
MOVWF LATD
MOVLW b'01100000'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO GUION_BAJO
MENOR_QUE:
MOVLW b'11000100'
MOVWF LATD
MOVLW b'10101010'
MOVWF LATD
MOVLW b'01110001'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO MENOR_QUE
MAYOR_QUE:
MOVLW b'11010001'
MOVWF LATD
MOVLW b'10101010'
MOVWF LATD
MOVLW b'01100100'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO MAYOR_QUE
;==============numeros=============
NUMERO_0:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10110001'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_0
NUMERO_1:
MOVLW b'11010010'
MOVWF LATD
MOVLW b'10111111'
MOVWF LATD
MOVLW b'01110000'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_1
NUMERO_2:
MOVLW b'11011101'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01110111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_2
NUMERO_3:
MOVLW b'11010101'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_3
NUMERO_4:
MOVLW b'11000111'
MOVWF LATD
MOVLW b'10100100'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_4
NUMERO_5:
MOVLW b'11010010'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01111101'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_5
NUMERO_6:
MOVLW b'11011111'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01111101'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_6
NUMERO_7:
MOVLW b'11000001'
MOVWF LATD
MOVLW b'10110100'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_7
NUMERO_8:
MOVLW b'11011011'
MOVWF LATD
MOVLW b'10110101'
MOVWF LATD
MOVLW b'01111011'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_8
NUMERO_9:
MOVLW b'11000111'
MOVWF LATD
MOVLW b'10110100'
MOVWF LATD
MOVLW b'01111111'
MOVWF LATD
CLRF LATD
BTFSC PORTC,1,0 ;leer C1 si es 0 salta
GOTO receptor
BTFSC PORTB,7,0 ;leer B5 si es 0 salta
CALL transmisor
GOTO NUMERO_9
LETRA_ESPACIO:
LETRA_SIGNO:
LETRA_NUMERO:
LETRA_FIN:
retraso:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
return
;btfss LATD,1,0 ;CON D1=1 EJECUTA C
SECUENCIA_DE_PRUEBA: ; esto enciende un led a la vez
MOVLW b'11000001'
MOVWF LATD
call retraso_
MOVLW b'11000010'
MOVWF LATD
call retraso_
MOVLW b'11000100'
MOVWF LATD
call retraso_
MOVLW b'11001000'
MOVWF LATD
call retraso_
MOVLW b'11010000'
MOVWF LATD
call retraso_
MOVLW b'10110000'
MOVWF LATD
call retraso_
MOVLW b'10101000'
MOVWF LATD
call retraso_
MOVLW b'10100100'
MOVWF LATD
call retraso_
MOVLW b'10100010'
MOVWF LATD
call retraso_
MOVLW b'10100001'
MOVWF LATD
call retraso_
MOVLW b'01100001'
MOVWF LATD
call retraso_
MOVLW b'01100010'
MOVWF LATD
call retraso_
MOVLW b'01100100'
MOVWF LATD
call retraso_
MOVLW b'01101000'
MOVWF LATD
call retraso_
MOVLW b'01110000'
MOVWF LATD
call retraso_
; BTFSC LATC,1,0 ;leer C1 si es 0 salta
; GOTO receptor
; BTFSC LATB,5,0 ;leer B5 si es 0 salta
; CALL transmisor
CLRF LATD
GOTO inicio
;==========rutina de retrasos=============
retraso_:
movlw 0x05
movwf temp3_retraso
decfsz temp_retraso,1,0
; goto retraso ;alta frec
goto retraso1 ;baja frec
movlw 0xFF
movwf temp_retraso
return
retraso1:
decfsz temp2_retraso,1,0
; return
goto retraso1 ; baja frec segun yo
; goto retraso2 ;BIEN
movlw 0xFF
movwf temp2_retraso
goto retraso_
retraso2:
decfsz temp3_retraso,1,0
; return
goto retraso2
movlw 0x05
movwf temp3_retraso
goto retraso1
;------------------------------------------
Fin_intT0:
RETFIE
END
;------------------------------------------