Buenas noches Foro.
Bueno, aquí pongo mi primer programa para que deis vuestra opinión y me indiquéis los posibles errores y lo que se podría mejorar.
Se trata de un lector de mandos a distancias RC5, en este programa solo pretendo comprender el concepto de lectura de este tipo de mandos. Las temporizaciones usadas en el no son las reales, las he usado solo para facilitar la depuración en el MPLAB. En estos mandos el estado se transmiten con un pulso bajo y otro alto para el bit 1 y al contrario para el bit 0, el pulso de START esta compuesto de dos bit 1 consecutivos. Es la siguiente direccion se encuentra informacion sobre estos mandos.
http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htmEn fin, espero vuestra opinión.
Saludos.
LIST P=16F84A
include "P16F84.INC"
contador EQU 0X0E
ONE EQU B"00000001"
ZERO EQU B"00000010"
bit_1 EQU 0X11
bite EQU 0X12
bit EQU 0X13
DATO EQU 0X14
org 0X00
goto inicio
org 0x04
nop
inicio
bsf STATUS,5
movlw b"01000000"
movwf OPTION_REG
movlw b"00000001"
movwf TRISB
movlw b"00000000"
movwf TRISA
bcf STATUS,5
movlw b"00000000"
movwf INTCON
clrf bit
clrf bite
clrf bit_1
read
btfsc PORTB,0
goto read
call timer_1
btfsc PORTB,0
goto read
call timer
btfss PORTB,0
goto read
call lee_bit
btfss bit_1,0
goto bad_data
call lee_bite
movlw DATO
movwf FSR
movf bite,w
movwf INDF
movwf PORTA
CALL lee_bite
INCF FSR+1,F
MOVF bite,W
movwf INDF
movwf PORTB
goto fin
lee_bit
call timer
btfsc PORTB,0
bsf STATUS,0
rlf bit,F
call timer
btfsc PORTB,0
bsf STATUS,0
rlf bit,F
call compare
movwf bit_1
return
compare
clrw
movlw ONE
xorwf bit,F
btfsc STATUS,2
retlw d"1"
movlw ZERO
xorwf bit,F
btfsc STATUS,2
retlw d"0"
goto bad_data
lee_bite
movlw d"6"
movwf contador
loop
call lee_bit
btfsc bit_1,0
bsf STATUS,C
rrf bite,F
decfsz contador,F
goto loop
return
bad_data
clrf bit
clrf bite
clrf bit_1
bcf INTCON,2
bcf STATUS,0
goto read
timer_1
movlw d"120" ;temporizacion de medio ciclo
movwf TMR0
timer
btfss INTCON,2
goto timer
movlw d"240" ;temporizacion de ciclo completo
movwf TMR0
bcf INTCON,2
bcf STATUS,0
return
fin
nop
nop
end