请教一下,我这个单片机程序是想让步进马达正转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) ; //适当延时,保证转子转动时间,延时过短会丢拍
- }
- }
- }
复制代码
|