Ejercicio 05 Subrutinas

19
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.

description

Ejercicio para el barrido de teclados y de displyas con subrutinas

Transcript of Ejercicio 05 Subrutinas

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