|
51单片机做的主控芯片.
Altium Designer画的四路输入输出继电器工控板原理图和PCB图如下:(51hei附件中可下载工程文件)
【简要说明】
一、 尺寸:长93mmX宽87mmX高28mm
二、 主要芯片:STC12C2052AD(兼容51程序)
三、 工作电压:12V(工作电压等于继电器额定工作电压)
四、 串口下载程序
五、 特点:1、具有电源指示。
2、输入输出具有信号指示灯。
3、光隔离输出控制继电器
4、标准的11.0592M晶振。
5、具有上电复位和手动复位。
6、主芯片完全兼容51程序。
7、有内部看门狗,EEPROM
8、高效率电源稳压芯片给单片机供电,工作更稳定。。
9、可控制交流220V/10A一下设备。
10、具有串口通信功能(可以上位机控制)。
六、有详细使用说明书
七、提供相关软件
八、提供例程及其学习资料
适用场合:工业控制、单片机学习、电子竞赛、产品开发、毕业设计。。。
该板配套参考程序
01、1对1输入输出点动控制程序
02、1对1输入输出自锁控制程序
03、1对1输入输出互锁控制程序
04、延时控制程序
05、顺序控制程序
06、串口通信参考程序_无返回值
07、串口通信参考程序_有返回值
08、随机输出控制程序
09、掉电存储控制程序
10、加密设定使用次数
11、4路其中3路就是给信号通电,信号没了就断电,其中1路给信号通电,0.5-1秒断电
继电器控制vb上位机及其源代码
下位机单片机源码:
四入四出485modbus协议上位机程序:
下位机单片机源程序如下:
- #include "hader\\main.h"
- //#include"hader\\STC12C5A60S2.H"
- /******************************
- 微控电子 www.mcuc.cn
- modbus RTU 的C51程序
- 单片机89S52 晶振:11.0592
- 通信波特率 9600 8位数据 1位停止位 偶校验 485通位接口
- 单片机控制板地址 localAddr(变量)
- 通信可设置数据的地址:
- 字地址 0 - 255 (只取16位的低8位)
- 位地址 0 - 255 (只取16位的低8位)
- P3^4; //运行指示灯
- P1^7; //看门狗复位
- P1^4; //75LBC184 发送接收控制
- *******************************/
- uint32 dwTickCount,dwIntTick; //时钟
- uint8 idata sendBuf[16],receBuf[16]; //发送接收缓冲区
- uint8 idata checkoutError; // ==2 偶校验错
- uint8 idata receTimeOut; //接收超时
- uint8 idata c10ms; //10ms 计时
- bit b1ms,bt1ms,b10ms,bt10ms,b100ms,bt100ms; //定时标志位
- uint8 dat;
- bit write=0; //写24C08 的标志
- sfr WDT_CONTR=0XE1;
- // 串行中断程序
- void commIntProc() interrupt 4
- {
- if(TI)
- {
- TI = 0;
- if(sendPosi < sendCount) //如果发送位置小于发送计数,那么继续发送
- {
- sendPosi++;
- ACC = sendBuf[sendPosi];
- TB8 = P; //加上校验位
- SBUF = sendBuf[sendPosi];
- }
- else //否则发送完毕,置接收状态
- {
- b485Send = 0; //发送完后将485置于接收状态
- receCount = 0; //清接收地址偏移寄存器
- checkoutError = 0;
- }
- }
- else if(RI)
- {
- RI = 0;
- receTimeOut = 10; //通讯超时值
- receBuf[receCount] = SBUF;
- ACC = receBuf[receCount];
- if(P != RB8)
- checkoutError = 2; //偶校验出错
- receCount++; //接收地址偏移寄存器加1
- receCount &= 0x0f; //最多一次只能接收16个字节
- }
- } // void CommIntProc()
- //定时器0 1ms 中断
- void timer0IntProc() interrupt 1
- {
- TL0 = TIMER_LOW;
- TH0 = TIMER_HIGHT;
- dwIntTick++;
- bt1ms = 1;
- c10ms++;
- if(c10ms >= 10)
- {
- c10ms = 0; //10ms计时器清零
- bt10ms = 1;
- }
- } // void Timer0IntProc()
- //定时处理
- void timeProc(void)
- {
- static uint8 c200ms;
- // bWatchDog = ~ bWatchDog; //看门狗取反
- b1ms = 0;
- b10ms = 0;
- b100ms = 0;
-
- // ET0 = 0; //禁用定时器0
- // dwTickCount = dwIntTick; //
- ET0 = 1;
- if(bt1ms) //如果1ms到
- {
- bt1ms = 0;
- b1ms = 1;
- if(receTimeOut>0) //如果接收超时值>0
- {
- receTimeOut--; //接收超时-1(1ms减1次)
- if(receTimeOut==0 && receCount>0) //判断通讯接收是否超时
- {
- b485Send = 0; //将485置为接收状态
- receCount = 0; //将接收地址偏移寄存器清零
- checkoutError = 0;
- }
- }
- }
-
- if(bt100ms)
- {
- bt100ms = 0;
- b100ms = 1;
- }
- if(bt10ms) //判断中断10ms标志位是否1
- {
- bt10ms = 0; //清中断10ms标志位
- b10ms = 1;
- c200ms++; //200ms计时器加1
- if(c200ms >= 20) //判断是否计时到200ms
- {
- c200ms = 0; //清200ms计时器
- // bRunLED = ~bRunLED; //取反运行指示灯
- }
- }
- } // void TimerProc(void)
- //初始化串口
- void initUart(void)
- {
- //串口2波特率
- SCON = 0x50; //方式1,8位数据,波特率可变
- TH1= 0xfd;
- TL1 = 0xfd; //波特率 9600
- TR1=1;
- SCON = 0xd0;
- PCON = 0;
- ES = 1;
- }//void initUart(void)
- //初始化中断
- void initInt(void)
- {
-
- TMOD = 0x21;
- TH0 = TIMER_HIGHT;
- TL0 = TIMER_LOW;
- TR0 = 1;
- ET0 = 1;
- initUart(); //串口初始化
- EA = 1;
- }
- //初始化
- void initProg(void)
- {
- initInt();
- b485Send = 0; //接收
- }
- /********************************************************************
- 24C08 读写驱动程序
- *********************************************************************/
- void delay1(uint16 x)
- {
- uint16 i;
- for(i=0;i<x;i++)
- ;
- }
- void flash(){ ; ; }
- //24c08 初始化子程序
- void x24c08_init()
- {
- scl=1;
- flash();
- sda=1;
- flash();
- }
- //启动(I方C)总线
- void start()
- {
- sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
- }
- //停止(I方C)总线
- void stop()
- {
- sda=0; flash(); scl=1; flash(); sda=1; flash();
- }
- //写一个字节
- void writex(uint8 j)
- {
- uint8 i,temp;
- temp=j;
- for (i=0;i<8;i++)
- {
- temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
- }
- scl=0; flash(); sda=1; flash();
- }
- //读一个字节
- uint8 readx()
- {
- uint8 i,j,k=0;
- scl=0; flash(); sda=1;
- for (i=0;i<8;i++)
- {
- flash(); scl=1; flash();
- if (sda==1) j=1;
- else j=0;
- k=(k<<1)|j;
- scl=0;}
- flash(); return(k);
- }
- //(I方C)线时钟
- void clock()
- {
- unsigned char i=0;
- scl=1; flash();
- while ((sda==1)&&(i<255))i++;
- scl=0; flash();
- }
- /********************************************************************
- 从24c08 的地址address 中读取一个字节数据
- *********************************************************************/
- unsigned char x24c08_read(unsigned char address)
- {
- unsigned char i;
- start(); writex(0xa0);
- clock(); writex(address);
- clock(); start();
- writex(0xa1); clock();
- i=readx(); stop();
- delay1(10);
- return(i);
- }
- /********************************************************************
- 向24c08 的address地址中写入一字节数据
- *********************************************************************/
- void x24c08_write(unsigned char address,unsigned char info)
- {
- EA=0;
- start(); writex(0xa0);
- clock(); writex(address);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载(pcb工程+源码等全套资料):
|
-
-
测试程序.rar
17.16 KB, 下载次数: 305, 下载积分: 黑币 -5
-
-
该板配套参考程序.rar
198.55 KB, 下载次数: 299, 下载积分: 黑币 -5
-
-
继电器控制上位机及其源代码.rar
39.93 KB, 下载次数: 312, 下载积分: 黑币 -5
-
-
四路输入输出继电器工控板DXP资料.rar
423.9 KB, 下载次数: 292, 下载积分: 黑币 -5
-
-
四入四出485modbus协议.rar
101.76 KB, 下载次数: 356, 下载积分: 黑币 -5
-
-
原理图.doc
53 KB, 下载次数: 248, 下载积分: 黑币 -5
评分
-
查看全部评分
|