Descripción
Como se vio en el proyecto Contador 0-99 usando CI 7448 se realizara un circuito que realice la misma función; sin embargo, en esta ocasión relizaremos una conexion directa de nuestro microcontrolador a ambos Display de 7 segmentos.
Material necesario
- Interfase BDM
- Microcontrolador MC9S08SE8
- 2 Display a 7 segmentos (Cátodo Común)
Programación
En esta ocasión utilizaremos las memorias disponibles para almacenar el codigo hexagesimal que se requiere para activar los segmentos correspondientes de nuestro display para que proyecte los numeros.
Para esta programación realizaremos las siguientes asignaciones de puertos:
Para esta programación realizaremos las siguientes asignaciones de puertos:
- Puerto B se conectara al display de las decenas
- Puerto C se conectara al display de las unidades
Código
; variable/data section
;
ORG RAMStart ; Insert your data definition here
ExampleVar: DS.B 1
unidades: equ $A0
decenas: equ $A1
unidadesbcd: equ $A2
decenasbcd: equ $A3
limite: equ $A4
;
; code section
;
ORG ROMStart
_Startup:
LDHX #RAMEnd+1 ; initialize the stack pointer
TXS
CLI ; enable interrupts
PROG_PORTS:
MOV #$FF,PTBDD ;puerto B salida (DECENAS)
MOV #$FF,PTCDD ;puerto C salida (UNIDADES)
CLR unidades
CLR decenas
CLR unidadesbcd
CLR decenasbcd
CLR limite
;---------------------------------------------------------------------------------
;SE ENVIAN LOS SIGUIENTES CODIGOS DE ACOMODO DE PINES A LAS TERMINALES B Y C
;ESTO PARA NO TENER MAYOR PROBLEMA AL MOMENTO DE LA IMPLEMENTACION
;---------------------------------------------------------------------------------
;PUERTO B
;--------------------------------------
MOV #%01111110,$80 ;ajuste del 0
MOV #011000,$81 ;ajuste del 1
MOV #%10110110,$82 ;ajuste del 2
MOV #%10111100,$83 ;ajuste del 3
MOV #%11011000,$84 ;ajuste del 4
MOV #%11101100,$85 ;ajuste del 5
MOV #%11101110,$86 ;ajuste del 6
MOV #111000,$87 ;ajuste del 7
MOV #%11111110,$88 ;ajuste del 8
MOV #%11111000,$89 ;ajuste del 9
;--------------------------------------
;PUERTO C
;--------------------------------------
MOV #%10011111,$90 ;ajuste del 0
MOV #000110,$91 ;ajuste del 1
MOV #%10101101,$92 ;ajuste del 2
MOV #101111,$93 ;ajuste del 3
MOV #110110,$94 ;ajuste del 4
MOV #111011,$95 ;ajuste del 5
MOV #%10111011,$96 ;ajuste del 6
MOV #001110,$97 ;ajuste del 7
MOV #%10111111,$98 ;ajuste del 8
MOV #111110,$99 ;ajuste del 9
;--------------------------------------
main:
BSR CUENTA_UNIDADES
BSR BUSQUEDA_UNIDADES
LDA unidadesbcd
STA PTCD
BSR BUSQUEDA_DECENAS
LDA decenasbcd
STA PTBD
BSR RETARDO
BRA main
;-------------------------------------------
; ESTA SUBRUTINA LLEVA A CABO LA CUENTA 0-99
;-------------------------------------------
CUENTA_UNIDADES:
INC unidades
LDA unidades
CMP #$A
BEQ CUENTA_DECENAS
RTS
CUENTA_DECENAS
MOV #$00, unidades
INC decenas
LDA decenas
CMP #$A
BEQ REINICIO
RTS
REINICIO:
MOV #$00,unidades
MOV #$00,unidadesbcd
MOV #$00,decenas
MOV #$00,decenasbcd
RTS
;--------------------------------------------------------
;ESTA SUBRUTINA REALIZA LA CONVERSION BCD DE LAS UNIDADES
;--------------------------------------------------------
BUSQUEDA_UNIDADES:
LDHX #$90
MOV #$90,limite
LDA unidades
ADD limite
STA limite
CONVERSION_BCD1:
CPX limite
BEQ SALIDA_UNIDADES
INCX
BRA CONVERSION_BCD1
SALIDA_UNIDADES
LDA ,X
STA unidadesbcd
RTS
;--------------------------------------------------------
;ESTA SUBRUTINA REALIZA LA CONVERSION BCD DE LAS DECENAS
;--------------------------------------------------------
BUSQUEDA_DECENAS:
LDHX #$80
MOV #$80,limite
LDA decenas
ADD limite
STA limite
CONVERSION_BCD2:
CPX limite
BEQ SALIDA_DECENAS
INCX
BRA CONVERSION_BCD2
SALIDA_DECENAS
LDA ,X
STA decenasbcd
RTS
;---------------------
;SECUENCIA DE RETARDO
;---------------------
RETARDO:
CLR $A5
CLR $A6
MOV #2,$A7 ; Podemos acelerar el proceso de conteo cambiando "MOV #[numero]"
VOLVER:
DBNZ $A5,VOLVER
feed_watchdog
DBNZ $A6,VOLVER
feed_watchdog
DBNZ $A7,VOLVER
feed_watchdog
RTS
No hay comentarios:
Publicar un comentario