EL ECLIPSE DE LA PAZ (cuento literario). Autor y diseñador JAVIER SOLIS NOYOLA
Ejercicio 03 Porticos
1. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 1
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
EJERCICIOS DE UTILIZACIÓN DE LOS
PÓRTICOS COMO ENTRADAS Y SALIDAS
ENUNCIADO DEL EJERCICIO Nº 1:
Desarrollar un programa para los microcontroladores ATmega164P, que permita
ingresar un número binario de 8 bits mediante DIP switches y muestre el equivalente
número hexadecimal a través de dos displays de 7 segmentos, como se muestra en el
siguiente gráfico esquemático.
EL CIRCUITO incluyendo las resistencias limitadoras de las corrientes que circula por
los LEDs que forman los displays de ánodo común, es el siguiente:
2. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 2
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
LA SOLUCIÓN:
El algoritmo de la solución incluye:
1. Programación de los PÓRTICOS A y B como pórticos de salida. Al PÓRTICO
C no es necesario programarlo como entrada, porque todos los pórticos se
encuentran en este estado después del RESET.
2. Lectura del dato que se ingresa y la separación de los dos dígitos hexadecimales
que forman el byte.
3. Transformación del dígito menos significativo en el código de 7 segmentos
mediante una tabla de datos y la salida del código al pórtico donde se encuentra
el display del dígito menos significativo.
4. Igual al numeral anterior, pero para el dígito más significativo.
5. Regreso al numeral 2, para repetir el proceso nuevamente.
LA CODIFICACIÓN DEL PROGRAMA ES:
; ASIGNACIÓN DE ETIQUETAS A REGISTROS
.DEF DIGMS = R16 ; DÍGITO MAS SIGNIFICATIVO
.DEF DIGLS = R17 ; DÍGITO MENOS SIGNIFICATIVO
; SEGMENTO DE CÓDIGO o MEMORIA FLASH
.CSEG
; PROGRAMACIÓN DE LOS PÓRTICOS DE SALIDA
LDI DIGLS,0xFF ; 0xFF PARA PROG. SALIDAS
OUT DDRA,DIGLS ; PÓRTICO DÍGITO MÁS SIG.
OUT DDRB,DIGLS ; PÓRTICO DÍGITO MENOS SIG.
; LECTURA DE LOS BITS
LEER: IN DIGLS,PINC ; LEER 8 BITS DEL PÓRTICO
; SEPARACIÓN DE LOS DOS DÍGITOS
MOV DIGMS,DIGLS ; COPIAR LOS 8 BITS
ANDI DIGLS,0x0F ; DEJAR SOLO MENOS SIG.
ANDI DIGMS,0xF0 ; DEJAR SOLO MÁS SIG.
SWAP DIGMS ; INTERCAMBIO DE NIBBLES
; SALIDA DEL CÓDIGO DEL DÍGITO MENOS SIGNIFICATIVO
LDI ZL,LOW(TABLA<<1) ; INICIALIZAR PUNTERO
LDI ZH,HIGH(TABLA<<1)
ADD ZL,DIGLS ; APUNTAR AL CÓDIGO
CLR DIGLS
ADC ZH,DIGLS
LPM DIGLS,Z ; TOMAR EL CÓDIGO
OUT PORTB,DIGLS ; SACAR AL PÓRTICO
; SALIDA DEL CÓDIGO DEL DÍGITO MÁS SIGNIFICATIVO
LDI ZL,LOW(TABLA<<1) ;INICIALIZAR PUNTERO
LDI ZH,HIGH(TABLA<<1)
ADD ZL,DIGMS ; APUNTAR AL CÓDIGO
CLR DIGMS
ADC ZH,DIGMS
LPM DIGMS,Z ; TOMAR EL CÓDIGO
OUT PORTA,DIGMS ; SACAR AL PÓRTICO
; FINAL DEL PROCESO
RJMP LEER ; REPETIR TODO EL PROCESO
; TABLA DE CÓDIGOS DE 7 SEGMENTOS PARA ÁNODO COMÚN
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
3. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 3
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
.DB 0b10000110, 0b10001110 ; CÓDIGOS E y F
;
.EXIT ; FIN DEL MODULO FUENTE
DETECCIÓN DE ERRORES MEDIANTE LA SIMULACIÓN:
Al realizar la simulación mediante el PROTEUS, se detecta que no ingresa en forma
correcta el dato desde los DIP switches; debido a que las entradas en alta impedancia no
tienen definido el valor lógico cuando los switches están abiertos, tal como se ve en el
siguiente gráfico.
Existen dos soluciones para este error: La primera consiste en la instalación de
resistencias de Pull-Up externas para las entradas donde se conectan los DIP switches,
como se indica en el primer gráfico de la siguiente página, y. La segunda solución que
consiste en modificar el programa en la parte de programación de los pórticos, para
habilitar las resistencias de Pull-Up internas, aumentando la siguiente instrucción
después de las primeras tres ya existentes.
OUT PORTC,DIGLS ; PARA ACTIVAR PULL UP
CONCLUSIÓN: es necesario al inicio del programa realizar una sola vez la
programación de los pórticos como salida y la habilitación de las resistencias de Pull-Up
en los pórticos que sean de entrada; esto último, para evitar el uso de las resistencias
externas de Pull-Up con lo que se simplifica el circuito.
Líneas de
entrada en alta
impedancia
4. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 4
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
El resultado de la modificación del programa, se puede ver a continuación.
Líneas de
entrada con
Pull-Up activado
5. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 5
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
ENUNCIADO DEL EJERCICIO Nº 2:
Modificar al programa anterior para que permita ingresar un número binario de 8 bits
mediante DIP switches y muestre el equivalente número hexadecimal con signo a través
de dos displays de 7 segmentos y un LED conectado en el bit 0 de otro Pórtico,
considerando que el número binario está utilizando la representación en
COMPLEMENTO DE UNO.
LA SOLUCIÓN:
El algoritmo debe ser modificado de la siguiente forma:
1. Programación de los PÓRTICOS A, B y D como pórticos de salida. Habilitar las
resistencias de Pull-Up del PÓRTICO C.
2. Lectura del dato que se ingresa y analizar el bit más significativo (bit 7) para
determinar si se enciende o se a paga el LED.
3. Nuevamente analizar el bit 7 para dejar el dato tal como se leyó, si es positivo; o
realizar el complemento de uno si es negativo y proceder a la separación de los
dos dígitos hexadecimales que forman el byte.
4. Transformación del dígito menos significativo en el código de 7 segmentos
mediante una tabla de datos y la salida al pórtico donde se encuentra el display
del dígito menos significativo.
5. Igual al numeral anterior, pero para el dígito más significativo.
6. Regreso al numeral 2, para repetir el proceso nuevamente.
LA CODIFICACIÓN DEL PROGRAMA ES:
; ASIGNACIÓN DE ETIQUETAS A REGISTROS
.DEF DIGMS = R16 ; DÍGITO MAS SIGNIFICATIVO
.DEF DIGLS = R17 ; DÍGITO MENOS SIGNIFICATIVO
; SEGMENTO DE CÓDIGO o MEMORIA FLASH
.CSEG
; PROGRAMACIÓN DE LOS PÓRTICOS DE SALIDA
LDI DIGLS,0XFF ; 0xFF PARA PROG. SALIDAS
OUT DDRA,DIGLS ; PÓRTICO DÍGITO MÁS SIG.
OUT DDRB,DIGLS ; PÓRTICO DÍGITO MENOS SIG.
OUT DDRD,DIGLS ; PÓRTICO DEL SIGNO
OUT PORTC,DIGLS ; PARA ACTIVAR PULL UP
; LECTURA DE LOS BITS
LEER: IN DIGLS,PINC ; LEER 8 BITS DEL PÓRTICO
SBRS DIGLS,7 ; POSITIVO APAGAR EL LED
CBI PORTC,0
SBRC DIGLS,7 ; NEGATIVO PRENDER EL LED
SBI PORTC,0
; PARA NÚMEROS NEGATIVOS SE OBTIENE EL COMPLEMENTO DE UNO
SBRC DIGLS,7 ; NEGATIVO COMPLEMENTO 1
COM DIGLS
; SEPARACIÓN DE LOS DOS DÍGITOS
MOV DIGMS,DIGLS ; COPIAR LOS 8 BITS
ANDI DIGLS,0x0F ; DEJAR SOLO MENOS SIG.
ANDI DIGMS,0xF0 ; DEJAR SOLO MÁS SIG.
SWAP DIGMS ; INTERCAMBIO DE NIBBLES
; SALIDA DEL CÓDIGO DEL DÍGITO MENOS SIGNIFICATIVO
LDI ZL,LOW(TABLA<<1) ; INICIALIZAR PUNTERO
LDI ZH,HIGH(TABLA<<1)
ADD ZL,DIGLS ; APUNTAR AL CÓDIGO
CLR DIGLS
6. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 6
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
ADC ZH,DIGLS
LPM DIGLS,Z ; TOMAR EL CÓDIGO
OUT PORTB,DIGLS ; SACAR AL PÓRTICO
; SALIDA DEL CÓDIGO DEL DÍGITO MÁS SIGNIFICATIVO
LDI ZL,LOW(TABLA<<1) ;INICIALIZAR PUNTERO
LDI ZH,HIGH(TABLA<<1)
ADD ZL,DIGMS ; APUNTAR AL CÓDIGO
CLR DIGMS
ADC ZH,DIGMS
LPM DIGMS,Z ; TOMAR EL CÓDIGO
OUT PORTA,DIGMS ; SACAR AL PÓRTICO
; FINAL DEL PROCESO
RJMP LEER ; REPETIR TODO EL PROCESO
; TABLA DE CÓDIGOS DE 7 SEGMENTOS PARA ÁNODO COMÚN
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
;
.EXIT ; FIN DEL MODULO FUENTE
A continuación se muestran dos casos de comprobación mediante el simulador
PROTEUS, para el ejercicio de transformación de un número binario de 8 bits escrito en
complemento de uno a su equivalente hexadecimal con signo.
PRIMER CASO
Número binario: 01110000
Hexadecimal con signo: + 70 LED del signo: Apagado
7. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 7
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
SEGUNDO CASO
Número binario: 11110000
Hexadecimal con signo: - 0F LED del signo: Encendido
ENUNCIADO DEL EJERCICIO Nº 3:
Modificar el programa anterior considerando que el número binario está utilizando la
representación en COMPLEMENTO DE DOS.
LA SOLUCIÓN:
El algoritmo es idéntico al anterior, únicamente se debe sustituir la obtención del
complemento de uno por la obtención del complemento de dos.
Esto se consigue en el código del programa reemplazando:
; PARA NÚMEROS NEGATIVOS SE OBTIENE EL COMPLEMENTO DE UNO
SBRC DIGLS,7 ; NEGATIVO COMPLEMENTO 1
COM DIGLS
Por:
; PARA NÚMEROS NEGATIVOS SE OBTIENE EL COMPLEMENTO DE DOS
SBRC DIGLS,7 ; NEGATIVO COMPLEMENTO 2
NEG DIGLS
Casos de comprobación mediante el simulador PROTEUS.
8. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 8
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
01111111 en Complemento de 2 = + 7F hexadecimal
11111111 en Complemento de 2 = - 01 hexadecimal
9. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 9
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
ENUNCIADO DEL EJERCICIO Nº 4:
Modificar los dos programas anteriores considerando que el número binario está
utilizando la representación en SIGNO Y MAGNITUD.
LA SOLUCIÓN:
El algoritmo es idéntico a los dos anteriores, únicamente se debe sustituir la obtención
de los complementos por la eliminación del signo en el número.
Esto se consigue en el código del programa reemplazando:
; PARA NÚMEROS NEGATIVOS SE OBTIENE EL COMPLEMENTO DE DOS
SBRC DIGLS,7 ; NEGATIVO COMPLEMENTO 2
NEG DIGLS
Por:
; ELIMINAR EL SIGNO
CBR DIGLS,0b10000000 ; BORRAR EL BIT 7
Casos de comprobación mediante el simulador PROTEUS.
01010101 en Signo y Magnitud = + 55 hexadecimal
10. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 10
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
11010101 en Signo y Magnitud = - 55 hexadecimal
ENUNCIADO DEL EJERCICIO Nº 5:
Desarrollar un programa que integre los cuatro ejercicios anteriores y que puedan ser
escogidas las alternativas mediante dos interruptores conectados a los terminales 7 y 6
del Pórtico D, como se muestra en la tabla y en el circuito que se muestran a
continuación:
ALTERNATIVA SW2 SW3 PD7 PD6
SIN SIGNO CERRADO CERRADO 0 0
COMPLEMENTO DE 1 CERRADO ABIERTO 0 1
COMPLEMENTO DE 2 ABIERTO CERRADO 1 0
SIGNO Y MAGNITUD ABIERTO ABIERTO 1 1
11. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 11
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
La solución implica que PC0 sea programado como pórtico de salida, mientras que PC6
y PC7 como pórticos de entradas. El código del programa se muestra a continuación:
LA CODIFICACIÓN DEL PROGRAMA ES:
; ASIGNACIÓN DE ETIQUETAS A REGISTROS
.DEF DIGMS = R16 ; DÍGITO MAS SIGNIFICATIVO
.DEF DIGLS = R17 ; DÍGITO MENOS SIGNIFICATIVO
.DEF TIPO = R18 ; TIPO DE TRANSFORMACIÓN
; SEGMENTO DE CÓDIGO o MEMORIA FLASH
.CSEG
; PROGRAMACIÓN DE LOS PÓRTICOS DE SALIDA
LDI DIGLS,0XFF ; 0xFF PARA PROG. SALIDAS
OUT DDRA,DIGLS ; PÓRTICO DÍGITO MÁS SIG.
OUT DDRB,DIGLS ; PÓRTICO DÍGITO MENOS SIG.
OUT PORTC,DIGLS ; PARA ACTIVAR PULL UP
OUT PORTD,DIGLS ; PARA ACTIVAR PULL UP
LDI DIGLS,0x01 ; 0x01 BIT 0 SALIDA
OUT DDRD,DIGLS ; PÓRTICO DEL SIGNO
; LECTURA DE LOS BITS
LEER: IN DIGLS,PINC ; LEER 8 BITS DEL PÓRTICO
IN TIPO,PIND ; LEER 2 BITS DEL TIPO
ANDI TIPO,0b11000000
BRNE SIGNO ; SALTA SI ES CON SIGNO
CBI PORTC,0 ; APAGAR EL LED
RJMP SEPAR ; A SEPARAR LOS DÍGITOS
SIGNO: SBRS DIGLS,7 ; POSITIVO APAGAR EL LED
CBI PORTC,0
SBRC DIGLS,7 ; NEGATIVO PRENDER EL LED
SBI PORTC,0
; PARA NÚMEROS NEGATIVOS PROCESAR SEGÚN EL TIPO
SBRS DIGLS,7 ; NEGATIVO COMPLEMENTAR
RJMP SEPAR ; A SEPARAR LOS DÍGITOS
CHECK1: CPI TIPO,0B10000000 ; COMPLEMENTO DE DOS
BRNE CHECK2
12. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 12
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
NEG DIGLS
RJMP SEPAR ; A SEPARAR LOS DÍGITOS
CHECK2: CPI TIPO,0B01000000 ; COMPLEMENTO DE UNO
BRNE CHECK3
COM DIGLS
RJMP SEPAR ; A SEPARAR LOS DÍGITOS
CHECK3: CBR DIGLS,0b10000000 ; ELIMINAR EL SIGNO
; SEPARACIÓN DE LOS DOS DÍGITOS
SEPAR: MOV DIGMS,DIGLS ; COPIAR LOS 8 BITS
ANDI DIGLS,0x0F ; DEJAR SOLO MENOS SIG.
ANDI DIGMS,0xF0 ; DEJAR SOLO MÁS SIG.
SWAP DIGMS ; INTERCAMBIO DE NIBBLES
; SALIDA DEL CÓDIGO DEL DÍGITO MENOS SIGNIFICATIVO
LDI ZL,LOW(TABLA<<1) ; INICIALIZAR PUNTERO
LDI ZH,HIGH(TABLA<<1)
ADD ZL,DIGLS ; APUNTAR AL CÓDIGO
CLR DIGLS
ADC ZH,DIGLS
LPM DIGLS,Z ; TOMAR EL CÓDIGO
OUT PORTB,DIGLS ; SACAR AL PÓRTICO
; SALIDA DEL CÓDIGO DEL DÍGITO MÁS SIGNIFICATIVO
LDI ZL,LOW(TABLA<<1) ;INICIALIZAR PUNTERO
LDI ZH,HIGH(TABLA<<1)
ADD ZL,DIGMS ; APUNTAR AL CÓDIGO
CLR DIGMS
ADC ZH,DIGMS
LPM DIGMS,Z ; TOMAR EL CÓDIGO
OUT PORTA,DIGMS ; SACAR AL PÓRTICO
; FINAL DEL PROCESO
RJMP LEER ; REPETIR TODO EL PROCESO
; TABLA DE CÓDIGOS DE 7 SEGMENTOS PARA ÁNODO COMÚN
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
;
.EXIT ; FIN DEL MODULO FUENTE
Comprobación mediante el simulador del PROTEUS.
Número binario: 11111111
SW2 = CERRADO SW3 = CERRADO
Hexadecimal sin signo: FF LED: Apagado
SW2 = CERRADO SW3 = ABIERTO
Hexadecimal con signo en Complemento de 1: - 00 LED: Prendido
SW2 = ABIERTO SW3 = CERRADO
Hexadecimal con signo en Complemento de 2: - 01 LED: Prendido
SW2 = ABIERTO SW3 = ABIERTO
Hexadecimal con signo en Signo y Magnitud: - 7F LED: Prendido
13. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 13
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
11111111 Sin Signo = FF hexadecimal
11111111 en Complemento de 1 = - 00 hexadecimal
14. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 14
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
11111111 en Complemento de 2 = - 01 hexadecimal
11111111 en Magnitud y Signo = - 7F hexadecimal
COMPROBACIÓN REAL DEL PROGRAMA
Esta actividad conlleva la construcción del circuito en un Protoboard, para lo cual se
necesita el microcontrolador ATmega164P, la resistencia y el condensador para el
RESET, dos displays de ánodo común y un led independiente con sus resistencias
15. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 15
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
limitadoras de corriente para ver el resultado, 8 DIP switches para la entrada del número
binario y 2 Switches independientes para escoger el tipo de conversión. A estos
elementos se debe añadir el Programador que permite descargar el programa desde el
archivo TODAS.HEX a la FLASH del microcontrolador.
En el Protoboard, que tiene una fuente regulada de +5 Vdc para polarización, se
construye el circuito en forma ordenada. Terminado con las conexiones a los orificios
donde se conecta el programador.
16. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 16
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
Con el software del programador denominado PROGISP, cargamos primero en el buffer
el Módulo Objeto y configuramos las etapas de la programación, en particular si es un
microcontrolador nuevo se desactiva el fusible JTAGEN y se activa la etapa de
Programación de los Fusibles. En cambio, si es un microcontrolador ya usado, es
preferible desactivar la etapa de Programación de los Fusibles, sin importar en qué
estado se encuentren la condición de cada uno.
Lo que se transfiere a la FLASH del ATmega164P cuando se activa el botón AUTO,
puede ser observado en la pestaña BUFFER.
Palabras del Código de
Máquina del Programa y
la Tabla de Datos de los
Códigos de 7 Segmentos
17. SISTEMAS MICROPROCESADOS: Ejercicios para la utilización de los Pórticos de E/S
Página 17
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
Una vez que termina la programación y verificación, se retira el programador y se
comprueba el funcionamiento en forma real.