功能描述: 此数模块是基于,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 uint unsigned 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;else OUT1=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; }
/******************************************************************** 结束 *********************************************************************/
|