Professional Documents
Culture Documents
MICROPROCESADORES
Departamento de Automatizacin y
Control Industrial - DACI
Interrupiones ATMEGA164P
Interrupiones ATMEGA164P
Interrupiones ATMEGA164P
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
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
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
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){
Marco Herrera
marco.herreraepn.edu.ec