波特率好像应该设置成38400的,怎么算?
#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[4];u8 count_fs=0;u8 code smgduan[10]={ 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++; 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[L0]; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0;P0=smgduan[L1]; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0;P0=smgduan[L2]; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0;P0=smgduan[L3]; break;//显示第3位 } delay(100); P0=0x00; //消隐 } //以下程序是将下位机的震动的次数通过串口传给蓝牙 //在这里,通讯协议为: L3 L2 L1 L0 一共4个字节 transmit[0]=L3; transmit[1]=L2; transmit[2]=L1; transmit[3]=L0; count_fs=0; SBUF=transmit[count_fs];//在这里发送数组的第一个字节给串口 count_fs++; if(a==1) delay(1000); if(a==1) L0++; 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]; count_fs++; } }}
|