;Diseña un programa que muestre el nº 2011 en cuatro displays conectados al puerto B (multiplexados)
LIST P=16F84A
INCLUDE<P16F84A.INC>
ORG 0
INICIO ;Configuracion de puertos
bsf STATUS,RP0 ;entro en el banco 1
clrf TRISB ;configuro como salidas los puertos A y B
clrf TRISA
bcf STATUS,RP0 ;vuelvo al banco 0
clrf PORTA ;pongo a 0 los puertos A y B por si no lo estuvieran
clrf PORTB
PRINCIPAL
bsf PORTA, RA0 ;Activamos el transistor del primer display
movlw .2 ;cargo el 2 en decimal
call Conversion_7segmentos ;Llamamos a la funcion o rutina que obtiene las salidas activas para el numero que queremos representar en el registro W
movwf PORTB ;recupero el valor de W que contiene los puertos que tienen que estar activados y los carga en PORTB
call Retardo_20ms ;Llamo a la funcion de retardo de 20 ms del fichero RETARDOS.INC
bcf PORTA, RA0 ;Desactivamos el transistor del primer display
bsf PORTA, RA1 ;Activamos el transistor del segundo display
movlw .0 ;cargo el 0 en decimal
call Conversion_7segmentos ;Llamamos a la funcion o rutina que obtiene las salidas activas para el numero que queremos representar en el registro W
movwf PORTB ;recupero el valor de W que contiene los puertos que tienen que estar activados y los carga en PORTB
call Retardo_20ms ;Llamo a la funcion de retardo de 20 ms del fichero RETARDOS.INC
bcf PORTA, RA1 ;Desactivamos el transistor del segundo display
bsf PORTA, RA2 ;Activamos el transistor del tercer display
movlw .4 ;cargo el 4 en decimal
call Conversion_7segmentos ;Llamamos a la funcion o rutina que obtiene las salidas activas para el numero que queremos representar en el registro W
movwf PORTB ;recupero el valor de W que contiene los puertos que tienen que estar activados y los carga en PORTB
call Retardo_20ms ;Llamo a la funcion de retardo de 20 ms del fichero RETARDOS.INC
bcf PORTA, RA2 ;Desactivamos el transistor del tercer display
bsf PORTA, RA3 ;Activamos el transistor del cuarto display
movlw .8 ;cargo el 8 en decimal
call Conversion_7segmentos ;Llamamos a la funcion o rutina que obtiene las salidas activas para el numero que queremos representar en el registro W
movwf PORTB ;recupero el valor de W que contiene los puertos que tienen que estar activados y los carga en PORTB
call Retardo_20ms ;Llamo a la funcion de retardo de 20 ms del fichero RETARDOS.INC
bcf PORTA, RA3 ;Desactivamos el transistor del cuarto display
goto PRINCIPAL ;Volvemos a empezar a hacer el bucle
Conversion_7segmentos
addwf PCL, F ; cargo a PCL, su valor actual y el del numero que quiero tener en el display
retlw 3Fh ;Codigo 7 segmentos para el "0"
retlw 06h ;Codigo 7 segmentos para el "1"
retlw 5Bh ;Codigo 7 segmentos para el "2"
retlw 4Fh ;Codigo 7 segmentos para el "3"
retlw 66h ;Codigo 7 segmentos para el "4"
retlw 6Dh ;Codigo 7 segmentos para el "5"
retlw 7Dh ;Codigo 7 segmentos para el "6"
retlw 07h ;Codigo 7 segmentos para el "7"
retlw 7Fh ;Codigo 7 segmentos para el "8"
retlw 67h ;Codigo 7 segmentos para el "9"
INCLUDE <RETARDOS.INC>
END