钰平电子 发表于 2023-7-2 23:30:00

基于STC15W104单片机设计的RS232串口通信控制4路晶体管开关原理图+例程分享

功能描述:此数模块是基于,STC15F104W单片机为核心的,可编程控制,可以通过对单片机编程,实现串口对输出的控制,输出可以接5V~24V的直流负载。板子自带TTL接口,可以直接对单片机进行程序下载,支持TTL通讯和串口通讯,输出为PNP输出,可以直接驱动3W以内的直流负载。此模块提供,例程 原理图 相关软件及资料。【简要说明】一、板子尺寸:长62mmX宽53mmX高12mm
二、主要器件:STC15F104W三、工作电压:板子供电5V。输出供电5~24V
四、板子功耗:小于50mA
五、特点:
1、具有四路输出信号LED灯指示功能。
2、标准串口通讯。
3、支持TTL通讯和程序下载
4、PNP型晶体管输出。
5、输出光电隔离。
6、接受定制或者编程服务
7、工作温度-40度至 +70度
8、工作湿度 40%~ 80%RH







【声明】此程序仅用于学习与参考!   
#include "reg52.h"
#include <intrins.H>#define uchar unsigned char //宏定义字符型变量#define uintunsigned int        //宏定义整型变量/********************************************************************                            波特率设定*********************************************************************///#define BAUD 0XF400//1200bps@ 11.0592MHZ//#define BAUD 0XFA00//2400bps@ 11.0592MHZ//#define BAUD 0XFD00//4800bps@ 11.0592MHZ#define BAUD 0XFE80//9600bps@ 11.0592MHZ//#define BAUD 0XFF40//19200bps@ 11.0592MHZ//#define BAUD 0XFFA0//38400bps@ 11.0592MHZ
uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容/********************************************************************                            定义特殊寄存器*********************************************************************/sfr AUXR=0x8E;   //辅助寄存器sbit RXB=P3^0;sbit TXB=P3^1;sbit OUT1=P3^2;sbit OUT2=P3^3;sbit OUT3=P3^4;sbit OUT4=P3^5;/********************************************************************                           定义数据类型*********************************************************************/uchar TBUF,RBUF;uchar TDAT,RDAT;uchar TCNT,RCNT;uchar TBIT,RBIT;uint TING,RING;uint TEND,REND;
void UART_INIT(); //声明函数
uchar t,r;                  //定义数据类型uchar but;          //数据存储数组/********************************************************************                            延时函数*********************************************************************/void delay(uchar t){uchar i,j;   for(i=0;i<t;i++)   {          for(j=13;j>0;j--);       { ;       }   }}
/****************发送函数*********************/void senduart2(){       
                  if(TEND)          //允许发送                        {                               TEND=0;                               TBUF=but;                               TING=1;                        }                        while(!TEND);}/********************************************************************                            主函数*********************************************************************/void main(){
TMOD=0X00;           //定时器T0设定AUXR=0X80;           //辅助寄存器TL0=BAUD;           //十六位寄存器TH0=BAUD>>8;   //十六位寄存器TR0=1;                   //开定时器ET0=1;PT0=1;EA=1;                   //开总中断UART_INIT();   //串口初始化while(1)           //无线循环{//if(IN1==0) OUT1=0;elseOUT1=1;
if(REND){   REND=0;   r++;   dat=RBUF;   }
switch(dat) //接收数据判断{uchar k;k=10;case 'A': OUT1=0;delay(k);dat=0xee;break;           //开case 'a': OUT1=1;delay(k);dat=0xee;break;           //关case 'B': OUT2=0;delay(k);dat=0xee;break;           //开case 'b': OUT2=1;delay(k);dat=0xee;break;           //关case 'C': OUT3=0;delay(k);dat=0xee;break;           //开case 'c': OUT3=1;delay(k);dat=0xee;break;           //关case 'D': OUT4=0;delay(k);dat=0xee;break;           //开case 'd': OUT4=1;delay(k);dat=0xee;break;           //关case 'I': OUT1=0;OUT2=0;OUT3=0;OUT4=0;delay(k);dat=0xee;break;           //开case 'i': OUT1=1;OUT2=1;OUT3=1;OUT4=1;delay(k);dat=0xee;break;           //关default:break;                                           //跳出}
       }   }/********************************************************************                            接收数据判断函数*********************************************************************/





/********************************************************************                            定时器T0*********************************************************************/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;          }          }        }        }}/********************************************************************            功能:串口初始化,波特率9600,方式1*********************************************************************/void UART_INIT(){TING=0;RING=0;
TEND=1;REND=0;
TCNT=0;RCNT=0;}
/********************************************************************                            结束*********************************************************************/


页: [1]
查看完整版本: 基于STC15W104单片机设计的RS232串口通信控制4路晶体管开关原理图+例程分享