×
单片机 > 单片机程序设计 > 详情

AVR系列之串口通讯

发布时间:2024-05-19 发布时间:
|

昨晚搬动了电脑 今早又瞎忙了一上午 那个汗呀 加上身边环境蛮吵的 那个心烦着呢 现在就抽点时间敲敲键盘写写 算是整理一下此刻糟糕透顶的心情 也算是继续总结 总不能让这个系列的假期总结给落下来


既然说到这里了 就说下感受吧 虽然这个系列 内容看起来真的好简单 连程序也是写简简单单的 才刚入门的程序 但偶还是很珍惜 因为这些东西是自己花费假期时间自己学习 自己做板子 然后编好程序 并把它放到板子上去调试 这些真正是属于自己的东西 基本的东西因为是最为牢靠的呢 所以偶是珍惜这些的 不管是这些小程序 还是这个学习过程 貌似废话说多了 汗 就当是晒晒偶的已经发霉的心情吧


回奔主题哦 现在就总结下 关于AVR的串口通信吧 这里使用的是AVR的异步串行接口的功能 通过超级终端或串口调试助手向AVR发送数据 以*开始以#结束 单片机存储的是*#之间的数据 发送R可以将AVR最后一次记录的数据传送给PC机 接收到新的数据 以前的数据将会被消除 数据长度在255个字节之内


好了程序如下:

#include < iom16v.h>

#include

#define uchar unsigned char

#define uint unsigned int

uchar RecvData [ 255] ; //记录接收到的数据

uchar i = 0 ;

uchar NewBeginFlag = 0 ;//接收到新的数据 清楚原有的数据

uchar RecvDataFlag = 0 ; //当有新的数据传接收时置1,结束时为0

uchar ReadFlag = 0 ; //读数据标志

//串口初始化

void UartOInit (void )

{

UCSRB = 0x00 ; //关串口

UCSRA = 0x02 ; //倍速模式

UCSRC = BIT(URSEL) | 0x06; //写UCSRC寄存器,设定8个bit
UBRR = 0x000c; //设定串口波特率为9600
UCSRB = 0x98; //开串口

}

//串口中断服务函数

#pragam interrupt_handler UartRecvData : 12

void UartRecvData(void)
{
uchar temp;
temp = UDR;
if ( temp == '*' ) //判断是否是数据开始标志
{
NewBeginFlag = 1;
RecvDataFlag = 1;
}
else if ( RecvDataFlag )
{
if ( temp == '#' ) //判断是否是数据结束标志
{
RecvDataFlag = 0; //置接收结束标志
}
else
{
RecvData[i++] = temp; //暂存数据
}
}
else if ( ( temp == 'R' ) || ( temp == 'r ' ) )
{
ReadFlag = 1;
}
}

//发送字符串

void UartTransmitData (void )

{

uchar j , Er[6] = "ERROR";
if ( i == 0 ) //判断接收到的数据是否为空
{
for ( j = 0;j < 5; j++ )
{
while ( ! ( UCSRA & 0x20 ) );//等待数据寄存器为空
UDR = Er [ j ]; //发送字符
}
}
else
{
for ( j = 0;j < i; j++)
{
while ( ! ( UCSRA & 0x20 ) ); //等待数据寄存器为空
UDR = RecvData[j]; //发送字符
}
}

}

//初始化各种信息

void InitDevice (void)

{

CLI ( ) ; //关全部中断
Uart0Init ( ) ;

MCUCR = 0x00;
SEI ( ) ;

}

//主函数

void main (void )

{

uchar j;
InitDevices ( );
while(1)
{
if ( NewBeginFlag )//有新的数据接收,清除原有数据
{
NewBeginFlag = 0;
for ( j = 1; j ; j++ )
{
RecvData [ j ] = 0;
}
}
if ( ReadFlag )
{
UartTransmitData ( ) ;
ReadFlag = 0;
}
}

}

嘿就这样先 还得说一下呢 寄存器的处理 也就是串口的初始化 以及数据的接收与发送 要好好才处理


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会