PC和ATMEGA128串口通信,ATMEGA以轮循方式发送,中断方式接受2008年03月23日 星期日 10:38
/*PC和ATMEGA128通信,ATMEGA以轮循方式发送,中断方式接受*/
#include <mega128.h>
#define RXEN0 4
#define TXEN0 3
#define RXCIE0 7
#define UDRE0 5
#define UCSZ00 1
#define UCSZ01 2
#define UCSZ02 2
#define RXC0 7
char str[20];
unsigned char in;
void Uar_init(void);
void COM_send(void);
interrupt[19] void uart0(void)
{
bit flag=1;
str[in]=UDR0;
if(str[in]=='$') //$为停止标志
{
UCSR0B&=~(1<<RXCIE0); //关闭接受中断
str[in]='\0';
COM_send(); //发送接受的字符串
in=0;
flag=0;
UCSR0B|=(1<<RXCIE0);//启动接受中断
}
if(flag)
in++;
}
void Uar_init(void)
{
in=0;
UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0); //0x98接受使能、发送使能、接受中断使能
UBRR0L=0x2f;
UBRR0H=0x00;
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); //0x06设定数据位为8位
}
void COM_send(void)
{
unsigned char point=0;
while(str[point]!='\0')
{
while(!(UCSR0A&(1<<UDRE0)));//轮训方式发送
UDR0=str[point];
point++;
}
}
void main(void)
{
Uar_init();
#asm("sei");//全局中断开启
while(1);
}