MLO, la verdad yo nunca utilizo ese registro, hasta donde tengo entendido esta palabra de configuración la carga el programador, ahora si el debug estuviera activo no afectaría también el rb7 ?, cosa que no sucede el rb7 trabaja bien.
De todos modos les reitero mis agradecimientos, en última instancia cambio el rb6 por el rb0 ya que de esta forma me funciona bién, ya lo he probado.
mil gracias.
este es el código:
;==============================================================================
org 00
goto inicio
;==============================================================================
org 0x04 ;VECTOR DE LA INTERRUPCION POR
;COMUNICACION
movwf res_w
movf status,w
movwf res_status
bcf status,rp0
;==================
call recibe
call decodifica
;==================
bcf intcon,2
movf res_status,w
movwf status
movf res_w,w
retfie
;==============================================================================
;==============================================================================
recibe bsf status,rp0 ;RUTINA GENERAL DE RECEPCION DE DATOS
bsf trisa,4
bcf status,rp0
;==================
clrf reg_comunica1
clrf reg_comunica2
movlw d'16'
movwf conta1
call t_100Us
call t_100Us
;==================
rec_otro_bit call t_400Us
btfss porta,4
bcf status,c
btfsc porta,4
bsf status,c
rlf reg_comunica1,f
rlf reg_comunica2,f
decfsz conta1,f
goto rec_otro_bit
call t_100Us
call t_100Us
call t_100Us
movlw h'ff'
movwf tmr0
bcf intcon,2
return
;==============================================================================
;==============================================================================
decodifica btfss reg_comunica2,7 ;RUTINA QUE DECODIFICA EL DATO QUE LE
return ;LLEGA DE LOS LED
movf reg_comunica1,w
movwf reg_led1
movf reg_comunica2,w
movwf reg_led2
bsf bandera,3 ;BANDERA QUE INDICA QUE EL MICRO
;DE LA TARJETA DE POTENCIA YA ENVIO
return
;==============================================================================
t_100Us movlw d'23' ;RETARDO DE 100 MICRO-SEGUNDOS
movwf conta
nop
decfsz conta,f
goto $-2
nop
nop
nop
return
;==============================================================================
t_400Us movlw d'98' ;RETARDO DE 400 MICRO-SEGUNDOS
movwf conta
nop
decfsz conta,f
goto $-2
nop
nop
nop
return
;==============================================================================
t_1ms movlw d'250'
movwf conta3
nop
decfsz conta3,f
goto $-2
return
;==============================================================================
t_100ms movlw d'250'
movwf conta3
call t_400Us
decfsz conta3,f
goto $-2
return
;==============================================================================
;==============================================================================
ver_solicitud btfss bandera,3 ;solo envia si ha recibido datos
goto $-1
bcf bandera,3
movlw d'80' ;RUTINA QUE PREGUNTA SI HAY OTRO
movwf conta3 ;INTEGRADO SOLICITANDO COMUNICACION
btfss porta,4
goto $-3
decfsz conta3,f
goto $-3
return
;==============================================================================
enviar_pre movwf respaldo1
bsf respaldo1,5 ;BIT QUE INDICA TECLA PRESIONADA
goto $+2
enviar_apa movwf respaldo1
;==================
call ver_solicitud ;SE PREGUNTA SI HAY SOLICITUD DE
;COMUNICACION
movlw d'5' ;TIEMPO DE 5 ms ANTES DE ENVIAR EL DATO
movwf conta1
call t_1ms
decfsz conta1,f
goto $-2
;==================
bcf intcon,7
bsf status,rp0 ;PUERTO COMO SALIDA
bcf trisa,4
bcf status,rp0
bsf porta,4
;==================
movf respaldo1,w
movwf reg_comunica1
movf respaldo2,w
movwf reg_comunica2
movlw b'01010000' ;CODIGO QUE INDICA QUE TRANSMITE EL MICRO
iorwf reg_comunica2,f ;DE LOS MANDOS
;==================
movlw d'16'
movwf conta1
;==================
bcf serial ;PULSO DE INICIO
call t_400Us
;==================
env_otro_bit rlf reg_comunica1,f
rlf reg_comunica2,f
btfss status,c
bcf serial
btfsc status,c
bsf serial
call t_400Us
decfsz conta1,f
goto env_otro_bit
;==================
bsf serial ;PULSO DE FINAL
bsf status,rp0
bsf trisa,4
bcf status,rp0
bcf intcon,2
bsf intcon,7
;==================
movlw h'ff'
movwf tmr0
return
;==============================================================================
;==============================================================================
acti_led btfss reg_led1,0 ;SE ACTIVA LED DE ESPALDAR
bsf led_esp
btfsc reg_led1,0
bcf led_esp
btfss reg_led1,1 ;SE ACTIVA LED DE PIES
bsf led_pie
btfsc reg_led1,1
bcf led_pie
btfss reg_led1,2 ;SE ACTIVA LED DE CAMA
bsf led_alt
btfsc reg_led1,2
bcf led_alt
btfss reg_led1,3 ;SE ACTIVA LED DE TREN
bsf led_tren
btfsc reg_led1,3
bcf led_tren
btfss reg_led1,4 ;SE ACTIVA LED LATERALIZACION
bsf led_late
btfsc reg_led1,4
bcf led_late
btfss reg_led1,5 ;SE ACTIVA LED DE SILLA
bsf led_silla
btfsc reg_led1,5
bcf led_silla
btfss reg_led1,6 ;SE ACTIVA LED DE ENFERMERA
bsf led_enf
btfsc reg_led1,6
bcf led_enf
btfss reg_led1,7 ;SE ACTIVA LED DE UPS
bsf led_ups
btfsc reg_led1,7
bcf led_ups
btfss reg_led2,0 ;SE ACTIVA LED DE ENCENDIDO
bsf led_enc
btfsc reg_led2,0
bcf led_enc
btfss reg_led2,1 ;SE ACTIVA LED DE TECLA
bsf led_tecla
btfsc reg_led2,1
bcf led_tecla
return
;=============================================================================
apa_banderas decfsz con_bande,f ;BASE DE TIEMPO DE 0.1 Sg PARA APAGAR LAS
return ;BANDERA DE LAS TECLAS
movlw d'45'
movwf con_bande
;==================
call apa_ban_ind
call apa_ban_dir
call apa_ban_enf
call apa_ban_blo
call apa_ban_auto
call apa_ban_cpr
call apa_ban_silla
call apa_ban_cont
call apa_ban_a_e
call apa_ban_d_e
call apa_ban_a_p
call apa_ban_d_p
call apa_ban_a_c
call apa_ban_d_c
call apa_ban_tren
call apa_ban_tren_i
call apa_ban_late_d
call apa_ban_late_i
return
;=============================================================================
apa_ban_env incf con_env,f ;pasados 2 ciclos apaga la bandera que
movlw d'2' ;sincroniza la comunicación
xorwf con_env,w
btfss status,z
return
clrf con_env
bcf bandera,3
return
;=============================================================================
apa_ban_ind btfsc bandera3,ind ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_ind,f ;SU CONTRARIA
return
bcf bandera1,ind
return
;======================================
apa_ban_dir btfsc bandera3,dir ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_dir,f ;SU CONTRARIA
return
bcf bandera1,dir
return
;======================================
apa_ban_enf btfsc bandera3,enf ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_enf,f ;SU CONTRARIA
return
bcf bandera1,enf
return
;======================================
apa_ban_blo btfsc bandera3,blo ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_blo,f ;SU CONTRARIA
return
bcf bandera1,blo
return
;======================================
apa_ban_auto btfsc bandera3,auto ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_auto,f ;SU CONTRARIA
return
bcf bandera1,auto
return
;======================================
apa_ban_cpr btfsc bandera3,cpr ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_cpr,f ;SU CONTRARIA
return
bcf bandera1,cpr
return
;======================================
apa_ban_silla btfsc bandera3,silla ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_silla,f ;SU CONTRARIA
return
bcf bandera1,silla
return
;======================================
apa_ban_cont btfsc bandera3,cont ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_cont,f ;SU CONTRARIA
return
bcf bandera1,cont
return
;======================================
apa_ban_a_e btfsc bandera4,a_e ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_a_e,f ;SU CONTRARIA
return
bcf bandera2,a_e
return
;======================================
apa_ban_d_e btfsc bandera4,d_e ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_d_e,f ;SU CONTRARIA
return
bcf bandera2,d_e
return
;======================================
apa_ban_a_p btfsc bandera4,a_p ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_a_p,f ;SU CONTRARIA
return
bcf bandera2,a_p
return
;======================================
apa_ban_d_p btfsc bandera4,d_p ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_d_p,f ;SU CONTRARIA
return
bcf bandera2,d_p
return
;======================================
apa_ban_a_c btfsc bandera4,a_c ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_a_c,f ;SU CONTRARIA
return
bcf bandera2,a_c
return
;======================================
apa_ban_d_c btfsc bandera4,d_c ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_d_c,f ;SU CONTRARIA
return
bcf bandera2,d_c
return
;======================================
apa_ban_tren btfsc bandera4,tren ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_tren,f ;SU CONTRARIA
return
bcf bandera2,tren
return
;======================================
apa_ban_tren_i btfsc bandera4,tren_i ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_tren_i,f ;SU CONTRARIA
return
bcf bandera2,tren_i
return
;======================================
apa_ban_late_d btfsc bandera6,lat_d ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_late_d,f ;SU CONTRARIA
return
bcf bandera5,lat_d
return
;======================================
apa_ban_late_i btfsc bandera6,lat_i ;TIEMPO QUE TARDA EN APAGAR LA BANDERA
return ;PARA HABILITAR NUEVAMENTE LA FUNCION Y
decfsz con_late_i,f ;SU CONTRARIA
return
bcf bandera5,lat_i
return
;==============================================================================
pre_ind btfss portb,5
btfsc bandera1,ind
return
bsf bandera1,ind
bsf bandera3,ind
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_ind
movlw d'0' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_ind btfss bandera3,ind
return
bcf bandera3,ind
movlw d'0' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_dir btfss portb,5
btfsc bandera1,dir
return
bsf bandera1,dir
bsf bandera3,dir
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_dir
movlw d'1' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_dir btfss bandera3,dir
return
bcf bandera3,dir
movlw d'1' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_enf btfss portb,5
btfsc bandera1,enf
return
bsf bandera1,enf
bsf bandera3,enf
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_enf
movlw d'2' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_enf btfss bandera3,enf
return
bcf bandera3,enf
movlw d'2' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_blo btfss portb,4
btfsc bandera1,blo
return
bsf bandera1,blo
bsf bandera3,blo
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_blo
movlw d'3' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_blo btfss bandera3,blo
return
bcf bandera3,blo
movlw d'3' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_auto btfss portb,5
btfsc bandera1,auto
return
bsf bandera1,auto
bsf bandera3,auto
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_auto
movlw d'4' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_auto btfss bandera3,auto
return
bcf bandera3,auto
movlw d'4' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_cpr btfss portb,4
btfsc bandera1,cpr
return
bsf bandera1,cpr
bsf bandera3,cpr
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_cpr
movlw d'5' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_cpr btfss bandera3,cpr
return
bcf bandera3,cpr
movlw d'5' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_silla btfss portb,4
btfsc bandera1,silla
return
bsf bandera1,silla
bsf bandera3,silla
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_silla
movlw d'6' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_silla btfss bandera3,silla
return
bcf bandera3,silla
movlw d'6' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_cont btfss portb,4
btfsc bandera1,cont
return
bsf bandera1,cont
bsf bandera3,cont
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_cont
movlw d'7' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_cont btfss bandera3,cont
return
bcf bandera3,cont
movlw d'7' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_a_e btfss portb,3
btfsc bandera2,a_e
return
bsf bandera2,a_e
bsf bandera4,a_e
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_a_e
movlw d'8' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_a_e btfss bandera4,a_e
return
bcf bandera4,a_e
movlw d'8' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_d_e btfss portb,3
btfsc bandera2,d_e
return
bsf bandera2,d_e
bsf bandera4,d_e
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_d_e
movlw d'9' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_d_e btfss bandera4,d_e
return
bcf bandera4,d_e
movlw d'9' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_a_p btfss portb,3
btfsc bandera2,a_p
return
bsf bandera2,a_p
bsf bandera4,a_p
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_a_p
movlw d'10' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_a_p btfss bandera4,a_p
return
bcf bandera4,a_p
movlw d'10' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_d_p btfss portb,3
btfsc bandera2,d_p
return
bsf bandera2,d_p
bsf bandera4,d_p
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_d_p
movlw d'11' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_d_p btfss bandera4,d_p
return
bcf bandera4,d_p
movlw d'11' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_a_c btfss portb,6
btfsc bandera2,a_c
return
bsf bandera2,a_c
bsf bandera4,a_c
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_a_c
movlw d'12' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_a_c btfss bandera4,a_c
return
bcf bandera4,a_c
movlw d'12' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_d_c btfss portb,6
btfsc bandera2,d_c
return
bsf bandera2,d_c
bsf bandera4,d_c
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_d_c
movlw d'13' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_d_c btfss bandera4,d_c
return
bcf bandera4,d_c
movlw d'13' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_tren btfss portb,6
btfsc bandera2,tren
return
bsf bandera2,tren
bsf bandera4,tren
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_tren
movlw d'14' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_tren btfss bandera4,tren
return
bcf bandera4,tren
movlw d'14' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_tren_i btfss portb,6
btfsc bandera2,tren_i
return
bsf bandera2,tren_i
bsf bandera4,tren_i
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_tren_i
movlw d'15' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_tren_i btfss bandera4,tren_i
return
bcf bandera4,tren_i
movlw d'15' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_lat_der btfss portb,7
btfsc bandera5,lat_d
return
bsf bandera5,lat_d
bsf bandera6,lat_d
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_late_d
movlw d'16' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_lat_der btfss bandera6,lat_d
return
bcf bandera6,lat_d
movlw d'16' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
pre_lat_izq btfss portb,7
btfsc bandera5,lat_i
return
bsf bandera5,lat_i
bsf bandera6,lat_i
movlw d'5' ;RETARDO DE ANTI-REBOTE
movwf con_late_i
movlw d'17' ;SE CARGA EL VALOR DE LA TECLA
call enviar_pre
return
;==================
apa_lat_izq btfss bandera6,lat_i
return
bcf bandera6,lat_i
movlw d'17' ;SE CARGA EL VALOR DE LA TECLA
call enviar_apa
return
;==============================================================================
;==============================================================================
teclado bcf portc,6
call t_400Us
btfsc portb,3
call apa_d_p
call pre_d_p
btfsc portb,4
call apa_cont
call pre_cont
btfsc portb,5
call apa_ind
call pre_ind
btfsc portb,6
call apa_tren_i
call pre_tren_i
btfsc portb,7
call apa_lat_izq
call pre_lat_izq
bsf portc,6
call t_100Us
;==============================
bcf portc,7
call t_400Us
btfsc portb,3
call apa_a_p
call pre_a_p
btfsc portb,4
call apa_blo
call pre_blo
btfsc portb,5
call apa_dir
call pre_dir
btfsc portb,6
call apa_tren
call pre_tren
btfsc portb,7
call apa_lat_der
call pre_lat_der
bsf portc,7
call t_100Us
;==============================
bcf portb,1
call t_400Us
btfsc portb,3
call apa_d_e
call pre_d_e
btfsc portb,4
call apa_silla
call pre_silla
btfsc portb,5
call apa_enf
call pre_enf
btfsc portb,6
call apa_d_c
call pre_d_c
;btfsc portb,7
bsf portb,1
call t_100Us
;==============================
bcf portb,2
call t_400Us
btfsc portb,3
call apa_a_e
call pre_a_e
btfsc portb,4
call apa_cpr
call pre_cpr
btfsc portb,5
call apa_auto
call pre_auto
btfsc portb,6
call apa_a_c
call pre_a_c
;btfsc portb,7
bsf portb,2
call t_100Us
;=======================================
call apa_banderas
call apa_ban_env
call acti_led
;=======================================
btfss bandera,0 ;EVENTOS QUE SE REALIZAN CADA
goto teclado ;0.5 SEGUNDOS
bcf bandera,0
;=======================================
btfss bandera,1 ;EVENTOS QUE SE REALIZAN CADA
goto teclado ;1 SEGUNDO
bcf bandera,1
;=======================================
goto teclado
;==============================================================================
;==============================================================================
inicio call t_1ms
bsf status,rp0
movlw 0x07
movwf adcon1
movlw b'11110000'
movwf trisa
movlw b'11111001'
movwf trisb
clrf trisc
movlw b'00111100' ;SE CONFIGURA EL TMR0
movwf option_reg
bcf status,rp0
movlw b'10100000'
movwf intcon
;==============================================================================
movlw b'11111111'
movwf porta
movwf portb
movwf portc
;==============================================================================
movlw 0x21 ;APARTIR DE QUE POSICION SE VA
movwf fsr ;A BORRAR LA RAM
movlw 0x4f ;NUMERO DE REGISTROS A BORRAR
movwf conta
borre clrf dir_ind ;BORRADO DE RAM
incf fsr,f
decfsz conta,f
goto borre
;==============================================================================
movlw h'ff'
movwf tmr0
goto teclado
;==============================================================================
;==============================================================================
;==============================================================================
end