TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: mmonterei en 01 de Diciembre de 2005, 17:00:00
-
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.htm
En 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
-
Antes de leer o de intentar semejante código, no podrias subirlo como .zip?
O al menos tener la delicadeza de enmarcar el código usando los tags [ code ] y [ / code ] ?
Y por supuesto usando tabulaciones en lo preferente de 12 o 14 espacios para leer el código con mayor facilidad
Saludos
-
Hola Maunix, la verdad es que empiezo en esto y no se exactamente que me quieres decir con lo de los [code]. Cuando escribi este mensaje me aparecia todo bien tabulado y al mostrarlo me aparece tal como lo ves y no se la causa.
Intentare averiguar como presentar correctamente los mensajes.
Un saludo