欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

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

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

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



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

默認(rèn)發(fā)貨程序
  1. 單片機(jī)與PC機(jī)采用9針串口,MAX232通訊,波特率默認(rèn)為9600.

  2. 單片機(jī)接收PC機(jī)發(fā)送的十六進(jìn)制碼表如下:

  3. 01、全開:PC發(fā)送'I';
  4. 02、全關(guān):PC發(fā)送'i';

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


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


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

  20. unsigned char dat; //用于存儲(chǔ)單片機(jī)接收發(fā)送緩沖寄存器SBUF里面的內(nèi)容

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

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

  31. /********************************************************************
  32.                             延時(shí)函數(shù)
  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.                             主函數(shù)
  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 ) //掃描判斷是否接收到數(shù)據(jù),
  69. {
  70. dat = SBUF; //接收數(shù)據(jù)SBUF賦與dat
  71. RI=0; //RI 清零。
  72. SBUF = dat; //在原樣把數(shù)據(jù)發(fā)送回去
  73. }
  74. /********************************************************************
  75.                             接收數(shù)據(jù)判斷函數(shù)
  76. *********************************************************************/
  77. switch(dat) //接收數(shù)據(jù)判斷
  78. {
  79. uchar k;
  80. k=10;
  81. case 'I': P2=0X00;delay(k);break; //  全開
  82. case 'i': P2=0XFF;delay(k);break; //  全關(guān)

  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;                 //  第一路關(guān)
  88. case 'b': K2=1;delay(k);break;                 //  第二路關(guān)
  89. case 'c': K3=1;delay(k);break;                 //  第三路關(guān)
  90. case 'd': K4=1;delay(k);break;                 //  第四路關(guān)


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

  93. }
  94. }
  95.             
  96. /********************************************************************
  97.                               結(jié)束
  98. *********************************************************************/

復(fù)制代碼

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

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

功能7:查詢輸入狀態(tài)
舉例:查詢第一塊板子的輸入狀態(tài)
協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
08
01
BB
解釋
開始數(shù)據(jù)
向00地址發(fā)送
查詢功能
查詢輸入
數(shù)據(jù)結(jié)束
查詢返回信息分析 輸入返回值(關(guān)閉返回00)
協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
09
00
BB
解釋
開始數(shù)據(jù)
00地址返回
返回功能
輸入狀態(tài)關(guān)閉
數(shù)據(jù)結(jié)束
查詢返回信息分析 輸入返回值(打開返回01)
協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
09
FF
BB
解釋
開始數(shù)據(jù)
00地址返回
返回功能
輸入狀態(tài)打開
數(shù)據(jù)結(jié)束
功能8:輸入發(fā)送數(shù)據(jù)
當(dāng)輸入端有信號(hào)時(shí),給上位機(jī)發(fā)送數(shù)據(jù)
舉例:第一路有信號(hào)輸入時(shí)的數(shù)據(jù)為:AA 00 08 01 BB
協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
08
01~08
BB
解釋
開始數(shù)據(jù)
00地址返回
返回功能
輸入狀態(tài)
數(shù)據(jù)結(jié)束
功能9:板子地址清零控制(用于地址不清晰或者忘記,在485總線下禁止操作,只可對(duì)其單獨(dú)清零)
協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
00
00
BB
解釋
開始數(shù)據(jù)
00
地址清零
數(shù)據(jù)結(jié)束
功能10:繼電器定時(shí)輸出
協(xié)議
啟始位
地址位
繼電器位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
11
00
BB
解釋
開始數(shù)據(jù)
地址
打開第一個(gè)繼電器
時(shí)間值單位秒
數(shù)據(jù)結(jié)束
協(xié)議
啟始位
地址位
繼電器位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
12
00
BB
解釋
開始數(shù)據(jù)
地址
打開第二個(gè)繼電器
時(shí)間值單位秒
數(shù)據(jù)結(jié)束
協(xié)議
啟始位
地址位
繼電器位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
13
00
BB
解釋
開始數(shù)據(jù)
地址
打開第三個(gè)繼電器
時(shí)間值單位秒
數(shù)據(jù)結(jié)束
協(xié)議
啟始位
地址位
繼電器位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
14
00
BB
解釋
開始數(shù)據(jù)
地址
打開第四個(gè)繼電器
時(shí)間值單位秒
數(shù)據(jù)結(jié)束
  1. #include<reg52.h>                       //庫文件
  2. #include <intrins.H>
  3. #include<EEPROM.h>
  4. #define uchar unsigned char//宏定義無符號(hào)字符型
  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. /*定義八位入為單片機(jī)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];                //發(fā)送緩沖區(qū)
  30. uchar receBuf[10];    //接收緩沖區(qū)
  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; //定義計(jì)數(shù)值,每過1/10 秒,sec 加一
  54. uint tcnt; //鍵值判斷
  55. /********************************************************************
  56.                             延時(shí)函數(shù)
  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. /****************發(fā)送函數(shù)*********************/
  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. /****************發(fā)送函數(shù)*********************/
  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. /****************發(fā)送函數(shù)*********************/
  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. /****************發(fā)送函數(shù)*********************/
  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. /****************發(fā)送函數(shù)*********************/
  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. /****************發(fā)送函數(shù)*********************/
  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. /****************發(fā)送函數(shù)*********************/
  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. }/****************發(fā)送函數(shù)*********************/
  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. /****************發(fā)送函數(shù)*********************/
  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. /*****************清空發(fā)送緩沖區(qū)*************************/
  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.                             串口中斷服務(wù)函數(shù)
  189. *********************************************************************/
  190. void uart(void) interrupt 4
  191. {
  192. /********************************************************************
  193.                             接收數(shù)據(jù)判斷函數(shù)
  194. *********************************************************************/
  195. if(RI)  //如果有接收
  196.                  {
  197.                    RI=0; //接收標(biāo)志清零
  198.                    receBuf[r++&0x0F]=SBUF;     //把接受的數(shù)據(jù)存儲(chǔ)到BUT數(shù)組中
  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.                                           //起始位   地址位  功能位   數(shù)據(jù)位  結(jié)束位
  211.                                           if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add))                //如果開始位和結(jié)束位,還有地址都正確,進(jìn)行下一步判斷
  212.                                           {
  213.                                              if(receBuf[2]==0x01)  //修改板子地址
  214.                                              {
  215.                                                   add=receBuf[3];
  216.                                                                       EEPROMSectorErase(0);//擦除扇區(qū)
  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)  //關(guān)閉單路繼電器
  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)  //關(guān)閉全部繼電器
  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路延時(shí)控制
  307.                                           {
  308.                                           sj1=1; s11=0;
  309.                                           s1=receBuf[3];clear_receBuf();
  310.                                              }                                                                                                                                                         
  311.                                                                                     else if(receBuf[2]==0x12)  //第2路延時(shí)控制
  312.                                           {
  313.                                           sj2=1;s22=0;
  314.                                           s2=receBuf[3];clear_receBuf();
  315.                                              }
  316.                                                                                     else if(receBuf[2]==0x13)  //第3路延時(shí)控制
  317.                                           {
  318.                                           sj3=1;s33=0;
  319.                                           s3=receBuf[3];clear_receBuf();
  320.                                              }
  321.                                                                                     else if(receBuf[2]==0x14)  //第4路延時(shí)控制
  322.                                           {
  323.                                           sj4=1;s44=0;
  324.                                           s4=receBuf[3];clear_receBuf();
  325.                                              }
  326.                          else if(receBuf[2]==0x15)  //第5路延時(shí)控制
  327.                                           {
  328.                                           sj5=1; s55=0;
  329.                                           s5=receBuf[3];clear_receBuf();
  330.                                              }
  331.                                                                                     else if(receBuf[2]==0x16)  //第6路延時(shí)控制
  332.                                           {
  333.                                           sj6=1;s66=0;
  334.                                           s2=receBuf[3];clear_receBuf();
  335.                                              }
  336.                                                                                     else if(receBuf[2]==0x17)  //第7路延時(shí)控制
  337.                                           {
  338.                                           sj7=1;s77=0;
  339.                                           s77=receBuf[3];clear_receBuf();
  340.                                              }
  341.                                                                                     else if(receBuf[2]==0x18)  //第8路延時(shí)控制
  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);//擦除扇區(qū)
  351.                                                   EEPROMWriteByte(0,0);//寫入新的地址                                            
  352.                                           }
  353.                                           clear_receBuf();
  354.                             }

  355. }
  356. /********************************************************************
  357.                             主函數(shù)
  358. *********************************************************************/
  359. void main()
  360. {
  361. //WDT_CONTR=0x35;                //啟動(dòng)看門狗
  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.                             定時(shí)中斷服務(wù)函數(shù)
  396. *********************************************************************/
  397. void t0(void) interrupt 1 using 0 //定時(shí)中斷服務(wù)函數(shù)
  398. {
  399.               tcnt++; //每過250ust tcnt 加一
  400.               if(tcnt==3900) //計(jì)滿400 次(1秒)時(shí)
  401.               {
  402.               tcnt=0; //重新再計(jì)
  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.                               結(jié)束
  413. *********************************************************************/
復(fù)制代碼



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


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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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