Departamento de Automatización y Control Industrial - DACI
Generación del Reloj:
La base de tiempo de Transmisión-Recepción tiene dos modos asincrónicos de funcionamiento: Modo Normal Asincrónico y modo de doble velocidad . Esta elección se lleva a cabo con el Bit U2X del registro UCSRA. El cálculo del Baud Rate se realiza de la siguiente forma:
Generación del Reloj:
• Operación Full Duplex • Operación asíncrona o síncrona • Funcionamiento síncrono Maestro o Esclavo • Soporta Frames con 5, 6, 7, 8 o 9 bits de datos y 1 o 2 bits de parada • Generación y comprobación de paridad • Detección de exceso de datos • Detección de errores Framing • Filtro de ruido Incluye Bit de inicio False Detección y Digitales Filtro de paso
bajo • Tres alarmas separadas al respecto TX completo, datos TX y RX Registro vacio • Modo de comunicación multi-procesador • Modo doble de velocidad asíncrona Comunicación
Ejercicio comunicación entre 2 microprocesadores
ASSEMBLER
.include "m164pdef.inc" .equ F_crystal=8000000 .equ bauds=9600 .cseg .org 0x00 rjmp inicio .org 0x28 ; interrupcion recepcion rjmp dato inicio: ; configuro puertos clr r16 out DDRA,r16 ;puerto como entrada out PORTC,r16 com r16 out PORTA,r16 ;puerto como salida out DDRC,r16 ldi r16,(1<<1) ;salida tx out DDRD,r16
; memoria ram ldi r16,low(ramend) out spl,r16 ldi r16,high(ramend) out sph,r16 ; cargo velocidad ldi r16, high((F_crystal/(16*bauds))-1) sts ubrr0h,r16 ldi r16, low((F_crystal/(16*bauds))-1) sts ubrr0l,r16 ldi r16,0b1001_1000 ; habilito interrucpcion por recepcion y habilito transmision y recepcion sts ucsr0b,r16 ;ldir16,0b0011_1110 ; 8bits paridad impar modo asincronico 2 bits de parada ldi r16,0b0000_0110 ; 8bits sin paridad modo asincronico sts ucsr0c,r16 sei
primer_dato: lds r16,ucsr0a sbrs r16,5 ; revisa si esta limpio el buffer para envio rjmp primer_dato in r16,PINA ; leo lo del puerto A sts udr0,r16 ; envio dato del puerto ; programa principal lazo: nop rjmp lazo // interrupcion por recepcion dato: lds r16,udr0 ; leo el el Rx out PORTC,r16 ; muestro en portC in r16,PINA ; envio dato de puerto sts udr0,r16 reti
EN C
#include
#include // libreria para interrupciones
void USART_init(void); int main(void) { DDRA=0x00; PORTA=0xFF; // configuro como entradas pull -up DDRC=0xFF; // configuro como salidas PORTC=0x00; DDRD|=(0<<0)|(1<<1); // PORTD|=(1<<0)|(0<<1); //
USART_init(); sei(); while(!(UCSR0A & (1<
void USART_init(void){ UCSR0B|=(1<
Bibliografía 1. Muhammad Ali Mazidi (2011). The avr microcontroller and embedded system. 2. Yago Torroja & Jorge Portilla, “Curso de Microcontroladores”, Escuela Técnica
Superior de Ingenieros Industriales, Universidad Politécnica de Madrid
Departamento de Automatización y Control Industrial - DACI
marco.herreraepn.edu.ec