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

標(biāo)題: GYJ-0099_458通訊控制工控板(八路控制)單片機(jī)源碼與資料分享 [打印本頁]

作者: zhangxinchun    時(shí)間: 2018-3-18 01:05
標(biāo)題: GYJ-0099_458通訊控制工控板(八路控制)單片機(jī)源碼與資料分享
GYJ-0099_458通訊控制工控板八路控制產(chǎn)品使用說明書
【簡(jiǎn)要說明】
一、尺寸:長(zhǎng)176mmX寬72mmX高20mm
二、主要芯片:單片機(jī)STC12C2052AD 繼電器 光耦
三、工作電壓:有直流12V及24V可選。
四、特點(diǎn):
電路結(jié)構(gòu)簡(jiǎn)單,穩(wěn)定可靠,采用最新款STC單片機(jī),運(yùn)行速度快
1、具有8繼電器吸合指示燈,電源指示燈
2、板子功耗小于5W
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、485通信控制,可以多塊聯(lián)機(jī)。
14、8路輸出開關(guān)量輸出(即:干接點(diǎn)輸出)
15、具有TTL(UART)通訊和RS485通訊兩種模式可選。
16、資料開源,客戶可以自己編程
17、可以選擇使用內(nèi)部EEPROM 作為存儲(chǔ)單元
18、電路具有,防反接保護(hù)、過流保護(hù)、續(xù)流保護(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è)備

輸出舉例說明(開關(guān)量輸出、干接點(diǎn)輸出)
下載口說明也可以UART

485通信說明
默認(rèn)發(fā)貨程序協(xié)議提供源代碼客戶可以自己更改。
485通訊控制板通訊協(xié)議
波特率 9600
通訊協(xié)議格式如下:發(fā)送十六進(jìn)制
協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00~FF
01~05
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:打開某個(gè)繼電器
舉例:打開第一塊板子的第一個(gè)繼電器

協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
02
01
BB
解釋
開始數(shù)據(jù)
向00地址發(fā)送
打開某路功能
打開第一路
數(shù)據(jù)結(jié)束
功能3:關(guān)閉某個(gè)繼電器
舉例:關(guān)閉第二路板子的第三個(gè)繼電器

協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
01
03
03
BB
解釋
開始數(shù)據(jù)
向01地址發(fā)送
關(guān)閉某路功能
關(guān)閉第三路
數(shù)據(jù)結(jié)束
功能4:打開某塊板子的所有繼電器
舉例:打開第一塊板子的全部繼電器

協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
04
FF
BB
解釋
開始數(shù)據(jù)
向00地址發(fā)送
打開所有功能
打開所有繼電器
數(shù)據(jù)結(jié)束
功能5:關(guān)閉某塊板子的所有繼電器
舉例:關(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
02
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é)束
查詢返回信息分析 繼電器打開返回值(打開返回01)
協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
07
01
BB
解釋
開始數(shù)據(jù)
00地址返回
返回功能
繼電器狀態(tài)打開
數(shù)據(jù)結(jié)束
板子地址清零控制
協(xié)議
啟始位
地址位
功能位
數(shù)據(jù)位
結(jié)束位
控制
AA
00
00
00
BB
解釋
開始數(shù)據(jù)
00
地址清零

數(shù)據(jù)結(jié)束

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

默認(rèn)發(fā)貨程序提供源代碼客戶可以自己更改。
  1. #include "main.h"
  2. #include "init.h"

  3. //#define address 0x00                    //板子地址
  4. #define ENABLE_IAP 0x83 //系統(tǒng)工作時(shí)鐘<12MHz 時(shí),對(duì)IAP_CONTR 寄存器設(shè)置此值
  5. #define CMD_IDLE 0jm
  6. #define CMD_READ 1
  7. #define CMD_PROGRAM 2
  8. #define CMD_ERASE 3
  9. #define ENABLE_IAP 0x83//SYSCLK<12MH
  10. #define IAP_ADDRESS 0x0000              //存儲(chǔ)地址
  11. sfr IAP_DATA = 0xE2;
  12. sfr IAP_ADDRH = 0xE3;
  13. sfr IAP_ADDRL = 0xE4;
  14. sfr IAP_CMD = 0xE5;
  15. sfr IAP_TRIG = 0xE6;
  16. sfr IAP_CONTR = 0xE7;

  17. uint8 add;    //掉電保持485的地址
  18. uint8 j=0;
  19. uint8 dat=0X00;   
  20. bit flag_zx=0;

  21. uint8 sendPosi=0;     //發(fā)送緩沖區(qū)指針
  22. uint8 receCount=0;    //接收緩沖區(qū)指針
  23. uint8 sendCount=0;    //需要發(fā)送數(shù)據(jù)個(gè)數(shù)
  24. uint8 receTimeOut=0;  //通訊超時(shí)值
  25. uint8 byteCount=5;    //發(fā)送個(gè)數(shù)

  26. uint8 sendBuf[10];                //發(fā)送緩沖區(qū)
  27. uint8 receBuf[10];    //接收緩沖區(qū)
  28. /********************************************************************
  29.                             定義 ISP/IAP/EEPROM 命令
  30. *********************************************************************/

  31. void IapIdle();//禁用 ISP/IAP/EEPROM functionmake 單片機(jī) 在 一 安全 狀態(tài)
  32. uint8 IapReadByte(uint16 addr);//讀數(shù)據(jù)
  33. void IapProgramByte(uint16 addr, uint8 dat);//寫數(shù)據(jù)
  34. void IapEraseSector(uint16 addr);//擦除數(shù)據(jù)


  35. void delay()//延時(shí)程序
  36. {
  37.               uint8 m,n,s;
  38.               for(m=100;m>0;m--)
  39.               for(n=200;n>0;n--)
  40.               for(s=248;s>0;s--);
  41. }




  42. /****************發(fā)送函數(shù)*********************/
  43. void senduart2()
  44. {
  45.     sendPosi++;
  46.     SBUF=sendBuf[0];
  47. }
  48. /*****************清空發(fā)送緩沖區(qū)*************************/
  49. void clear_receBuf()
  50. {
  51.     uint8 i;
  52.               for(i=0;i<8;i++)
  53.               {
  54.                   receBuf[i]=0;
  55.               }
  56. }
  57. void main()
  58. {
  59.               delay();
  60.     clear_receBuf();
  61.     add= IapReadByte(0x01);//讀取存儲(chǔ)的值
  62.               if(add==0xff)
  63.                  add=0x00;
  64.     t0_init(1);     //1ms
  65.     ConfigUART1(9600);
  66.               TR0=1;
  67.               EA=1;

  68.                                  

  69.     while(1)
  70.               {

  71.                  if(flag_zx==1)
  72.                  {  
  73.                       flag_zx=0;
  74.                                 //0         1       2       3        4                           
  75.                                           //起始位   地址位  功能位   數(shù)據(jù)位  結(jié)束位
  76.                                           if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add))                //如果開始位和結(jié)束位,還有地址都正確,進(jìn)行下一步判斷
  77.                                           {
  78.                                              if(receBuf[2]==0x01)  //修改板子地址
  79.                                              {
  80.                                                   add=receBuf[3];
  81.                                                             IapEraseSector(0);  //擦除扇區(qū)
  82.                     IapProgramByte(0x01,add);//寫入新的地址                                      
  83.                                              }
  84.                                              else if(receBuf[2]==0x02)  //打開單路繼電器
  85.                                              {
  86.                                                                switch(receBuf[3])
  87.                                                                       {
  88.                                                                           case 0x01: OUT1=0; break;
  89.                                                                                     case 0x02: OUT2=0; break;
  90.                                                                                     case 0x03: OUT3=0; break;
  91.                                                                                     case 0x04: OUT4=0; break;
  92.                                                                                     case 0x05: OUT5=0; break;
  93.                                                                                     case 0x06: OUT6=0; break;
  94.                                                                                     case 0x07: OUT7=0; break;
  95.                                                                                     case 0x08: OUT8=0; break;
  96.                                                                       }
  97.                                              }
  98.                                              else if(receBuf[2]==0x03)  //關(guān)閉單路繼電器
  99.                                              {
  100.                                                                switch(receBuf[3])
  101.                                                                       {
  102.                                                                           case 0x01: OUT1=1; break;
  103.                                                                                     case 0x02: OUT2=1; break;
  104.                                                                                     case 0x03: OUT3=1; break;
  105.                                                                                     case 0x04: OUT4=1; break;
  106.                                                                                     case 0x05: OUT5=1; break;
  107.                                                                                     case 0x06: OUT6=1; break;
  108.                                                                                     case 0x07: OUT7=1; break;
  109.                                                                                     case 0x08: OUT8=1; break;
  110.                                                                       }                                 
  111.                                              }
  112.                                              else if(receBuf[2]==0x04)  //打開全部繼電器
  113.                                              {
  114.                                                   if(receBuf[3]==0xff)
  115.                                                   {
  116.                                                                           OUT1=0;
  117.                                                                                     OUT2=0;
  118.                                                                                     OUT3=0;
  119.                                                                                     OUT4=0;
  120.                                                                                     OUT5=0;
  121.                                                                                     OUT6=0;
  122.                                                                                     OUT7=0;
  123.                                                                                     OUT8=0;
  124.                                                                       }
  125.                                              }
  126.                                              else if(receBuf[2]==0x05)  //關(guān)閉全部繼電器
  127.                                              {
  128.                                                   if(receBuf[3]==0x00)
  129.                                                   {
  130.                                                                           OUT1=1;
  131.                                                                                     OUT2=1;
  132.                                                                                     OUT3=1;
  133.                                                                                     OUT4=1;
  134.                                                                                     OUT5=1;
  135.                                                                                     OUT6=1;
  136.                                                                                     OUT7=1;
  137.                                                                                     OUT8=1;
  138.                                                                       }                                 
  139.                                              }
  140.                                              else if(receBuf[2]==0x06)  //查詢繼電器
  141.                                              {
  142.                                                                       sendBuf[0]=0xaa;
  143.                                                                       sendBuf[1]=add;
  144.                                                                       sendBuf[2]=0x07;
  145.                                                                       //sendBuf[3]=0xfe;
  146.                                                                       sendBuf[4]=0xbb;
  147.                                                                       senduart2();
  148.                                                  switch(receBuf[3])
  149.                                                            {
  150.                                                                case 0x01: if(OUT1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  151.                                                                          case 0x02: if(OUT2==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  152.                                                                          case 0x03: if(OUT3==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  153.                                                                          case 0x04: if(OUT4==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  154.                                                                          case 0x05: if(OUT5==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  155.                                                                          case 0x06: if(OUT6==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  156.                                                                          case 0x07: if(OUT7==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  157.                                                                          case 0x08: if(OUT8==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  158.                                                                          default:break;
  159.                                                            }
  160.                                              }                                          
  161.                                           }
  162.                                           if((receBuf[0]==0xaa)&&(receBuf[1]==0x00)&&(receBuf[2]==0x00)&&(receBuf[3]==0x00)&&(receBuf[4]==0xbb))
  163.                                           {
  164.                                                   add=0x00;
  165.                                                             IapEraseSector(0);  //擦除扇區(qū)
  166.                     IapProgramByte(0x01,0x00);//寫入新的地址                                                         
  167.                                           }
  168.                                           clear_receBuf();
  169.                             }
  170.               }
  171. }


  172. /**********************************************************
  173. 放在主函數(shù),定時(shí)0溢出中斷函數(shù),
  174. *********************/
  175. void t0(void) interrupt 1 using 0 //定時(shí)中斷服務(wù)函數(shù)
  176. {
  177.                 TH0=T0RH;
  178.               TL0=T0RL;
  179.               if(receTimeOut>0)                 
  180.               {
  181.                     receTimeOut--;
  182.                               if((receTimeOut==0)&&(receCount>0))    //如果10ms接收不到數(shù)據(jù),把數(shù)據(jù)指針清零,重新更新緩沖區(qū)
  183.                               {
  184.                                              receCount=0;                      //接收緩沖區(qū)指針
  185.                               }
  186.               }
  187. }
  188. /********************* 串口1中斷服務(wù)函數(shù) ********************************/
  189. void InterruptUART() interrupt 4
  190. {
  191.               if(TI)
  192.               {
  193.                             TI = 0;
  194.                             if(sendPosi<byteCount)
  195.         {
  196.                      SBUF=sendBuf[sendPosi];                           
  197.                      sendPosi++;
  198.                   }
  199.                   else
  200.                      sendPosi=0;
  201.                    }
  202.               else if(RI)
  203.               {
  204.                             RI = 0;
  205.                             receTimeOut = 10;    //通訊超時(shí)值
  206.                             receBuf[receCount] = SBUF;
  207.                             receCount++;          //接收地址偏移寄存器加1
  208.                             if(receCount>4)
  209.                               flag_zx=1;
  210.                             receCount &= 0x0f;    //最多一次只能接收16個(gè)字節(jié)
  211.               }
  212. }

  213. void IapIdle(){//禁用 ISP/IAP/EEPROM functionmake 單片機(jī) 在 一 安全 狀態(tài)
  214.     IAP_CONTR = 0;                 //
  215.               IAP_CMD = 0;                 //
  216.               IAP_TRIG = 0;                 //
  217.               IAP_ADDRH = 0x80;  //
  218.               IAP_ADDRL = 0;                 //
  219. }
  220. uint8 IapReadByte(uint16 addr){//讀數(shù)據(jù)
  221.    uint8 dat;
  222.    IAP_CONTR = ENABLE_IAP;
  223.    IAP_CMD = CMD_READ;
  224.    IAP_ADDRL = addr;
  225.    IAP_ADDRH = addr >> 8;
  226.    IAP_TRIG = 0x46;
  227.    IAP_TRIG = 0xb9;
  228.    _nop_();
  229.    dat = IAP_DATA;
  230.    IapIdle();
  231.    return dat;
  232. }
  233. void IapProgramByte(uint16 addr, uint8 dat){//寫數(shù)據(jù)
  234.    IAP_CONTR = ENABLE_IAP;
  235.    IAP_CMD = CMD_PROGRAM;
  236.    IAP_ADDRL = addr;
  237.    IAP_ADDRH = addr >> 8;
  238.    IAP_DATA = dat;
  239.    IAP_TRIG = 0x46;
  240.    IAP_TRIG = 0xb9;
  241.    _nop_();
  242.    IapIdle();
  243. }
  244. void IapEraseSector(uint16 addr){//擦除數(shù)據(jù)
  245.    IAP_CONTR = ENABLE_IAP;
  246.    IAP_CMD = CMD_ERASE;
  247.    IAP_ADDRL = addr;
  248.    IAP_ADDRH = addr >> 8;
  249.    IAP_TRIG = 0x46;
  250.    IAP_TRIG = 0xb9;
  251.    _nop_();
  252.    IapIdle();
  253. }
復(fù)制代碼


全部資料51hei下載地址:
GYJ-0099_458通訊控制工控板八路控制發(fā)貨資料.rar (9.45 MB, 下載次數(shù): 28)



作者: JasirJiang    時(shí)間: 2018-10-12 13:28
黑幣太貴了,希望有用
作者: 1006518834    時(shí)間: 2018-11-9 15:26
波特率可以修改嗎,只能9600?




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1