szxyp 发表于 2018-1-3 10:51:00

为什么接收的是一个字节

#include "reg52.h"                       
#include<intrins.h>               

typedef unsigned int u16;       
typedef unsigned char u8;

sbit beep=P1^5;       
sbit a=P2^0 ;       
sbit LSA=P2^2;       
sbit LSB=P2^3;
sbit LSC=P2^4;

//串口发送用到的变量
u8 transmit;
u8 count_fs=0;
u8 code smgduan={
        0x3f,   //0
        0x06,        //1
        0x5b,        //2
        0x4f,        //3
        0x66,        //4
        0x6d,        //5
        0x7d,        //6
        0x07,        //7
        0x7f,        //8
        0x6f,        //9
} ;

void delay(u16 i)
{
        while(i--);                  //延时函数,i=1时,大约延时10us
}



//串口初始化程序
void UART_Init()
{
        TMOD=TMOD&0x0f|0x20; //设置定时器1,工作方式2
        TH1=0XFd; //定时器1赋初值,0xf3代表串口波特率是2400
        TL1=0XFd;

        SM0=0;        //设定串口工作方式1
        SM1=1;
        REN=1; //允许串口接收

        ES=1; //开串口中断
        EA=1; //开总中断

        TR1=1; //启动定时器1
}
void main()
{       
   u16 L0=0,L1=0,L2=0,L3=0,d,n=0,w=0;
        UART_Init();
        TMOD|=0X01;                //01定时04计数选择为定时器0模式,工作方式1,仅用TR0打开启动。

        TH0=0X3C;                //给定时器赋初值,定时1ms   
        TL0=0XB0;                                                    
       
        TR0=1;                        //打开定时器

       if(w==0)
        {        if(a==1)
                {       
                delay(100);
                if(a==1)
                {
              L0++;
                  //以下程序是将下位机的震动的次数通过串口传给蓝牙
                //在这里,通讯协议为: L3 L2 L1 L0 一共4个字节
                        transmit=L3;
                        transmit=L2;
                        transmit=L1;
                        transmit=L0;
                        count_fs=0;
                        SBUF=transmit;//在这里发送数组的第一个字节给串口
                        count_fs++;
               while(1)
       {
           if(L0==10)
                {
                        L0=0;
                        L1++;
                }
                if(L1==10)                                                          
                {
                        L1=0;
                        L2++;
                }
                if(L2==10)
                {
                        L2=0;
                        L3++;
                }
                if(L3==10)
                {
                  L3=0;
                        L0=0;L1=0;L2=0;
                }


                for(d=0;d<4;d++)
                {
                        switch(d)       
                        {
                                case(0):
                                        LSA=0;LSB=0;LSC=0;P0=smgduan; break;//显示第0位
                                case(1):
                                        LSA=1;LSB=0;LSC=0;P0=smgduan; break;//显示第1位
                                case(2):
                                        LSA=0;LSB=1;LSC=0;P0=smgduan; break;//显示第2位
                                case(3):
                                        LSA=1;LSB=1;LSC=0;P0=smgduan; break;//显示第3位
                        }
                        delay(100);
                        P0=0x00;           //消隐
                }
                       

               
                if(a==1)
                delay(1000);
                if(a==1)                                                                     
                {
                        L0++;
                        //以下程序是将下位机的震动的次数通过串口传给蓝牙
                //在这里,通讯协议为: L3 L2 L1 L0 一共4个字节
                        transmit=L3;
                        transmit=L2;
                        transmit=L1;
                        transmit=L0;
                        count_fs=0;
                        SBUF=transmit;//在这里发送数组的第一个字节给串口
                        count_fs++;
                }
       
       
                if(TF0==1)
        {
          TF0=0;       
                TH0=0X3C;              //重置定时常数
                TL0=0XB0;
                n++;
                if(n>200)
                {
                  n=0;
                  w=1;
                }
                if(w==1)
                a=0;
    }
               
        }
        }               
        }
                }
                }
//串口中断服务程序
void UART_Int() interrupt 4
{
        if(RI==1)
        {
                RI=0;
       
        }
        else   //产生发送中断          TI=1
        {
                TI=0;
                if(count_fs!=4)   //利用串口中断发送数组中的第2个字节到第6个字节给串口
                {
                        SBUF=transmit;
                        count_fs++;
                }
        }
}                       
       
页: [1]
查看完整版本: 为什么接收的是一个字节