Beruflich Dokumente
Kultur Dokumente
MICROPROCESADORES
Departamento de Automatizacin y
Control Industrial - DACI
Interrupiones ATMEGA164P
Interrupiones ATMEGA164P
Interrupiones ATMEGA164P
Comunicacin Serial
Generacin del Reloj:
La base de tiempo de Transmisin-Recepcin tiene dos modos asincrnicos de
funcionamiento: Modo Normal Asincrnico y modo de doble velocidad. Esta
eleccin se lleva a cabo con el Bit U2X del registro UCSRA.
El clculo del Baud Rate se realiza de la siguiente forma:
Comunicacin Serial
Generacin del Reloj:
Comunicacin Serial
Comunicacin Serial
Comunicacin Serial
Comunicacin Serial
Comunicacin Serial
Ejercicio comunicacin entre 2 microprocesadores
Comunicacin Serial
ASSEMBLER
Comunicacin Serial
.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
Comunicacin Serial
; 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
Comunicacin Serial
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
Comunicacin Serial
EN C
#include <avr/io.h>
#include <avr/interrupt.h> // 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); //
Comunicacin Serial
USART_init();
sei();
while(!(UCSR0A & (1<<UDRE0)));
UDR0=PINA;
while(1)
{
//TODO:: Please write your application code
}
}
// Interrupcion recepcion
ISR(USART0_RX_vect){
PORTC=UDR0;
UDR0=PINA;
}
Comunicacin Serial
void USART_init(void){
UCSR0B|=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0); //enciendo transmision y
recepcion
UCSR0C|=(1<<UCSZ00)|(1<<UCSZ01); // 8 bits
UBRR0=51; // 9600 baudios
}
Bibliografa
1. Muhammad Ali Mazidi (2011). The avr
microcontroller and embedded system.
CONTROL CON
MICROPROCESADORES
Departamento de Automatizacin y
Control Industrial - DACI
Marco Herrera
marco.herreraepn.edu.ec