Hola a todos, soy novato en programación de pics y en mi programa uso lcd y tengo una rutina para controlarlo, pero no sé que problema tiene, pues al simularlo en proteus el lcd no me muestra nada. Cuento con tres rutinas de mansajes; uno que se muestra siempre y los otros dos cuando ocurre cierta interrupción. Por favor, si alguien encuentra el error me lo indica. Por si acaso estoy usando sólo un lcd 16x2 vt162b/b. Además como puedo hacer para que el mensaje que pongo en el lcd producto de la interrupción quede durante unos segundos habiendo acabado la interrupción? Postearé las rutinas de mensaje y los trozos donde se las llama.
Gracias
inte_rb47_9
movlw b'00000001' ;seleccionar el lcd 1
movwf _np_nro_lcd
call usr_lcd_temp_maxima
call tiempo_1_255_mega_c_inte
goto inte_rb47_7 ;cierra el ciclo
inte_rb47_18
movlw b'00000001' ;seleccionar el lcd 1
movwf _np_nro_lcd
call usr_lcd_temp_minima
call tiempo_1_255_mega_c_inte
goto inte_rb47_7 ;cierra el ciclo
movlw b'00000001' ;seleccionar el lcd 1
movwf _np_nro_lcd
clrf _np_lcd_1
call lcd_inicio
call lcd_inicio
call lcd_inicio
movlw b'00000001' ;seleccionar el lcd 1
movwf _np_nro_lcd
call usr_lcd_estado
goto paso26 ;cierra el ciclo
usr_lcd_temp_maxima
movlw .2
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
movwf _np_nro_msj
call lcd_mensaje_actual
btfss _np_msj_act,0
goto usr_lcd_temp_maxima2_no_config
movlw b'00001100'
call lcd_comando
movlw b'00000001'
call lcd_comando
usr_lcd_temp_maxima2_no_config
movlw b'10000000'
call lcd_comando
movlw .72 ;h
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .32 ;espacio
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .108 ;l
call lcd_caracter
movlw .99 ;c
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .110 ;n
call lcd_caracter
movlw .122 ;z
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .100 ;d
call lcd_caracter
movlw .111 ;o
call lcd_caracter
movlw .32 ;espacio
call lcd_caracter
movlw .108 ;l
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw b'11000000'
call lcd_comando
movlw .116 ;t
call lcd_caracter
movlw .101 ;e
call lcd_caracter
movlw .109 ;m
call lcd_caracter
movlw .112 ;p
call lcd_caracter
movlw .46 ;.
call lcd_caracter
movlw .32 ;espacio
call lcd_caracter
movlw .109 ;m
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .120 ;x
call lcd_caracter
movlw .105 ;i
call lcd_caracter
movlw .109 ;m
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .46 ;.
call lcd_caracter
usr_lcd_temp_maxima3
goto usr_lcd_temp_maxima_salir
usr_lcd_temp_maxima_salir
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
return
usr_lcd_temp_minima
movlw .3
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
movwf _np_nro_msj
call lcd_mensaje_actual
btfss _np_msj_act,0
goto usr_lcd_temp_minima2_no_config
movlw b'00001100'
call lcd_comando
movlw b'00000001'
call lcd_comando
usr_lcd_temp_minima2_no_config
movlw b'10000000'
call lcd_comando
movlw .72 ;h
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .32 ;espacio
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .108 ;l
call lcd_caracter
movlw .99 ;c
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .110 ;n
call lcd_caracter
movlw .122 ;z
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .100 ;d
call lcd_caracter
movlw .111 ;o
call lcd_caracter
movlw .32 ;espacio
call lcd_caracter
movlw .108 ;l
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw b'11000000'
call lcd_comando
movlw .116 ;t
call lcd_caracter
movlw .101 ;e
call lcd_caracter
movlw .109 ;m
call lcd_caracter
movlw .112 ;p
call lcd_caracter
movlw .46 ;.
call lcd_caracter
movlw .32 ;espacio
call lcd_caracter
movlw .109 ;m
call lcd_caracter
movlw .105 ;i
call lcd_caracter
movlw .110 ;n
call lcd_caracter
movlw .105 ;i
call lcd_caracter
movlw .109 ;m
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .46 ;.
call lcd_caracter
usr_lcd_temp_minima3
goto usr_lcd_temp_minima_salir
usr_lcd_temp_minima_salir
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
return
usr_lcd_estado
movlw .1
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
movwf _np_nro_msj
call lcd_mensaje_actual
btfss _np_msj_act,0
goto usr_lcd_estado2_no_config
movlw b'00001100'
call lcd_comando
movlw b'00000001'
call lcd_comando
usr_lcd_estado2_no_config
movlw b'10000000'
call lcd_comando
movlw .84 ;t
call lcd_caracter
movlw .114 ;r
call lcd_caracter
movlw .101 ;e
call lcd_caracter
movlw .102 ;f
call lcd_caracter
movlw .58 ;:
call lcd_caracter
movlw b'10000111'
call lcd_comando
movlw .186 ;º
call lcd_caracter
movlw .84 ;t
call lcd_caracter
movlw .99 ;c
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .108 ;l
call lcd_caracter
movlw .58 ;:
call lcd_caracter
movlw b'10001111'
call lcd_comando
movlw .186 ;º
call lcd_caracter
movlw b'11000000'
call lcd_comando
movlw .84 ;t
call lcd_caracter
movlw .109 ;m
call lcd_caracter
movlw .105 ;i
call lcd_caracter
movlw .110 ;n
call lcd_caracter
movlw .58 ;:
call lcd_caracter
movlw b'11000111'
call lcd_comando
movlw .186 ;º
call lcd_caracter
movlw .84 ;t
call lcd_caracter
movlw .109 ;m
call lcd_caracter
movlw .97 ;a
call lcd_caracter
movlw .120 ;x
call lcd_caracter
movlw .58 ;:
call lcd_caracter
movlw b'11001111'
call lcd_comando
movlw .186 ;º
call lcd_caracter
usr_lcd_estado2_var
movlw b'10000101'
call lcd_comando
movf disp_sp_d,w ;enviar la variable disp_sp_d al lcd.
addlw .48
call lcd_caracter
movlw b'10000110'
call lcd_comando
movf disp_sp_u,w ;enviar la variable disp_sp_u al lcd.
addlw .48
call lcd_caracter
movlw b'10001101'
call lcd_comando
movf disp_c_d,w ;enviar la variable disp_c_d al lcd.
addlw .48
call lcd_caracter
movlw b'10001110'
call lcd_comando
movf disp_c_u,w ;enviar la variable disp_c_u al lcd.
addlw .48
call lcd_caracter
movlw b'11000101'
call lcd_comando
movf disp_min_d,w ;enviar la variable disp_min_d al lcd.
addlw .48
call lcd_caracter
movlw b'11000110'
call lcd_comando
movf disp_min_u,w ;enviar la variable disp_min_u al lcd.
addlw .48
call lcd_caracter
movlw b'11001101'
call lcd_comando
movf disp_max_d,w ;enviar la variable disp_max_d al lcd.
addlw .48
call lcd_caracter
movlw b'11001110'
call lcd_comando
movf disp_max_u,w ;enviar la variable disp_max_u al lcd.
addlw .48
call lcd_caracter
usr_lcd_estado3
goto usr_lcd_estado_salir
usr_lcd_estado_salir
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
return
lcd_inicio
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
clrf _np_lcd_1
clrf _np_nro_msj
movlw .5 ;temporizador 50 mse
call tiempo_100_1000_mc
movlw b'00111000'
call lcd_comando
movlw b'00111000'
call lcd_comando
return
lcd_busy
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
movlw .2 ;temporizador 2 mse
call tiempo_1_100_mc
return
lcd_comando
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
movwf _np_temp1
bcf porte,0
goto lcd_enviar
lcd_caracter
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
movwf _np_temp1
bsf porte,0
lcd_enviar
bsf porte,1
movf _np_temp1,w
bcf portc,0
bcf portc,1
bcf portc,2
bcf portc,3
bcf portc,4
bcf portc,5
bcf portc,6
bcf portc,7
btfsc _np_temp1,0
bsf portc,0
btfsc _np_temp1,1
bsf portc,1
btfsc _np_temp1,2
bsf portc,2
btfsc _np_temp1,3
bsf portc,3
btfsc _np_temp1,4
bsf portc,4
btfsc _np_temp1,5
bsf portc,5
btfsc _np_temp1,6
bsf portc,6
btfsc _np_temp1,7
bsf portc,7
bcf porte,1
call lcd_busy
return
lcd_mensaje_actual
lcd_1
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
clrf _np_msj_act
movf _np_nro_msj,w
xorwf _np_lcd_1,w
btfss status,z
bsf _np_msj_act,0
movf _np_nro_msj,w
movwf _np_lcd_1
return
(las variables disp_x_u y disp_x_d son los dígitos en bcd de las variables a mostrar en el lcd)