[STC单片机]

STC15W408AS串口通信 不成功

[复制链接]
1318|1
手机看帖
扫描二维码
随时随地手机跟帖
rockccmc2000|  楼主 | 2019-9-17 20:08 | 显示全部楼层 |阅读模式
谁帮我看看怎么回事,我想通过按钮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;
}

/********************************************************************
                            结束
*********************************************************************/

使用特权

评论回复

相关帖子

xuyaqi| | 2019-9-18 19:54 | 显示全部楼层
你发的程序缺一 / 造成 #define BAUD 0XFE80  //9600bps@ 11.0592MHZ

uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容

        sbit IN1 = P1^2;            /*单片机1.2引脚检测IN1是否动作*/   没有执行 chenxu.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝