請教一下,我這個單片機程序是想讓步進馬達正轉45度,反轉45度,重復三次然后停止,但是現在一直循環不停,不知問題出在哪里,請大家指教,謝謝!
- /******************************28BYJ-48步進電機測試程序*************************************
- ;FOSC = 12MHz
- ; 步進電機的驅動信號必須為脈沖信號!!! 轉動的速度和脈沖的頻率成正比!!!
- ; 本步進電機步進角為 5.625*2度 半步5.625度, 減速比為64. 一圈 360 度 , 需要512 個脈沖完成!!! 360=N*45/64
- ;---------------------------------------------------------------------------------
- ; A 組線圈對應 P3.2
- ; B 組線圈對應 P3.3
- ; C 組線圈對應 P3.4
- ; D 組線圈對應 P3.5
- ;----------------------------------------------------------------------------------
- **********************************************************************************/
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uint i,j,k,m;
- uint N=128; //角度范圍調節,對應于45度,512對應于360度
- uchar code single_rev[4]={0x20,0x10,0x08,0x04}; /*單四拍反轉表*/
- uchar code single_pos[4]={0x04,0x08,0x10,0x20}; /*單四拍正轉表*/
- void delay(uint z);
- void m_single_pos();
- void m_single_rev();
- void main()
- {
- // while(1)
- for(m=0;m<3;m++);
- {
- m_single_rev(); //單四拍反轉360度
- delay(25);
- m_single_pos(); //單四拍正轉360度
- delay(25);
- }
- }
-
- void delay(uint z) /*延時z毫秒*/
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=350;y>0;y--) ; //轉速調節,數值越大馬達越慢
- }
-
- /******************************單四拍驅動正轉(N*45/16)*************************************/
- void m_single_pos()
- {
- for(k=0;k<N;k++)
- {
- for(i=0;i<4;i++) //單四拍一個脈沖轉子轉動5.625*2=11.625度,四拍共45度
- {
- P3=single_pos[i] ;
- delay(5) ; //適當延時,保證轉子轉動時間,延時過短會丟拍
- }
- }
- }
- /******************************單四拍驅動反轉(N*45/16)*************************************/
- void m_single_rev()
- {
- for(k=0;k<N;k++)
- {
- for(i=0;i<4;i++) //單四拍一個脈沖轉子轉動5.625*2=11.625度,四拍共45度
- {
- P3=single_rev[i] ;
- delay(5) ; //適當延時,保證轉子轉動時間,延時過短會丟拍
- }
- }
- }
復制代碼
|