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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:280979 發(fā)表于 2018-2-24 13:44 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
原理圖如下:


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

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

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

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

  功能7:查詢輸入狀態(tài)
  舉例:查詢第一塊板子的輸入狀態(tài)
   
  
  協(xié)議
  
  啟始位
  
  地址位
  
  功能位
  
  數(shù)據(jù)位
  
  結束位
  
  控制
  
  AA
  
  00
  
  08
  
  01
  
  BB
  
  解釋
  
  開始數(shù)據(jù)
  
  向00地址發(fā)送
  
  查詢功能
  
  查詢輸入
  
  數(shù)據(jù)結束
  
  查詢返回信息分析 輸入返回值(關閉返回00)
  
  協(xié)議
  
  啟始位
  
  地址位
  
  功能位
  
  數(shù)據(jù)位
  
  結束位
  
  控制
  
  AA
  
  00
  
  09
  
  00
  
  BB
  
  解釋
  
  開始數(shù)據(jù)
  
  00地址返回
  
  返回功能
  
  輸入狀態(tài)關閉
  
  數(shù)據(jù)結束
  
  查詢返回信息分析 輸入返回值(打開返回01)
  
  協(xié)議
  
  啟始位
  
  地址位
  
  功能位
  
  數(shù)據(jù)位
  
  結束位
  
  控制
  
  AA
  
  00
  
  09
  
  FF
  
  BB
  
  解釋
  
  開始數(shù)據(jù)
  
  00地址返回
  
  返回功能
  
  輸入狀態(tài)打開
  
  數(shù)據(jù)結束
  
   
   
  
  板子地址清零控制(用于地址不清晰或者忘記,在485總線下禁止操作,只可對其單獨清零)
  
  協(xié)議
  
  啟始位
  
  地址位
  
  功能位
  
  數(shù)據(jù)位
  
  結束位
  
  控制
  
  AA
  
  00
  
  00
  
  00
  
  BB
  
  解釋
  
  開始數(shù)據(jù)
  
  00
  
  地址清零
  
   
  
  數(shù)據(jù)結束
  

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

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

  3. #define ENABLE_IAP 0x83 //系統(tǒng)工作時鐘<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;     //發(fā)送緩沖區(qū)指針
  15. uint8 receCount=0;    //接收緩沖區(qū)指針
  16. uint8 sendCount=0;    //需要發(fā)送數(shù)據(jù)個數(shù)
  17. uint8 receTimeOut=0;  //通訊超時值
  18. uint8 byteCount=5;    //發(fā)送個數(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ù)存儲數(shù)組
  33. /********************************************************************
  34.                             定義 ISP/IAP/EEPROM 命令
  35. *********************************************************************/

  36. void IapIdle();//禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態(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()//延時程序
  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. /****************發(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);//讀取存儲的值
  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;     //把接受的數(shù)據(jù)存儲到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ù)位  結束位
  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);  //擦除扇區(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)  //關閉單路繼電器
  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);  //擦除扇區(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ù),定時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 單片機 在 一 安全 狀態(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. }
復制代碼
【通信協(xié)議(字符控制協(xié)議)】購后提供源代碼
單片機與PC機采用485通訊,波特率默認為9600.
單片機接收PC機發(fā)送的ASC||數(shù)據(jù)碼表如下:
01、開關繼電器:PC發(fā)送'A';繼電器吸合 發(fā)送'a' 繼電器斷開
02、輸出狀態(tài)查詢:PC發(fā)送B;單片機返回輸出狀態(tài)‘C’表示繼電器開 ‘c’表示繼電器關;
03、輸入狀態(tài)查詢:PC發(fā)送b;單片機有輸入返回輸入狀態(tài)‘D’無輸入返回 ‘d’表示關;
04、繼電器狀態(tài)取反:PC發(fā)送E 繼電器狀態(tài)取反

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

全部資料51hei下載地址:

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

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

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

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

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

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

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

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

配套程序.rar

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

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

使用道具 舉報

沙發(fā)
ID:47652 發(fā)表于 2018-2-27 15:31 | 只看該作者
好資料,收藏
回復

使用道具 舉報

板凳
ID:834124 發(fā)表于 2020-10-24 20:54 | 只看該作者
沒幣,先收藏吧。
回復

使用道具 舉報

地板
ID:65956 發(fā)表于 2020-10-26 08:58 | 只看該作者
按你寫的這功能,程序是無比的簡單,還用得著這么神秘,是在作廣告吧
回復

使用道具 舉報

5#
ID:97678 發(fā)表于 2020-10-26 11:31 | 只看該作者
當然是廣告啊! 文章里面不是說了嘛! 購買后提供源碼!!!
回復

使用道具 舉報

6#
ID:830252 發(fā)表于 2020-11-6 10:39 | 只看該作者
好資料,收藏
回復

使用道具 舉報

7#
ID:498757 發(fā)表于 2020-12-3 09:36 | 只看該作者
好東西   這是我一直想要的
回復

使用道具 舉報

8#
ID:620291 發(fā)表于 2021-8-18 21:40 | 只看該作者
好東西   這是我一直想要的
回復

使用道具 舉報

9#
無效樓層,該帖已經(jīng)被刪除
10#
ID:334781 發(fā)表于 2021-12-7 17:28 | 只看該作者
樓主毫無保留的把全部的資料都貢獻了出來,太讓人感動了,謝謝!下載這來學習一下。
回復

使用道具 舉報

11#
ID:933601 發(fā)表于 2022-7-20 20:24 | 只看該作者
#在這里快速回復# 感謝樓主的資料
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表