誰幫我看看怎么回事,我想通過按鈕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;
- }
- /********************************************************************
- 結束
- *********************************************************************/
復制代碼 |