miércoles, 8 de mayo de 2013

Contador 0-99 con Conexion Directa a Display

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:

  • 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 


Implementación

Si se habrán dado cuenta, el código de salida a los Display es diferente al usual, esto es por que se ajustaron para que al momento de la implementación no cruzar cables y nuestro proyecto quede mas estético.

Les anexo el arreglo de los pines entre el Microcontrolador y los Display


No hay comentarios:

Publicar un comentario