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

串口驱动带协议

发布时间:2020-05-23 发布时间:
|

#include


#define fosc 8000000

#define baud 9600

#define CALL 0X24  //主机呼叫

#define BUSY 0X15  //从机忙

#define OK   0X00  //从机准备好

#define SUCC 0x2A  //接收成功

#define ERR  0XF0  //接收错误


#define MAXLEN 64  //缓冲区最大长度

#define buf[MAXLEN];


//----------------字符串输出函数----------------//

void putchar(unsigned char c)

{

while(!(UCSR0A&(1<

}



//----------------字符串输入函数----------------//


void getchar(unsigned char c)

{

while(!(UCSR0A&(!<

return UDR0;

}

//----------------接收数据函数----------------//

unsigned char recvdatas(unsigned char *buff)

{

unsigned char i=0;

unsigned char temp;

unsigned char len; //保存数据长度

unsigned char ecc; //保存校验字节

len=getcahr();

ecc=len;

for(;i

{

  *buff=getchar();

  ecc=ecc^(*buff); //进行字节校验

  buff++;

}

*buff=0;           //数据接收结束

temp=getchar(); //接收校验字节


//数据校验

ecc=temp^ecc;

if(ecc!=0)  //如果校验错误

  {

   *(buff-len)=0;

   putchar(ERR);

   return 0XFF;  //返回0XFF表示校验错误

  }

  putchar(SUCC)  //发送校验成功信号SUCC

  return 0;       //校验成功,返回0

}


//----------------串口初始化----------------//

void init_serial()

{

  UCSR0B=(1<

  UBRR0H=(fosc/16/(baud+1))/256

  UBRR0L=(fosc/16/(baud+1))%256

  UCSR0C=(0<

  (1<

  

}


关键字:串口驱动  协议  avr 


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

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