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

標(biāo)題: 單路485通訊可編程繼電器開發(fā)模塊 附單片機(jī)控制程序與原理圖等資料 [打印本頁]

作者: zhangxinchun    時(shí)間: 2018-2-24 13:44
標(biāo)題: 單路485通訊可編程繼電器開發(fā)模塊 附單片機(jī)控制程序與原理圖等資料
原理圖如下:


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

單路輸入輸出帶485模塊帶輸入發(fā)送協(xié)議與測(cè)試程序

485通訊控制板通訊協(xié)議

波特率 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é)束
  
   
   
  
  板子地址清零控制(用于地址不清晰或者忘記,在485總線下禁止操作,只可對(duì)其單獨(dú)清零)
  
  協(xié)議
  
  啟始位
  
  地址位
  
  功能位
  
  數(shù)據(jù)位
  
  結(jié)束位
  
  控制
  
  AA
  
  00
  
  00
  
  00
  
  BB
  
  解釋
  
  開始數(shù)據(jù)
  
  00
  
  地址清零
  
   
  
  數(shù)據(jù)結(jié)束
  

IN1給開關(guān)信號(hào)發(fā)送 AA 00 10 FF  BB  第二位是地址位

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

  3. #define ENABLE_IAP 0x83 //系統(tǒng)工作時(shí)鐘<12MHz 時(shí),對(duì)IAP_CONTR 寄存器設(shè)置此值
  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        //存儲(chǔ)地址


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

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

  19. uint8 sendBuf[10];          //發(fā)送緩沖區(qū)
  20. uint8 receBuf[10];    //接收緩沖區(qū)

  21. /********************************************************************
  22.                            定義數(shù)據(jù)類型
  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;                  //定義數(shù)據(jù)類型
  32. uint8 but[16];          //數(shù)據(jù)存儲(chǔ)數(shù)組
  33. /********************************************************************
  34.                             定義 ISP/IAP/EEPROM 命令
  35. *********************************************************************/

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


  40. void delay()//延時(shí)程序
  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()//延時(shí)程序
  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. /****************發(fā)送函數(shù)*********************/
  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. /****************發(fā)送函數(shù)*********************/
  64. void senduart2()
  65. {            RS485_DIR=1;
  66.         for(ii=0;ii<5;ii++)
  67.                 {
  68.                     if(TEND)          //允許發(fā)送
  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. /*****************清空發(fā)送緩沖區(qū)*************************/
  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);//讀取存儲(chǔ)的值
  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; //接收標(biāo)志清零
  106.              receBuf[r++&0x0F]=RBUF;     //把接受的數(shù)據(jù)存儲(chǔ)到BUT數(shù)組中
  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.                         //起始位   地址位  功能位   數(shù)據(jù)位  結(jié)束位
  118.                         if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add))          //如果開始位和結(jié)束位,還有地址都正確,進(jìn)行下一步判斷
  119.                         {
  120.                            if(receBuf[2]==0x01)  //修改板子地址
  121.                            {
  122.                                 add=receBuf[3];
  123.                                     IapEraseSector(0);  //擦除扇區(qū)
  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)  //關(guān)閉單路繼電器
  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)  //關(guān)閉全部繼電器
  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);  //擦除扇區(qū)
  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. //放在主函數(shù),定時(shí)0溢出中斷函數(shù),
  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 單片機(jī) 在 一 安全 狀態(tài)
  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){//讀數(shù)據(jù)
  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){//寫數(shù)據(jù)
  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){//擦除數(shù)據(jù)
  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. }
復(fù)制代碼
【通信協(xié)議(字符控制協(xié)議)】購后提供源代碼
單片機(jī)與PC機(jī)采用485通訊,波特率默認(rèn)為9600.
單片機(jī)接收PC機(jī)發(fā)送的ASC||數(shù)據(jù)碼表如下:
01、開關(guān)繼電器:PC發(fā)送'A';繼電器吸合 發(fā)送'a' 繼電器斷開
02、輸出狀態(tài)查詢:PC發(fā)送B;單片機(jī)返回輸出狀態(tài)‘C’表示繼電器開 ‘c’表示繼電器關(guān);
03、輸入狀態(tài)查詢:PC發(fā)送b;單片機(jī)有輸入返回輸入狀態(tài)‘D’無輸入返回 ‘d’表示關(guān);
04、繼電器狀態(tài)取反:PC發(fā)送E 繼電器狀態(tài)取反

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

全部資料51hei下載地址:

GYJ-0071_單路輸入輸出可編程485控制模塊產(chǎn)品使用手冊(cè).doc

3.24 MB, 下載次數(shù): 80, 下載積分: 黑幣 -5

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

307.29 KB, 下載次數(shù): 89, 下載積分: 黑幣 -5

單路輸入輸出帶485模塊帶輸入發(fā)送測(cè)試程序.rar

59.31 KB, 下載次數(shù): 95, 下載積分: 黑幣 -5

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

50.24 KB, 下載次數(shù): 78, 下載積分: 黑幣 -5

配套程序.rar

152.93 KB, 下載次數(shù): 95, 下載積分: 黑幣 -5


作者: 榆林上校    時(shí)間: 2018-2-27 15:31
好資料,收藏
作者: ycbw    時(shí)間: 2020-10-24 20:54
沒幣,先收藏吧。
作者: aking991    時(shí)間: 2020-10-26 08:58
按你寫的這功能,程序是無比的簡單,還用得著這么神秘,是在作廣告吧
作者: jovew    時(shí)間: 2020-10-26 11:31
當(dāng)然是廣告啊! 文章里面不是說了嘛! 購買后提供源碼!!!

作者: zxy20209988    時(shí)間: 2020-11-6 10:39
好資料,收藏
作者: tianxiazone    時(shí)間: 2020-12-3 09:36
好東西   這是我一直想要的

作者: witp1    時(shí)間: 2021-8-18 21:40
好東西   這是我一直想要的
作者: yxdz1358    時(shí)間: 2021-12-7 17:28
樓主毫無保留的把全部的資料都貢獻(xiàn)了出來,太讓人感動(dòng)了,謝謝!下載這來學(xué)習(xí)一下。
作者: lhtlhtl    時(shí)間: 2022-7-20 20:24
#在這里快速回復(fù)# 感謝樓主的資料




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