| #include <reg51.h>
 sfr AUXR = 0x8E;        //使用STC12C5A60S2单片机
 sfr BRT = 0x9C;
 char dis_angle[6]; //定义数组
 int   speed_mr;                 //右电机转速
 int   speed_ml=0;                 //左电机转速
 sbit SPDR = P3^4;         //右电机B相测速,用来判断电机转向
 sbit SPDL = P3^5;         //左电机B相测速,用来判断电机转向
 
 void Init_BRT()                                ////9600bps@22.1184MHz
 {
 
 PCON &= 0x7F;                //波特率不倍速
 SCON = 0x50;                    //8位数据,可变波特率
 AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
 BRT = 0xB8;                    //设定独立波特率发生器重装值
 AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
 AUXR |= 0x10;                //启动独立波特率发生器
 
 }
 void send_char(unsigned char txd) //sent out data
 {
 SBUF = txd;
 while(!TI);
 TI = 0;
 }
 void display(float temp_dat)
 {
 int temp,i;
 if(temp_dat<0)
 {
 dis_angle[0]='-';
 temp_dat=-temp_dat;
 }
 else dis_angle[0]='+';
 temp=temp_dat;
 
 dis_angle[1]=temp/10000+0x30;
 temp=temp%10000;
 dis_angle[2]=temp/1000+0x30;
 temp=temp%1000;
 dis_angle[3]=temp/100+0x30;
 temp=temp%100;
 dis_angle[4]=temp/10+0x30;
 temp=temp%10;
 dis_angle[5]=temp%10+0x30;
 for(i=0;i<6;i++)
 {
 send_char(dis_angle);
 
 }
 
 }
 void main()
 {
 Init_BRT();
 EX0=1;
 EX1=1;
 IT0=1;
 IT1=1;
 EA=1;
 while(1)
 {
 
 display(speed_mr);        //显示右边码盘计数脉冲
 display(speed_ml);        //显示左边码盘计数脉冲
 send_char(0x0d);
 send_char(0x0a);//换行,回车
 
 
 }
 
 
 }
 
 //********左电机中断***********************
 void INT_L(void) interrupt 0
 {
 
 if(SPDL == 1)  { speed_ml++; }                 //左电机前进
 else                      { speed_ml--; }                 //左电机后退
 
 
 }
 
 
 //********右电机中断***********************
 
 void INT_R(void) interrupt 2
 {
 
 if(SPDR == 1)  { speed_mr++; }                 //右电机前进
 else                      { speed_mr--; }                 //右电机后退
 //LED = ~LED;
 
 }
 
 |