找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3160|回復: 0
收起左側

串口驅動帶協議

[復制鏈接]
ID:80436 發(fā)表于 2015-5-21 23:33 | 顯示全部樓層 |閱讀模式
  1. ////////////////////////////////////////////
  2. /**code by seabiscuit 謝海斌 九江 2016.4.10. 凌晨1點*/
  3. ////////////////////////////////////////////
  4. #include<avr/io.h>

  5. #define fosc 8000000
  6. #define baud 9600
  7. #define CALL 0X24  //主機呼叫
  8. #define BUSY 0X15  //從機忙
  9. #define OK   0X00  //從機準備好
  10. #define SUCC 0x2A  //接收成功
  11. #define ERR  0XF0  //接收錯誤

  12. #define MAXLEN 64  //緩沖區(qū)最大長度
  13. #define buf[MAXLEN];

  14. //----------------字符串輸出函數----------------//
  15. void putchar(unsigned char c)
  16. {
  17. while(!(UCSR0A&(1<<UDRE0)));// 該位為1 表示數據發(fā)送準備好
  18. }


  19. //----------------字符串輸入函數----------------//

  20. void getchar(unsigned char c)
  21. {
  22. while(!(UCSR0A&(!<<RXC0))); //RXC為1表示接收完成
  23. return UDR0;
  24. }
  25. //----------------接收數據函數----------------//
  26. unsigned char recvdatas(unsigned char *buff)
  27. {
  28. unsigned char i=0;
  29. unsigned char temp;
  30. unsigned char len; //保存數據長度
  31. unsigned char ecc; //保存校驗字節(jié)
  32. len=getcahr();
  33. ecc=len;
  34. for(;i<len;i++)  //數據接收
  35. {
  36.   *buff=getchar();
  37.   ecc=ecc^(*buff); //進行字節(jié)校驗
  38.   buff++;
  39. }
  40. *buff=0;           //數據接收結束
  41. temp=getchar(); //接收校驗字節(jié)

  42. //數據校驗
  43. ecc=temp^ecc;
  44. if(ecc!=0)  //如果校驗錯誤
  45.   {
  46.    *(buff-len)=0;
  47.    putchar(ERR);
  48.    return 0XFF;  //返回0XFF表示校驗錯誤
  49.   }
  50.   putchar(SUCC)  //發(fā)送校驗成功信號SUCC
  51.   return 0;       //校驗成功,返回0
  52. }

  53. //----------------串口初始化----------------//
  54. void init_serial()
  55. {
  56.   UCSR0B=(1<<RXEN0)|(1<<TXEN0)
  57.   UBRR0H=(fosc/16/(baud+1))/256
  58.   UBRR0L=(fosc/16/(baud+1))%256
  59.   UCSR0C=(0<<UMSEL01)|(0<<UMSEL00)|\
  60.   (1<<UCSZ01)|(1<<UCSZ00);
  61.   
  62. }
復制代碼


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表