这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 合作大赛 » 串口驱动带协议

共1条 1/1 1 跳转至

串口驱动带协议

高工
2015-06-14 12:23:54     打赏

#include<avr/io.h>

#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<<UDRE0)));// 该位为1 表示数据发送准备好
}


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

void getchar(unsigned char c)
{
 while(!(UCSR0A&(!<<RXC0))); //RXC为1表示接收完成
 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<len;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<<RXEN0)|(1<<TXEN0)
  UBRR0H=(fosc/16/(baud+1))/256
  UBRR0L=(fosc/16/(baud+1))%256
  UCSR0C=(0<<UMSEL01)|(0<<UMSEL00)|\
  (1<<UCSZ01)|(1<<UCSZ00);
  
 }


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]