0% encontró este documento útil (0 votos)
117 vistas2 páginas

Codigo Reloj Funcional

Este documento presenta el código para multiplexear tres displays 7 segmentos utilizando un PIC16F84A. El programa incrementa un contador de unidades, decenas y centenas y muestra el valor en los displays de forma multiplexada, encendiendo cada display por 5ms. Utiliza tablas de conversión BCD a 7 segmentos, y rutinas para demoras que permiten el multiplexeo de los displays.

Cargado por

name34
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
117 vistas2 páginas

Codigo Reloj Funcional

Este documento presenta el código para multiplexear tres displays 7 segmentos utilizando un PIC16F84A. El programa incrementa un contador de unidades, decenas y centenas y muestra el valor en los displays de forma multiplexada, encendiendo cada display por 5ms. Utiliza tablas de conversión BCD a 7 segmentos, y rutinas para demoras que permiten el multiplexeo de los displays.

Cargado por

name34
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

List p=16F84A

#include [Link]
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

;VARIABLES

Unidad equ 0x0C ; se guarda conteo unidad


Decena equ 0x0D
Centena equ 0x0E
Contador1 equ 0x0F ; registro utilizado en demora
Contador2 equ 0x10 ; registro utilizado en demora
Contador equ 0X11 ; control de refresco del display

MuestroU equ 2 ; control del display 1


MuestroD equ 1 ; control del display 2
MuestroC equ 0 ; control del display 3

;INICIO

org 0x00 ; inicia el microcontrolador


goto Inicio

;TABLA CONVERSION BCD A 7 SEGMENTOS

org 0x05 ; origen dell codigo de tabla


BCD7SEG
addwf PCL,1
DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F

;CONFIGURACION DE PUERTO

Inicio
bsf STATUS,RP0 ; se pasa de banco 0 a banco 1
clrf TRISA ; puerto A como salida
clrf TRISB ; puerto B como salida
bcf STATUS,RP0 ; se pasa del banco 1 al banco 0
clrf PORTA ; se descativa todo los display
clrf Unidad; se comienza en 0
clrf Decena
clrf Centena
goto Actualizo_Display ; para multiplexear los display

; TESTEO DE PULSADOR

Bucle
incf Unidad,1 ; incremento de unidad
movlw d'10' ; al ser 10 se resetea e incrementa la unidad
subwf Unidad,0
btfss STATUS,Z
goto Actualizo_Display ; No es 10
clrf Unidad ; se reseta
incf Decena,1 ; incremento decena
movlw d'10' ; Si es decena reseta y incrementa centena
subwf Decena,0
btfss STATUS,Z
goto Actualizo_Display
clrf Decena
incf Centena,1
movlw d'10'
subwf Centena,0
btfss STATUS,Z
goto Actualizo_Display
clrf Centena

;MULTIPLEXEO DISPLAY

Actualizo_Display
movlw d'20'
movwf Contador

Refresco
movfw Unidad ; se obtiene codigo de 7 segmentos para unidad
call BCD7SEG
bcf PORTA,MuestroC ; Apaga display
movwf PORTB
bsf PORTA,MuestroU ; enciende display
call Demora_5ms
movfw Decena ; se obtiene codigo de 7 segmentos para decena
call BCD7SEG
bcf PORTA,MuestroU ; Apaga display
movwf PORTB
bsf PORTA,MuestroD ; enciende display
call Demora_5ms
movfw Centena ; se obtiene codigo de 7 segmentos para centena
call BCD7SEG
bcf PORTA,MuestroD ; Apaga display
movwf PORTB
bsf PORTA,MuestroC ; enciende display
call Demora_5ms
decfsz Contador,1 ; pregunta si ya realizo 10 veces el ciclo
goto Refresco ; no? se repite
goto Bucle ; si? actualiza cuanta

; DEMORA

Demora_5ms
movlw 0xFF
movwf Contador1 ; se incia contador 1
Repeticion1
movlw 0x05
movwf Contador2 ; se incia contador 2
Repeticion2
decfsz Contador2,1
goto Repeticion2
decfsz Contador1,1
goto Repeticion1
return

end ; finaliza

También podría gustarte