Sesión de aprendizaje Planifica Textos argumentativo.docx
Funcionamiento del USART
1. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 1
TRANSMISIÓN DE TEXTOS
Programa para comprobar la transmisión de textos, a través uno de los USART
(Receptor y Transmisor Universal Sincrónico y Asincrónico) que posee el ATmega164,
sin utilizar interrupciones y configurado en el modo asincrónico, la comprobación se
realiza mediante el Hyper Terminal que poseen las computadoras personales.
En este caso es necesario implementar el conversor entre niveles TTL y RS-232,
utilizando el circuito integrado MAX232 con 4 capacitores de 10μF como se indica en
el circuito.
Conector
para el cable
de la PC
CÓDIGO DEL PROGRAMA PARA ENVIAR TEXTOS:
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
;
.DEF AUX1 = R16
.DEF AUX2 = R17
.DEF AUX3 = R18
;
.CSEG
JMP PROGP
;
PROGP:
; CONFIGURACIÓN DEL USART 0
; PROGRAMACIÓN DEL REGISTRO DE CONTROL C
; UMSEL01:0=00 TRABAJAR EN EL MODO ASINCRÓNICO
; UPM01:0=00 DESHABILITAR LA PARIDAD
; USBS0=1 DOS BITS DE PARADA
; UCSZ01:0=11 TAMAÑO DEL CARACTER DE 8 BITS
; UCPOL0=0 POLARIDAD DEL RELOJ NO SE USA EN ASINCRÓNICO
LDI AUX1,0B00001110
STS UCSR0C,AUX1
; PROGRAMACIÓN DEL REGISTRO DE CONTROL B
; RXCIE0=0 DESHABILITA LAS INTERRUPCIONES EN LA RECEPCIÓN
; TXCIE0=0 DESHABILITA LAS INTERRUPCIONES EN LA TRANSMISIÓN
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
2. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 2
; UDRIE0=0 DESHABILITA LAS INTERRUPCIONES DATOS VACÍO
; RXEN0=1 HABILITA LA RECEPCIÓN
; TXEN0=1 HABILITA LA TRANSMISIÓN
; UCSZ02=0 TAMAÑO DEL CARACTER DE 8 BITS
; RXB80=0 NOVENO BIT DE LA RECEPCIÓN
; TXB80=0 NOVENO BIT DE LA TRANSMISIÓN
LDI AUX1,0B00011000
STS UCSR0B,AUX1
; PROGRAMACIÓN DE LA VELOCIDAD DE TRANSMISIÓN
; UBRR0H REGISTRO DEL BAUD RATE CON 1 MHz
LDI AUX1,0B00000000
STS UBRR0H,AUX1
; UBRR0L REGISTRO DEL BAUD RATE CON 1 MHz
LDI AUX1,25 ;BR=2400 CON U2X=0
STS UBRR0L,AUX1
; PARA ENVIAR UN MENSAJE
SEND: LDI ZL,LOW(MSJ<<1)
LDI ZH,HIGH(MSJ<<1)
SEND1: LPM AUX2,Z+
STS UDR0,AUX2
; LAZO HASTA QUE ENCIENDA LA BANDERA TRANSMISIÓN COMPLETA
SEND2: LDS AUX1,UCSR0A
SBRS AUX1,TXC0
RJMP SEND2
; BORRAR LA BANDERA DE TRANSMISIÓN COMPLETA
; MANTENER EL VALOR DE U2X
LDI AUX1,0B01100000 ;U2X=0
STS UCSR0A,AUX1
; ÚLTIMO CARACTER
CPI AUX2,0x0A
BRNE SEND1
; LAZO HASTA QUE ENCIENDA LA BANDERA RECEPCIÓN COMPLETA
RECIBE: LDS AUX1,UCSR0A
SBRS AUX1,RXC0
RJMP RECIBE
LDS AUX1,UDR0
;
RJMP SEND
;
MSJ: .DB "EJEMPLO DE TRANSMISION",0x0D,0x0A
;
.EXIT ; FIN DEL MODULO FUENTE
RESULTADOS CON EL HYPER TERMINAL:
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
3. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 3
Al cambiar la velocidad en la PC, por ejemplo a 4800 baudios, los datos que se reciben
son diferentes a los que se envían.
Igual sucede cuando la velocidad en la PC es menor, ejemplo a 1200 baudios.
El simulador del PROTEUS tiene un error en el funcionamiento del USART, por lo que
es necesario introducir un lazo de espera al enviar los datos, para poder mostrar el
funcionamiento del programa en el Terminal Virtual y en el Analizador Lógico del
simulador, que se conectan como se indica a continuación.
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
4. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 4
La modificación en el programa es la siguiente:
; BORRAR LA BANDERA DE TRANSMISIÓN COMPLETA
; MANTENER EL VALOR DE U2X
LDI AUX1,0B01100000 ;U2X=0
STS UCSR0A,AUX1
RCALL DELAY ; PARA VER EN EL PROTEUS
; ÚLTIMO CARACTER
CPI AUX2,0x0A
BRNE SEND1
Donde:
; ESPERA ANTES DE CONTINUAR
DELAY: LDI AUX1,8
CLR R15
DELAY1: DEC R15
BRNE DELAY1
DEC AUX1
BRNE DELAY1
RET
SIMULACIÓN CON EL PROTEUS:
“A” que
se recibe “J” “E”
“E” que se
transmite
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
5. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 5
IDENTIFICAR UN CARACTER ESPECÍFICO QUE
SE RECIBE
El siguiente programa sirve para comprobar el instante en que mediante el Hyper
Terminal de la computadora personal se envía al microcontrolador un caracter
específico; como por ejemplo la letra Z mayúscula.
CÓDIGO DEL PROGRAMA PARA IDENTIFICAR UN CARACTER:
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
;
.DEF AUX1 = R16
.DEF AUX2 = R17
.DEF AUX3 = R18
;
.CSEG
JMP PROGP
;
PROGP:
; PROGRAMACIÓN DEL REGISTRO DE CONTROL C
; UMSEL01:00=00 TRABAJAR EN EL MODO ASINCRÓNICO
; UPM01:00=00 DESHABILITAR LA PARIDAD
; USBS0=1 DOS BITS DE PARADA
; UCSZ01:00=11 TAMAÑO DEL CARACTER DE 8 BITS
; UCPOL0=0 POLARIDAD DEL RELOJ NO SE USA EN ASINCRÓNICO
LDI AUX1,0B00000110
STS UCSR0C,AUX1
; PROGRAMACIÓN DEL REGISTRO DE CONTROL B
; RXCIE0=0 DESHABILITA LAS INTERRUPCIONES EN LA RECEPCIÓN
; TXCIE0=0 DESHABILITA LAS INTERRUPCIONES EN LA TRANSMISIÓN
; UDRIE0=0 DESHABILITA LAS INTERRUPCIONES DATOS VACÍO
; RXEN0=1 HABILITA LA RECEPCIÓN
; TXEN0=1 HABILITA LA TRANSMISIÓN
; UCSZ02=0 TAMAÑO DEL CARACTER DE 8 BITS
; RXB80=0 NOVENO BIT DE LA RECEPCIÓN
; TXB80=0 NOVENO BIT DE LA TRANSMISIÓN
LDI AUX1,0B00011000
STS UCSR0B,AUX1
; PROGRAMACIÓN DE LA VELOCIDAD DE TRANSMISIÓN
; CUATR0 BITS RESERVADOS EN 0000
; UBRR011:8=0000 REGISTRO DEL BAUD RATE CON 1 MHz
LDI AUX1,0B00000000
STS UBRR0H,AUX1
; UBRR07:0 REGISTRO DEL BAUD RATE CON 1 MHz
LDI AUX1,25 ;BR=2400 CON U2X0=0
STS UBRR0L,AUX1
; PARA ENVIAR UN MENSAJE
SEND: LDI ZL,LOW(MSJ<<1)
LDI ZH,HIGH(MSJ<<1)
SEND1: LPM AUX2,Z+
STS UDR0,AUX2
; LAZO HASTA QUE ENCIENDA LA BANDERA TRANSMISIÓN COMPLETA
SEND2: LDS AUX1,UCSR0A
SBRS AUX1,TXC0
RJMP SEND2
; BORRAR LA BANDERA DE TRANSMISIÓN COMPLETA
; MANTENER EL VALOR DE U2X0
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
6. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 6
LDI AUX1,0B01100000 ;U2X0=0
STS UCSR0A,AUX1
; ULTIMO CARACTER
CPI AUX2,0x0A
BRNE SEND1
; LAZO HASTA QUE ENCIENDA LA BANDERA RECEPCIÓN COMPLETA
RECIBE: LDS AUX1,UCSR0A
SBRS AUX1,RXC0
RJMP RECIBE
LDS AUX1,UDR0
; COMPRUEBA QUE SEA UNA LETRA ESPECÍFICA
CPI AUX1,'Z'
BRNE RECIBE
;
RJMP SEND
;
MSJ: .DB "EJEMPLO: RECEPCION DE UNA LETRA ESPECIFICA"
.DB 0x0D,0x0A
;
.EXIT ; FIN DEL MODULO FUENTE
RESULTADOS CON EL HYPER TERMINAL:
Con la misma modificación mencionada anteriormente, se puede comprobar el
funcionamiento del programa con el simulador del PROTEUS.
En los dos gráficos de la siguiente página, se comprueba que el microcontrolador no
transmite cuando recibe desde el Terminal Virtual un caracter diferente a la Z
mayúscula y transmite cuando la recibe.
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
7. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 7
“z” El microcontrolador
no transmite
El microcontrolador recibe una z minúscula
“Z”
El microcontrolador
transmite
El microcontrolador recibe una Z mayúscula
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
8. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 8
RETRANSMISIÓN DE UN TEXTO QUE SE RECIBE
Programa que recibe un texto, lo almacena en la SRAM y vuelve a retransmitirlo.
CÓDIGO DEL PROGRAMA PARA RETRANSMITIR:
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
;
.DEF AUX1 = R16
.DEF AUX2 = R17
.DEF AUX3 = R18
;
.DSEG
HEADER: .BYTE 3
BUFFER: .BYTE 100
;
.CSEG
JMP PROGP
;
PROGP: LDI AUX1,LOW(RAMEND)
OUT SPL,AUX1
LDI AUX1,HIGH(RAMEND)
OUT SPH,AUX1
; PROGRAMACIÓN DEL REGISTRO DE CONTROL C
; URSEL0=1 PARA ACCEDER AL REGISTRO UCSRC
; UMSEL0=0 TRABAJAR EN EL MODO ASINCRÓNICO
; UPM01:0=00 DESHABILITAR LA PARIDAD
; USBS0=1 DOS BITS DE PARADA
; UCSZ01:0=11 TAMAÑO DEL CARACTER DE 8 BITS
; UCPOL0=0 POLARIDAD DEL RELOJ NO SE USA EN ASINCRÓNICO
LDI AUX1,0B00001110
STS UCSR0C,AUX1
; PROGRAMACIÓN DEL REGISTRO DE CONTROL B
; RXCIE0=0 DESHABILITA LAS INTERRUPCIONES EN LA RECEPCIÓN
; TXCIE0=0 DESHABILITA LAS INTERRUPCIONES EN LA TRANSMISIÓN
; UDRIE0=0 DESHABILITA LAS INTERRUPCIONES DATOS VACÍO
; RXEN0=1 HABILITA LA RECEPCIÓN
; TXEN0=1 HABILITA LA TRANSMISIÓN
; UCSZ20=0 TAMAÑO DEL CARACTER DE 8 BITS
; RXB80=0 NOVENO BIT DE LA RECEPCIÓN
; TXB80=0 NOVENO BIT DE LA TRANSMISIÓN
LDI AUX1,0B00011000
STS UCSR0B,AUX1
; DUPLICACIÓN DE LA VELOCIDAD
LDI AUX1,0B00000010 ;U2X0=1
STS UCSR0A,AUX1
; PROGRAMACIÓN DE LA VELOCIDAD DE TRANSMISIÓN
; TRES BITS RESERVADOS EN 0000
; UBRR011:8=0000 REGISTRO DEL BAUD RATE CON 1 MHz
LDI AUX1,0B00000000
STS UBRR0H,AUX1
;UBRR7:0 REGISTRO DEL BAUD RATE CON 1 MHz
LDI AUX1,12 ; BR=9600 CON U2X0=1
STS UBRR0L,AUX1
; ENCABEZADO DE LA RETRANSMISIÓN
LDI AUX1,'/'
STS HEADER+0,AUX1
STS HEADER+1,AUX1
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
9. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 9
STS HEADER+2,AUX1
; PARA ENVIAR EL MENSAJE DE INICIO
INICIO: LDI ZL,LOW(MSJ01<<1)
LDI ZH,HIGH(MSJ01<<1)
RCALL SEND
; PARA ALMACENAR EL MENSAJE QUE LLEGA SERIALMENTE
LDI XL,LOW(BUFFER)
LDI XH,HIGH(BUFFER)
RECIBE: LDS AUX1,UCSR0A
SBRS AUX1,RXC0
RJMP RECIBE
; ALMACENA LOS CARACTERES
LDS AUX1,UDR0
ST X+,AUX1
; COMPRUEBA QUE SEA FIN DEL MENSAJE
CPI AUX1,0x0A
BRNE RECIBE
; PARA CONFIRMAR LA RECEPCIÓN
LDI ZL,LOW(MSJ02<<1)
LDI ZH,HIGH(MSJ02<<1)
RCALL SEND
; PARA SEPARAR
LDI ZL,LOW(MSJ04<<1)
LDI ZH,HIGH(MSJ04<<1)
RCALL SEND
; PARA RE-ENVIAR EL MENSAJE
LDI XL,LOW(HEADER)
LDI XH,HIGH(HEADER)
RSND: LD AUX2,X+
STS UDR0,AUX2
; LAZO HASTA QUE ENCIENDA LA BANDERA TRANSMISIÓN COMPLETA
RSND1: LDS AUX1,UCSR0A
SBRS AUX1,TXC0
RJMP RSND1
; BORRAR LA BANDERA DE TRANSMISIÓN COMPLETA
; MANTENER EL VALOR DE U2X0
LDI AUX1,0B01100010
STS UCSR0A,AUX1
; ÚLTIMO CARACTER
CPI AUX2,0x0A
BRNE RSND
; PARA CONFIRMAR LA TRANSMISIÓN
LDI ZL,LOW(MSJ03<<1)
LDI ZH,HIGH(MSJ03<<1)
RCALL SEND
; PARA SEPARAR
LDI ZL,LOW(MSJ04<<1)
LDI ZH,HIGH(MSJ04<<1)
RCALL SEND
;
RJMP INICIO
; SUBRUTINA PARA ENVIAR UN MENSAJE
SEND: LPM AUX2,Z+
STS UDR0,AUX2
; LAZO HASTA QUE ENCIENDA LA BANDERA TRANSMISIÓN COMPLETA
SEND1: LDS AUX1,UCSR0A
SBRS AUX1,TXC0
RJMP SEND1
; BORRAR LA BANDERA DE TRANSMISIÓN COMPLETA
; MANTENER EL VALOR DE U2X
LDI AUX1,0B01100010
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información
10. SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del
USART
Página 10
STS UCSR0A,AUX1
; ÚLTIMO CARACTER
CPI AUX2,0x0A
BRNE SEND
RET
;
MSJ01: .DB "EJEMPLO: PARA LA RETRANSMISION",0x0D,0x0A
MSJ02: .DB "MENSAJE RECIBIDO",0x0D,0x0A
MSJ03: .DB "MENSAJE RETRANSMITIDO ",0x0D,0x0A
MSJ04: .DB 0x0D,0x0A
;
.EXIT ; FIN DEL MODULO FUENTE
RESULTADOS CON EL HYPER TERMINAL:
También se puede comprobar con el simulador del PROTEUS modificando el programa
como se indicó anteriormente y considerando que el Terminal Virtual no envía el
código de Avance de Línea cuando de presiona la tecla “ENTER”.
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes
de Información