当前位置:首页 > 单片机 > 单片机
[导读]#include #include #include #define uchar unsigned char#define uint unsigned intuchar g_bTxdPos=0; //发送定位计数器uchar g_bTxdLen=0; //等待发送字节数uchar g_bRxdPos=0; //接收定位计数器uchar g_bR

#include
#include
#include

#define uchar unsigned char
#define uint unsigned int

uchar g_bTxdPos=0; //发送定位计数器

uchar g_bTxdLen=0; //等待发送字节数
uchar g_bRxdPos=0; //接收定位计数器
uchar g_bRxdLen=0; //等待接收字节数

uchar g_aSendBuf[16]; //发送数据绶冲区
uchar g_aRecvBuf[16]; //接收数据缓冲区

//接收中断
SIGNAL(SIG_UART_RECV)
{
uchar c=UDR;
if(g_bRxdLen>0)
{
g_aRecvBuf[g_bRxdPos++]=c;
g_bRxdLen--;
}
}

//发送中断
SIGNAL (SIG_UART_TRANS)
{
if(--g_bTxdLen>0)
UDR=g_aSendBuf[++g_bTxdPos];
}

//是否接收完成
uchar IsRecvComplete(void)
{
return g_bRxdLen==0;
}

//从发送缓冲区发送指定长度数据
void SendToUart(uchar size)
{
g_bTxdPos=0;
g_bTxdLen=size;
UDR=g_aSendBuf[0];
while(g_bTxdLen>0);
}

//接收指定长度数据到接收缓冲区
void RecvFromUart(uchar size,uchar bwait)
{
g_bRxdPos=0;
g_bRxdLen=size;
if(bwait)
while(g_bRxdLen>0);
}

int main( void )
{
uchar i;

//uart初始化
//接收使能、发送使能、接收中断允许、发送中断允许
UCSRB=(1< UBRRL=25; // baud=9600 UBRR=CK/(baud*16) -1

sei();//总中断允许

while(1)
{
//异步接收16字节数据
RecvFromUart(16,0);

//等待接收完成
while(!IsRecvComplete());

//将接收到的数据复制到发送缓冲区
for(i=0;i<16;i++)
g_aSendBuf=g_aRecvBuf;

//发送回接收到的数据
SendToUart(16);
}
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭