Vous êtes sur la page 1sur 19

SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas

Pgina 1
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
EJERCICIOS PARA ELABORAR PROGRAMAS
CON SUBRUTINAS
ENUNCIADO DEL EJERCICIO:
Desarrollar un programa para los microcontroladores ATmega164P, que permita
ingresar un nmero decimal de tres dgitos (centenas, decenas y unidades), mediante un
teclado telefnico de doce teclas y luego mostrar el equivalente nmero hexadecimal
utilizando displays de nodo comn, como se muestra en el circuito del siguiente
grfico.

ANLISIS Y ALGORITMO DE LA SOLUCIN:
De las doce teclas: las diez numricas sirven para el ingreso de los dgitos del nmero
decimal; mientras que la tecla del asterisco () se utiliza para corregir al dgito
ingresado y la del numeral (#) para confirmar el nmero decimal que se va a
transformar. Esta ltima tecla, tambin se utiliza para repetir el proceso desde el ingreso
del nmero, cuando se est mostrando el resultado de la transformacin.
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 2
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
El algoritmo que se implementa se muestra en el diagrama de flujo; donde los bloques
para ingresar los dgitos, confirmar la transformacin y mostrar el resultado antes de
repetir el proceso, implican el uso de los displays y del teclado.

SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 3
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
DESCRIPCIN DE LOS BLOQUES DONDE SE UTILIZAN LOS DISPLAYS Y
EL TECLADO
Bloque INGRESAR LAS CENTENAS
En este bloque se debe preparar la memoria para mostrar los displays en blanco excepto
el display de las centenas, donde se enciende el segmento d, que se utiliza como
cursor (_). Mientras se muestra esta informacin en los displays, se chequea el teclado
para aceptar el dgito que se ingrese como el de las centenas y avanzar en el programa.
No se toma en cuenta la tecla del asterisco, porque no existe dgito que corregir;
tampoco la del numeral, porque no se ha completado el ingreso de los 3 dgitos.
Bloque INGRESAR LAS DECENAS
Este bloque debe mostrar en los displays el dgito de las centenas que ya se ingres y el
cursor en la posicin de las decenas. Al chequear el teclado para aceptar el dgito que se
ingrese como el de las decenas y poder avanzar en el programa, tambin se debe aceptar
la tecla del asterisco o de corregir para regresar el programa al punto donde se ingresan
las centenas. No se toma en cuenta la tecla del numeral o de confirmacin, porque solo
se ha ingresado 1 dgito.
Bloque INGRESAR LAS UNIDADES
Los dgitos de las centenas y las decenas que se ingresaron y el cursor en la posicin de
las unidades son mostrados en los displays. El procesamiento de las teclas es similar al
del bloque anterior con la diferencia que la tecla de corregir encamina al programa hacia
el punto de ingreso de las decenas. No se toma en cuenta la tecla de confirmacin,
porque solo se han ingresado 2 dgitos.
Bloque CONFIRMAR LA TRANSFORMACIN
En este bloque se muestran solamente los 3 dgitos ingresados, sin encender el cursor
porque ya se tiene completo el nmero. Al chequear el teclado, no se aceptan dgitos; se
acepta la tecla de corregir para regresar el programa al ingreso de las unidades y
tambin se acepta la tecla de confirmacin, para avanzar en el programa.
Bloque RESULTADO DE LA TRANSFORMACIN
En este bloque se muestran los dgitos del nmero decimal que se ingresaron, el signo
del igual (=) y los dos dgitos hexadecimales que se obtienen de la transformacin. La
nica tecla que se acepta es la de confirmacin, que permite repetir el programa desde el
ingreso del dgito de las centenas.
Analizando las descripciones de los bloques, se puede determinar que para la
codificacin del programa es necesaria la repeticin de varios grupos de instrucciones
que realizan las mismas tareas; por lo tanto, una codificacin eficiente del programa
implica el uso de subrutinas. Las que se usan para realizar estas tareas son:
ASEG es la subrutina que obtiene desde una tabla los cdigos de 7 segmentos
para almacenar en 6 localidades a partir de la direccin COD7S y que
corresponden a los dgitos, letras y smbolos que estn almacenados desde la
localidad CENTE. La tabla de cdigos para esta transformacin debe incluir los
diez dgitos decimales, seis letras (A, b, C, d, E, F) como dgitos hexadecimales
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 4
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
y los siguientes smbolos Espacio en Blanco (SP), Signo del Igual (=) y Signo
del Cursor (_).

La subrutina SCAN es la encargada de mostrar en los displays de nodo comn
mediante la tcnica de barrido, los cdigos obtenidos por la subrutina anterior.

Para identificar la tecla presionada se usa la subrutina TECLAS, que devuelve
en el registro AUX1 un valor igual al indicado en la tecla numrica que se ha
presionado, cuando sea la tecla del asterisco el valor es 10 (0x0A), para la del
numeral es 11 (0x0B) y cuando no hay tecla presionada o cuando haya sido una
tecla ya procesada anteriormente el cdigo es 0xFF, esto ltimo es necesario
para evitar que una sola activacin de la tecla sea interpretada como varias
activaciones.
Estas subrutinas se encuentran codificadas dentro del archivo secundario
SUB_AC_K12.ASM, tambin se ha considerado la subrutina DEC_A_HEX que se
encuentra codificado en el archivo principal.
El mapa de memoria que utiliza el programa es:
ETIQUETA SRAM DESCRIPCIN
CENTE Dgito de las Centenas
DECEN Dgito de las Decenas
UNIDA Dgito de las Unidades
SIGNO Para el signo del igual
HEX_H Dgito Hexadecimal ms significativo
HEX_L

Dgito Hexadecimal menos significativo
COD7S
Cdigos de 7 segmentos que sirven para
mostrar en los displays






COLUM
Estado de las tres columnas de teclas para
ser procesadas



CODIFICACIN CORRESPONDIENTE AL ALGORITMO:
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 5
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
; ASIGNACIN DE ETIQUETAS A REGISTROS
.DEF AUX1 = R16 ; REGISTRO AUX1
.DEF AUX2 = R17 ; REGISTRO AUX2
.DEF AUX3 = R18 ; REGISTRO AUX3
; PRTICOS PARA LOS DISPLAYS Y EL TECLADO
.EQU SEGME = PORTC ; CONTROL DE LOS SEGMENTOS
.EQU DISPL = PORTD ; CONTROL DE LOS DISPLAYS
.EQU KEYBC = PORTB ; COLUMNAS DEL TECLADO
.EQU KEYBF = PINB ; FILAS DEL TECLADO
; NUEVOS CDIGOS PARA MOSTRAR EN EL DISPLAY
.EQU BLANCO = 0x10 ; ESPACIO EN BLANCO
.EQU IGUAL = 0x11 ; SIGNO DEL IGUAL
.EQU CURSOR = 0x12 ; SIGNO DEL CURSOR
; NUEVOS CDIGOS PARA EL TECLADO
.EQU ASTERIS = 10 ; TECLA DEL ASTERISCO
.EQU NUMERAL = 11 ; TECLA DEL NUMERAL
; SEGMENTO DE DATOS o MEMORIA SRAM
.DSEG
CENTE: .BYTE 1 ; DGITO CENTENAS
DECEN: .BYTE 1 ; DGITO DECENAS
UNIDA: .BYTE 1 ; DGITO UNIDADES
SIGNO: .BYTE 1 ; SIGNO IGUAL
HEX_H: .BYTE 1 ; DGITO HEXADECIMAL ALTO
HEX_L: .BYTE 1 ; DGITO HEXADECIMAL BAJO
COD7S: .BYTE 6 ; DGITOS EN 7 SEGMENTOS
COLUM: .BYTE 3 ; LECTURA DE LAS COLUMNAS
; SEGMENTO DE CDIGO o MEMORIA FLASH
.CSEG
; INICIALIZACIN DEL STACK
LDI AUX1,LOW(RAMEND)
OUT SPL,AUX1
LDI AUX1,HIGH(RAMEND)
OUT SPH,AUX1
; PROGRAMACIN PRTICOS DE SALIDA Y ACTIVACIN DEL PULL-UP
LDI AUX1,0xFF ; 0xFF PARA PROG. SALIDAS
OUT DDRC,AUX1 ; PRTICO PARA LOS SEGMENTOS
OUT DDRD,AUX1 ; PRTICO PARA LOS NODOS COMUNES
OUT PORTB,AUX1 ; PULL-UP DE LAS ENTRADAS
LDI AUX1,0xF0 ; 0xF0 4 SALIDAS 4 ENTRADAS
OUT DDRB,AUX1 ; PRTICO PARA EL TECLADO
; INICIALIZACIN DE LA MEMORIA PARA APAGAR LOS SEGMENTOS
INICIO: LDI AUX1,BLANCO
STS CENTE,AUX1
STS DECEN,AUX1
STS UNIDA,AUX1
STS SIGNO,AUX1
STS HEX_H,AUX1
STS HEX_L,AUX1
; MOSTAR EL CURSOR Y ESPERAR POR EL DGITO DE LAS CENTENAS
BORR1: LDI AUX1,CURSOR
STS CENTE,AUX1
RCALL ASEG
WAIT1: RCALL SCAN
RCALL TECLAS
CPI AUX1,ASTERIS
BRCC WAIT1 ; NO DGITO: EN ESPERA
STS CENTE,AUX1 ; DGITO: ALMACENA Y SIGUE
; MOSTAR EL CURSOR Y ESPERAR POR EL DGITO DE LAS DECENAS
BORR2: LDI AUX1,CURSOR
STS DECEN,AUX1
RCALL ASEG
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 6
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
WAIT2: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BRCC WAIT2 ; NUMERAL: EN ESPERA
CPI AUX1,ASTERIS
BRNE STOR2 ; DGITO: ALMACENA Y SIGUE
LDI AUX1,BLANCO ; ASTERISCO: BORRA CENTENAS
STS DECEN,AUX1
RJMP BORR1
STOR2: STS DECEN,AUX1
; MOSTAR EL CURSOR Y ESPERAR POR EL DGITO DE LAS UNIDADES
BORR3: LDI AUX1,CURSOR
STS UNIDA,AUX1
RCALL ASEG
WAIT3: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BRCC WAIT3 ; NUMERAL: EN ESPERA
CPI AUX1,ASTERIS
BRNE STOR3 ; DGITO: ALMACENA Y SIGUE
LDI AUX1,BLANCO ; ASTERISCO: BORRA DECENAS
STS UNIDA,AUX1
RJMP BORR2
STOR3: STS UNIDA,AUX1
; ESPERA POR LA CONFIRMACIN DE LA TRANSFORMACIN
RCALL ASEG
WAIT4: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BREQ SIGA ; NUMERAL: A TRANSFORMAR
CPI AUX1,ASTERIS
BRNE WAIT4 ; DGITO: YA ESTN COMPLETOS
RJMP BORR3 ; ASTERISCO: BORRA UNIDADES
; MOSTRAR EL RESULTADO SEPARADO POR EL SIGNO IGUAL
SIGA: LDI AUX1,IGUAL
STS SIGNO,AUX1
RCALL DEC_A_HEX
RCALL ASEG
WAIT5: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BRNE WAIT5 ; DGITO O ASTERISCO: ESPERA
RJMP INICIO ; NUMERAL: REPETIR TODO
; SUBRUTINA DE CONVERSIN DE BCD A BINARIO
DEC_A_HEX:
; TRANSFORMACIN DE LAS CENTENAS A BINARIO
LDS AUX1,CENTE
LDI AUX2,100
MUL AUX1,AUX2
MOV AUX3,R0
; TRANSFORMACIN DE LAS DECENAS A BINARIO
LDS AUX1,DECEN
LDI AUX2,10
MUL AUX1,AUX2
; OBTENCIN DE LA TRANSFORMACIN TOTAL
ADD AUX3,R0
LDS AUX1,UNIDA
ADD AUX1,AUX3
; ALMACENAR EL RESULTADO
PUSH AUX1
SWAP AUX1
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 7
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
ANDI AUX1,0x0F
STS HEX_H,AUX1
POP AUX1
ANDI AUX1,0x0F
STS HEX_L,AUX1
RET
;
.INCLUDE "SUB_AC_K12.ASM"
.EXIT ; FIN DEL MODULO FUENTE
CODIFICACIN DE LAS SUBRUTINAS EN EL ARCHIVO SECUNDARIO:
; SUBRUTINA DE CONVERSIN A 7 SEGMENTOS
ASEG: LDI AUX2,6 ; 6 TRANSFORMACIONES
LDI YL,LOW(CENTE) ; INICIO DE LOS DGITOS
LDI YH,HIGH(CENTE)
ASEG1: LDI ZL,LOW(TABLA<<1) ; INICIO DE CDIGOS
LDI ZH,HIGH(TABLA<<1)
LD AUX1,Y+ ; TOMAR EL DGITO
ADD ZL,AUX1
LDI AUX1,0
ADC ZH,AUX1
LPM AUX1,Z ; TOMAR EL CDIGO
STD Y+5,AUX1 ; ALMACENAR CDIGO
DEC AUX2
BRNE ASEG1 ; REPETIR 6 VECES
RET
; TABLA DE CDIGOS DE 7 SEGMENTOS PARA NODO COMN (pgfedcba)
TABLA: .DB 0b11000000,0b11111001 ;CDIGOS 0 y 1
.DB 0b10100100,0b10110000 ;CDIGOS 2 y 3
.DB 0b10011001,0b10010010 ;CDIGOS 4 y 5
.DB 0b10000010,0b11111000 ;CDIGOS 6 y 7
.DB 0b10000000,0b10010000 ;CDIGOS 8 y 9
.DB 0b10001000,0b10000011 ;CDIGOS A y B
.DB 0b11000110,0b10100001 ;CDIGOS C y D
.DB 0b10000110,0b10001110 ;CDIGOS E y F
.DB 0b11111111,0b10110111 ;CDIGOS SP y =
.DB 0b11110111,0b01111111 ;CDIGOS CUR y DP
; SUBRUTINAS PARA BARRIDO DE DISPLAYS DE NODO COMN
SCAN: LDI XL,LOW(COD7S) ; INICIO DE CDIGOS
LDI XH,HIGH(COD7S)
LDI AUX2,0B11111011 ; INICIO DE DISPLAYS
LDI AUX3,6 ; 6 DISPLAYS
SCAN1: LD AUX1,X+ ; TOMA EL CDIGO
OUT SEGME,AUX1 ; A LOS SEGMENTOS
OUT DISPL,AUX2 ; ACTIVA UN DISPLAY
;
DLY: LDI AUX1,5 ; PARA DAR TIEMPO
CLR R15
DLY1: DEC R15
BRNE DLY1
DEC AUX1
BRNE DLY1
;
SEC
ROL AUX2 ; SIGUIENTE DISPLAY
LDI AUX1,0xFF ; APAGAR SEGMENTOS
OUT SEGME,AUX1
DEC AUX3
BRNE SCAN1 ; REPETIR 6 VECES
RET
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 8
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
; SUBRUTINA PARA DECODIFICACIN DEL TECLADO TELEFNICO
; LECTURA Y ALMACENAMIENTO DE LAS TRES COLUMNAS
TECLAS: LDI YL,LOW(COLUM)
LDI YH,HIGH(COLUM)
LDI AUX3,3
LDI AUX2,0B01111111 ; HABILITAR UNA COLUMNA
TECLA1: OUT KEYBC,AUX2
SEC
ROR AUX2
IN AUX1,KEYBF
SBR AUX1,0B11110000 ; UNOS EN LAS COLUMNAS
SWAP AUX1
ST Y+,AUX1
DEC AUX3
BRNE TECLA1
; CHEQUEO SI HAY TECLA PRESIONADA
LDI YL,LOW(COLUM)
LDI YH,HIGH(COLUM)
LDI AUX3,3
LDI AUX2,0
TECLA2: LD AUX1,Y+
CPI AUX1,0xFF
BREQ TECLA3 ; BITS UNO. TECLAS SIN PRESIONAR
INC AUX2
PUSH AUX1 ; GUARDA FILA DE LA TECLA
PUSH AUX3 ; GUARDA COLUMNA DE LA TECLA
TECLA3: DEC AUX3
BRNE TECLA2
CPI AUX2,0
BRNE TECLA4 ; HAY TECLA SALTA A IDENTIFICAR
CLT ; NO HAY TECLA PONE 0 EN T
RJMP TECLA8 ; PARA TERMINAR LA SUBRUTINA
; RECUPERA LA POSICIN DE LA TECLA PRESIONADA
TECLA4: POP AUX3
POP AUX1
BRTS TECLA8 ; TECLA YA PROCESADA, TERMINA
; UBICACIN DE LA TECLA EN EL TECLADO
CPI AUX2,1
BRNE TECLA8 ; MS DE UNA TECLA PRESIONADA
SET ; DECODIFICAR TECLA PONE 1 EN T
CLR AUX2
TECLA5: INC AUX2
SEC
ROL AUX1
BRCS TECLA5
TECLA6: DEC AUX3
BREQ TECLA7
LDI AUX1,4
ADD AUX2,AUX1
RJMP TECLA6
; DECODIFICACIN DE LAS TECLAS
TECLA7: LDI ZL,LOW(TBLKB<<1)
LDI ZH,HIGH(TBLKB<<1)
ADD ZL,AUX2
LDI AUX1,0
ADC ZH,AUX1
LPM AUX1,Z
RJMP TECLA9
; CUANDO NO HAY TECLA PRESIONADA O HAY MS DE UNA PRESIONADA
TECLA8: LDI AUX1,0xFF
TECLA9: RET
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 9
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
; TABLA DE DECODIFICACIN DEL TECLADO
TBLKB: .DB 0xFF,1,4,7,10,2,5,8,0,3,6,9,11,0xFF

COMPROBACIN DEL PROGRAMA CON SUBRUTINAS
A continuacin se muestra una secuencia de comprobacin mediante el simulador del
PROTEUS.
1. Listo para el ingreso del dgito de las centenas
2. Despus del ingreso de 1 como las centenas
3. Despus del ingreso de 2 como las decenas
4. Despus del ingreso de 3 como las unidades y esperando por la confirmacin del
nmero ingresado
5. Borrado del dgito de las unidades
6. Despus del ingreso de 7 como las unidades y esperando nuevamente la
conformacin para continuar con la transformacin
7. Presentacin del resultado de la transformacin y esperando para repetir todo el
proceso nuevamente.

SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 10
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
RECOMENDACIN DE MANTENER A LAS SUBRUTINAS EN ARCHIVOS
SECUNDARIOS
Al conseguir subrutinas que funciones correctamente, se recomienda mantenerlas en
archivos secundarios; que luego se incluyen en nuevos archivos de programas
principales que solucionan otros problemas.
MODIFICACIN DEL PROGRAMA PRINCIPAL PARA
RESOLVER UN NUEVO PROBLEMA
Modificar al programa anterior para que realice la Transformacin de millas a metros,
en el que se pueda ingresar el valor de las millas mediante el teclado y se muestre el
resultado de los metros en los seis displays de nodo comn.
ANLISIS Y ALGORITMO DE LA MODIFICACIN:
Se conservan las etapas del ingreso de los 3 dgitos y la visualizacin del resultado; lo
que se modifica es el procesamiento, que incluye la conversin del valor de las millas de
BCD a binario, la multiplicacin por 1609 para obtener el valor de los metros en binario
y la conversin de binario a BCD del resultado, para presentarlo en los displays.
ETIQUETA SRAM DESCRIPCIN
CENTE Dgito de las Centenas de millas
DECEN Dgito de las Decenas de millas
UNIDA Dgito de las Unidades de millas
OTROS

Para completar con los dgitos anteriores los
seis del resultado
OTROS+1

OTROS+2

COD7S

Cdigos de 7 segmentos que sirven para
mostrar en los displays






COLUM
Estado de las tres columnas de teclas para
ser procesadas


METBIN

Valor de los metros en binario

SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 11
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
Esta modificacin consiste en sustituir la subrutina DEC_A_HEX que se solo se
encargaba de la transformacin de BCD a binario, por la subrutina CALCULO; tambin
se debe, actualizar el mapa de memoria como se indica en la pgina anterior.
CODIFICACIN CORRESPONDIENTE A LA MODIFICACIN:
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
; ASIGNACIN DE ETIQUETAS A REGISTROS
.DEF AUX1 = R16 ; REGISTRO AUX1
.DEF AUX2 = R17 ; REGISTRO AUX2
.DEF AUX3 = R18 ; REGISTRO AUX3
; PRTICOS PARA LOS DISPLAYS Y EL TECLADO
.EQU SEGME = PORTC ; CONTROL SEGMENTOS
.EQU DISPL = PORTD ; CONTROL DISPLAY
.EQU KEYBC = PORTB ; COLUMNAS DEL TECLADO
.EQU KEYBF = PINB ; FILAS DEL TECLADO
; NUEVOS CDIGOS PARA MOSTRAR EN EL DISPLAY
.EQU BLANCO = 0x10 ; ESPACIO EN BLANCO
.EQU IGUAL = 0x11 ; SIGNO IGUAL
.EQU CURSOR = 0x12 ; PARA EL CURSOR
; NUEVOS CDIGOS PARA EL TECLADO
.EQU ASTERIS = 10 ; TECLA DEL ASTERISCO
.EQU NUMERAL = 11 ; TECLA DEL NUMERAL
; SEGMENTO DE DATOS o MEMORIA SRAM
.DSEG
CENTE: .BYTE 1 ; DGITO CENTENAS
DECEN: .BYTE 1 ; DGITO DECENAS
UNIDA: .BYTE 1 ; DGITO UNIDADES
OTROS: .BYTE 3 ; PARA LOS OTROS 3 DISPLAYS
COD7S: .BYTE 6 ; DGITOS 7 SEGMENTOS
COLUM: .BYTE 3 ; LECTURA DE LAS COLUMNAS
METBIN: .BYTE 3 ; METROS EN BINARIO
; SEGMENTO DE CDIGO o MEMORIA FLASH
.CSEG
; INICIALIZACIN DEL STACK
LDI AUX1,LOW(RAMEND)
OUT SPL,AUX1
LDI AUX1,HIGH(RAMEND)
OUT SPH,AUX1
; PROGRAMACIN PRTICOS DE SALIDA Y ACTIVACIN DEL PULL-UP
LDI AUX1,0xFF ; 0xFF PARA PROG. SALIDAS
OUT DDRC,AUX1 ; PRTICO SEGMENTOS
OUT DDRD,AUX1 ; PRTICO DISPLAYS
OUT PORTB,AUX1 ; PULL-UP DE LAS ENTRADAS
LDI AUX1,0x0F ; 0x0F 4 ENTRADAS 4 SALIDAS
OUT DDRB,AUX1 ; PRTICO TECLADO
; INICIALIZACIN DE LA MEMORIA PARA APAGAR LOS SEGMENTOS
INICIO: LDI AUX1,BLANCO
STS CENTE,AUX1
STS DECEN,AUX1
STS UNIDA,AUX1
STS OTROS,AUX1
STS OTROS+1,AUX1
STS OTROS+2,AUX1
; MOSTAR EL CURSOR Y ESPERAR POR EL DGITO DE LAS CENTENAS
BORR1: LDI AUX1,CURSOR
STS CENTE,AUX1
RCALL ASEG
WAIT1: RCALL SCAN
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 12
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
RCALL TECLAS
CPI AUX1,ASTERIS
BRCC WAIT1 ; NO DGITO: EN ESPERA
STS CENTE,AUX1 ; DGITO: ALMACENA Y SIGUE
; MOSTAR EL CURSOR Y ESPERAR POR EL DGITO DE LAS DECENAS
BORR2: LDI AUX1,CURSOR
STS DECEN,AUX1
RCALL ASEG
WAIT2: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BRCC WAIT2 ; NUMERAL: EN ESPERA
CPI AUX1,ASTERIS
BRNE STOR2 ; DGITO: ALMACENA Y SIGUE
LDI AUX1,BLANCO ; ASTERISCO: BORRA CENTE.
STS DECEN,AUX1
RJMP BORR1
STOR2: STS DECEN,AUX1
; MOSTAR EL CURSOR Y ESPERAR POR EL DGITO DE LAS UNIDADES
BORR3: LDI AUX1,CURSOR
STS UNIDA,AUX1
RCALL ASEG
WAIT3: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BRCC WAIT3 ; NUMERAL: EN ESPERA
CPI AUX1,ASTERIS
BRNE STOR3 ; DGITO: ALMACENA Y SIGUE
LDI AUX1,BLANCO ; ASTERISCO: BORRA DECEN.
STS UNIDA,AUX1
RJMP BORR2
STOR3: STS UNIDA,AUX1
; ESPERA POR LA CONFIRMACIN DE LA TRANSFORMACIN
RCALL ASEG
WAIT4: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BREQ SIGA ; NUMERAL: A TRANSFORMAR
CPI AUX1,ASTERIS
BRNE WAIT4 ; DGITO: YA ESTA COMPLETO
RJMP BORR3 ; ASTERISCO: BORRA UNIDA.
; CALCULAR Y MOSTRAR EL RESULTADO DE LA TRANSFORMACIN
SIGA: RCALL CALCULO
RCALL ASEG
WAIT5: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BRNE WAIT5 ; DGITO, ASTERISCO: ESPERA
RJMP INICIO ; NUMERAL: REPETIR TODO
; SUBRUTINA DE CONVERSIN DE BCD A BINARIO DE LAS MILLAS,
; TRANSFORMACIN DE MILLAS A METROS Y
; CONVERSIN DE BINARIO A BCD DE LOS METROS
CALCULO:
; TRANSFORMACIN DE LAS CENTENAS A BINARIO
LDS AUX1,CENTE
LDI AUX2,100
MUL AUX1,AUX2
MOV AUX3,R0
; TRANSFORMACIN DE LAS DECENAS A BINARIO
LDS AUX1,DECEN
LDI AUX2,10
Subrutina que
sustituye a la
del Programa
anterior
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 13
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
MUL AUX1,AUX2
; OBTENCIN DE LA TRANSFORMACIN TOTAL
ADD AUX3,R0
LDS AUX1,UNIDA
ADD AUX1,AUX3
; MULTIPLICACIN DE LAS MILLAS POR EL BYTE BAJO DE 1609
LDI AUX2,LOW(1609)
MUL AUX1,AUX2
; ALMACENAMIENTO DEL RESULTADO PARCIAL
STS METBIN+2,R0
MOV AUX3,R1
; MULTIPLICACIN DE LAS MILLAS POR EL BYTE ALTO DE 1609
LDI AUX2,HIGH(1609)
MUL AUX1,AUX2
; RESULTADO FINAL
ADD AUX3,R0
STS METBIN+1,AUX3
LDI AUX3,0
ADC AUX3,R1
STS METBIN,AUX3
; TRANSFORMACIN DE BINARIO A BCD DEL RESULTADO
LDI XL,LOW(CENTE)
LDI XH,HIGH(CENTE)
LDI ZL,LOW(CONST<<1)
LDI ZH,HIGH(CONST<<1)
LDI AUX3,5
; PARA OBTENER UN NUEVO DGITO
NEWDIG: LDI AUX2,0
LPM R0,Z+
LPM R1,Z+
LPM R2,Z+
; DIVISIN MEDIANTE RESTAS SUCESIVAS
RESTAS: LDI YL,LOW(METBIN+3)
LDI YH,HIGH(METBIN+3)
LD AUX1,-Y
SUB AUX1,R0
ST Y,AUX1
LD AUX1,-Y
SBC AUX1,R1
ST Y,AUX1
LD AUX1,-Y
SBC AUX1,R2
ST Y,AUX1
BRCS FINDIV
INC AUX2
RJMP RESTAS
; ALMACENAMIENTO DEL DIGITO Y RECUPERACIN DEL RESIDUO
FINDIV: ST X+,AUX2
LDI YL,LOW(METBIN+3)
LDI YH,HIGH(METBIN+3)
LD AUX1,-Y
ADD AUX1,R0
ST Y,AUX1
LD AUX1,-Y
ADC AUX1,R1
ST Y,AUX1
LD AUX1,-Y
ADC AUX1,R2
ST Y,AUX1
; FINAL DEL LAZO PARA OBTENER TODOS LOS DGITOS
LD R0,Z+ ; EVITA EL BYTE 4 DE LA TABLA
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 14
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
DEC AUX3
BRNE NEWDIG
LDS AUX2,METBIN+2
ST X,AUX2
;
RET
; TABLA DE CONSTANTES PARA LAS DIVISIONES SUCESIVAS
CONST: .DW 100000,1,10000,0,1000,0,100,0,10,0
;
.INCLUDE "SUB_AC_K12.ASM"
;
.EXIT ; FIN DEL MODULO FUENTE

COMPROBACIN DEL INGRESO DE LAS MILLAS Y SALIDA DEL
RESULTADO EN METROS


Son las mismas Subrutinas
que para el Programa anterior
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 15
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
MODIFICACIN POR CAMBIOS EN EL CIRCUITO
Otra ventaja de tener las subrutinas en archivos secundarios, es la que permite actualizar
los programas principales para que trabajen con diferentes circuitos; por ejemplo en el
siguiente caso: Modificar al programa de transformacin de millas a metros para que el
Prtico que controla a los Segmentos no sea el Prtico C sino el Prtico A, como se
muestra a continuacin:


Las modificaciones consisten en reemplazar las lneas del programa principal donde se
asigna la etiqueta del Prtico de los Segmentos y la configuracin como Prtico de
Salida.
.EQU SEGME = PORTC .EQU SEGME = PORTA ; CONTROL SEGMENTOS
OUT DDRC,AUX1 OUT DDRA,AUX1 ; PRTICO SEGMENTOS
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 16
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
OTRA MODIFICACIN POR CAMBIOS EN EL CIRCUITO
Debido a la necesidad de ahorrar lneas utilizadas en los Prticos, se puede compartir las
lneas que controlan los nodos comunes de los displays con las que controlan las
columnas del teclado; en este caso se debe incorporar diodos en las columnas del
teclado para evitar la interferencia en el funcionamiento del barrido de los displays
cuando se presionan varias teclas de la misma fila.


La modificacin adicional a las dos realizadas en el ejercicio anterior, es la de
reemplazar la lnea del programa principal donde se asigna la etiqueta del Prtico de la
Columna del Teclado:
.EQU KEYBC = PORTB .EQU KEYBC = PORTD ; COLUMNAS DEL TECLADO
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 17
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
CAMBIAR EN EL CIRCUITO LOS DISPLAYS DE NODO
COMN POR DISPLAYS DE CTODO COMN
Este cambio en el ejercicio implica reemplazar los transistores PNP que controlan los
nodos comunes por transistores NPN para controlar los ctodos comunes; adems, la
sustitucin puede ser con los transistores darlington del integrado ULN2803 que
simplifica todo el circuito al ahorrar resistencias en las bases de los transistores y otras
conexiones. Tambin, se debe modificar las subrutinas ASEG y SCAN; por lo tanto, el
Programa Principal es el mismo y solo se modifica al archivo secundario, cambiando el
archivo SUB_AC_K12.ASM por el archivo SUB_CC_K12.ASM


Transistores
Darlington
del ULN2803
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 18
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin
Modificacin en la subrutina ASEG para Displays de Ctodo Comn:
Se debe sustituir la tabla de cdigos para los siete segmentos.
; TABLA DE CDIGOS DE 7 SEGMENTOS PARA CTODO COMN (pgfedcba)
TABLA: .DB 0b00111111,0b00000110 ;CDIGOS 0 y 1
.DB 0b01011011,0b01001111 ;CDIGOS 2 y 3
.DB 0b01100110,0b01101101 ;CDIGOS 4 y 5
.DB 0b01111101,0b00000111 ;CDIGOS 6 y 7
.DB 0b01111111,0b01101111 ;CDIGOS 8 y 9
.DB 0b01110111,0b01111100 ;CDIGOS A y B
.DB 0b00111001,0b01011110 ;CDIGOS C y D
.DB 0b01111001,0b01110001 ;CDIGOS E y F
.DB 0b00000000,0b01001000 ;CDIGOS SP y =
.DB 0b00001000,0b10000000 ;CDIGOS CUR y DP

Modificaciones en la subrutina SCAN para Displays de Ctodo Comn:
Se cambian los valores para habilitar cada uno de los displays y para apagar los
segmentos; as como, la instruccin para cambiar de display.
SCAN: LDI XL,LOW(COD7S) ; INICIO DE CDIGOS
LDI XH,HIGH(COD7S)
LDI AUX2,0B00000100 ; INICIO DE DISPLAYS
LDI AUX3,6 ; 6 DISPLAYS
SCAN1: LD AUX1,X+ ; TOMA EL CDIGO
OUT SEGME,AUX1 ; A LOS SEGMENTOS
OUT DISPL,AUX2 ; ACTIVA UN DISPLAY
;
DLY: LDI AUX1,5 ; PARA DAR TIEMPO
CLR R15
DLY1: DEC R15
BRNE DLY1
DEC AUX1
BRNE DLY1
;
CLC
ROL AUX2 ; SIGUIENTE DISPLAY
LDI AUX1,0x00 ; APAGAR SEGMENTOS
OUT SEGME,AUX1
DEC AUX3
BRNE SCAN1 ; REPETIR 6 VECES
RET
PRUEBAS CON EL CIRCUITO REAL
Las fotografas de la siguiente pgina, corresponden
al ingreso de millas utilizando las 12 teclas del lado
derecho del teclado, que est formado por una
matriz de 6 columnas x 4 filas (24 teclas) y el
resultado se muestra en los seis displays de ctodo
comn controlados por transistores darlington del
integrado ULN2803.
En este programa no se utilizan al Display de
Cristal Lquido, ni al Teclado Hexadecimal y solo
se utiliza al Microcontrolador del Equipo de
Pruebas de Hardware y de Software.
6x4 teclas
SISTEMAS MICROPROCESADOS: Utilizacin de subrutinas en los programas
Pgina 19
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin

Vous aimerez peut-être aussi