Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SESIN 03
COMUNICACION SERIAL
PARTE TERICA
PARTE PRCTICA
TRANSMISON DE DATOS A LA PC
RECEPCION DE DATOS DEL MICROCONTROLADOR
Las lneas discontinuas separan las tres partes principales del USART: el Generador de reloj, el
Transmisor y el Receptor.
Los registros USART Transmit Data Buffer y USART Receive Data Buffer comparten la misma
direccin en el espacio de E/S, la cual es llamada USART Data Register (UDR). El registro Transmit
Data Buffer (TXB) ser el registro de destino de cualquier dato que se escriba en el UDR. Leer el
UDR equivaldr a leer el contenido del registro Receive Data Buffer (RXB).
El buffer de transmisin slo puede ser escrito cuando la bandera UDRE del registro UCSRA est en
1. El dato que sea escrito cuando no se cumpla esta condicin ser ignorado. Cuando el transmisor est
habilitado cualquier dato que sea escrito en el buffer de transmisin pasar al registro Transmit Shift
Register en el momento en que est vaco, luego ser transmitido serialmente por el pin TxD.
El receptor est formado por una FIFO de dos niveles, su estado cambiar cada vez que se realice un
acceso al buffer de recepcin.
El registro UCSRC comparte la misma direccin en el espacio de E/S que el registro UBRRH.
El registro UBRRH comparte la misma direccin en el espacio de E/S que el registro UCSRC.
I. OBJETIVO
Aprender a utilizar el puerto de comunicacin serial asncrona del microcontrolador ATmega8,
como medio de comunicacin con un computador personal.
II. MATERIALES
1 mdulo de entrenamiento AvrPUCP -Mega8.
1 Mdulo de entrada/salida.
1 Cable de programacin
1 computadora personal.
Entorno de desarrollo VMLAB
Cables de conexin
Cable de comunicacin serial RS232
La comunicacin serial es el proceso mediante el cual se enva uno o mas datos bit por bit, en
forma secuencial y usando un canal de comunicacin. En contraste, en la comunicacin paralela,
todos los bits de cada dato o smbolo son enviados juntos.
El estndar de comunicacin serial que se desarrollar en esta seccin ser el protocolo RS-232
asncrona, la cual esta presente en muchas computadoras personales ya que a pesar de su
antigedad y baja velocidad sigue siendo usada en muchos dispositivos de control, equipos de
medicin, lectores de cdigo de barras, etc. gracias a su bajo costo de implementacin y sencillo
protocolo.
Como todo protocolo de comunicacin, el protocolo RS232 tiene una trama caracterstica, la cual
esta conformada por seales de inicio y parada , as como deteccin de errores. La figura 3.1
muestra como esta conformada la trama.
1
DATOS P
0
BIT DE PARIDAD
figura 3.1 Trama de comunicacin serial Asncrona del protocolo RS232
Bit de inicio (start): es un 0 lgico cuyo ancho esta dado por la velocidad de comunicacin.
Datos (data): es la informacin propiamente dicha que se desea enviar o recibir y que se
conoce ms como carcter. El BIT menos significativo de dato es el primero en ser enviado y
el ltimo es el BIT ms significativo. En los microcontroladores Atmel AVR la cantidad de
bits por cada dato (denominado bits por carcter), es programable, pudiendo ser: 5, 6, 7, 8 9
bits. Normalmente se usan 8 bits.
Bit de Paridad (parity): se usa para verificar la integridad del dato durante la comunicacin.
Puede ser de 1 0 (comunicacin sin paridad) bits de longitud. En el primer caso
(comunicacin con paridad), para los microcontroladores Atmel AVR, existen las siguiente
posibilidades:
o Par (even): cuando la suma de los bits en 1 lgico del dato y el bit de paridad es un
nmero par (puede ser 1 0)
o Impar (odd): cuando la suma de los bits en 1 lgico del dato y el bit de paridad es un
nmero impar (puede ser 1 0)
o Marca (mark): se usa en comunicaciones multi-procesadores para indicar que el dato
enviado es en realidad una direccin de esclavo (siempre es 1).
o Espacio (space): se usa en comunicaciones multi-procesadores para indicar que el dato
enviado es informacin para el esclavo previamente direccionado (siempre es 0).
Baudios: es el nmero de variaciones por segundo que tiene la seal transmitida por algn
medio de comunicacin. NO necesariamente es igual a los bits por segundo transmitidos. Por
ejemplo, si se utilizaran 4 valores de voltaje diferentes para representar a un nmero de dos
bits y se quieren enviar 2000 bits de informacin en un segundo por un par de cables haciendo
variar el voltaje en el cable, las variaciones de voltaje ocurriran 1000 veces por segundo; es
decir, la velocidad de transmisin sera de 1000 baudios, sin embargo, cada valor de voltaje
representa a dos bits de informacin y por lo tanto la velocidad de transmisin de datos es
2000 bps.
IV. PROCEDIMIENTO
Ejemplo 1
Desarrolle un programa para el microcontrolador ATMEGA8 cada vez que se presione y suelte
un pulsador enve un carcter a una computadora personal haciendo uso de la comunicacin
serial asncrona.
Paso 1 Ejecutar el entorno VMLAB y crear un nuevo proyecto para el atmega8 con el nombre serial1
El modulo TTY es un componente interactivo basado en el protocolo RS-232. una vez colocado , este ser
mostrado en el Panel de Control del VMLab. Este modulo tiene una ventana para transmisin (TX
window) y otra para recepcin (RX window), tambin posee un botn de configuracin que permite
cambiar los parmetros en forma visual. Una vez conectado a nuestro proyecto mediante los nodos
TX/RX. Cualquier carcter recibido a travs del nodo RX ser mostrado en la ventada de recepcin.
Entonces, para simular el programa Usart1 los parmetros del modulo TTY deben ser:
Para simular un Pulsador conectado al puerto B0 ser necesario usar uno de los SWITCH/KEY
interactivos (K0) y una resistencia (R0) conectada a tierra. Un circuito anti-rebote no es necesario en este
caso. As, los parmetros requeridos son:
Tanto el transmisor como el receptor, deben poseer los mismo parmetros de comunicacin (baudios, bits
por carcter, etc.) antes de iniciar cualquier transmisin. Para ello se deben configurar los registros
necesarios en el microcontrolador para establecer la comunicacin serial asncrona as como el puerto PB0
para detectar los cambios de estado en el pulsador.
Configurar USART:
4800, 8bits, paridad par,
1 bit de parada
Presion el
pulsador ?
NO
SI
Solto el
pulsador ? NO
SI
Buffer de
Tx libre ?
NO
SI
;*******************************************************
;* *
;* Laboratorio de Sistemas Digitales *
;* *
;* Programa que al presionar el pulsador conectado al *
;* pin PB0 enva serialmente el carcter 'V' usando *
;* el protocolo RS-232. La finalidad de este programa *
;* *
;* Autor: Laureano Rodrguez *
;* *
;*******************************************************
.include "C:\VMLAB\include\m8def.inc"
inicio:
;********** Configuracin de parmetros ***********
Para ensamblar el programa presione la tecla F9 o haga doble clic en el icono build que se encuentra en
la barra de herramientas.
Figura No.7
Go (F5)
De la barra de herramientas
Del Menu
Figura No.4
Se puede observar el modulo TTY integrado al panel de control, luego de presionar y soltar el pulsador
virtual 0, se podr visualizar en la pantalla de recepcin el carcter enviado por el microcontrolador
Pulsador Virtual
Datos Transmitidos
Datos Recibidos
Nota: Los parmetros del modulo TTY pueden reconfigurarse con la opcin Set Parameters
Sexto paso:
Con ayuda de los puentes (jumpers) cortocircuitar los pines 2 y 3 en JP4 y JP5 (ver figura
3). Esto para llevar los pines PD0 (Rx) y PD1 (Tx) al circuito integrado MAX232 (conversor
de niveles TTL RS232).
Bajar de Intranet el programa Serial1.asm y programar la Flash. Notar que el bloque de
comunicacin del Atmega8 se programa bajo los siguientes parmetros: 4800 baudios, 8 bits
de datos, paridad par y 1 bit de parada. La velocidad ser correcta slo si los fusibles estn
programados de la siguiente manera: CKSEL=0001, SUT=10 (avisar al Jefe de Prctica para
la verificacin).
Ejecutar el programa de comunicaciones Hyper Terminal y configurarlo con los siguientes
parmetros: 4800 baudios, 8 bits de dato, paridad par y 1 bit de parada. Ver figura 3 y 4
Presionar el pulsador 0 cada vez que se desea enviar la V al computador y ver en la pantalla
del Hyper Terminal lo recibido.
Ejercicio 1:
Desarrolle un programa con el nombre ECO que reciba un carcter va comunicacin serial y reenvie dicho
carcter usando los siguientes parmetros de comunicacin : 9600 bps, sin paridad, 7 bits de datos y 1 bit de
parada.
inicio
Configurar
parmetros de
comunicacin
Recepcin
NO completa?
SI
Buffer de Tx
NO libre?
SI
;********************************************************
;* *
;* *
;* Programa de Recepcin y Transmisin Serial Asncrona *
;* con el cual , un usuario podr enviar un caracter *
;* desde una computadora personal hacia el microcontro- *
;* lador y este lo enviar de regreso a la computadora *
.include "C:\VMLAB\include\m8def.inc"
;********************************************************
;La directiva DEF permite asignar un simbolo o nombre a
;un registro y puede ser usado en el resto del programa
;en este caso se define r20 como DATO
.def DATO=r20
;********************************************************
reset:
rjmp inicio
reti ; Addr $01
reti ; Addr $02
reti ; Addr $03
reti ; Addr $04
reti ; Addr $05
reti ; Addr $06 Use 'rjmp myVector'
reti ; Addr $07 to define a interrupt vector
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B
reti ; Addr $0C
reti ; Addr $0D
reti ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
reti ; Addr $11
reti ; Addr $12
inicio:
EsperaTxLibre:
sbis UCSRA,UDRE
rjmp EsperaTxLibre
out UDR, DATO ; envo el dato al buffer de transmisin serial
rjmp EsperaDato
Simulacin en el VMLab
Agregue el componente TTY de comunicacin serial a su proyecto, este debe teenr los siguientes
parmetros: Velocidad 9600 Baudios, 7 bits de datos, sin paridad y 1 bit de stop.
figura 6.
Ejercicio 1:
Desarrolle un programa con el nombre Serial3 que enve una cadena de caracteres al presionar la tecla 1 en
la computadora y al presionar la tecla 2 enve los comando necesarios para hacer un cambio de lnea en el
hyperterminal.
Ejecutar el programa de comunicaciones Hyper Terminal y configurarlo con los siguientes parmetros:
4800 baudios, 8 bits de dato, sin paridad y 1 bit de parada
DATO<--(puntero)
Incrementa puntero
DATO
= 0?
Fin
ENVIA_DATO
Inicio
Inicializar puntero
de pila (SP)
CONFIG_USART
RECIBE_DATO
DATO
= 1? NO
SI
SI
ENVIA_CADENA
DATO $0A
(Cambio de lnea)
ENVIA_DATO
DATO $0D
(Retorno a primera col)
ENVIA_DATO
.include "C:\VMLAB\include\m8def.inc"
reset:
rjmp start
reti ; Addr $01
reti ; Addr $02
reti ; Addr $03
reti ; Addr $04
reti ; Addr $05
reti ; Addr $06 Use 'rjmp myVector'
reti ; Addr $07 to define a interrupt vector
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B This is just an example
reti ; Addr $0C Not all MCUs have the same
reti ; Addr $0D number of interrupt vectors
reti ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
reti ; Addr $11
reti ; Addr $12
LAZO:
rcall RECIBE_DATO ;rutina que lee el dato recibido
cpi DATO,'1' ; DATO es $31 ('1') ?
breq ES_1 ; si, salta
cpi DATO,'2' ; DATO es $32 ('2') ?
breq ES_2 ; si, salta
rjmp LAZO ; los demas caracteres son ignorados
ES_1:
ldi ZH,high(Mensaje*2) ;Carga en el putero Z la direccion de inicio del
mensaje
ldi ZL,low(Mensaje*2)
rcall ENVIA_CADENA ;rutina que envia el mensaje por el USART
rjmp LAZO
ES_2:
ldi DATO,0x0A ;Comando Cambio de linea
rcall ENVIA_DATO
ldi DATO,0x0D
rcall ENVIA_DATO ;Comando Retorno a primera columna
rjmp LAZO
;/////////////////////////////////////////////
CONFIG_USART:
; 8 bits , sin paridad y 1 bit de STOP
; 4800
push r16 ;salvamos el valor del registro r16
;Trabajamos a doble velocidad y sin modo multiprocesador, adems se limpian las banderas de
Recepcin y transmisin.
ldi r16,(0<<RXC | 0<<TXC | 1<<U2X | 0<<MPCM)
out ucsra,r16
;****************************************************************************
;////////////////////////////////////////////
ENVIA_DATO:
; Esta rutina envia el byte del registro DATO (r20) al registro UDR del USART
sbis UCSRA,UDRE
rjmp ENVIA_DATO ; Espera a que UDR este libre
out UDR,DATO
RET
;////////////////////////////////////////////
RECIBE_DATO:
; Esta rutina lee el byte del registro UDR y guarde en registro DATO (r20)
sbis UCSRA,RXC
rjmp RECIBE_DATO ; espero a que la recepcin sea completada
in DATO,UDR
RET
;/////////////////////////////////////////////
ENVIA_CADENA:
; esta funcion envia una cadena que es apuntada por Z
; Dicha cadena debe terminar en 0 (cero)
lpm DATO,Z+
cpi DATO,0
breq finCADENA
rcall ENVIA_DATO
rjmp ENVIA_CADENA
finCADENA:
ret
;///////////////////////////////////////////////
;***********************************************
Mensaje:
.db "Pontificia Universidad Catolica del Peru",0 ; esta cadena termina en 0
Simulacin:
El modulo TTY tiene estos parmetros: Velocidad 4800 Baudios, 8 bits de datos, sin paridad y 1 bit de
stop.
X1 TTY(4800 8) PD0 PD1
En la figura puede verse las teclas pulsadas y los la cadena enviada por el microcontrolador. Note que los
comandos CR (retorno a primera columna) y LF (cambio de lnea) se muestran en la pantalla del simulador
figura 7