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