久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3799|回復: 0
打印 上一主題 下一主題
收起左側

51單片機多機通信源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:359331 發表于 2018-7-16 12:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include <reg52.h>
  2. #include <string.h>
  3. #include <stdio.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int
  6.        
  7. #define addr1 0x00     //本機地址
  8. #define led P2

  9. uint buff_size = 15;   //設置緩存大小
  10. uint dat_count;        //單次接收數據總數
  11. uint buff_lenght;      //計算接收數據長
  12. bit buff_useful;       //是否接收到字符串


  13. uchar Read_buff[16];   //設置接收字符串
  14. uchar *control = "";   //控制LED

  15. bit getAddr = 0;       //判斷連接

  16. void Serial_write(uchar dat);
  17. void Serial_print(uchar *STR);
  18. void Serial_println(uchar *STR);
  19. uint Serial_available();
  20. uchar* Serial_Read();
  21. void setup();
  22. void loop();
  23. void controlLED();

  24. /*******************************************************************************
  25. * 函數名         : delay10us(uint u)
  26. * 函數功能                 : 延時u*10 us
  27. * 輸入           : uint u
  28. * 輸出                  : 無
  29. *******************************************************************************/
  30. void delay10us(uint u)   //誤差 0us
  31. {
  32.     unsigned char a,b;
  33.         for( ; u > 0 ; u --)
  34.                 for(b=1;b>0;b--)
  35.                          for(a=1;a>0;a--);
  36. }
  37. /*******************************************************************************
  38. * 函數名         : delay(uint u)
  39. * 函數功能                 : 延時ums
  40. * 輸入           : uint u
  41. * 輸出                  : 無
  42. *******************************************************************************/
  43. void delay(uint u)                       //延時ums 12M晶振誤差 0us
  44. {
  45.    unsigned char a,b;
  46.    for( ; u > 0 ; u --)         
  47.                 for(b=199;b>0;b--)
  48.                         for(a=1;a>0;a--);
  49. }
  50. /*******************************************************************************
  51. * 函數名         : setup()
  52. * 函數功能                 : 初始化串口中斷
  53. * 輸入           : 無
  54. * 輸出                  : 無
  55. *******************************************************************************/
  56. void beginINIT()
  57. {
  58.         SCON=0Xf0;                        //設置為工作方式3,打開接收允許位
  59.         TMOD=0X20;                        //設置計數器1,工作方式2
  60.         PCON=0X80;                        //波特率加倍
  61.         TH1=0XF3;                        //計數器初始值設置,注意波特率是4800的
  62.         TL1=0XF3;
  63.         ES=1;                                //打開接收中斷
  64.         EA=1;                                //打開總中斷
  65.         TR1=1;                                //打開計數器
  66.         dat_count = 0;
  67.         buff_lenght = 0;
  68.         buff_useful = 0;
  69. }
  70. /*******************************************************************************
  71. * 函數名         : serial()
  72. * 函數功能                 : 串口中斷,讀取串口數據
  73. * 輸入           : 無
  74. * 輸出                  : 無
  75. *******************************************************************************/
  76. void serial()interrupt 4
  77. {       
  78.         uchar temp;
  79.        
  80.         if(RI == 1)
  81.         {
  82.                 temp = SBUF;
  83.                 RI = 0;
  84.                 if(RB8)
  85.                 {
  86.                         if(temp == addr1)                        //從機1
  87.                         {
  88.                                 Serial_write(addr1);
  89.                                 getAddr = 1;
  90.                         }
  91.                 }
  92.                 else if(getAddr)
  93.                 {
  94.                         getAddr = 0;
  95.                         if(dat_count < buff_size && temp != '\r' && temp != '\n')  //判斷接收結束
  96.                         {
  97.                                 uint i;
  98.                                 if(dat_count == 0)
  99.                                         for(i = 0; i < buff_size;i ++)        //清空接收緩存
  100.                                                 Read_buff[i] = ' ';
  101.                                 Read_buff[dat_count] = temp;              //將數據存入存儲
  102.                                 buff_useful = 0;
  103.                                 dat_count ++;
  104.                                 buff_lenght = dat_count;                  //獲取接收字符串長度
  105.                         }
  106.                         else
  107.                         {               
  108.                                 dat_count = 0;
  109.                                 buff_useful = 1;
  110.                         }       
  111.                 }               
  112.         }               
  113. }

  114. /*******************************************************************************
  115. * 函數名         : Serial_write(uchar dat)
  116. * 函數功能                 : 串口發送一個字節數據
  117. * 輸入           : uchar dat
  118. * 輸出                  : 無
  119. *******************************************************************************/
  120. void Serial_write(uchar dat)
  121. {
  122.         ES=0;
  123.         SBUF = dat;
  124.         while(!TI);  //等待發送完成
  125.         TI = 0;
  126.         ES=1;
  127. }
  128. /*******************************************************************************
  129. * 函數名         : Serial_print(uchar *STR)
  130. * 函數功能                 : 串口發送字符串
  131. * 輸入           : uchar *STR
  132. * 輸出                  : 無
  133. *******************************************************************************/
  134. void Serial_print(uchar *STR)
  135. {
  136.         while(*STR)
  137.         {
  138.                 Serial_write(*(STR++));
  139.         }
  140. }
  141. /*******************************************************************************
  142. * 函數名         : Serial_println(uchar *STR)
  143. * 函數功能                 : 串口發送字符串,并加上回車
  144. * 輸入           : uchar *STR
  145. * 輸出                  : 無
  146. *******************************************************************************/
  147. void Serial_println(uchar *STR)
  148. {
  149.         uchar *STR2 = "\r\n";        //回車做結束符
  150.         while(*STR)
  151.         {
  152.                 Serial_write(*(STR++));
  153.         }
  154.        
  155.         while(*STR2)
  156.         {
  157.                 Serial_write(*(STR2++));   //發送回車做結束符
  158.         }
  159. }
  160. /*******************************************************************************
  161. * 函數名         : Serial_available()
  162. * 函數功能                 : 判斷串口是否接收數據
  163. * 輸入           : buff_useful
  164. * 輸出                  : 無
  165. *******************************************************************************/
  166. uint Serial_available()
  167. {
  168.         return buff_useful;
  169. }
  170. /*******************************************************************************
  171. * 函數名         : Serial_Read()
  172. * 函數功能                 : 讀取串口是接收的一個字節數據
  173. * 輸入           : temp
  174. * 輸出                  : 無
  175. *******************************************************************************/
  176. uchar* Serial_Read()
  177. {
  178.         uchar *p="";
  179.         if(buff_useful)
  180.                 p = Read_buff;
  181.         buff_useful = 0;

  182.         return p;
  183. }


  184. /*******************************************************************************
  185. * 函數名         : main()
  186. * 函數功能                 : 程序入口
  187. * 輸入           : 無
  188. * 輸出                  : 無
  189. *******************************************************************************/
  190. void main()
  191. {
  192.         setup();
  193.         while(1)
  194.                 loop();
  195. }
  196. /*******************************************************************************
  197. * 函數名         : controlLED()
  198. * 函數功能                 : 串口控制LED函數
  199. * 輸入           : 無
  200. * 輸出                  : 無
  201. *******************************************************************************/
  202. void controlLED()
  203. {
  204.         if(buff_useful)
  205.                 control = Serial_Read();
  206.         if(strstr(control,"led_on") != NULL)
  207.                 led = 0x00;
  208.        
  209.         if(strstr(control,"led_off") != NULL)
  210.                 led = 0xff;
  211. }
  212. /*******************************************************************************
  213. * 函數名         : setup()
  214. * 函數功能                 : 初始化函數
  215. * 輸入           : 無
  216. * 輸出                  : 無
  217. *******************************************************************************/
  218. void setup()
  219. {
  220.         beginINIT();
  221. }
  222. /*******************************************************************************
  223. * 函數名         : loop()
  224. * 函數功能                 : 功能函數
  225. * 輸入           : 無
  226. * 輸出                  : 無
  227. *******************************************************************************/
  228. void loop()
  229. {
  230.         controlLED();
  231. }
復制代碼

所有資料51hei提供下載:
單片機多機通信程序.rar (54.53 KB, 下載次數: 44)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费视频99 | 天天干天天爱天天 | 一级黄色录像毛片 | 在线免费国产视频 | 一区二区三区高清 | www.婷婷| 一区二区三区四区日韩 | 久久91精品国产一区二区三区 | 欧美日韩综合视频 | 亚洲经典一区 | 99精品国产一区二区三区 | 国产视频不卡一区 | 欧美久久一区二区 | 国产乱码精品一区二区三区忘忧草 | 羞羞视频网站在线观看 | 精品欧美视频 | 欧美 日韩 国产 成人 在线 91 | 欧美一区二区三区国产精品 | 日韩av电影院 | 97伦理电影网 | 色射综合 | 国产一区二区在线视频 | 懂色中文一区二区三区在线视频 | 网站一区二区三区 | 国产男女猛烈无遮掩视频免费网站 | 一区二区三区中文 | 日韩成人在线观看 | 精品久久国产视频 | 啪一啪在线视频 | 免费毛片网站 | 亚洲一二三区精品 | 日韩精品视频在线播放 | 盗摄精品av一区二区三区 | 亚洲视屏 | 亚洲国产精品va在线看黑人 | 大象视频一区二区 | 国产三级电影网站 | 日韩国产欧美在线观看 | 国产黄色一级片 | 日韩欧美网 | 日韩在线一区二区 |