找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3165|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

串口驅(qū)動(dòng)帶協(xié)議

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:80436 發(fā)表于 2015-5-21 23:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. ////////////////////////////////////////////
  2. /**code by seabiscuit 謝海斌 九江 2016.4.10. 凌晨1點(diǎn)*/
  3. ////////////////////////////////////////////
  4. #include<avr/io.h>

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

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

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


  19. //----------------字符串輸入函數(shù)----------------//

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

  42. //數(shù)據(jù)校驗(yàn)
  43. ecc=temp^ecc;
  44. if(ecc!=0)  //如果校驗(yàn)錯(cuò)誤
  45.   {
  46.    *(buff-len)=0;
  47.    putchar(ERR);
  48.    return 0XFF;  //返回0XFF表示校驗(yàn)錯(cuò)誤
  49.   }
  50.   putchar(SUCC)  //發(fā)送校驗(yàn)成功信號(hào)SUCC
  51.   return 0;       //校驗(yàn)成功,返回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. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表