我用STC89C52單片機連接了一個加速度模塊,根據角度信息控制IO口的電平,設置了串口中斷,加速度模塊每幀數據25個字節,串口RX讀取數據后用來控制其他IO口的電平,連接了幾個二極管控制亮滅來觀察現象,然后發現IO電平會不斷地快速波動,被困住了好幾天,想求助大家這個問題是怎么回事。把中斷代碼和讀取代碼貼上來請大家指導,謝謝大家。
中斷
- #include "stc_it.h"
- #include "usart.h"
- #include "string.h"
- //串口中斷
- void USART_IRQHandler(void)interrupt 4
- {
- static uint8_t i=0;//
-
- if(RI)//接收完成標志
- {
- RI=0;//清中斷接收標志
- RX_BUF[i]=SBUF;
- if (i==0&&RX_BUF[0]!=0x5a) return;//檢查幀頭
- i++;
- if(i==25) //
- {
- i=0; //
- Receive_ok=1;
- }
-
- }[/i][/font][i]
- [font=Tahoma] }[/font][font=Tahoma][size=5]
- 讀取
- [/size][/font][font=Tahoma]while(1)
- {
- if(Receive_ok)//串口接收完畢
- { Receive_ok=0;
- for(sum=0,i=0;i<(RX_BUF[3]+4);i++)
- sum+=RX_BUF[i];
- count=0;
- if(sum==RX_BUF[i])//校驗和判斷
- {
- if(RX_BUF[2]&0x01) //加速度數據
- count=6;
- if(RX_BUF[2]&0x02) //陀螺數據
- count+=6;
- if(RX_BUF[2]&0x04) //磁場數據
- count+=6;
- if(RX_BUF[2]&0x08) //四元數數據
- count+=8;
- if(RX_BUF[2]&0x10) //歐拉角數據
- {
- // LED_0=0;
- rpy[0]=(RX_BUF[4+count]<<8)|RX_BUF[5+count];
- rpy[1]=(RX_BUF[6+count]<<8)|RX_BUF[7+count];
- rpy[2]=(RX_BUF[8+count]<<8)|RX_BUF[9+count];
-
- Y=rpy[0]; //獲取角度
- X=rpy[1];
-
- TI=1;
-
- LED(Y,X);
- count+=6;
- }
- }
復制代碼
|