谁帮我看看怎么回事,我想通过按钮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[i];
- }
- 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;
- }
- /********************************************************************
- 结束
- *********************************************************************/
复制代码 |