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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

GYJ-0095單片機四路輸入輸出繼電器工控板仿modbus控制源碼與資料下載

[復制鏈接]
跳轉到指定樓層
樓主
GYJ-0095_四路輸入輸出繼電器工控板產品使用說明書
【簡要說明】
一、尺寸:長145mmX寬90mmX高20mm
二、主要芯片:單片機STC89C52RC 繼電器 光耦
三、工作電壓:有直流12V及24V可選。
四、特點:
電路結構簡單,穩定可靠,采用最新款STC單片機,運行速度快,單片機預留擴展接口
1、具有四路輸入信號指示燈,四路繼電器吸合指示燈,電源指示燈
2、板子功耗小于8W
3、額定切換電流10A以內,切換電壓250V以內
4、單路最大切換功率500W 額定功率300W
5、繼電器壽命1000000次以上。
6、電器絕緣電阻100M
7、觸電耐壓1000V
8、繼電器最大吸合時間15mS毫秒
9、繼電器最大釋放時間5mS毫秒
10、工作溫度-40度至+70度
11、工作濕度40%~80%RH
12、路光電隔離輸入,8路光電隔離輸出
13、輸入低電平有效(即:NPN輸入)
14、路輸出開關量輸出(即:干接點輸出)
15、具有MAX232通訊。
16、單片機所有IO口都引出,客戶可以自己編程擴展功能
17、可以選擇使用外部EEPROM 作為存儲單元
18、電路具有,防反接保護、過流保護、續流保護、壓敏保護等
19、單片機可以自行更換,可以選擇替換型的STC系列單片機
20、我們提供電路相關的,原理圖、例程、開發環境、下載軟件等相關資料
適用場合:工業控制、產品開發、項目設計,自動化改造等
【標注說明】
接線說明
   
輸入控制設備
輸出控制設備

輸出舉例說明
輸出舉例說明(開關量輸出、干接點輸出)
專業下載線接線說明
串口通信說明也可以通過串口下載



原理圖(提供PDF格式的原理圖及PCB)更清晰
免費提供與此工控板有關的:資料、例程、原理圖
芯片資料、軟件。
【圖片展示】

默認發貨程序
  1. 單片機與PC機采用9針串口,MAX232通訊,波特率默認為9600.

  2. 單片機接收PC機發送的十六進制碼表如下:

  3. 01、全開:PC發送'I';
  4. 02、全關:PC發送'i';

  5. 03、第一路開:PC發送'A';
  6. 04、第二路開:PC發送'B';
  7. 05、第三路開:PC發送'C';
  8. 06、第四路開:PC發送'D';


  9. 11、第一路關:PC發送'a';
  10. 12、第二路關:PC發送'b';
  11. 13、第三路關:PC發送'c';
  12. 14、第四路關:PC發送'd';


  13. *********************************************************************/
  14. #include<reg52.h>                       //庫文件
  15. #define uchar unsigned char//宏定義無符號字符型
  16. #define uint unsigned int  //宏定義無符號整型
  17. /********************************************************************
  18.                             初始定義
  19. *********************************************************************/

  20. unsigned char dat; //用于存儲單片機接收發送緩沖寄存器SBUF里面的內容

  21. /*定義八位輸入為單片機P1口*/
  22. sbit IN0=P1^0;
  23. sbit IN1=P1^1;
  24. sbit IN2=P1^2;
  25. sbit IN3=P1^3;

  26. /*定義八位輸出為單片機P2口*/
  27. sbit K1=P2^0;
  28. sbit K2=P2^1;
  29. sbit K3=P2^2;
  30. sbit K4=P2^3;

  31. /********************************************************************
  32.                             延時函數
  33. *********************************************************************/
  34. void delay(uchar t)
  35. {
  36.   uchar i,j;
  37.    for(i=0;i<t;i++)
  38.    {
  39.                  for(j=13;j>0;j--);
  40.               { ;
  41.               }
  42.    }
  43. }

  44. /********************************************************************
  45.               功能:串口初始化,波特率9600,方式1
  46. *********************************************************************/
  47. void Init_Com(void)
  48. {
  49. TMOD = 0x20;
  50. PCON = 0x00;
  51. SCON = 0x50;
  52. TH1 = 0xFd;
  53. TL1 = 0xFd;
  54. TR1 = 1;
  55. }

  56. /********************************************************************
  57.                             主函數
  58. *********************************************************************/
  59. void main()
  60. {
  61. Init_Com();//串口初始化
  62. while(1)
  63. {

  64. if(IN0==0){delay(100);K1=0;while(!IN0);SBUF ='1';K1=1;} //繼電器K1按下閉合,松開斷開
  65. if(IN1==0){delay(100);K2=0;while(!IN1);SBUF ='2';K2=1;} //繼電器K2按下閉合,松開斷開
  66. if(IN2==0){delay(100);K3=0;while(!IN2);SBUF ='3';K3=1;} //繼電器K3按下閉合,松開斷開
  67. if(IN3==0){delay(100);K4=0;while(!IN3);SBUF ='4';K4=1;} //繼電器K4按下閉合,松開斷開                    
  68. if ( RI ) //掃描判斷是否接收到數據,
  69. {
  70. dat = SBUF; //接收數據SBUF賦與dat
  71. RI=0; //RI 清零。
  72. SBUF = dat; //在原樣把數據發送回去
  73. }
  74. /********************************************************************
  75.                             接收數據判斷函數
  76. *********************************************************************/
  77. switch(dat) //接收數據判斷
  78. {
  79. uchar k;
  80. k=10;
  81. case 'I': P2=0X00;delay(k);break; //  全開
  82. case 'i': P2=0XFF;delay(k);break; //  全關

  83. case 'A': K1=0;delay(k);break;                 //  第一路開
  84. case 'B': K2=0;delay(k);break;                 //  第二路開
  85. case 'C': K3=0;delay(k);break;                 //  第三路開
  86. case 'D': K4=0;delay(k);break;                 //  第四路開

  87. case 'a': K1=1;delay(k);break;                 //  第一路關
  88. case 'b': K2=1;delay(k);break;                 //  第二路關
  89. case 'c': K3=1;delay(k);break;                 //  第三路關
  90. case 'd': K4=1;delay(k);break;                 //  第四路關


  91. default:break;                                                                         //  跳出
  92. }

  93. }
  94. }
  95.             
  96. /********************************************************************
  97.                               結束
  98. *********************************************************************/

復制代碼

仿modbus通信控制程序
                           485通訊控制板通訊協議(技術QQ115451619)

波特率 9600
通訊協議格式如下:發送十六進制
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00~FF
00~09
00~FF
BB
解釋
第一個數據
第二個數據
第三個數據
第四個數據
最后一個數據
功能1:改變板子地址
舉例:更改地址:(發貨默認地址00注意:多個板子并聯使用時需要不同地址
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
01
01
BB
解釋
開始數據
向00地址發送
改變地址
將地址改成01
數據結束
功能2:打開繼電器
舉例:打開第一塊板子的繼電器
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
02
01
BB
解釋
開始數據
向00地址發送
打開功能
打開繼電器
數據結束
功能3:關閉繼電器
舉例:關閉第二路板子的繼電器
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
01
03
01
BB
解釋
開始數據
向01地址發送
關閉功能
關閉繼電器
數據結束
功能4:打開某塊板子的所有繼電器(單路繼電器模塊的這個功能碼和功能2一樣)
舉例:打開第一塊板子的全部繼電器
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
04
FF
BB
解釋
開始數據
向00地址發送
打開所有功能
打開所有繼電器
數據結束
功能5:關閉某塊板子的所有繼電器(單路繼電器模塊的這個功能碼和功能3一樣)
舉例:關閉第三塊板子的全部繼電器
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
02
05
00
BB
解釋
開始數據
向02地址發送
關閉所有功能
關閉所有繼電器
數據結束
功能6:查詢繼電器狀態
舉例:查詢第一塊板子繼電器狀態
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
06
01
BB
解釋
開始數據
向00地址發送
查詢功能
查詢繼電器
數據結束
查詢返回信息分析 繼電器關閉返回值(關閉返回00)
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
07
00
BB
解釋
開始數據
00地址返回
返回功能
繼電器狀態關閉
數據結束
查詢返回信息分析 繼電器打開返回值(打開返回FF)
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
07
FF
BB
解釋
開始數據
00地址返回
返回功能
繼電器狀態打開
數據結束

功能7:查詢輸入狀態
舉例:查詢第一塊板子的輸入狀態
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
08
01
BB
解釋
開始數據
向00地址發送
查詢功能
查詢輸入
數據結束
查詢返回信息分析 輸入返回值(關閉返回00)
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
09
00
BB
解釋
開始數據
00地址返回
返回功能
輸入狀態關閉
數據結束
查詢返回信息分析 輸入返回值(打開返回01)
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
09
FF
BB
解釋
開始數據
00地址返回
返回功能
輸入狀態打開
數據結束
功能8:輸入發送數據
當輸入端有信號時,給上位機發送數據
舉例:第一路有信號輸入時的數據為:AA 00 08 01 BB
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
08
01~08
BB
解釋
開始數據
00地址返回
返回功能
輸入狀態
數據結束
功能9:板子地址清零控制(用于地址不清晰或者忘記,在485總線下禁止操作,只可對其單獨清零)
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
00
00
BB
解釋
開始數據
00
地址清零
數據結束
功能10:繼電器定時輸出
協議
啟始位
地址位
繼電器位
數據位
結束位
控制
AA
00
11
00
BB
解釋
開始數據
地址
打開第一個繼電器
時間值單位秒
數據結束
協議
啟始位
地址位
繼電器位
數據位
結束位
控制
AA
00
12
00
BB
解釋
開始數據
地址
打開第二個繼電器
時間值單位秒
數據結束
協議
啟始位
地址位
繼電器位
數據位
結束位
控制
AA
00
13
00
BB
解釋
開始數據
地址
打開第三個繼電器
時間值單位秒
數據結束
協議
啟始位
地址位
繼電器位
數據位
結束位
控制
AA
00
14
00
BB
解釋
開始數據
地址
打開第四個繼電器
時間值單位秒
數據結束
  1. #include<reg52.h>                       //庫文件
  2. #include <intrins.H>
  3. #include<EEPROM.h>
  4. #define uchar unsigned char//宏定義無符號字符型
  5. //sfr WDT_CONTR=0Xe1;
  6. sbit K1=P2^0;
  7. sbit K2=P2^1;
  8. sbit K3=P2^2;
  9. sbit K4=P2^3;
  10. sbit K5=P2^4;
  11. sbit K6=P2^5;
  12. sbit K7=P2^6;
  13. sbit K8=P2^7;

  14. /*定義八位入為單片機P1口*/
  15. sbit IN0=P1^0;
  16. sbit IN1=P1^1;
  17. sbit IN2=P1^2;
  18. sbit IN3=P1^3;
  19. sbit IN4=P1^4;
  20. sbit IN5=P1^5;
  21. sbit IN6=P1^6;
  22. sbit IN7=P1^7;
  23. uchar dat;
  24. uchar t,r,ii;
  25. uchar k=100;
  26. uchar add;    //掉電保持485的地址
  27. uchar j=0;
  28. bit flag_zx=0;
  29. uchar sendBuf[10];                //發送緩沖區
  30. uchar receBuf[10];    //接收緩沖區
  31. uchar s1,s2,s3,s4,s5,s6,s7,s8;
  32. uchar s11,s22,s33,s44,s55,s66,s77,s88;
  33. bit busy;
  34. bit bz1=0;
  35. bit bz2=0;
  36. bit bz3=0;
  37. bit bz4=0;
  38. bit bz5=0;
  39. bit bz6=0;
  40. bit bz7=0;
  41. bit bz8=0;

  42. bit sj1=0;
  43. bit sj2=0;
  44. bit sj3=0;
  45. bit sj4=0;
  46. bit sj5=0;
  47. bit sj6=0;
  48. bit sj7=0;
  49. bit sj8=0;
  50. /********************************************************************
  51.                             初始定義
  52. *********************************************************************/
  53. uint sec; //定義計數值,每過1/10 秒,sec 加一
  54. uint tcnt; //鍵值判斷
  55. /********************************************************************
  56.                             延時函數
  57. *********************************************************************/
  58. void delay(uchar t)
  59. {
  60.   uchar i,j;
  61.    for(i=0;i<t;i++)
  62.    {
  63.                  for(j=13;j>0;j--);
  64.               { ;
  65.               }
  66.    }
  67. }

  68. /********************************************************************
  69.               功能:串口初始化,波特率9600,方式1
  70. *********************************************************************/
  71. void Init_Com(void)
  72. {
  73. TMOD|=0x20;
  74. SCON=0x50;
  75. TH1=0xfd;
  76. TL1=0xfd;
  77. TR1=1;
  78. ES=1;
  79. }

  80. /****************發送函數*********************/
  81. void senduart2()
  82. {               
  83. //RS485_DIR=1;
  84. SBUF=sendBuf[0];while(!TI);TI=0;
  85. SBUF=sendBuf[1];while(!TI);TI=0;
  86. SBUF=sendBuf[2];while(!TI);TI=0;
  87. SBUF=sendBuf[3];while(!TI);TI=0;
  88. SBUF=sendBuf[4];while(!TI);TI=0;
  89. }

  90. /****************發送函數*********************/
  91. void send1()
  92. {               
  93. //RS485_DIR=1;
  94. SBUF=0XAA;while(!TI);TI=0;
  95. SBUF=add;while(!TI);TI=0;
  96. SBUF=0X08;while(!TI);TI=0;
  97. SBUF=0X01;while(!TI);TI=0;
  98. SBUF=0XBB;while(!TI);TI=0;
  99. }
  100. /****************發送函數*********************/
  101. void send2()
  102. {               
  103. //RS485_DIR=1;
  104. SBUF=0XAA;while(!TI);TI=0;
  105. SBUF=add;while(!TI);TI=0;
  106. SBUF=0X08;while(!TI);TI=0;
  107. SBUF=0X02;while(!TI);TI=0;
  108. SBUF=0XBB;while(!TI);TI=0;
  109. }
  110. /****************發送函數*********************/
  111. void send3()
  112. {               
  113. //RS485_DIR=1;
  114. SBUF=0XAA;while(!TI);TI=0;
  115. SBUF=add;while(!TI);TI=0;
  116. SBUF=0X08;while(!TI);TI=0;
  117. SBUF=0X03;while(!TI);TI=0;
  118. SBUF=0XBB;while(!TI);TI=0;
  119. }
  120. /****************發送函數*********************/
  121. void send4()
  122. {               
  123. //RS485_DIR=1;
  124. SBUF=0XAA;while(!TI);TI=0;
  125. SBUF=add;while(!TI);TI=0;
  126. SBUF=0X08;while(!TI);TI=0;
  127. SBUF=0X04;while(!TI);TI=0;
  128. SBUF=0XBB;while(!TI);TI=0;
  129. }
  130. /****************發送函數*********************/
  131. void send5()
  132. {               
  133. //RS485_DIR=1;
  134. SBUF=0XAA;while(!TI);TI=0;
  135. SBUF=add;while(!TI);TI=0;
  136. SBUF=0X08;while(!TI);TI=0;
  137. SBUF=0X05;while(!TI);TI=0;
  138. SBUF=0XBB;while(!TI);TI=0;
  139. }
  140. /****************發送函數*********************/
  141. void send6()
  142. {               
  143. //RS485_DIR=1;
  144. SBUF=0XAA;while(!TI);TI=0;
  145. SBUF=add;while(!TI);TI=0;
  146. SBUF=0X08;while(!TI);TI=0;
  147. SBUF=0X06;while(!TI);TI=0;
  148. SBUF=0XBB;while(!TI);TI=0;
  149. }/****************發送函數*********************/
  150. void send7()
  151. {               
  152. //RS485_DIR=1;
  153. SBUF=0XAA;while(!TI);TI=0;
  154. SBUF=add;while(!TI);TI=0;
  155. SBUF=0X08;while(!TI);TI=0;
  156. SBUF=0X07;while(!TI);TI=0;
  157. SBUF=0XBB;while(!TI);TI=0;
  158. }
  159. /****************發送函數*********************/
  160. void send8()
  161. {               
  162. //RS485_DIR=1;
  163. SBUF=0XAA;while(!TI);TI=0;
  164. SBUF=add;while(!TI);TI=0;
  165. SBUF=0X08;while(!TI);TI=0;
  166. SBUF=0X08;while(!TI);TI=0;
  167. SBUF=0XBB;while(!TI);TI=0;
  168. }

  169. /*****************清空發送緩沖區*************************/
  170. void clear_receBuf()
  171. {
  172.     uchar i;
  173.               for(i=0;i<5;i++)
  174.               {
  175.                   receBuf[i]=0;
  176.               }
  177. }
  178. /********************************************************************
  179.               功能:串口初始化,波特率9600,方式1
  180. *********************************************************************/
  181. void initTimer(void)
  182. {
  183. TMOD=0x2;
  184. TH0=0x1b;
  185. TL0=0x1b;
  186. }
  187. /********************************************************************
  188.                             串口中斷服務函數
  189. *********************************************************************/
  190. void uart(void) interrupt 4
  191. {
  192. /********************************************************************
  193.                             接收數據判斷函數
  194. *********************************************************************/
  195. if(RI)  //如果有接收
  196.                  {
  197.                    RI=0; //接收標志清零
  198.                    receBuf[r++&0x0F]=SBUF;     //把接受的數據存儲到BUT數組中
  199.                             if(receBuf[0]!=0xaa){r=0;}
  200.                             if(r>=5)
  201.                             {              r=0;

  202.                                 flag_zx=1;
  203.                             }
  204.                  }
  205.                  if(flag_zx==1)
  206.                  {                                

  207.                       flag_zx=0;
  208.                            
  209.                                 //0         1       2       3        4                           
  210.                                           //起始位   地址位  功能位   數據位  結束位
  211.                                           if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add))                //如果開始位和結束位,還有地址都正確,進行下一步判斷
  212.                                           {
  213.                                              if(receBuf[2]==0x01)  //修改板子地址
  214.                                              {
  215.                                                   add=receBuf[3];
  216.                                                                       EEPROMSectorErase(0);//擦除扇區
  217.                                                   EEPROMWriteByte(0,add);//寫入新的地址
  218.                                              }
  219.                                              else if(receBuf[2]==0x02)  //打開單路繼電器
  220.                                              {
  221.                                                                switch(receBuf[3])
  222.                                                                       {
  223.                                                                           case 0x01: K1=0;sj1=0; break;
  224.                                                                                     case 0x02: K2=0;sj2=0; break;
  225.                                                                           case 0x03: K3=0;sj3=0; break;
  226.                                                                                     case 0x04: K4=0;sj4=0; break;
  227.                                                                           case 0x05: K5=0;sj5=0;break;
  228.                                                                                     case 0x06: K6=0;sj6=0;break;
  229.                                                                           case 0x07: K7=0;sj7=0;break;
  230.                                                                                     case 0x08: K8=0;sj8=0;break;
  231.                                                                                     default:break;
  232.                                                                       }
  233.                                              }
  234.                                              else if(receBuf[2]==0x03)  //關閉單路繼電器
  235.                                              {
  236.                                                                switch(receBuf[3])
  237.                                                                       {
  238.                                                                           case 0x01: K1=1;sj1=0; break;
  239.                                                                                     case 0x02: K2=1;sj2=0; break;
  240.                                                                           case 0x03: K3=1;sj3=0; break;
  241.                                                                                     case 0x04: K4=1;sj4=0; break;
  242.                                                                           case 0x05: K5=1;sj5=0; break;
  243.                                                                                     case 0x06: K6=1;sj6=0; break;
  244.                                                                           case 0x07: K7=1;sj7=0; break;
  245.                                                                                     case 0x08: K8=1;sj8=0; break;
  246.                                                                                     default:break;
  247.                                                                       }                                 
  248.                                              }
  249.                                              else if(receBuf[2]==0x04)  //打開全部繼電器
  250.                                              {
  251.                                                   if(receBuf[3]==0xff)
  252.                                                   {
  253.                                                                           P2=0X00; sj1=0;sj2=0;sj3=0;sj4=0;sj5=0;sj6=0;sj7=0;sj8=0;
  254.                                                                       }
  255.                                              }
  256.                                              else if(receBuf[2]==0x05)  //關閉全部繼電器
  257.                                              {
  258.                                                   if(receBuf[3]==0x00)
  259.                                                   {
  260.                                                                           P2=0XFF; sj1=0;sj2=0;sj3=0;sj4=0;sj5=0;sj6=0;sj7=0;sj8=0;
  261.                                                                       }                                 
  262.                                              }
  263.                                              else if(receBuf[2]==0x06)  //查詢繼電器
  264.                                              {
  265.                                                                       sendBuf[0]=0xaa;
  266.                                                                       sendBuf[1]=add;
  267.                                                                       sendBuf[2]=0x07;
  268.                                                                       //sendBuf[3]=0xfe;
  269.                                                                       sendBuf[4]=0xbb;            
  270.                                                  switch(receBuf[3])
  271.                                                            {
  272.                                                                case 0x01: if(K1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  273.                                                                          case 0x02: if(K2==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  274.                                                                case 0x03: if(K3==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  275.                                                                          case 0x04: if(K4==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  276.                                                                case 0x05: if(K5==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  277.                                                                          case 0x06: if(K6==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  278.                                                                case 0x07: if(K7==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  279.                                                                          case 0x08: if(K8==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  280.                                                                          default:break;
  281.                                                            }
  282.                                                            senduart2();
  283.                                              }
  284.                                              else if(receBuf[2]==0x08)  //查詢輸入
  285.                                              {
  286.                                                                       sendBuf[0]=0xaa;
  287.                                                                       sendBuf[1]=add;
  288.                                                                       sendBuf[2]=0x09;
  289.                                                                       //sendBuf[3]=0xfe;
  290.                                                                       sendBuf[4]=0xbb;
  291.                                                       
  292.                                                  switch(receBuf[3])
  293.                                                            {
  294.                                                                case 0x01: if(IN0==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  295.                                                                          case 0x02: if(IN1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  296.                                                                case 0x03: if(IN2==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  297.                                                                          case 0x04: if(IN3==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  298.                                                                case 0x05: if(IN4==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  299.                                                                          case 0x06: if(IN5==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  300.                                                                case 0x07: if(IN6==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  301.                                                                          case 0x08: if(IN7==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  302.                                                                          default:break;
  303.                                                            }
  304.                                                                       senduart2();
  305.                                              }                                          

  306.                                                        else if(receBuf[2]==0x11)  //第1路延時控制
  307.                                           {
  308.                                           sj1=1; s11=0;
  309.                                           s1=receBuf[3];clear_receBuf();
  310.                                              }                                                                                                                                                         
  311.                                                                                     else if(receBuf[2]==0x12)  //第2路延時控制
  312.                                           {
  313.                                           sj2=1;s22=0;
  314.                                           s2=receBuf[3];clear_receBuf();
  315.                                              }
  316.                                                                                     else if(receBuf[2]==0x13)  //第3路延時控制
  317.                                           {
  318.                                           sj3=1;s33=0;
  319.                                           s3=receBuf[3];clear_receBuf();
  320.                                              }
  321.                                                                                     else if(receBuf[2]==0x14)  //第4路延時控制
  322.                                           {
  323.                                           sj4=1;s44=0;
  324.                                           s4=receBuf[3];clear_receBuf();
  325.                                              }
  326.                          else if(receBuf[2]==0x15)  //第5路延時控制
  327.                                           {
  328.                                           sj5=1; s55=0;
  329.                                           s5=receBuf[3];clear_receBuf();
  330.                                              }
  331.                                                                                     else if(receBuf[2]==0x16)  //第6路延時控制
  332.                                           {
  333.                                           sj6=1;s66=0;
  334.                                           s2=receBuf[3];clear_receBuf();
  335.                                              }
  336.                                                                                     else if(receBuf[2]==0x17)  //第7路延時控制
  337.                                           {
  338.                                           sj7=1;s77=0;
  339.                                           s77=receBuf[3];clear_receBuf();
  340.                                              }
  341.                                                                                     else if(receBuf[2]==0x18)  //第8路延時控制
  342.                                           {
  343.                                           sj8=1;s88=0;
  344.                                           s8=receBuf[3];clear_receBuf();
  345.                                              }

  346.                                           }
  347.                                           if((receBuf[0]==0xaa)&&(receBuf[1]==0x00)&&(receBuf[2]==0x00)&&(receBuf[3]==0x00)&&(receBuf[4]==0xbb))
  348.                                           {
  349.                                                   add=0x00;
  350.                                                                       EEPROMSectorErase(0);//擦除扇區
  351.                                                   EEPROMWriteByte(0,0);//寫入新的地址                                            
  352.                                           }
  353.                                           clear_receBuf();
  354.                             }

  355. }
  356. /********************************************************************
  357.                             主函數
  358. *********************************************************************/
  359. void main()
  360. {
  361. //WDT_CONTR=0x35;                //啟動看門狗
  362. initTimer();
  363. Init_Com();//串口初始化
  364. add = EEPROMReadByte(0);
  365. //add = 0X00;
  366. TR0=1;
  367. ET0=1;
  368. EA=1;

  369. while(1)
  370. {



  371.     if((IN0==0)&&(bz1==0)){delay(k);if(IN0==0){delay(k);send1();clear_receBuf();bz1=1;}}if((bz1==1)&&(IN0==1)){delay(k);bz1=0;}
  372.     if((IN1==0)&&(bz2==0)){delay(k);if(IN1==0){delay(k);send2();clear_receBuf();bz2=1;}}if((bz2==1)&&(IN1==1)){delay(k);bz2=0;}
  373.     if((IN2==0)&&(bz3==0)){delay(k);if(IN2==0){delay(k);send3();clear_receBuf();bz3=1;}}if((bz3==1)&&(IN2==1)){delay(k);bz3=0;}
  374.     if((IN3==0)&&(bz4==0)){delay(k);if(IN3==0){delay(k);send4();clear_receBuf();bz4=1;}}if((bz4==1)&&(IN3==1)){delay(k);bz4=0;}

  375.     if((IN4==0)&&(bz5==0)){delay(k);if(IN4==0){delay(k);send5();clear_receBuf();bz5=1;}}if((bz5==1)&&(IN4==1)){delay(k);bz5=0;}
  376.     if((IN5==0)&&(bz6==0)){delay(k);if(IN5==0){delay(k);send6();clear_receBuf();bz6=1;}}if((bz6==1)&&(IN5==1)){delay(k);bz6=0;}
  377.     if((IN6==0)&&(bz7==0)){delay(k);if(IN6==0){delay(k);send7();clear_receBuf();bz7=1;}}if((bz7==1)&&(IN6==1)){delay(k);bz7=0;}
  378.     if((IN7==0)&&(bz8==0)){delay(k);if(IN7==0){delay(k);send8();clear_receBuf();bz8=1;}}if((bz8==1)&&(IN7==1)){delay(k);bz8=0;}
  379. /*if(write==1)
  380. {
  381. write=0;
  382.                                           KK1 = P0;
  383.                                           KK2 = P1;
  384.                                           KK3 = P2;
  385.                                           KK4 = P3;
  386.                                           EEPROMSectorErase(0);
  387.                                           EEPROMWriteByte(0,KK1);
  388.                                           EEPROMWriteByte(1,KK2);
  389.                                           EEPROMWriteByte(2,KK3);
  390.                                           EEPROMWriteByte(3,KK4);
  391. }*/
  392. }
  393. }
  394. /********************************************************************
  395.                             定時中斷服務函數
  396. *********************************************************************/
  397. void t0(void) interrupt 1 using 0 //定時中斷服務函數
  398. {
  399.               tcnt++; //每過250ust tcnt 加一
  400.               if(tcnt==3900) //計滿400 次(1秒)時
  401.               {
  402.               tcnt=0; //重新再計
  403.               // K1=!K1;
  404.               // WDT_CONTR=0x35;  //7.2s喂狗一次
  405.               if(sj1==1){K1=0;s11++;if(s11>=s1){K1=1;s11=0;sj1=0;}}
  406.               if(sj2==1){K2=0;s22++;if(s22>=s2){K2=1;s22=0;sj2=0;}}
  407.               if(sj3==1){K3=0;s33++;if(s33>=s3){K3=1;s33=0;sj3=0;}}
  408.               if(sj4==1){K4=0;s44++;if(s44>=s4){K4=1;s44=0;sj4=0;}}
  409.               }
  410.               }
  411. /********************************************************************
  412.                               結束
  413. *********************************************************************/
復制代碼



全部資料51hei下載地址:
GYJ-0095_四路輸入輸出繼電器工控板發貨資料.rar (8.74 MB, 下載次數: 126)


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

使用道具 舉報

沙發
ID:462629 發表于 2021-3-6 23:50 | 只看該作者
這是好人啊,打包成一個,太謝謝了
回復

使用道具 舉報

板凳
ID:65956 發表于 2021-3-8 08:46 | 只看該作者
也只是仿modbus,并不是真modbus通訊協議,所以不一定很通用
回復

使用道具 舉報

地板
ID:336378 發表于 2021-3-17 11:44 | 只看該作者
    能用不??
有大神用過沒??
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久国产精品视频 | 欧美黄色网络 | 不卡的av一区 | 午夜不卡福利视频 | 亚洲网站免费看 | 99久久精品国产麻豆演员表 | 国产精品精品 | 国产福利在线播放 | www.99热.com | 日韩欧美在线视频 | 国产探花在线精品一区二区 | 亚洲精品成人 | www.国产一区 | 99国产精品久久久久久久 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 国产成人免费视频网站视频社区 | 天天操天天射天天 | 久久激情视频 | 亚洲播放 | 日本aaa视频| 日本在线播放 | 国产一区999 | 亚洲 欧美 日韩 精品 | 欧州一区二区三区 | 国产免费又色又爽又黄在线观看 | 嫩草最新网址 | 欧美日韩在线综合 | 国产91久久精品一区二区 | 天天看天天干 | 成人黄色av网址 | 欧美精品久久久 | 免费在线一区二区三区 | 在线黄| 欧美成年黄网站色视频 | 国产激情免费视频 | 亚洲www啪成人一区二区 | 亚洲va欧美va天堂v国产综合 | 能免费看的av | 亚洲444kkkk在线观看最新 | 成人免费观看视频 | 国产精品大片在线观看 |