; Mostrar Display usando charlieplexing
; TMR0 = tiempo multiplexado
; B_Tris = Provicional de TRISB
; B_CHAR = Provicional de Caracter a mostrar en PORTB
; Digit_Mostrar = Contador del Digito a Mostrar del Display
Muestra:
;Muestra Caracteres en digito seleccionado
Digit_Mostrar = 1 ; valores validos 1-8
Caracter:
; Caminamos los 37 caracteres a mostrar
For i= 0 to 37
{
w = 0
call tabla caracter ; Obtener Tris-Caracter
; regresa con w = Tris-Caracter
Guarda w en B_Tris
Guarda w en B_CHAR
call Intercambia ;ajuste de bits
w = B_Tris ; Pon altas-Z (entradas)
TRISB = w
w= B_CHAR ; Muestra caracter en PuertoB
PortB = w
Demora tiempo de multiplexado (Dependendo del número de digitos)
(1 Dig = demora 1000ms, ... 2 Dig = demora 500ms ...
8 Dig = demora 125ms)
}
next i
¿Digit_Mostrar = 8?
si: Regresa a Muestra
no: Digit_Mostrar = Digit_Mostrar +1
Regresa a Caracter
Intercambia:
; Entra con:
; Digit_Mostrar ajustado al Digito a mostrar en el Display
;
copia Digit_Mostrar en temp
temp = temp - 1
w = temp
Es w = 0
si: ;Primer digito no hay necesidad de ajustar
Incrementa Digit_Mostrar
Regresa
no: temp = temp - 1
w = temp
Es w = 0
si: ; 2do digito hay necesidad de ajustar
mueve bit6 a bit7 btfss B_CHAR,6
si es 0 bcf B_CHAR,7
PORTB = B_CHR movf B_CHAR,w
movwf PORTB
Regresa
no: temp = temp - 1
w = temp
Es w = 0
si: ; 3er digito hay necesidad de ajustar
1010 xxxx
mueve bit6 a bit7 btfss B_CHAR,6
si es 0 bcf B_CHAR,7
mueve bit5 a bit6 btss B_CHAR,5
si es 0 bcf B_CHAR,6
btsc B_CHAR,5
si es 1 bsf B_CHAR,6
ajusta bit5 a 1 bsf B_CHAR,5
PORTB = B_CHR movf B_CHAR,w
movwf PORTB
Regresa
no: temp = temp - 1
w = temp
Es w = 0
si: ; 4to digito hay necesidad de ajustar
mueve bit6 a bit7 btfss B_CHAR,6
si es 0 bcf B_CHAR,7
mueve bit5 a bit6 btss B_CHAR,5
si es 0 bcf B_CHAR,6
btsc B_CHAR,5
si es 1 bsf B_CHAR,6
ajusta bit5 a 1 bsf B_CHAR,5
mueve bit4 a bit5 btfss B_CHAR,4
si es 0 bcf B_CHAR,5
bsf B_CHAR,6
ajusta bit4 a 1 bsf B_CHAR,4
PORTB = B_CHR movf B_CHAR,w
movwf PORTB
Regresa
no: temp = temp - 1
w = temp
Es w = 0
si: ; 5to digito hay necesidad de ajustar
mueve bit6 a bit7 btfss B_CHAR,6
si es 0 bcf B_CHAR,7
mueve bit5 a bit6 btss B_CHAR,5
si es 0 bcf B_CHAR,6
btsc B_CHAR,5
si es 1 bsf B_CHAR,6
ajusta bit5 a 1 bsf B_CHAR,5
mueve bit4 a bit5 btfss B_CHAR,4
si es 0 bcf B_CHAR,5
bsf B_CHAR,6
ajusta bit4 a 1 bsf B_CHAR,4
mueve bit3 a bit4 btfss B_CHAR,3
si es 0 bcf B_CHAR,4
btsc B_CHAR,3
si es 1 bsf B_CHAR,4
ajusta bit3 a 1 bsf B_CHAR,3
PORTB = B_CHR movf B_CHAR,w
movwf PORTB
Regresa
no: temp = temp - 1
w = temp
Es w = 0
si: ; 6to digito hay necesidad de ajustar
mueve bit6 a bit7 btfss B_CHAR,6
si es 0 bcf B_CHAR,7
mueve bit5 a bit6 btss B_CHAR,5
si es 0 bcf B_CHAR,6
btsc B_CHAR,5
si es 1 bsf B_CHAR,6
ajusta bit5 a 1 bsf B_CHAR,5
mueve bit4 a bit5 btfss B_CHAR,4
si es 0 bcf B_CHAR,5
bsf B_CHAR,6
ajusta bit4 a 1 bsf B_CHAR,4
mueve bit3 a bit4 btfss B_CHAR,3
si es 0 bcf B_CHAR,4
btsc B_CHAR,3
si es 1 bsf B_CHAR,4
ajusta bit3 a 1 bsf B_CHAR,3
mueve bit2 a bit3 btfss B_CHAR,2
si es 0 bcf B_CHAR,3
btsc B_CHAR,2
si es 1 bsf B_CHAR,3
ajusta bit2 a 1 bsf B_CHAR,2
PORTB = B_CHR movf B_CHAR,w
movwf PORTB
Regresa
no: temp = temp - 1
w = temp
Es w = 0
si: ; 7mo digito hay necesidad de ajustar
mueve bit6 a bit7 btfss B_CHAR,6
si es 0 bcf B_CHAR,7
mueve bit5 a bit6 btss B_CHAR,5
si es 0 bcf B_CHAR,6
btsc B_CHAR,5
si es 1 bsf B_CHAR,6
ajusta bit5 a 1 bsf B_CHAR,5
mueve bit4 a bit5 btfss B_CHAR,4
si es 0 bcf B_CHAR,5
bsf B_CHAR,6
ajusta bit4 a 1 bsf B_CHAR,4
mueve bit3 a bit4 btfss B_CHAR,3
si es 0 bcf B_CHAR,4
btsc B_CHAR,3
si es 1 bsf B_CHAR,4
ajusta bit3 a 1 bsf B_CHAR,3
mueve bit2 a bit3 btfss B_CHAR,2
si es 0 bcf B_CHAR,3
btsc B_CHAR,2
si es 1 bsf B_CHAR,3
ajusta bit2 a 1 bsf B_CHAR,2
mueve bit1 a bit2 btfss B_CHAR,1
si es 0 bcf B_CHAR,2
btsc B_CHAR,1
si es 1 bsf B_CHAR,2
ajusta bit1 a 1 bsf B_CHAR,1
PORTB = B_CHR movf B_CHAR,w
movwf PORTB
Regresa
no: temp = temp - 1
w = temp
Es w = 0
si: ; 8vo digito hay necesidad de ajustar
mueve bit6 a bit7 btfss B_CHAR,6
si es 0 bcf B_CHAR,7
mueve bit5 a bit6 btss B_CHAR,5
si es 0 bcf B_CHAR,6
btsc B_CHAR,5
si es 1 bsf B_CHAR,6
ajusta bit5 a 1 bsf B_CHAR,5
mueve bit4 a bit5 btfss B_CHAR,4
si es 0 bcf B_CHAR,5
bsf B_CHAR,6
ajusta bit4 a 1 bsf B_CHAR,4
mueve bit3 a bit4 btfss B_CHAR,3
si es 0 bcf B_CHAR,4
btsc B_CHAR,3
si es 1 bsf B_CHAR,4
ajusta bit3 a 1 bsf B_CHAR,3
mueve bit2 a bit3 btfss B_CHAR,2
si es 0 bcf B_CHAR,3
btsc B_CHAR,2
si es 1 bsf B_CHAR,3
ajusta bit2 a 1 bsf B_CHAR,2
mueve bit1 a bit2 btfss B_CHAR,1
si es 0 bcf B_CHAR,2
btsc B_CHAR,1
si es 1 bsf B_CHAR,2
ajusta bit1 a 1 bsf B_CHAR,1
PORTB = B_CHR movf B_CHAR,w
movwf PORTB
mueve bit0 a bit1 btfss B_CHAR,0
si es 0 bcf B_CHAR,1
btsc B_CHAR,0
si es 1 bsf B_CHAR,1
ajusta bit0 a 1 bsf B_CHAR,0
PORTB = B_CHR movf B_CHAR,w
movwf PORTB
Regresa
no: señala error regresa con w=1 retlw 1