Académique Documents
Professionnel Documents
Culture Documents
En esta práctica se describe la forma de realizar una comunicación serie half-duplex entre
dos microcontroladores utilizando UARTs software. En el apartado 1 se describe el hardware
empleado para la conexión con el circuito real (que en principio no se utilizará). En el apartado 2
se indica el formato de trama y el modo de funcionamiento de la UART software tanto para la
transmisión como la recepción. En el apartado 3 se indican las pruebas a realizar, que se limitan
al empleo del simulador.
micro 0 micro 1
2K2
GND P3.4
P3.2 +5V
4K7 Líneas de
conexión 4K7
+5V P3.2
P3.4 GND
2K2
Se supone que el puerto serie incorporado en el micro ya está siendo utilizado para otra
tarea (p. ej. el enlace con un PC), por lo que debe programarse una UART software. Por
simplicidad, se emplea una UART half-duplex. Se elige el terminal P3.2 (RxD) como receptor
para utilizar el bit de inicio de la trama (START) como fuente de interrupción (INT 0). La señal
se transmite por el terminal P3.4 (TxD).
1
LSP: UART SW
2. Descripción de la UART SW
2) Temporizador 1. Este temporizador se emplea para obtener los intervalos de tiempo necesarios
en la generación de la señal transmitida y en el muestreo de la recibida.
La recepción de una trama se debe realizar de la siguiente forma (ver Figura 2):
2) El resto del proceso de recepción lo realiza la ISR del temporizador 1. La primera vez que
entra la ISR (rx_nbit=0) se verifica que RxD se mantiene a 0. En caso contrario se considera que
se trata de una trama no válida, provocada probablemente por una interferencia. Si el START es
correcto, se prepara el temporizador para generar la próxima ISR después de un tiempo t bit y se
incrementa rx_nbit. En sucesivas entradas de la ISR se muestrean los 8 bits de datos y se verifica
el bit de parada (STOP). La variable rx_nbit permite a la ISR determinar qué bit de la trama se
recibe en cada momento. Cuando finaliza la trama (llegada de un bit de STOP válido), se activa
un indicador UART_RI, se deja parado el temporizador y se vuelven a habilitar las
interrupciones externas. De esta forma se hace posible la recepción de una nueva trama.
2
LSP: UART SW
start stop
tmediobit
Comprobación del nivel
tbit
Lectura de bit de datos
Para saber si ha llegado una trama, se debe consultar el bit UART_RI. Si está a '1', se
puede leer el byte recibido de la variable uart_rxbuf. Es importante dejar borrado el indicador
UART_RI para que una posterior consulta contenga la información esperada.
2) La ISR del temporizador 1 verifica siempre txing para saber si debe gestionar una transmisión
(txing=1) o una recepción (txing=0). La primera vez que entra la ISR del temporizador, el
contador tx_nbit está a cero y la ISR pone la salida de datos TxD a '0' (bit de START). En
entradas posteriores actualiza TxD con los bits de datos y finalmente con el bit de STOP
(TxD='1'). Además, incrementa tx_nbit y prepara el temporizador para que genere la siguiente
interrupción. Cuando tx_nbit es 10, la ISR da por concluida la transmisión (ya ha finalizado el
bit de STOP), por lo que activa UART_TI, pone a '0' el indicador txing y habilita la interrupción
externa 0 (habilita recepción).
3
LSP: UART SW
start stop
tbit
Salida de nivel fijo
intext0
rx_nbit = 0
inhibe interr.
externa 0
prepara temp.0
prepara temp. 0
para tmediobit
reti
4
LSP: UART SW
txbyte
tx_nbit = 0
tx_shift = uart_txbuf
inhibe interr.
externa 0
txing = 1
TF0= 1
(genera int.
(genera int. temp0)
temp.1)
ret
reti
inttim0
inttim1
parartemp.1
parar tim0
txing=1 ?
si no
borra IE0
reti habilita EXT0
preparar temp. 0
prepara temp.1
para tbit
5
LSP: UART SW
3 Trabajo propuesto