Ahi va eso....
;PROGRAMA PARA VISUALIZAR EN UN LCD 8 BIT´S DE DATOS Y 3 DE CONTRON CON UN 16F873
;
;
;
;
;
LIST P=16F873
RADIX HEX
INCLUDE "P16F873.inc"
Lcd_var equ 0x20
byte_l equ 0x22
byte_h equ 0x23
bcd_2 equ 0x24
bcd_1 equ 0x25
bcd_0 equ 0x24
contador equ 0x27
temporal equ 0x28
delay equ 0x29
org 0x00
goto inicio
org 0x04
goto inter
INCLUDE "lcd_cxx.inc"
;SE VISUALIZA POR EL LCD LOS CINCO DÍGITOS SITUADOS EN LAS VARIABLES BCD2-0
visualizar movlw 0x80
call LCD_REG
movlw 3
movwf contador
movlw bcd_0
movwf FSR
visu_loop swapf INDF,W
andlw 0x0f
iorlw 0x30
call LCD_DATO
movf INDF,W
andlw 0x0f
iorlw 0x30
call LCD_DATO
decf FSR,F
decfsz contador,f
goto visu_loop
return
;RUTINA DE CONVERSIÓN DE UN NÚMERO BINARIO DE 16 BITS A 5 DIGITOS BCD PARA EL LCD
bits16_bcd bcf STATUS,C
clrf contador
bsf contador,4
clrf bcd_0
clrf bcd_1
clrf bcd_2
loop_16 ;rlf DATOC_L,F
;rlf DATOC_H,F
rlf bcd_2,f
rlf bcd_1,f
rlf bcd_0,f
decfsz contador,f
goto ajuste
return
ajuste movlw bcd_2
movwf FSR
call ajuste_bcd
incf FSR,F
call ajuste_bcd
incf FSR,F
call ajuste_bcd
goto loop_16
ajuste_bcd movf INDF,W
addlw 0x03
movwf temporal
btfsc temporal,3
movwf INDF
movf INDF,W
addlw 0x30
movwf temporal
btfsc temporal,7
movwf INDF
return
;RUTINA DE TRATAMIENTO DE LA INTERRUPCIÓN
inter decfsz delay,f
goto no_250_ms
si_250_ms bcf T1CON,0
bcf STATUS,C
rlf TMR1L,F
rlf TMR1H,F
rlf TMR1L,F
rlf TMR1H,F
movf TMR1L,W
movwf byte_l
movf TMR1H,W
movwf byte_h
call bits16_bcd
call visualizar
no_250_ms movlw ~.195
movwf TMR0
movlw .5
movwf delay
bcf INTCON,2
clrf TMR1L
clrf TMR1H
bsf T1CON,0
retfie
;COMIENZO DEL PROGRAMA PRINCIPAL
inicio clrf PORTB
clrf PORTA
bsf STATUS,RP0
bcf STATUS,RP1
movlw b"00000110"
movwf ADCON1
clrf TRISB
clrf TRISA
movlw b"11111111"
movwf TRISC
movlw b"11000111"
movwf OPTION_REG
bcf STATUS,RP0
movlw b"00000010"
movwf T1CON
clrf TMR1L
clrf TMR1H
call UP_LCD
call LCD_INI
movlw b"00001100"
call LCD_REG
movlw ~.195
movwf TMR0
bsf T1CON,0
movlw .5
movwf delay
movlw b"10100000"
movwf INTCON
bucle clrwdt
goto bucle
end