您现在的位置: 主页 > MCU > 单片机应用 > ATMega8 中断方式UART测试程序 -
本文所属标签:
#ATMega8 uart#   #ATMega8#   #中断方式UART测试程序#   
为本文创立个标签吧:

ATMega8 中断方式UART测试程序 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-11 

[导读]#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; //发送定位计数器

本文引用地址: http://www.21ic.com/app/mcu/201809/778454.htm

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);
}
}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > ATMega8 中断方式UART测试程序 -
 

"ATMega8 中断方式UART测试程序 -"的相关文章

网站地图

围观()