|
150黑幣
我有一個(gè)LD3320它是一個(gè)語(yǔ)音模塊,我只要給它一個(gè)命令詞,例如我說開啟,他就發(fā)送0xAA給我的51單片機(jī),然后我想的是我單片機(jī)通過串口讀取到它發(fā)給我的數(shù)據(jù),也就是0xAA,然后去控制舵機(jī)去做一些操作。現(xiàn)在的問題是當(dāng)我說完后0xAA會(huì)在STC-ISP的串口助手的接收緩沖區(qū)顯示,但是舵機(jī)沒有任何反應(yīng),且舵機(jī)是鎖死的狀態(tài),我需要在發(fā)送緩沖區(qū)手動(dòng)輸入AA才可以讓舵機(jī)動(dòng)起來(lái)但是它又會(huì)轉(zhuǎn)回去。簡(jiǎn)單來(lái)說就是我讀到串口的數(shù)據(jù)就可以對(duì)舵機(jī)進(jìn)行操作,而不是我還要手動(dòng)輸入才可以進(jìn)行操作,請(qǐng)問怎么辦啊?
單片機(jī)源程序如下:
- #include <reg52.h>
- sbit SG_PWM=P1^0;
- unsigned char count=0;
- unsigned char temp;
- unsigned char PWM_count=1; //1--0度,2--45度,3--90度,4--135度,5--180度
- void Uart1Init(void) //9600bps@11.05926MHz
- {
- SCON = 0x50; //
- TMOD &= 0x0F;
- TMOD |= 0x20; //
- TL1 = 0xFD; //
- TH1 = 0xFD; //
- ET1 = 0; //
- TR1 = 1; //
- ES=1; //
- EA = 1;
- }
- void UART_SendData(unsigned char dat)
- {
- SBUF=dat;
- while(!TI); //等待發(fā)送成功
- TI=0; //清除發(fā)送中斷標(biāo)志
- }
- void Timer_Init()
- {
- TMOD &= 0xF0;
- TMOD |= 0x01; //
- TH0=0Xfe;
- TL0=0X33; //計(jì)數(shù)初值設(shè)置為0.5ms 每0.5ms進(jìn)入一次中斷,晶振頻率:11.0592MHZ
- ET0=1; //打開定時(shí)器0的中斷
- TR0=1; //打開定時(shí)器0
- }
- void main()
- {
- Timer_Init();
- Uart1Init();
- while(1)
- {
-
- }
- }
- void Timer0_Interrupt() interrupt 1
- {
- TR0=0;
- TH0=0Xfe;
- TL0=0X33; //重新賦計(jì)數(shù)初值為0.5ms
- if(count<=PWM_count)
- {
- SG_PWM=1;
- }
- else
- {
- SG_PWM=0;
- }
- count++;
- if(count>=40)
- {
- count=0;
- }
- TR0=1;
- }
- void Uart_Interrupt() interrupt 4
- {
- if(RI)
- {
- RI = 0;
- temp = SBUF;
- if(temp==0xAA)
- {
- PWM_count=1;
- count=0;
- }
- else if(temp==0xBB)
- {
- PWM_count=3;
- count=0;
- }
- }
- if(TI)
- {
- TI = 0;
- }
- }
復(fù)制代碼 |
|