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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

GYJ-0099_458通訊控制工控板(八路控制)單片機源碼與資料分享

[復制鏈接]
跳轉到指定樓層
樓主
GYJ-0099_458通訊控制工控板八路控制產品使用說明書
【簡要說明】
一、尺寸:長176mmX寬72mmX高20mm
二、主要芯片:單片機STC12C2052AD 繼電器 光耦
三、工作電壓:有直流12V及24V可選。
四、特點:
電路結構簡單,穩定可靠,采用最新款STC單片機,運行速度快
1、具有8繼電器吸合指示燈,電源指示燈
2、板子功耗小于5W
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、485通信控制,可以多塊聯機。
14、8路輸出開關量輸出(即:干接點輸出)
15、具有TTL(UART)通訊和RS485通訊兩種模式可選。
16、資料開源,客戶可以自己編程
17、可以選擇使用內部EEPROM 作為存儲單元
18、電路具有,防反接保護、過流保護、續流保護等
19、單片機可以自行更換,可以選擇替換型的STC系列單片機
20、我們提供電路相關的,原理圖、例程、開發環境、下載軟件等相關資料
適用場合:工業控制、產品開發、項目設計,自動化改造等
【標注說明】
接線說明
  
輸出控制設備

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

485通信說明
默認發貨程序協議提供源代碼客戶可以自己更改。
485通訊控制板通訊協議
波特率 9600
通訊協議格式如下:發送十六進制
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00~FF
01~05
00~FF
BB
解釋
第一個數據
第二個數據
第三個數據
第四個數據
最后一個數據
功能1:改變板子地址
舉例:更改地址:(發貨默認地址00注意:多個板子并聯使用時需要不同地址

協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
01
01
BB
解釋
開始數據
向00地址發送
改變地址
將地址改成01
數據結束
功能2:打開某個繼電器
舉例:打開第一塊板子的第一個繼電器

協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
02
01
BB
解釋
開始數據
向00地址發送
打開某路功能
打開第一路
數據結束
功能3:關閉某個繼電器
舉例:關閉第二路板子的第三個繼電器

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

協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
04
FF
BB
解釋
開始數據
向00地址發送
打開所有功能
打開所有繼電器
數據結束
功能5:關閉某塊板子的所有繼電器
舉例:關閉第三塊板子的全部繼電器

協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
02
05
00
BB
解釋
開始數據
向02地址發送
關閉所有功能
關閉所有繼電器
數據結束
功能6:查詢繼電器狀態
舉例:查詢第一塊板子的第二路狀態

協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
06
02
BB
解釋
開始數據
向00地址發送
查詢功能
查詢第二路
數據結束
查詢返回信息分析 繼電器關閉返回值(關閉返回00)
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
07
00
BB
解釋
開始數據
00地址返回
返回功能
繼電器狀態關閉
數據結束
查詢返回信息分析 繼電器打開返回值(打開返回01)
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
07
01
BB
解釋
開始數據
00地址返回
返回功能
繼電器狀態打開
數據結束
板子地址清零控制
協議
啟始位
地址位
功能位
數據位
結束位
控制
AA
00
00
00
BB
解釋
開始數據
00
地址清零

數據結束

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

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

  3. //#define address 0x00                    //板子地址
  4. #define ENABLE_IAP 0x83 //系統工作時鐘<12MHz 時,對IAP_CONTR 寄存器設置此值
  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              //存儲地址
  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;     //發送緩沖區指針
  22. uint8 receCount=0;    //接收緩沖區指針
  23. uint8 sendCount=0;    //需要發送數據個數
  24. uint8 receTimeOut=0;  //通訊超時值
  25. uint8 byteCount=5;    //發送個數

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

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


  35. void delay()//延時程序
  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. /****************發送函數*********************/
  43. void senduart2()
  44. {
  45.     sendPosi++;
  46.     SBUF=sendBuf[0];
  47. }
  48. /*****************清空發送緩沖區*************************/
  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);//讀取存儲的值
  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.                                           //起始位   地址位  功能位   數據位  結束位
  76.                                           if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add))                //如果開始位和結束位,還有地址都正確,進行下一步判斷
  77.                                           {
  78.                                              if(receBuf[2]==0x01)  //修改板子地址
  79.                                              {
  80.                                                   add=receBuf[3];
  81.                                                             IapEraseSector(0);  //擦除扇區
  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)  //關閉單路繼電器
  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)  //關閉全部繼電器
  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);  //擦除扇區
  166.                     IapProgramByte(0x01,0x00);//寫入新的地址                                                         
  167.                                           }
  168.                                           clear_receBuf();
  169.                             }
  170.               }
  171. }


  172. /**********************************************************
  173. 放在主函數,定時0溢出中斷函數,
  174. *********************/
  175. void t0(void) interrupt 1 using 0 //定時中斷服務函數
  176. {
  177.                 TH0=T0RH;
  178.               TL0=T0RL;
  179.               if(receTimeOut>0)                 
  180.               {
  181.                     receTimeOut--;
  182.                               if((receTimeOut==0)&&(receCount>0))    //如果10ms接收不到數據,把數據指針清零,重新更新緩沖區
  183.                               {
  184.                                              receCount=0;                      //接收緩沖區指針
  185.                               }
  186.               }
  187. }
  188. /********************* 串口1中斷服務函數 ********************************/
  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;    //通訊超時值
  206.                             receBuf[receCount] = SBUF;
  207.                             receCount++;          //接收地址偏移寄存器加1
  208.                             if(receCount>4)
  209.                               flag_zx=1;
  210.                             receCount &= 0x0f;    //最多一次只能接收16個字節
  211.               }
  212. }

  213. void IapIdle(){//禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態
  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){//讀數據
  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){//寫數據
  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){//擦除數據
  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. }
復制代碼


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


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

使用道具 舉報

沙發
ID:338810 發表于 2018-10-12 13:28 | 只看該作者
黑幣太貴了,希望有用
回復

使用道具 舉報

板凳
ID:140085 發表于 2018-11-9 15:26 | 只看該作者
波特率可以修改嗎,只能9600?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区免费 | 亚洲网站在线观看 | 久久91精品久久久久久9鸭 | 你懂的在线视频播放 | 日韩精品免费视频 | 欧美综合视频在线 | 国产你懂的在线观看 | 免费国产一区二区视频 | 91精品久久久久久久久 | 国产欧美精品一区二区 | 日本一区二区高清视频 | 黄网免费看 | 欧美精品久久久久久 | 三级av网址 | 国产成人精品一区二区三区四区 | 奇米影视在线 | 日本不卡免费新一二三区 | 91一区二区三区 | 久草视频在 | 国产在线精品一区二区 | 久久国产一区 | 国产婷婷色综合av蜜臀av | 欧美中文字幕一区二区 | 一区二区三区亚洲 | 精品视频在线播放 | 亚洲va在线va天堂va狼色在线 | a级免费黄色片 | xxx视频| 亚洲综合资源 | 久久久999国产精品 中文字幕在线精品 | 国产精品资源在线 | 日韩中文字幕一区 | 精品欧美一区二区三区久久久 | 亚洲国产欧美在线 | 国产精品美女www爽爽爽视频 | 日韩 国产 在线 | 国产精品黄色 | 一区二区三区四区在线视频 | 久久久久亚洲国产| 东京久久 | 91精品在线观看入口 |