#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define mclk 8000000
#pragma interrupt_handler uart_rx:12
uchar rdata,flag=0;
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
void uart_init()
{
UCSRB=0x00;
UCSRA=0x00; //控制寄存器清零
UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);
//选择UCSRC,异步模式,禁止
// 校验,1位停止位,8位数据位
// UBRRH=(mclk/16/baud-1)/256 ; //波特率最大为65K
// UBRRL=(mclk/16/baud-1)%256 ;
//baud=mclk/16/baud-1;
//UBRRH=(uchar)(baud>>8);
//UBRRL=(uchar)baud;
//设置波特率
UBRRH=0X00;
UBRRL=25;
UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
//接收、发送使能,接收中断使能
SREG|=BIT(7); //全局中断开放
DDRD|=0X02; //配置TX为输出(很重要)
}
void uart_sendB(uchar data)
{
while(!(UCSRA&(BIT(UDRE)))) ;
UDR=data;
while(!(UCSRA&(BIT(TXC))));
UCSRA|=BIT(TXC);
}
void uart_rx()
{
UCSRB&=~BIT(RXCIE);
rdata=UDR;
//if(rdata==0x03)
flag=1;
UCSRB|=BIT(RXCIE);
}
void main()
{
//uchar i=4;
//uchar j='a';
uart_init();
while(1)
{
if(flag)
{ DDRD|=BIT(7);
   ORTD&=~BIT(7);
uart_sendB(rdata);
flag=0;
}
}
}
|