|
原理圖如下:
0.png (51.93 KB, 下載次數(shù): 168)
下載附件
2018-2-25 01:38 上傳
【簡要說明】
一、 尺寸:長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、使用說明:
【標注說明】
1.jpg (102.01 KB, 下載次數(shù): 46)
下載附件
2018-2-25 01:37 上傳
【接線說明】
2.jpg (105.01 KB, 下載次數(shù): 59)
下載附件
2018-2-25 01:37 上傳
【應用舉例下載線連接圖同時可以TTL控制】
3.jpg (139.41 KB, 下載次數(shù): 64)
下載附件
2018-2-25 01:37 上傳
【應用舉例485接線圖】
4.jpg (69.74 KB, 下載次數(shù): 43)
下載附件
2018-2-25 01:37 上傳
【實用接線】
5.jpg (69.22 KB, 下載次數(shù): 63)
下載附件
2018-2-25 01:37 上傳
單路輸入輸出帶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 第二位是地址位
單片機源程序如下:
- #include "main.h"
- #include "init.h"
- #define ENABLE_IAP 0x83 //系統(tǒng)工作時鐘<12MHz 時,對IAP_CONTR 寄存器設置此值
- #define CMD_IDLE 0
- #define CMD_READ 1
- #define CMD_PROGRAM 2
- #define CMD_ERASE 3
- #define ENABLE_IAP 0x83//SYSCLK<12MH
- #define IAP_ADDRESS 0x0000 //存儲地址
- uint8 add; //掉電保持485的地址
- uint8 j=0;
- uint8 dat=0X00;
- bit flag_zx=0;
- uint8 sendPosi=0; //發(fā)送緩沖區(qū)指針
- uint8 receCount=0; //接收緩沖區(qū)指針
- uint8 sendCount=0; //需要發(fā)送數(shù)據(jù)個數(shù)
- uint8 receTimeOut=0; //通訊超時值
- uint8 byteCount=5; //發(fā)送個數(shù)
- uint8 sendBuf[10]; //發(fā)送緩沖區(qū)
- uint8 receBuf[10]; //接收緩沖區(qū)
- /********************************************************************
- 定義數(shù)據(jù)類型
- *********************************************************************/
- uint8 TBUF,RBUF;
- uint8 TDAT,RDAT;
- uint8 TCNT,RCNT;
- uint8 TBIT,RBIT;
- bit TING,RING;
- bit TEND,REND;
- bit bz1=0;
- uint8 t,r,ii; //定義數(shù)據(jù)類型
- uint8 but[16]; //數(shù)據(jù)存儲數(shù)組
- /********************************************************************
- 定義 ISP/IAP/EEPROM 命令
- *********************************************************************/
- void IapIdle();//禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態(tài)
- uint8 IapReadByte(uint16 addr);//讀數(shù)據(jù)
- void IapProgramByte(uint16 addr, uint8 dat);//寫數(shù)據(jù)
- void IapEraseSector(uint16 addr);//擦除數(shù)據(jù)
- void delay()//延時程序
- {
- uint8 m,n,s;
- for(m=100;m>0;m--)
- for(n=200;n>0;n--)
- for(s=248;s>0;s--);
- }
- void delay1()//延時程序
- {
- uint8 m,n,s;
- for(m=10;m>0;m--)
- for(n=20;n>0;n--)
- for(s=148;s>0;s--);
- }
- /****************發(fā)送函數(shù)*********************/
- void send1()
- {
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x10;
- sendBuf[3]=0xff;
- sendBuf[4]=0xbb;
- }
- /****************發(fā)送函數(shù)*********************/
- void senduart2()
- { RS485_DIR=1;
- for(ii=0;ii<5;ii++)
- {
- if(TEND) //允許發(fā)送
- {
- TEND=0;
- TBUF=sendBuf[t++&0x0F];
- TING=1;
- }
- while(!TEND);
- }
- t=0;
- RS485_DIR=0;
- }
- /*****************清空發(fā)送緩沖區(qū)*************************/
- void clear_receBuf()
- {
- uint8 i;
- for(i=0;i<5;i++)
- {
- receBuf[i]=0;
- }
- }
- void main()
- {
- delay();
- clear_receBuf();
- add= IapReadByte(0x01);//讀取存儲的值
- if(add==0xff)
- add=0x00;
- ConfigUART1();
- TR0=1;
- EA=1;
- // TEND=0;
- // REND=0;
- while(1)
- {
- 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;}
- if(REND) //如果有接收
- {
- REND=0; //接收標志清零
- receBuf[r++&0x0F]=RBUF; //把接受的數(shù)據(jù)存儲到BUT數(shù)組中
- if(receBuf[0]!=0xaa){r=0;}
- if(r>=5)
- { r=0;
- flag_zx=1;
- }
- }
- if(flag_zx==1)
- {
- flag_zx=0;
- //0 1 2 3 4
- //起始位 地址位 功能位 數(shù)據(jù)位 結束位
- if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add)) //如果開始位和結束位,還有地址都正確,進行下一步判斷
- {
- if(receBuf[2]==0x01) //修改板子地址
- {
- add=receBuf[3];
- IapEraseSector(0); //擦除扇區(qū)
- IapProgramByte(0x01,add);//寫入新的地址
- }
- else if(receBuf[2]==0x02) //打開單路繼電器
- {
- switch(receBuf[3])
- {
- case 0x01: OUT1=0; break;
- }
- }
- else if(receBuf[2]==0x03) //關閉單路繼電器
- {
- switch(receBuf[3])
- {
- case 0x01: OUT1=1; break;
- }
- }
- else if(receBuf[2]==0x04) //打開全部繼電器
- {
- if(receBuf[3]==0xff)
- {
- OUT1=0;
- }
- }
- else if(receBuf[2]==0x05) //關閉全部繼電器
- {
- if(receBuf[3]==0x00)
- {
- OUT1=1;
- }
- }
- else if(receBuf[2]==0x06) //查詢繼電器
- {
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x07;
- //sendBuf[3]=0xfe;
- sendBuf[4]=0xbb;
- switch(receBuf[3])
- {
- case 0x01: if(OUT1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- default:break;
- }
- senduart2();
- }
- else if(receBuf[2]==0x08) //查詢輸入
- {
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x09;
- //sendBuf[3]=0xfe;
- sendBuf[4]=0xbb;
-
- switch(receBuf[3])
- {
- case 0x01: if(IN1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- default:break;
- }
- senduart2();
- }
- }
- if((receBuf[0]==0xaa)&&(receBuf[1]==0x00)&&(receBuf[2]==0x00)&&(receBuf[3]==0x00)&&(receBuf[4]==0xbb))
- {
- add=0x00;
- IapEraseSector(0); //擦除扇區(qū)
- IapProgramByte(0x01,0x00);//寫入新的地址
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x00;
- sendBuf[3]=0x00;
- sendBuf[4]=0xbb;
- senduart2();
- }
- clear_receBuf();
- }
- }
- }
- // /**********************************************************
- //放在主函數(shù),定時0溢出中斷函數(shù),
- //*********************/
- void tm0()interrupt 1 using 1
- {
- if(RING)
- {
- if(--RCNT==0)
- {
- RCNT=3;
- if(--RBIT==0)
- {
- RBUF=RDAT;
- RING=0;
- REND=1;
- }
- else
- {
- RDAT>>=1;
- if(RXB)RDAT|=0X80;
- }
- }
- }
- else if(!RXB)
- {
- RING=1;
- RCNT=4;
- RBIT=9;
- }
- if(--TCNT==0)
- {
- TCNT=3;
- if(TING)
- {
- if(TBIT==0)
- {
- TXB=0;
- TDAT=TBUF;
- TBIT=9;
- }
- else
- {
- TDAT>>=1;
- if(--TBIT==0)
- {
- TXB=1;
- TING=0;
- TEND=1;
- }
- else
- {
- TXB=CY;
- }
- }
- }
- }
- }
- void IapIdle(){//禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態(tài)
- IAP_CONTR = 0; //
- IAP_CMD = 0; //
- IAP_TRIG = 0; //
- IAP_ADDRH = 0x80; //
- IAP_ADDRL = 0; //
- }
- uint8 IapReadByte(uint16 addr){//讀數(shù)據(jù)
- uint8 dat;
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_READ;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_TRIG = 0x5A;
- IAP_TRIG = 0xA5;
- _nop_();
- dat = IAP_DATA;
- IapIdle();
- return dat;
- }
- void IapProgramByte(uint16 addr, uint8 dat){//寫數(shù)據(jù)
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_PROGRAM;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_DATA = dat;
- IAP_TRIG = 0x5A;
- IAP_TRIG = 0xA5;
- _nop_();
- IapIdle();
- }
- void IapEraseSector(uint16 addr){//擦除數(shù)據(jù)
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_ERASE;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_TRIG = 0x5A;
- IAP_TRIG = 0xA5;
- _nop_();
- IapIdle();
- }
復制代碼 【通信協(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
2018-2-24 13:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
3.24 MB, 下載次數(shù): 80, 下載積分: 黑幣 -5
-
-
GYJ-0071_單路輸入輸出可編程485控制模塊原理圖及PCB圖.pdf
2018-2-24 13:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
307.29 KB, 下載次數(shù): 89, 下載積分: 黑幣 -5
-
-
單路輸入輸出帶485模塊帶輸入發(fā)送測試程序.rar
2018-2-24 13:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
59.31 KB, 下載次數(shù): 95, 下載積分: 黑幣 -5
-
-
單路輸入輸出帶485模塊帶輸入輸入查詢方式.rar
2018-2-24 13:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
50.24 KB, 下載次數(shù): 78, 下載積分: 黑幣 -5
-
-
配套程序.rar
2018-2-24 13:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
152.93 KB, 下載次數(shù): 95, 下載積分: 黑幣 -5
|