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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10730|回復: 9
收起左側

單路485通訊可編程繼電器開發模塊 附單片機控制程序與原理圖等資料

  [復制鏈接]
ID:280979 發表于 2018-2-24 13:44 | 顯示全部樓層 |閱讀模式
原理圖如下:
0.png

【簡要說明】
一、 尺寸:長78mmX寬47mmX高24mm
二、 主要芯片:STC單片機 MAX485芯片
三、 工作電壓:直流5~36V
四、特點:
    可編程控制,提供原理圖,例程及相關資料,提供程序源代碼,提供相關資料!客戶可以通過485端口對繼電器進行開關控制,也可以通過編程自由控制!
1、具有信號指示燈,繼電器吸合指示燈。
2、板子功耗小于1W
3、額定切換電流10A以內,切換電壓250V以內
4、最大切換功率300W
5、繼電器壽命1000000次以上。
6、電器絕緣電阻100M
7、觸電耐壓1000V
8、繼電器最大吸合時間15mS 毫秒
9、繼電器最大釋放時間5mS  毫秒
10、工作溫度-40度至 +70度
11、工作濕度 40%  ~ 80%RH
適用場合:遠程通信控制,可編程控制,輸入輸出控制,儀器儀表監控。
12、使用說明:
【標注說明】
1.jpg
【接線說明】
    2.jpg
【應用舉例下載線連接圖同時可以TTL控制
3.jpg
【應用舉例485接線圖
4.jpg
【實用接線】
5.jpg

單路輸入輸出帶485模塊帶輸入發送協議與測試程序

485通訊控制板通訊協議

波特率 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地址返回
  
  返回功能
  
  輸入狀態打開
  
  數據結束
  
   
   
  
  板子地址清零控制(用于地址不清晰或者忘記,在485總線下禁止操作,只可對其單獨清零)
  
  協議
  
  啟始位
  
  地址位
  
  功能位
  
  數據位
  
  結束位
  
  控制
  
  AA
  
  00
  
  00
  
  00
  
  BB
  
  解釋
  
  開始數據
  
  00
  
  地址清零
  
   
  
  數據結束
  

IN1給開關信號發送 AA 00 10 FF  BB  第二位是地址位

單片機源程序如下:
  1. #include "main.h"
  2. #include "init.h"

  3. #define ENABLE_IAP 0x83 //系統工作時鐘<12MHz 時,對IAP_CONTR 寄存器設置此值
  4. #define CMD_IDLE 0
  5. #define CMD_READ 1
  6. #define CMD_PROGRAM 2
  7. #define CMD_ERASE 3
  8. #define ENABLE_IAP 0x83//SYSCLK<12MH
  9. #define IAP_ADDRESS 0x0000        //存儲地址


  10. uint8 add;    //掉電保持485的地址
  11. uint8 j=0;
  12. uint8 dat=0X00;   
  13. bit flag_zx=0;

  14. uint8 sendPosi=0;     //發送緩沖區指針
  15. uint8 receCount=0;    //接收緩沖區指針
  16. uint8 sendCount=0;    //需要發送數據個數
  17. uint8 receTimeOut=0;  //通訊超時值
  18. uint8 byteCount=5;    //發送個數

  19. uint8 sendBuf[10];          //發送緩沖區
  20. uint8 receBuf[10];    //接收緩沖區

  21. /********************************************************************
  22.                            定義數據類型
  23. *********************************************************************/
  24. uint8 TBUF,RBUF;
  25. uint8 TDAT,RDAT;
  26. uint8 TCNT,RCNT;
  27. uint8 TBIT,RBIT;
  28. bit TING,RING;
  29. bit TEND,REND;
  30. bit bz1=0;
  31. uint8 t,r,ii;                  //定義數據類型
  32. uint8 but[16];          //數據存儲數組
  33. /********************************************************************
  34.                             定義 ISP/IAP/EEPROM 命令
  35. *********************************************************************/

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


  40. void delay()//延時程序
  41. {
  42.         uint8 m,n,s;
  43.         for(m=100;m>0;m--)
  44.         for(n=200;n>0;n--)
  45.         for(s=248;s>0;s--);
  46. }
  47. void delay1()//延時程序
  48. {
  49.         uint8 m,n,s;
  50.         for(m=10;m>0;m--)
  51.         for(n=20;n>0;n--)
  52.         for(s=148;s>0;s--);
  53. }
  54. /****************發送函數*********************/
  55. void send1()
  56. {          
  57. sendBuf[0]=0xaa;
  58. sendBuf[1]=add;
  59. sendBuf[2]=0x10;
  60. sendBuf[3]=0xff;
  61. sendBuf[4]=0xbb;
  62. }
  63. /****************發送函數*********************/
  64. void senduart2()
  65. {            RS485_DIR=1;
  66.         for(ii=0;ii<5;ii++)
  67.                 {
  68.                     if(TEND)          //允許發送
  69.                         {
  70.                                  TEND=0;
  71.                                  TBUF=sendBuf[t++&0x0F];
  72.                                  TING=1;
  73.                         }
  74.                         while(!TEND);
  75.                 }
  76.                 t=0;
  77.                 RS485_DIR=0;
  78. }
  79. /*****************清空發送緩沖區*************************/
  80. void clear_receBuf()
  81. {
  82.     uint8 i;
  83.         for(i=0;i<5;i++)
  84.         {
  85.             receBuf[i]=0;
  86.         }
  87. }
  88. void main()
  89. {
  90.         delay();
  91.     clear_receBuf();
  92.     add= IapReadByte(0x01);//讀取存儲的值
  93.         if(add==0xff)
  94.            add=0x00;
  95.     ConfigUART1();
  96.         TR0=1;
  97.         EA=1;
  98. //   TEND=0;
  99. //        REND=0;               

  100.     while(1)
  101.         {  
  102.   if((IN1==0)&&(bz1==0)){delay1();if(IN1==0){bz1=1;send1();senduart2();clear_receBuf();OUT1=0;}}if((IN1==1)&&(bz1==1)){bz1=0;OUT1=1;}
  103.            if(REND)  //如果有接收
  104.            {
  105.              REND=0; //接收標志清零
  106.              receBuf[r++&0x0F]=RBUF;     //把接受的數據存儲到BUT數組中
  107.                  if(receBuf[0]!=0xaa){r=0;}
  108.                  if(r>=5)
  109.                  {        r=0;

  110.                     flag_zx=1;
  111.                  }
  112.            }
  113.            if(flag_zx==1)
  114.            {                     

  115.                 flag_zx=0;
  116.                     //0         1       2       3        4               
  117.                         //起始位   地址位  功能位   數據位  結束位
  118.                         if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add))          //如果開始位和結束位,還有地址都正確,進行下一步判斷
  119.                         {
  120.                            if(receBuf[2]==0x01)  //修改板子地址
  121.                            {
  122.                                 add=receBuf[3];
  123.                                     IapEraseSector(0);  //擦除扇區
  124.                     IapProgramByte(0x01,add);//寫入新的地址                           
  125.                            }
  126.                            else if(receBuf[2]==0x02)  //打開單路繼電器
  127.                            {
  128.                                        switch(receBuf[3])
  129.                                         {
  130.                                             case 0x01: OUT1=0; break;
  131.                                         }
  132.                            }
  133.                            else if(receBuf[2]==0x03)  //關閉單路繼電器
  134.                            {
  135.                                        switch(receBuf[3])
  136.                                         {
  137.                                             case 0x01: OUT1=1; break;
  138.                                         }                       
  139.                            }
  140.                            else if(receBuf[2]==0x04)  //打開全部繼電器
  141.                            {
  142.                                 if(receBuf[3]==0xff)
  143.                                 {
  144.                                             OUT1=0;
  145.                                         }  
  146.                            }
  147.                            else if(receBuf[2]==0x05)  //關閉全部繼電器
  148.                            {
  149.                                 if(receBuf[3]==0x00)
  150.                                 {
  151.                                             OUT1=1;
  152.                                         }                       
  153.                            }
  154.                            else if(receBuf[2]==0x06)  //查詢繼電器
  155.                            {
  156.                                         sendBuf[0]=0xaa;
  157.                                         sendBuf[1]=add;
  158.                                         sendBuf[2]=0x07;
  159.                                         //sendBuf[3]=0xfe;
  160.                                         sendBuf[4]=0xbb;       
  161.                                switch(receBuf[3])
  162.                                    {
  163.                                        case 0x01: if(OUT1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  164.                                            default:break;
  165.                                    }  
  166.                                    senduart2();
  167.                            }
  168.                            else if(receBuf[2]==0x08)  //查詢輸入
  169.                            {
  170.                                         sendBuf[0]=0xaa;
  171.                                         sendBuf[1]=add;
  172.                                         sendBuf[2]=0x09;
  173.                                         //sendBuf[3]=0xfe;
  174.                                         sendBuf[4]=0xbb;
  175.                                
  176.                                switch(receBuf[3])
  177.                                    {
  178.                                        case 0x01: if(IN1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  179.                                            default:break;
  180.                                    }  
  181.                                         senduart2();
  182.                            }                          
  183.                         }
  184.                         if((receBuf[0]==0xaa)&&(receBuf[1]==0x00)&&(receBuf[2]==0x00)&&(receBuf[3]==0x00)&&(receBuf[4]==0xbb))
  185.                         {
  186.                                 add=0x00;
  187.                                     IapEraseSector(0);  //擦除扇區
  188.                     IapProgramByte(0x01,0x00);//寫入新的地址
  189.                                         sendBuf[0]=0xaa;
  190.                                         sendBuf[1]=add;
  191.                                         sendBuf[2]=0x00;
  192.                                         sendBuf[3]=0x00;
  193.                                         sendBuf[4]=0xbb;
  194.                                         senduart2();                                  
  195.                         }
  196.                         clear_receBuf();
  197.                 }
  198.         }
  199. }


  200. // /**********************************************************
  201. //放在主函數,定時0溢出中斷函數,
  202. //*********************/
  203. void tm0()interrupt 1 using 1
  204. {
  205. if(RING)
  206.   {
  207.    if(--RCNT==0)
  208.     {
  209.          RCNT=3;
  210.          if(--RBIT==0)
  211.         {
  212.                  RBUF=RDAT;
  213.                  RING=0;
  214.          REND=1;
  215.                 }
  216.                 else
  217.                 {
  218.                  RDAT>>=1;
  219.                  if(RXB)RDAT|=0X80;
  220.                 }

  221.     }
  222.   }
  223.     else if(!RXB)
  224.         {
  225.          RING=1;
  226.          RCNT=4;
  227.          RBIT=9;
  228.         }
  229.     if(--TCNT==0)
  230.         {
  231.         TCNT=3;


  232.         if(TING)
  233.         {
  234.           if(TBIT==0)
  235.           {
  236.           TXB=0;
  237.           TDAT=TBUF;
  238.           TBIT=9;
  239.           }
  240.           else
  241.           {
  242.           TDAT>>=1;
  243.           if(--TBIT==0)
  244.           {
  245.            TXB=1;
  246.            TING=0;
  247.            TEND=1;
  248.           }
  249.           else
  250.           {
  251.           TXB=CY;
  252.           }
  253.           }
  254.         }
  255.         }
  256. }
  257. void IapIdle(){//禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態
  258.     IAP_CONTR = 0;           //
  259.         IAP_CMD = 0;           //
  260.         IAP_TRIG = 0;           //
  261.         IAP_ADDRH = 0x80;  //
  262.         IAP_ADDRL = 0;           //
  263. }
  264. uint8 IapReadByte(uint16 addr){//讀數據
  265.    uint8 dat;
  266.    IAP_CONTR = ENABLE_IAP;
  267.    IAP_CMD = CMD_READ;
  268.    IAP_ADDRL = addr;
  269.    IAP_ADDRH = addr >> 8;
  270.    IAP_TRIG = 0x5A;
  271.    IAP_TRIG = 0xA5;
  272.    _nop_();
  273.    dat = IAP_DATA;
  274.    IapIdle();
  275.    return dat;
  276. }
  277. void IapProgramByte(uint16 addr, uint8 dat){//寫數據
  278.    IAP_CONTR = ENABLE_IAP;
  279.    IAP_CMD = CMD_PROGRAM;
  280.    IAP_ADDRL = addr;
  281.    IAP_ADDRH = addr >> 8;
  282.    IAP_DATA = dat;
  283.    IAP_TRIG = 0x5A;
  284.    IAP_TRIG = 0xA5;
  285.    _nop_();
  286.    IapIdle();
  287. }
  288. void IapEraseSector(uint16 addr){//擦除數據
  289.    IAP_CONTR = ENABLE_IAP;
  290.    IAP_CMD = CMD_ERASE;
  291.    IAP_ADDRL = addr;
  292.    IAP_ADDRH = addr >> 8;
  293.    IAP_TRIG = 0x5A;
  294.    IAP_TRIG = 0xA5;
  295.    _nop_();
  296.    IapIdle();
  297. }
復制代碼
【通信協議(字符控制協議)】購后提供源代碼
單片機與PC機采用485通訊,波特率默認為9600.
單片機接收PC機發送的ASC||數據碼表如下:
01、開關繼電器:PC發送'A';繼電器吸合 發送'a' 繼電器斷開
02、輸出狀態查詢:PC發送B;單片機返回輸出狀態‘C’表示繼電器開 ‘c’表示繼電器關;
03、輸入狀態查詢:PC發送b;單片機有輸入返回輸入狀態‘D’無輸入返回 ‘d’表示關;
04、繼電器狀態取反:PC發送E 繼電器狀態取反

【通信協議(仿mod bus控制協議)】購后提供源代碼

全部資料51hei下載地址:

GYJ-0071_單路輸入輸出可編程485控制模塊產品使用手冊.doc

3.24 MB, 下載次數: 80, 下載積分: 黑幣 -5

GYJ-0071_單路輸入輸出可編程485控制模塊原理圖及PCB圖.pdf

307.29 KB, 下載次數: 89, 下載積分: 黑幣 -5

單路輸入輸出帶485模塊帶輸入發送測試程序.rar

59.31 KB, 下載次數: 95, 下載積分: 黑幣 -5

單路輸入輸出帶485模塊帶輸入輸入查詢方式.rar

50.24 KB, 下載次數: 78, 下載積分: 黑幣 -5

配套程序.rar

152.93 KB, 下載次數: 95, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:47652 發表于 2018-2-27 15:31 | 顯示全部樓層
好資料,收藏
回復

使用道具 舉報

ID:834124 發表于 2020-10-24 20:54 | 顯示全部樓層
沒幣,先收藏吧。
回復

使用道具 舉報

ID:65956 發表于 2020-10-26 08:58 | 顯示全部樓層
按你寫的這功能,程序是無比的簡單,還用得著這么神秘,是在作廣告吧
回復

使用道具 舉報

ID:97678 發表于 2020-10-26 11:31 | 顯示全部樓層
當然是廣告啊! 文章里面不是說了嘛! 購買后提供源碼!!!
回復

使用道具 舉報

ID:830252 發表于 2020-11-6 10:39 | 顯示全部樓層
好資料,收藏
回復

使用道具 舉報

ID:498757 發表于 2020-12-3 09:36 | 顯示全部樓層
好東西   這是我一直想要的
回復

使用道具 舉報

ID:620291 發表于 2021-8-18 21:40 | 顯示全部樓層
好東西   這是我一直想要的
回復

使用道具 舉報

ID:334781 發表于 2021-12-7 17:28 | 顯示全部樓層
樓主毫無保留的把全部的資料都貢獻了出來,太讓人感動了,謝謝!下載這來學習一下。
回復

使用道具 舉報

ID:933601 發表于 2022-7-20 20:24 | 顯示全部樓層
#在這里快速回復# 感謝樓主的資料
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲精品一区二区三区 | 日韩久久久久久 | 欧美精品在线免费 | 日韩国产三区 | 老外黄色一级片 | 午夜丰满少妇一级毛片 | 久久小视频 | 国产欧美精品一区二区三区 | 久久成人精品视频 | 噜噜噜噜狠狠狠7777视频 | 国产三级精品三级在线观看四季网 | 国产精品久久久久久久岛一牛影视 | 国产精品久久久久久久久久免费看 | 国产精品免费一区二区三区四区 | 国产一区二区三区在线视频 | 人人做人人澡人人爽欧美 | 精品国模一区二区三区欧美 | 日本在线中文 | 国产玖玖 | 国产精品国产成人国产三级 | www.4567| 最新中文字幕在线 | 免费观看一级视频 | 精品国产1区2区3区 在线国产视频 | 国产精品精品视频一区二区三区 | 国产亚洲精品久久久优势 | 免费能直接在线观看黄的视频 | 九九热免费观看 | 在线免费观看毛片 | 综合久久一区 | 91欧美精品成人综合在线观看 | 国产高清精品一区二区三区 | av在线黄 | 日韩免费视频 | 精品久久久久久久久久久久久久 | 狠狠久| 一区二区视频在线观看 | 欧美精品成人一区二区三区四区 | 国产xxxx搡xxxxx搡麻豆 | 亚洲日本欧美日韩高观看 | 精品国偷自产在线 |