求大神解答:小辈不知道为什么这个程序蓝牙无法触发中断(如果不出意外 这个程序的显示为蓝牙触发舵机转动 并在oled上显示舵机转动状态)
#include "REG51.h"
#include "led.h"
#include "spi.h"
#include "bmp.h"
sbit SG_PWM=P2^0;
unsigned char count=0;
unsigned char PWM_count=1;
unsigned char order;
void Timer_Init()
{
TMOD=0X01;
TH0=0Xfe;
TL0=0X0c; //????????????0.5ms ?0.5ms????????ж?
ET0=1;
TR0=1;
EA=1;
}
void Timer() interrupt 1
{
TR0=0;
TH0=0Xfe;
TL0=0X0c;
if(count<=PWM_count)
{
SG_PWM=1;
}
else
{
SG_PWM=0;
}
count++;
if(count>=40)
{
count=0;
}
TR0=1;
}
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xF3;
TL1 = TH1;
PCON = 0x80;
EA = 1;
ES = 1;
TR1 = 1;
}
void UARTInterrupt(void) interrupt 4
{
LED_Toggle();
order=SBUF;
Timer_Init();
switch(order)
{
case '0':
LED_Toggle();
PWM_count=1;
count=0;
EA=1;
OLED_Clear();
OLED_Display_GB2312_string(1,0,"顺时针45度");break;
case '1':
LED_Toggle();
PWM_count=0;
count=0;
EA=1;
OLED_Clear();
OLED_Display_GB2312_string(1,0,"顺时针180度"); break;
case '2':
LED_Toggle();
PWM_count=3;
count=0;
EA=1;
OLED_Clear();
OLED_Display_GB2312_string(1,0,"顺时针减90度");break;
case '3':
LED_Toggle();
PWM_count=1;
count=0;
EA=1;
OLED_Clear();
OLED_Display_GB2312_string(1,0,"顺时针加90度");break;
default:break;
RI=0;
SBUF=order;
while(!TI)
TI=0;
}
void main(void)
{
float t=0;
Timer_Init();
InitUART();
OLED_Init();
OLED_ColorTurn(0)
OLED_DisplayTurn(0)
OLED_Clear();
}
|