Funcionamiento del USART

10
SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART Página 1 Ing. Jaime E. Velarde Departamento de Electrónica, Telecomunicaciones y Redes de Información 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. 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 Conector para el cable de la PC

description

Ejercicios de programación del USART

Transcript of Funcionamiento del USART

Page 1: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 1

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

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.

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

Conector

para el cable

de la PC

Page 2: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 2

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Informació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

; 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:

Page 3: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 3

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

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.

Page 4: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 4

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

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

“E” que se

transmite

“J” “E”

Page 5: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 5

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

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

Page 6: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 6

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

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.

Page 7: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 7

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

El microcontrolador recibe una z minúscula

El microcontrolador recibe una Z mayúscula

“Z”

“z”

El microcontrolador

transmite

El microcontrolador

no transmite

Page 8: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 8

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

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

Page 9: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 9

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

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

Page 10: Funcionamiento del USART

SISTEMAS MICROPROCESADOS: Programas para comprobar el funcionamiento del USART

Página 10

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

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