谁帮我看看怎么回事,我想通过按钮IN1 的开关来控制串口发送一组数组命令
keil debug 的时候 看到TBUF 也是每个数组都发了
//*********************************************************************/
#include "STC15W408AS.h"
#include <intrins.H>
#define uchar unsigned char //宏定义字符型变量
#define uint unsigned int //宏定义整型变量
/********************************************************************
波特率设定
#define BAUD 0XFE80 //9600bps@ 11.0592MHZ
uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit IN1 = P1^2; /*单片机1.2引脚检测IN1是否动作*/
sbit IN2 = P1^3; /*单片机1.3引脚检测IN2是否动作*/
sbit IN3 = P1^4; /*单片机1.4引脚检测IN3是否动作*/
sbit IN4 = P1^5; /*单片机1.5引脚检测IN4是否动作*/
sbit IN5 = P1^6; /*单片机1.6引脚检测IN5是否动作*/
sbit IN6 = P1^7; /*单片机1.7引脚检测IN5是否动作*/
sbit IN7 = P5^4; /*单片机5.4引脚检测IN5是否动作*/
sbit IN8 = P5^5; /*单片机5.5引脚检测IN5是否动作*/
sbit COM1 = P3^7; /*单片机3.7引脚控制继电器COM1*/
sbit COM2 = P3^6; /*单片机3.6引脚控制继电器COM2*/
sbit COM3 = P3^5; /*单片机3.5引脚控制继电器COM3*/
sbit COM4 = P3^4; /*单片机3.4引脚控制继电器COM4*/
bit bz1=0;
bit bz2=0;
bit bz3=0;
bit bz4=0;
bit bz5=0;
bit bz6=0;
bit bz7=0;
bit bz8=0;
/********************************************************************
定义特殊寄存器
*********************************************************************/
sbit RXB=P3^0;
sbit TXB=P3^1;
/********************************************************************
定义数据类型
*********************************************************************/
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; //数据存储数组
uchar code DisPlayOn[21]=
{0x01, 0x30 ,0x41 ,0x30 ,0x41 ,0x30 ,0x43 ,0x02 ,0x43 ,0x32 ,0x30 ,0x33 ,0x44 ,0x36 ,0x30 ,0x30 ,0x30 ,0x31 ,0x03 ,0x73 ,0x0d};
// 0A0A0CC203D60001s 开机
uchar code DisPlayOff[21]=
{0x01, 0x30 ,0x41 ,0x30 ,0x41 ,0x30 ,0x43 ,0x02 ,0x43 ,0x32 ,0x30 ,0x33 ,0x44 ,0x36 ,0x30 ,0x30 ,0x30 ,0x34 ,0x03 ,0x76 ,0x0d};
// 0A0A0CC203D60004v 关机
/********************************************************************
延时函数
*********************************************************************/
void delay(uchar t)
{
uchar i,j;
for(i=0;i<t;i++)
{
for(j=130;j>0;j--);
{ ;
}
}
}
/****************发送函数*********************/
void senduart2(char* str)
{
uchar i;
if(TEND) //允许发送
{
TEND=0;
for(i=0;i<21;i++)
{
TBUF=str;
}
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)&&(bz1==0))
{
delay(10);
if(IN1==0)
{
bz1=1;
senduart2(DisPlayOn);
}
}
}
}
/********************************************************************
定时器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人点赞
|