波特率好像應該設置成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++; } }}
|