SlideShare una empresa de Scribd logo
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 1
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
EJERCICIOS PARA ELABORAR PROGRAMAS
CON SUBRUTINAS
ENUNCIADO DEL EJERCICIO:
Desarrollar un programa para los microcontroladores ATmega164P, que permita
ingresar un número decimal de tres dígitos (centenas, decenas y unidades), mediante un
teclado telefónico de doce teclas y luego mostrar el equivalente número hexadecimal
utilizando displays de ánodo común, como se muestra en el circuito del siguiente
gráfico.
ANÁLISIS Y ALGORITMO DE LA SOLUCIÓN:
De las doce teclas: las diez numéricas sirven para el ingreso de los dígitos del número
decimal; mientras que la tecla del asterisco ( ) se utiliza para corregir al dígito
ingresado y la del numeral (#) para confirmar el número decimal que se va a
transformar. Esta última tecla, también se utiliza para repetir el proceso desde el ingreso
del número, cuando se está mostrando el resultado de la transformación.
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 2
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
El algoritmo que se implementa se muestra en el diagrama de flujo; donde los bloques
para ingresar los dígitos, confirmar la transformación y mostrar el resultado antes de
repetir el proceso, implican el uso de los displays y del teclado.
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 3
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
DESCRIPCIÓN 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 información en los displays, se chequea el teclado
para aceptar el dígito 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 dígito que corregir;
tampoco la del numeral, porque no se ha completado el ingreso de los 3 dígitos.
Bloque INGRESAR LAS DECENAS
Este bloque debe mostrar en los displays el dígito de las centenas que ya se ingresó y el
cursor en la posición de las decenas. Al chequear el teclado para aceptar el dígito que se
ingrese como el de las decenas y poder avanzar en el programa, también 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 confirmación, porque solo
se ha ingresado 1 dígito.
Bloque INGRESAR LAS UNIDADES
Los dígitos de las centenas y las decenas que se ingresaron y el cursor en la posición 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 confirmación,
porque solo se han ingresado 2 dígitos.
Bloque CONFIRMAR LA TRANSFORMACIÓN
En este bloque se muestran solamente los 3 dígitos ingresados, sin encender el cursor
porque ya se tiene completo el número. Al chequear el teclado, no se aceptan dígitos; se
acepta la tecla de corregir para regresar el programa al ingreso de las unidades y
también se acepta la tecla de confirmación, para avanzar en el programa.
Bloque RESULTADO DE LA TRANSFORMACIÓN
En este bloque se muestran los dígitos del número decimal que se ingresaron, el signo
del igual (=) y los dos dígitos hexadecimales que se obtienen de la transformación. La
única tecla que se acepta es la de confirmación, que permite repetir el programa desde el
ingreso del dígito de las centenas.
Analizando las descripciones de los bloques, se puede determinar que para la
codificación del programa es necesaria la repetición de varios grupos de instrucciones
que realizan las mismas tareas; por lo tanto, una codificación 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 códigos de 7 segmentos
para almacenar en 6 localidades a partir de la dirección COD7S y que
corresponden a los dígitos, letras y símbolos que están almacenados desde la
localidad CENTE. La tabla de códigos para esta transformación debe incluir los
diez dígitos decimales, seis letras (A, b, C, d, E, F) como dígitos hexadecimales
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 4
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
y los siguientes símbolos Espacio en Blanco (SP), Signo del Igual (=) y Signo
del Cursor (_).
• La subrutina SCAN es la encargada de mostrar en los displays de ánodo común
mediante la técnica de barrido, los códigos 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 numérica 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 código es 0xFF, esto último es necesario
para evitar que una sola activación de la tecla sea interpretada como varias
activaciones.
Estas subrutinas se encuentran codificadas dentro del archivo secundario
SUB_AC_K12.ASM, también 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 DESCRIPCIÓN
CENTE Dígito de las Centenas
DECEN Dígito de las Decenas
UNIDA Dígito de las Unidades
SIGNO Para el signo del igual
HEX_H Dígito Hexadecimal más significativo
HEX_L Dígito Hexadecimal menos significativo
COD7S
Códigos de 7 segmentos que sirven para
mostrar en los displays
COLUM
Estado de las tres columnas de teclas para
ser procesadas
CODIFICACIÓN CORRESPONDIENTE AL ALGORITMO:
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 5
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
; ASIGNACIÓN DE ETIQUETAS A REGISTROS
.DEF AUX1 = R16 ; REGISTRO AUX1
.DEF AUX2 = R17 ; REGISTRO AUX2
.DEF AUX3 = R18 ; REGISTRO AUX3
; PÓRTICOS 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 CÓDIGOS PARA MOSTRAR EN EL DISPLAY
.EQU BLANCO = 0x10 ; ESPACIO EN BLANCO
.EQU IGUAL = 0x11 ; SIGNO DEL IGUAL
.EQU CURSOR = 0x12 ; SIGNO DEL CURSOR
; NUEVOS CÓDIGOS 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 ; DÍGITO CENTENAS
DECEN: .BYTE 1 ; DÍGITO DECENAS
UNIDA: .BYTE 1 ; DÍGITO UNIDADES
SIGNO: .BYTE 1 ; SIGNO IGUAL
HEX_H: .BYTE 1 ; DÍGITO HEXADECIMAL ALTO
HEX_L: .BYTE 1 ; DÍGITO HEXADECIMAL BAJO
COD7S: .BYTE 6 ; DÍGITOS EN 7 SEGMENTOS
COLUM: .BYTE 3 ; LECTURA DE LAS COLUMNAS
; SEGMENTO DE CÓDIGO o MEMORIA FLASH
.CSEG
; INICIALIZACIÓN DEL STACK
LDI AUX1,LOW(RAMEND)
OUT SPL,AUX1
LDI AUX1,HIGH(RAMEND)
OUT SPH,AUX1
; PROGRAMACIÓN PÓRTICOS DE SALIDA Y ACTIVACIÓN DEL PULL-UP
LDI AUX1,0xFF ; 0xFF PARA PROG. SALIDAS
OUT DDRC,AUX1 ; PÓRTICO PARA LOS SEGMENTOS
OUT DDRD,AUX1 ; PÓRTICO PARA LOS ÁNODOS COMUNES
OUT PORTB,AUX1 ; PULL-UP DE LAS ENTRADAS
LDI AUX1,0xF0 ; 0xF0 4 SALIDAS 4 ENTRADAS
OUT DDRB,AUX1 ; PÓRTICO PARA EL TECLADO
; INICIALIZACIÓN 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 DÍGITO DE LAS CENTENAS
BORR1: LDI AUX1,CURSOR
STS CENTE,AUX1
RCALL ASEG
WAIT1: RCALL SCAN
RCALL TECLAS
CPI AUX1,ASTERIS
BRCC WAIT1 ; NO DÍGITO: EN ESPERA
STS CENTE,AUX1 ; DÍGITO: ALMACENA Y SIGUE
; MOSTAR EL CURSOR Y ESPERAR POR EL DÍGITO DE LAS DECENAS
BORR2: LDI AUX1,CURSOR
STS DECEN,AUX1
RCALL ASEG
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 6
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
WAIT2: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BRCC WAIT2 ; NUMERAL: EN ESPERA
CPI AUX1,ASTERIS
BRNE STOR2 ; DÍGITO: 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 DÍGITO 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 ; DÍGITO: ALMACENA Y SIGUE
LDI AUX1,BLANCO ; ASTERISCO: BORRA DECENAS
STS UNIDA,AUX1
RJMP BORR2
STOR3: STS UNIDA,AUX1
; ESPERA POR LA CONFIRMACIÓN DE LA TRANSFORMACIÓN
RCALL ASEG
WAIT4: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BREQ SIGA ; NUMERAL: A TRANSFORMAR
CPI AUX1,ASTERIS
BRNE WAIT4 ; DÍGITO: YA ESTÁN 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 ; DÍGITO O ASTERISCO: ESPERA
RJMP INICIO ; NUMERAL: REPETIR TODO
; SUBRUTINA DE CONVERSIÓN DE BCD A BINARIO
DEC_A_HEX:
; TRANSFORMACIÓN DE LAS CENTENAS A BINARIO
LDS AUX1,CENTE
LDI AUX2,100
MUL AUX1,AUX2
MOV AUX3,R0
; TRANSFORMACIÓN DE LAS DECENAS A BINARIO
LDS AUX1,DECEN
LDI AUX2,10
MUL AUX1,AUX2
; OBTENCIÓN DE LA TRANSFORMACIÓN TOTAL
ADD AUX3,R0
LDS AUX1,UNIDA
ADD AUX1,AUX3
; ALMACENAR EL RESULTADO
PUSH AUX1
SWAP AUX1
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 7
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
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
CODIFICACIÓN DE LAS SUBRUTINAS EN EL ARCHIVO SECUNDARIO:
; SUBRUTINA DE CONVERSIÓN A 7 SEGMENTOS
ASEG: LDI AUX2,6 ; 6 TRANSFORMACIONES
LDI YL,LOW(CENTE) ; INICIO DE LOS DÍGITOS
LDI YH,HIGH(CENTE)
ASEG1: LDI ZL,LOW(TABLA<<1) ; INICIO DE CÓDIGOS
LDI ZH,HIGH(TABLA<<1)
LD AUX1,Y+ ; TOMAR EL DÍGITO
ADD ZL,AUX1
LDI AUX1,0
ADC ZH,AUX1
LPM AUX1,Z ; TOMAR EL CÓDIGO
STD Y+5,AUX1 ; ALMACENAR CÓDIGO
DEC AUX2
BRNE ASEG1 ; REPETIR 6 VECES
RET
; TABLA DE CÓDIGOS DE 7 SEGMENTOS PARA ÁNODO COMÚN (pgfedcba)
TABLA: .DB 0b11000000,0b11111001 ;CÓDIGOS 0 y 1
.DB 0b10100100,0b10110000 ;CÓDIGOS 2 y 3
.DB 0b10011001,0b10010010 ;CÓDIGOS 4 y 5
.DB 0b10000010,0b11111000 ;CÓDIGOS 6 y 7
.DB 0b10000000,0b10010000 ;CÓDIGOS 8 y 9
.DB 0b10001000,0b10000011 ;CÓDIGOS A y B
.DB 0b11000110,0b10100001 ;CÓDIGOS C y D
.DB 0b10000110,0b10001110 ;CÓDIGOS E y F
.DB 0b11111111,0b10110111 ;CÓDIGOS SP y =
.DB 0b11110111,0b01111111 ;CÓDIGOS CUR y DP
; SUBRUTINAS PARA BARRIDO DE DISPLAYS DE ÁNODO COMÚN
SCAN: LDI XL,LOW(COD7S) ; INICIO DE CÓDIGOS
LDI XH,HIGH(COD7S)
LDI AUX2,0B11111011 ; INICIO DE DISPLAYS
LDI AUX3,6 ; 6 DISPLAYS
SCAN1: LD AUX1,X+ ; TOMA EL CÓDIGO
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: Utilización de subrutinas en los programas
Página 8
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
; SUBRUTINA PARA DECODIFICACIÓN DEL TECLADO TELEFÓNICO
; 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 POSICIÓN DE LA TECLA PRESIONADA
TECLA4: POP AUX3
POP AUX1
BRTS TECLA8 ; TECLA YA PROCESADA, TERMINA
; UBICACIÓN DE LA TECLA EN EL TECLADO
CPI AUX2,1
BRNE TECLA8 ; MÁS 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
; DECODIFICACIÓN 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 MÁS DE UNA PRESIONADA
TECLA8: LDI AUX1,0xFF
TECLA9: RET
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 9
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
; TABLA DE DECODIFICACIÓN DEL TECLADO
TBLKB: .DB 0xFF,1,4,7,10,2,5,8,0,3,6,9,11,0xFF
COMPROBACIÓN DEL PROGRAMA CON SUBRUTINAS
A continuación se muestra una secuencia de comprobación mediante el simulador del
PROTEUS.
1. Listo para el ingreso del dígito de las centenas
2. Después del ingreso de 1 como las centenas
3. Después del ingreso de 2 como las decenas
4. Después del ingreso de 3 como las unidades y esperando por la confirmación del
número ingresado
5. Borrado del dígito de las unidades
6. Después del ingreso de 7 como las unidades y esperando nuevamente la
conformación para continuar con la transformación
7. Presentación del resultado de la transformación y esperando para repetir todo el
proceso nuevamente.
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 10
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
RECOMENDACIÓN 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.
MODIFICACIÓN DEL PROGRAMA PRINCIPAL PARA
RESOLVER UN NUEVO PROBLEMA
Modificar al programa anterior para que realice la Transformación 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 común.
ANÁLISIS Y ALGORITMO DE LA MODIFICACIÓN:
Se conservan las etapas del ingreso de los 3 dígitos y la visualización del resultado; lo
que se modifica es el procesamiento, que incluye la conversión del valor de las millas de
BCD a binario, la multiplicación por 1609 para obtener el valor de los metros en binario
y la conversión de binario a BCD del resultado, para presentarlo en los displays.
ETIQUETA SRAM DESCRIPCIÓN
CENTE Dígito de las Centenas de millas
DECEN Dígito de las Decenas de millas
UNIDA Dígito de las Unidades de millas
OTROS
Para completar con los dígitos anteriores los
seis del resultado
OTROS+1
OTROS+2
COD7S
Códigos 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: Utilización de subrutinas en los programas
Página 11
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
Esta modificación consiste en sustituir la subrutina DEC_A_HEX que se solo se
encargaba de la transformación de BCD a binario, por la subrutina CALCULO; también
se debe, actualizar el mapa de memoria como se indica en la página anterior.
CODIFICACIÓN CORRESPONDIENTE A LA MODIFICACIÓN:
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
; ASIGNACIÓN DE ETIQUETAS A REGISTROS
.DEF AUX1 = R16 ; REGISTRO AUX1
.DEF AUX2 = R17 ; REGISTRO AUX2
.DEF AUX3 = R18 ; REGISTRO AUX3
; PÓRTICOS 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 CÓDIGOS PARA MOSTRAR EN EL DISPLAY
.EQU BLANCO = 0x10 ; ESPACIO EN BLANCO
.EQU IGUAL = 0x11 ; SIGNO IGUAL
.EQU CURSOR = 0x12 ; PARA EL CURSOR
; NUEVOS CÓDIGOS 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 ; DÍGITO CENTENAS
DECEN: .BYTE 1 ; DÍGITO DECENAS
UNIDA: .BYTE 1 ; DÍGITO UNIDADES
OTROS: .BYTE 3 ; PARA LOS OTROS 3 DISPLAYS
COD7S: .BYTE 6 ; DÍGITOS 7 SEGMENTOS
COLUM: .BYTE 3 ; LECTURA DE LAS COLUMNAS
METBIN: .BYTE 3 ; METROS EN BINARIO
; SEGMENTO DE CÓDIGO o MEMORIA FLASH
.CSEG
; INICIALIZACIÓN DEL STACK
LDI AUX1,LOW(RAMEND)
OUT SPL,AUX1
LDI AUX1,HIGH(RAMEND)
OUT SPH,AUX1
; PROGRAMACIÓN PÓRTICOS DE SALIDA Y ACTIVACIÓN DEL PULL-UP
LDI AUX1,0xFF ; 0xFF PARA PROG. SALIDAS
OUT DDRC,AUX1 ; PÓRTICO SEGMENTOS
OUT DDRD,AUX1 ; PÓRTICO DISPLAYS
OUT PORTB,AUX1 ; PULL-UP DE LAS ENTRADAS
LDI AUX1,0x0F ; 0x0F 4 ENTRADAS 4 SALIDAS
OUT DDRB,AUX1 ; PÓRTICO TECLADO
; INICIALIZACIÓN 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 DÍGITO DE LAS CENTENAS
BORR1: LDI AUX1,CURSOR
STS CENTE,AUX1
RCALL ASEG
WAIT1: RCALL SCAN
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 12
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
RCALL TECLAS
CPI AUX1,ASTERIS
BRCC WAIT1 ; NO DÍGITO: EN ESPERA
STS CENTE,AUX1 ; DÍGITO: ALMACENA Y SIGUE
; MOSTAR EL CURSOR Y ESPERAR POR EL DÍGITO 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 ; DÍGITO: 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 DÍGITO 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 ; DÍGITO: ALMACENA Y SIGUE
LDI AUX1,BLANCO ; ASTERISCO: BORRA DECEN.
STS UNIDA,AUX1
RJMP BORR2
STOR3: STS UNIDA,AUX1
; ESPERA POR LA CONFIRMACIÓN DE LA TRANSFORMACIÓN
RCALL ASEG
WAIT4: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BREQ SIGA ; NUMERAL: A TRANSFORMAR
CPI AUX1,ASTERIS
BRNE WAIT4 ; DÍGITO: YA ESTA COMPLETO
RJMP BORR3 ; ASTERISCO: BORRA UNIDA.
; CALCULAR Y MOSTRAR EL RESULTADO DE LA TRANSFORMACIÓN
SIGA: RCALL CALCULO
RCALL ASEG
WAIT5: RCALL SCAN
RCALL TECLAS
CPI AUX1,NUMERAL
BRNE WAIT5 ; DÍGITO, ASTERISCO: ESPERA
RJMP INICIO ; NUMERAL: REPETIR TODO
; SUBRUTINA DE CONVERSIÓN DE BCD A BINARIO DE LAS MILLAS,
; TRANSFORMACIÓN DE MILLAS A METROS Y
; CONVERSIÓN DE BINARIO A BCD DE LOS METROS
CALCULO:
; TRANSFORMACIÓN DE LAS CENTENAS A BINARIO
LDS AUX1,CENTE
LDI AUX2,100
MUL AUX1,AUX2
MOV AUX3,R0
; TRANSFORMACIÓN DE LAS DECENAS A BINARIO
LDS AUX1,DECEN
LDI AUX2,10
Subrutina que
sustituye a la
del Programa
anterior
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 13
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
MUL AUX1,AUX2
; OBTENCIÓN DE LA TRANSFORMACIÓN TOTAL
ADD AUX3,R0
LDS AUX1,UNIDA
ADD AUX1,AUX3
; MULTIPLICACIÓN 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
; MULTIPLICACIÓN 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
; TRANSFORMACIÓN 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 DÍGITO
NEWDIG: LDI AUX2,0
LPM R0,Z+
LPM R1,Z+
LPM R2,Z+
; DIVISIÓN 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 RECUPERACIÓN 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 DÍGITOS
LD R0,Z+ ; EVITA EL BYTE 4 DE LA TABLA
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 14
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
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
COMPROBACIÓN DEL INGRESO DE LAS MILLAS Y SALIDA DEL
RESULTADO EN METROS
Son las mismas Subrutinas
que para el Programa anterior
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 15
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
MODIFICACIÓN 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 transformación de millas a metros para que el
Pórtico que controla a los Segmentos no sea el Pórtico C sino el Pórtico A, como se
muestra a continuación:
Las modificaciones consisten en reemplazar las líneas del programa principal donde se
asigna la etiqueta del Pórtico de los Segmentos y la configuración como Pórtico de
Salida.
.EQU SEGME = PORTC .EQU SEGME = PORTA ; CONTROL SEGMENTOS
OUT DDRC,AUX1 OUT DDRA,AUX1 ; PÓRTICO SEGMENTOS
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 16
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
OTRA MODIFICACIÓN POR CAMBIOS EN EL CIRCUITO
Debido a la necesidad de ahorrar líneas utilizadas en los Pórticos, se puede compartir las
líneas 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 modificación adicional a las dos realizadas en el ejercicio anterior, es la de
reemplazar la línea del programa principal donde se asigna la etiqueta del Pórtico de la
Columna del Teclado:
.EQU KEYBC = PORTB .EQU KEYBC = PORTD ; COLUMNAS DEL TECLADO
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 17
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
CAMBIAR EN EL CIRCUITO LOS DISPLAYS DE ÁNODO
COMÚN POR DISPLAYS DE CÁTODO COMÚN
Este cambio en el ejercicio implica reemplazar los transistores PNP que controlan los
ánodos comunes por transistores NPN para controlar los cátodos comunes; además, la
sustitución 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. También, 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: Utilización de subrutinas en los programas
Página 18
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
Modificación en la subrutina ASEG para Displays de Cátodo Común:
Se debe sustituir la tabla de códigos para los siete segmentos.
; TABLA DE CÓDIGOS DE 7 SEGMENTOS PARA CÁTODO COMÚN (pgfedcba)
TABLA: .DB 0b00111111,0b00000110 ;CÓDIGOS 0 y 1
.DB 0b01011011,0b01001111 ;CÓDIGOS 2 y 3
.DB 0b01100110,0b01101101 ;CÓDIGOS 4 y 5
.DB 0b01111101,0b00000111 ;CÓDIGOS 6 y 7
.DB 0b01111111,0b01101111 ;CÓDIGOS 8 y 9
.DB 0b01110111,0b01111100 ;CÓDIGOS A y B
.DB 0b00111001,0b01011110 ;CÓDIGOS C y D
.DB 0b01111001,0b01110001 ;CÓDIGOS E y F
.DB 0b00000000,0b01001000 ;CÓDIGOS SP y =
.DB 0b00001000,0b10000000 ;CÓDIGOS CUR y DP
Modificaciones en la subrutina SCAN para Displays de Cátodo Común:
Se cambian los valores para habilitar cada uno de los displays y para apagar los
segmentos; así como, la instrucción para cambiar de display.
SCAN: LDI XL,LOW(COD7S) ; INICIO DE CÓDIGOS
LDI XH,HIGH(COD7S)
LDI AUX2,0B00000100 ; INICIO DE DISPLAYS
LDI AUX3,6 ; 6 DISPLAYS
SCAN1: LD AUX1,X+ ; TOMA EL CÓDIGO
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 fotografías de la siguiente página, 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 cátodo
común controlados por transistores darlington del
integrado ULN2803.
En este programa no se utilizan al Display de
Cristal Líquido, ni al Teclado Hexadecimal y solo
se utiliza al Microcontrolador del Equipo de
Pruebas de Hardware y de Software.
6x4 teclas
SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas
Página 19
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información

Más contenido relacionado

PPTX
Arm assembly language programming
PDF
Presentación_Unidad2_potencia.pdf
PDF
Sumador de 4 bits
DOCX
Lic lab manual 1
DOCX
Configuracion de multivibradores
PPTX
Comparador
PPTX
introducción a los amplificadores operacionales
PPTX
Conversion of flip flop
Arm assembly language programming
Presentación_Unidad2_potencia.pdf
Sumador de 4 bits
Lic lab manual 1
Configuracion de multivibradores
Comparador
introducción a los amplificadores operacionales
Conversion of flip flop

La actualidad más candente (20)

PDF
Transformadores Parte II (2020)
PPTX
Scr, triac y diac
PDF
Trabajo de circuito logico restador
PPTX
Compensador de retraso, lugar de las raices.
PPTX
Lecture 2: Power Diodes
PDF
Filtros analogicos
PPT
Control digital
PPTX
Exposicion fototransistor
DOCX
Laboratorio 5 ensayo con carga
PPTX
Ficha tecnica de diodos
PPTX
Componentes Activos
PPT
AMPLIFICADOR DIFERENCIAL circuitos electronicod.ppt
PDF
Tutorial creación de modulo 60 en proteus
PPT
PDF
Practica 1
PDF
Compuertas lógicas
PPTX
7 segment interface with avr microcontroller
PDF
Arduino: Teclado matricial
PPTX
Sistemas analógicos digitales.ppt
PPTX
Escalamiento en plc_siemens_by_pgf
Transformadores Parte II (2020)
Scr, triac y diac
Trabajo de circuito logico restador
Compensador de retraso, lugar de las raices.
Lecture 2: Power Diodes
Filtros analogicos
Control digital
Exposicion fototransistor
Laboratorio 5 ensayo con carga
Ficha tecnica de diodos
Componentes Activos
AMPLIFICADOR DIFERENCIAL circuitos electronicod.ppt
Tutorial creación de modulo 60 en proteus
Practica 1
Compuertas lógicas
7 segment interface with avr microcontroller
Arduino: Teclado matricial
Sistemas analógicos digitales.ppt
Escalamiento en plc_siemens_by_pgf
Publicidad

Destacado (16)

PDF
Ejercicio 01 Llenar
PDF
Microcontroladores ASM
PDF
Ejercicio 03 Porticos
PDF
Ejercicio 02 Tablas
PDF
Ejercicio 09 Serie
PDF
Ejercicio 04 Calculos
PDF
Ejercicio 07 Timers
PPTX
Rutinas de calculo de volumen
PPT
Diapos de pic
PDF
Ejercicios 06 subrutinas con LCD continuación
PDF
Ejercicio 08 CAD
PDF
El PIC16F84
PDF
Ejercicios 04 cálculo continuación
PDF
Ejercicios 07 interrupciones
PDF
Microcontroladores PIC
PDF
Guía de ejercicios resueltos tema 2
Ejercicio 01 Llenar
Microcontroladores ASM
Ejercicio 03 Porticos
Ejercicio 02 Tablas
Ejercicio 09 Serie
Ejercicio 04 Calculos
Ejercicio 07 Timers
Rutinas de calculo de volumen
Diapos de pic
Ejercicios 06 subrutinas con LCD continuación
Ejercicio 08 CAD
El PIC16F84
Ejercicios 04 cálculo continuación
Ejercicios 07 interrupciones
Microcontroladores PIC
Guía de ejercicios resueltos tema 2
Publicidad

Similar a Ejercicio 05 Subrutinas (20)

PDF
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
PPTX
Tarea final
PDF
Microcontroladores: Introducción al AVR Studio
PPTX
Introducción a los Microprocesadores y Microcontroladores
PDF
Ejercicios 06 subrutinas con LCD
PDF
Subrutinas pic
PDF
Procesadores
PDF
Emu 8086
PDF
Pic16f84(1)
PDF
Introducción a la programacion Pic16F84
PDF
programacion con microcontrolador pic 16f84
PPTX
UNIDAD I - C - ARQUITECTURA BASICA DE LAS COMPUTADORAS-2021-II.pptx
DOCX
Manual de operación arduino cabezal
PDF
Ad puerto paralelo2
PPT
Teclado
PDF
Ejercicio 07 adicionales de Interrupciones
PDF
Microcontroladores: mikroBasic para microcontroladores PIC
PPTX
Sia i cap4
PPT
Puerto d825 CU ZUMPANGO
DOCX
comentarios de pics
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
Tarea final
Microcontroladores: Introducción al AVR Studio
Introducción a los Microprocesadores y Microcontroladores
Ejercicios 06 subrutinas con LCD
Subrutinas pic
Procesadores
Emu 8086
Pic16f84(1)
Introducción a la programacion Pic16F84
programacion con microcontrolador pic 16f84
UNIDAD I - C - ARQUITECTURA BASICA DE LAS COMPUTADORAS-2021-II.pptx
Manual de operación arduino cabezal
Ad puerto paralelo2
Teclado
Ejercicio 07 adicionales de Interrupciones
Microcontroladores: mikroBasic para microcontroladores PIC
Sia i cap4
Puerto d825 CU ZUMPANGO
comentarios de pics

Más de Jaime E. Velarde (18)

PDF
Display de cristal líquido grágico GLCD
PDF
Funcionamiento del USART
PPTX
20 Portico Serial
PDF
Funcionamiento del Timer 0
PPTX
18 Timers
PDF
Funcionamiento del CAD
PPTX
19 Conversor A/D
PPTX
17 Interrupciones
PPTX
16 Instrucciones de Subrutinas
PPTX
15 Instrucciones Aritmeticas y Logicas
PPTX
13 Instrucciones de manejo de bits
PPTX
14 Fusibles Programables
PPTX
12 Pórticos de los Atmega
PPTX
11 Instrucciones de Salto de los Atmega
PPTX
10 Instrucciones de Transferencia
PPTX
09 Conjunto de Instrucciones de los Atmega
PPTX
08 Memoria de los Atmega164P
PPTX
07 Familia Atmega
Display de cristal líquido grágico GLCD
Funcionamiento del USART
20 Portico Serial
Funcionamiento del Timer 0
18 Timers
Funcionamiento del CAD
19 Conversor A/D
17 Interrupciones
16 Instrucciones de Subrutinas
15 Instrucciones Aritmeticas y Logicas
13 Instrucciones de manejo de bits
14 Fusibles Programables
12 Pórticos de los Atmega
11 Instrucciones de Salto de los Atmega
10 Instrucciones de Transferencia
09 Conjunto de Instrucciones de los Atmega
08 Memoria de los Atmega164P
07 Familia Atmega

Último (20)

PDF
DI, TEA, TDAH.pdf guía se secuencias didacticas
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
PDF
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
PDF
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
PDF
Metodologías Activas con herramientas IAG
PDF
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
PDF
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
PDF
Lección 6 Escuela Sab. A través del mar rojo.pdf
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
DI, TEA, TDAH.pdf guía se secuencias didacticas
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Tomo 1 de biologia gratis ultra plusenmas
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
Metodologías Activas con herramientas IAG
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
2 GRADO UNIDAD 5 - 2025.docx para primaria
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
Lección 6 Escuela Sab. A través del mar rojo.pdf
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf

Ejercicio 05 Subrutinas

  • 1. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 1 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información EJERCICIOS PARA ELABORAR PROGRAMAS CON SUBRUTINAS ENUNCIADO DEL EJERCICIO: Desarrollar un programa para los microcontroladores ATmega164P, que permita ingresar un número decimal de tres dígitos (centenas, decenas y unidades), mediante un teclado telefónico de doce teclas y luego mostrar el equivalente número hexadecimal utilizando displays de ánodo común, como se muestra en el circuito del siguiente gráfico. ANÁLISIS Y ALGORITMO DE LA SOLUCIÓN: De las doce teclas: las diez numéricas sirven para el ingreso de los dígitos del número decimal; mientras que la tecla del asterisco ( ) se utiliza para corregir al dígito ingresado y la del numeral (#) para confirmar el número decimal que se va a transformar. Esta última tecla, también se utiliza para repetir el proceso desde el ingreso del número, cuando se está mostrando el resultado de la transformación.
  • 2. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 2 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información El algoritmo que se implementa se muestra en el diagrama de flujo; donde los bloques para ingresar los dígitos, confirmar la transformación y mostrar el resultado antes de repetir el proceso, implican el uso de los displays y del teclado.
  • 3. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 3 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información DESCRIPCIÓN 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 información en los displays, se chequea el teclado para aceptar el dígito 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 dígito que corregir; tampoco la del numeral, porque no se ha completado el ingreso de los 3 dígitos. Bloque INGRESAR LAS DECENAS Este bloque debe mostrar en los displays el dígito de las centenas que ya se ingresó y el cursor en la posición de las decenas. Al chequear el teclado para aceptar el dígito que se ingrese como el de las decenas y poder avanzar en el programa, también 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 confirmación, porque solo se ha ingresado 1 dígito. Bloque INGRESAR LAS UNIDADES Los dígitos de las centenas y las decenas que se ingresaron y el cursor en la posición 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 confirmación, porque solo se han ingresado 2 dígitos. Bloque CONFIRMAR LA TRANSFORMACIÓN En este bloque se muestran solamente los 3 dígitos ingresados, sin encender el cursor porque ya se tiene completo el número. Al chequear el teclado, no se aceptan dígitos; se acepta la tecla de corregir para regresar el programa al ingreso de las unidades y también se acepta la tecla de confirmación, para avanzar en el programa. Bloque RESULTADO DE LA TRANSFORMACIÓN En este bloque se muestran los dígitos del número decimal que se ingresaron, el signo del igual (=) y los dos dígitos hexadecimales que se obtienen de la transformación. La única tecla que se acepta es la de confirmación, que permite repetir el programa desde el ingreso del dígito de las centenas. Analizando las descripciones de los bloques, se puede determinar que para la codificación del programa es necesaria la repetición de varios grupos de instrucciones que realizan las mismas tareas; por lo tanto, una codificación 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 códigos de 7 segmentos para almacenar en 6 localidades a partir de la dirección COD7S y que corresponden a los dígitos, letras y símbolos que están almacenados desde la localidad CENTE. La tabla de códigos para esta transformación debe incluir los diez dígitos decimales, seis letras (A, b, C, d, E, F) como dígitos hexadecimales
  • 4. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 4 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información y los siguientes símbolos Espacio en Blanco (SP), Signo del Igual (=) y Signo del Cursor (_). • La subrutina SCAN es la encargada de mostrar en los displays de ánodo común mediante la técnica de barrido, los códigos 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 numérica 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 código es 0xFF, esto último es necesario para evitar que una sola activación de la tecla sea interpretada como varias activaciones. Estas subrutinas se encuentran codificadas dentro del archivo secundario SUB_AC_K12.ASM, también 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 DESCRIPCIÓN CENTE Dígito de las Centenas DECEN Dígito de las Decenas UNIDA Dígito de las Unidades SIGNO Para el signo del igual HEX_H Dígito Hexadecimal más significativo HEX_L Dígito Hexadecimal menos significativo COD7S Códigos de 7 segmentos que sirven para mostrar en los displays COLUM Estado de las tres columnas de teclas para ser procesadas CODIFICACIÓN CORRESPONDIENTE AL ALGORITMO: .NOLIST .INCLUDE "m164pdef.inc" .LIST
  • 5. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 5 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información ; ASIGNACIÓN DE ETIQUETAS A REGISTROS .DEF AUX1 = R16 ; REGISTRO AUX1 .DEF AUX2 = R17 ; REGISTRO AUX2 .DEF AUX3 = R18 ; REGISTRO AUX3 ; PÓRTICOS 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 CÓDIGOS PARA MOSTRAR EN EL DISPLAY .EQU BLANCO = 0x10 ; ESPACIO EN BLANCO .EQU IGUAL = 0x11 ; SIGNO DEL IGUAL .EQU CURSOR = 0x12 ; SIGNO DEL CURSOR ; NUEVOS CÓDIGOS 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 ; DÍGITO CENTENAS DECEN: .BYTE 1 ; DÍGITO DECENAS UNIDA: .BYTE 1 ; DÍGITO UNIDADES SIGNO: .BYTE 1 ; SIGNO IGUAL HEX_H: .BYTE 1 ; DÍGITO HEXADECIMAL ALTO HEX_L: .BYTE 1 ; DÍGITO HEXADECIMAL BAJO COD7S: .BYTE 6 ; DÍGITOS EN 7 SEGMENTOS COLUM: .BYTE 3 ; LECTURA DE LAS COLUMNAS ; SEGMENTO DE CÓDIGO o MEMORIA FLASH .CSEG ; INICIALIZACIÓN DEL STACK LDI AUX1,LOW(RAMEND) OUT SPL,AUX1 LDI AUX1,HIGH(RAMEND) OUT SPH,AUX1 ; PROGRAMACIÓN PÓRTICOS DE SALIDA Y ACTIVACIÓN DEL PULL-UP LDI AUX1,0xFF ; 0xFF PARA PROG. SALIDAS OUT DDRC,AUX1 ; PÓRTICO PARA LOS SEGMENTOS OUT DDRD,AUX1 ; PÓRTICO PARA LOS ÁNODOS COMUNES OUT PORTB,AUX1 ; PULL-UP DE LAS ENTRADAS LDI AUX1,0xF0 ; 0xF0 4 SALIDAS 4 ENTRADAS OUT DDRB,AUX1 ; PÓRTICO PARA EL TECLADO ; INICIALIZACIÓN 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 DÍGITO DE LAS CENTENAS BORR1: LDI AUX1,CURSOR STS CENTE,AUX1 RCALL ASEG WAIT1: RCALL SCAN RCALL TECLAS CPI AUX1,ASTERIS BRCC WAIT1 ; NO DÍGITO: EN ESPERA STS CENTE,AUX1 ; DÍGITO: ALMACENA Y SIGUE ; MOSTAR EL CURSOR Y ESPERAR POR EL DÍGITO DE LAS DECENAS BORR2: LDI AUX1,CURSOR STS DECEN,AUX1 RCALL ASEG
  • 6. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 6 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información WAIT2: RCALL SCAN RCALL TECLAS CPI AUX1,NUMERAL BRCC WAIT2 ; NUMERAL: EN ESPERA CPI AUX1,ASTERIS BRNE STOR2 ; DÍGITO: 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 DÍGITO 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 ; DÍGITO: ALMACENA Y SIGUE LDI AUX1,BLANCO ; ASTERISCO: BORRA DECENAS STS UNIDA,AUX1 RJMP BORR2 STOR3: STS UNIDA,AUX1 ; ESPERA POR LA CONFIRMACIÓN DE LA TRANSFORMACIÓN RCALL ASEG WAIT4: RCALL SCAN RCALL TECLAS CPI AUX1,NUMERAL BREQ SIGA ; NUMERAL: A TRANSFORMAR CPI AUX1,ASTERIS BRNE WAIT4 ; DÍGITO: YA ESTÁN 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 ; DÍGITO O ASTERISCO: ESPERA RJMP INICIO ; NUMERAL: REPETIR TODO ; SUBRUTINA DE CONVERSIÓN DE BCD A BINARIO DEC_A_HEX: ; TRANSFORMACIÓN DE LAS CENTENAS A BINARIO LDS AUX1,CENTE LDI AUX2,100 MUL AUX1,AUX2 MOV AUX3,R0 ; TRANSFORMACIÓN DE LAS DECENAS A BINARIO LDS AUX1,DECEN LDI AUX2,10 MUL AUX1,AUX2 ; OBTENCIÓN DE LA TRANSFORMACIÓN TOTAL ADD AUX3,R0 LDS AUX1,UNIDA ADD AUX1,AUX3 ; ALMACENAR EL RESULTADO PUSH AUX1 SWAP AUX1
  • 7. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 7 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información 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 CODIFICACIÓN DE LAS SUBRUTINAS EN EL ARCHIVO SECUNDARIO: ; SUBRUTINA DE CONVERSIÓN A 7 SEGMENTOS ASEG: LDI AUX2,6 ; 6 TRANSFORMACIONES LDI YL,LOW(CENTE) ; INICIO DE LOS DÍGITOS LDI YH,HIGH(CENTE) ASEG1: LDI ZL,LOW(TABLA<<1) ; INICIO DE CÓDIGOS LDI ZH,HIGH(TABLA<<1) LD AUX1,Y+ ; TOMAR EL DÍGITO ADD ZL,AUX1 LDI AUX1,0 ADC ZH,AUX1 LPM AUX1,Z ; TOMAR EL CÓDIGO STD Y+5,AUX1 ; ALMACENAR CÓDIGO DEC AUX2 BRNE ASEG1 ; REPETIR 6 VECES RET ; TABLA DE CÓDIGOS DE 7 SEGMENTOS PARA ÁNODO COMÚN (pgfedcba) TABLA: .DB 0b11000000,0b11111001 ;CÓDIGOS 0 y 1 .DB 0b10100100,0b10110000 ;CÓDIGOS 2 y 3 .DB 0b10011001,0b10010010 ;CÓDIGOS 4 y 5 .DB 0b10000010,0b11111000 ;CÓDIGOS 6 y 7 .DB 0b10000000,0b10010000 ;CÓDIGOS 8 y 9 .DB 0b10001000,0b10000011 ;CÓDIGOS A y B .DB 0b11000110,0b10100001 ;CÓDIGOS C y D .DB 0b10000110,0b10001110 ;CÓDIGOS E y F .DB 0b11111111,0b10110111 ;CÓDIGOS SP y = .DB 0b11110111,0b01111111 ;CÓDIGOS CUR y DP ; SUBRUTINAS PARA BARRIDO DE DISPLAYS DE ÁNODO COMÚN SCAN: LDI XL,LOW(COD7S) ; INICIO DE CÓDIGOS LDI XH,HIGH(COD7S) LDI AUX2,0B11111011 ; INICIO DE DISPLAYS LDI AUX3,6 ; 6 DISPLAYS SCAN1: LD AUX1,X+ ; TOMA EL CÓDIGO 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
  • 8. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 8 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información ; SUBRUTINA PARA DECODIFICACIÓN DEL TECLADO TELEFÓNICO ; 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 POSICIÓN DE LA TECLA PRESIONADA TECLA4: POP AUX3 POP AUX1 BRTS TECLA8 ; TECLA YA PROCESADA, TERMINA ; UBICACIÓN DE LA TECLA EN EL TECLADO CPI AUX2,1 BRNE TECLA8 ; MÁS 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 ; DECODIFICACIÓN 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 MÁS DE UNA PRESIONADA TECLA8: LDI AUX1,0xFF TECLA9: RET
  • 9. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 9 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información ; TABLA DE DECODIFICACIÓN DEL TECLADO TBLKB: .DB 0xFF,1,4,7,10,2,5,8,0,3,6,9,11,0xFF COMPROBACIÓN DEL PROGRAMA CON SUBRUTINAS A continuación se muestra una secuencia de comprobación mediante el simulador del PROTEUS. 1. Listo para el ingreso del dígito de las centenas 2. Después del ingreso de 1 como las centenas 3. Después del ingreso de 2 como las decenas 4. Después del ingreso de 3 como las unidades y esperando por la confirmación del número ingresado 5. Borrado del dígito de las unidades 6. Después del ingreso de 7 como las unidades y esperando nuevamente la conformación para continuar con la transformación 7. Presentación del resultado de la transformación y esperando para repetir todo el proceso nuevamente.
  • 10. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 10 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información RECOMENDACIÓN 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. MODIFICACIÓN DEL PROGRAMA PRINCIPAL PARA RESOLVER UN NUEVO PROBLEMA Modificar al programa anterior para que realice la Transformación 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 común. ANÁLISIS Y ALGORITMO DE LA MODIFICACIÓN: Se conservan las etapas del ingreso de los 3 dígitos y la visualización del resultado; lo que se modifica es el procesamiento, que incluye la conversión del valor de las millas de BCD a binario, la multiplicación por 1609 para obtener el valor de los metros en binario y la conversión de binario a BCD del resultado, para presentarlo en los displays. ETIQUETA SRAM DESCRIPCIÓN CENTE Dígito de las Centenas de millas DECEN Dígito de las Decenas de millas UNIDA Dígito de las Unidades de millas OTROS Para completar con los dígitos anteriores los seis del resultado OTROS+1 OTROS+2 COD7S Códigos 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
  • 11. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 11 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información Esta modificación consiste en sustituir la subrutina DEC_A_HEX que se solo se encargaba de la transformación de BCD a binario, por la subrutina CALCULO; también se debe, actualizar el mapa de memoria como se indica en la página anterior. CODIFICACIÓN CORRESPONDIENTE A LA MODIFICACIÓN: .NOLIST .INCLUDE "m164pdef.inc" .LIST ; ASIGNACIÓN DE ETIQUETAS A REGISTROS .DEF AUX1 = R16 ; REGISTRO AUX1 .DEF AUX2 = R17 ; REGISTRO AUX2 .DEF AUX3 = R18 ; REGISTRO AUX3 ; PÓRTICOS 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 CÓDIGOS PARA MOSTRAR EN EL DISPLAY .EQU BLANCO = 0x10 ; ESPACIO EN BLANCO .EQU IGUAL = 0x11 ; SIGNO IGUAL .EQU CURSOR = 0x12 ; PARA EL CURSOR ; NUEVOS CÓDIGOS 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 ; DÍGITO CENTENAS DECEN: .BYTE 1 ; DÍGITO DECENAS UNIDA: .BYTE 1 ; DÍGITO UNIDADES OTROS: .BYTE 3 ; PARA LOS OTROS 3 DISPLAYS COD7S: .BYTE 6 ; DÍGITOS 7 SEGMENTOS COLUM: .BYTE 3 ; LECTURA DE LAS COLUMNAS METBIN: .BYTE 3 ; METROS EN BINARIO ; SEGMENTO DE CÓDIGO o MEMORIA FLASH .CSEG ; INICIALIZACIÓN DEL STACK LDI AUX1,LOW(RAMEND) OUT SPL,AUX1 LDI AUX1,HIGH(RAMEND) OUT SPH,AUX1 ; PROGRAMACIÓN PÓRTICOS DE SALIDA Y ACTIVACIÓN DEL PULL-UP LDI AUX1,0xFF ; 0xFF PARA PROG. SALIDAS OUT DDRC,AUX1 ; PÓRTICO SEGMENTOS OUT DDRD,AUX1 ; PÓRTICO DISPLAYS OUT PORTB,AUX1 ; PULL-UP DE LAS ENTRADAS LDI AUX1,0x0F ; 0x0F 4 ENTRADAS 4 SALIDAS OUT DDRB,AUX1 ; PÓRTICO TECLADO ; INICIALIZACIÓN 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 DÍGITO DE LAS CENTENAS BORR1: LDI AUX1,CURSOR STS CENTE,AUX1 RCALL ASEG WAIT1: RCALL SCAN
  • 12. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 12 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información RCALL TECLAS CPI AUX1,ASTERIS BRCC WAIT1 ; NO DÍGITO: EN ESPERA STS CENTE,AUX1 ; DÍGITO: ALMACENA Y SIGUE ; MOSTAR EL CURSOR Y ESPERAR POR EL DÍGITO 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 ; DÍGITO: 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 DÍGITO 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 ; DÍGITO: ALMACENA Y SIGUE LDI AUX1,BLANCO ; ASTERISCO: BORRA DECEN. STS UNIDA,AUX1 RJMP BORR2 STOR3: STS UNIDA,AUX1 ; ESPERA POR LA CONFIRMACIÓN DE LA TRANSFORMACIÓN RCALL ASEG WAIT4: RCALL SCAN RCALL TECLAS CPI AUX1,NUMERAL BREQ SIGA ; NUMERAL: A TRANSFORMAR CPI AUX1,ASTERIS BRNE WAIT4 ; DÍGITO: YA ESTA COMPLETO RJMP BORR3 ; ASTERISCO: BORRA UNIDA. ; CALCULAR Y MOSTRAR EL RESULTADO DE LA TRANSFORMACIÓN SIGA: RCALL CALCULO RCALL ASEG WAIT5: RCALL SCAN RCALL TECLAS CPI AUX1,NUMERAL BRNE WAIT5 ; DÍGITO, ASTERISCO: ESPERA RJMP INICIO ; NUMERAL: REPETIR TODO ; SUBRUTINA DE CONVERSIÓN DE BCD A BINARIO DE LAS MILLAS, ; TRANSFORMACIÓN DE MILLAS A METROS Y ; CONVERSIÓN DE BINARIO A BCD DE LOS METROS CALCULO: ; TRANSFORMACIÓN DE LAS CENTENAS A BINARIO LDS AUX1,CENTE LDI AUX2,100 MUL AUX1,AUX2 MOV AUX3,R0 ; TRANSFORMACIÓN DE LAS DECENAS A BINARIO LDS AUX1,DECEN LDI AUX2,10 Subrutina que sustituye a la del Programa anterior
  • 13. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 13 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información MUL AUX1,AUX2 ; OBTENCIÓN DE LA TRANSFORMACIÓN TOTAL ADD AUX3,R0 LDS AUX1,UNIDA ADD AUX1,AUX3 ; MULTIPLICACIÓN 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 ; MULTIPLICACIÓN 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 ; TRANSFORMACIÓN 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 DÍGITO NEWDIG: LDI AUX2,0 LPM R0,Z+ LPM R1,Z+ LPM R2,Z+ ; DIVISIÓN 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 RECUPERACIÓN 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 DÍGITOS LD R0,Z+ ; EVITA EL BYTE 4 DE LA TABLA
  • 14. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 14 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información 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 COMPROBACIÓN DEL INGRESO DE LAS MILLAS Y SALIDA DEL RESULTADO EN METROS Son las mismas Subrutinas que para el Programa anterior
  • 15. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 15 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información MODIFICACIÓN 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 transformación de millas a metros para que el Pórtico que controla a los Segmentos no sea el Pórtico C sino el Pórtico A, como se muestra a continuación: Las modificaciones consisten en reemplazar las líneas del programa principal donde se asigna la etiqueta del Pórtico de los Segmentos y la configuración como Pórtico de Salida. .EQU SEGME = PORTC .EQU SEGME = PORTA ; CONTROL SEGMENTOS OUT DDRC,AUX1 OUT DDRA,AUX1 ; PÓRTICO SEGMENTOS
  • 16. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 16 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información OTRA MODIFICACIÓN POR CAMBIOS EN EL CIRCUITO Debido a la necesidad de ahorrar líneas utilizadas en los Pórticos, se puede compartir las líneas 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 modificación adicional a las dos realizadas en el ejercicio anterior, es la de reemplazar la línea del programa principal donde se asigna la etiqueta del Pórtico de la Columna del Teclado: .EQU KEYBC = PORTB .EQU KEYBC = PORTD ; COLUMNAS DEL TECLADO
  • 17. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 17 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información CAMBIAR EN EL CIRCUITO LOS DISPLAYS DE ÁNODO COMÚN POR DISPLAYS DE CÁTODO COMÚN Este cambio en el ejercicio implica reemplazar los transistores PNP que controlan los ánodos comunes por transistores NPN para controlar los cátodos comunes; además, la sustitución 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. También, 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
  • 18. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 18 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información Modificación en la subrutina ASEG para Displays de Cátodo Común: Se debe sustituir la tabla de códigos para los siete segmentos. ; TABLA DE CÓDIGOS DE 7 SEGMENTOS PARA CÁTODO COMÚN (pgfedcba) TABLA: .DB 0b00111111,0b00000110 ;CÓDIGOS 0 y 1 .DB 0b01011011,0b01001111 ;CÓDIGOS 2 y 3 .DB 0b01100110,0b01101101 ;CÓDIGOS 4 y 5 .DB 0b01111101,0b00000111 ;CÓDIGOS 6 y 7 .DB 0b01111111,0b01101111 ;CÓDIGOS 8 y 9 .DB 0b01110111,0b01111100 ;CÓDIGOS A y B .DB 0b00111001,0b01011110 ;CÓDIGOS C y D .DB 0b01111001,0b01110001 ;CÓDIGOS E y F .DB 0b00000000,0b01001000 ;CÓDIGOS SP y = .DB 0b00001000,0b10000000 ;CÓDIGOS CUR y DP Modificaciones en la subrutina SCAN para Displays de Cátodo Común: Se cambian los valores para habilitar cada uno de los displays y para apagar los segmentos; así como, la instrucción para cambiar de display. SCAN: LDI XL,LOW(COD7S) ; INICIO DE CÓDIGOS LDI XH,HIGH(COD7S) LDI AUX2,0B00000100 ; INICIO DE DISPLAYS LDI AUX3,6 ; 6 DISPLAYS SCAN1: LD AUX1,X+ ; TOMA EL CÓDIGO 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 fotografías de la siguiente página, 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 cátodo común controlados por transistores darlington del integrado ULN2803. En este programa no se utilizan al Display de Cristal Líquido, ni al Teclado Hexadecimal y solo se utiliza al Microcontrolador del Equipo de Pruebas de Hardware y de Software. 6x4 teclas
  • 19. SISTEMAS MICROPROCESADOS: Utilización de subrutinas en los programas Página 19 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información