打印
[51单片机]

步进电机反转一圈简单实例

[复制链接]
842|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小分子|  楼主 | 2016-8-25 21:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>

#define uchar unsigned char

long g_Beats = 0;

void Timer0Init();
void TurnMotor(long angle);

void main()
{
        Timer0Init();
        TurnMotor(360);
        while(1);
}

void Timer0Init()
{
        TMOD |= 0x01;
        TH0 = 0xFC;                                                 //定时1个MS;
        TL0 = 0x66;
        EA = 1;
        ET0 = 1;
        TR0 = 1;
}
void TurnMotor(long angle)
{
        EA = 0;
        g_Beats = (angle * 4076) / 360;
        EA = 1;
}
void Timer0IRQ() interrupt 1
{
        static uchar index = 0;
        uchar temp;
        uchar code BeatCode[8] = {0x01,0x03,0x02,0x06,
                                                           0x04,0x0C,0x08,0x09};
        TH0 = 0xFC;
        TL0 = 0x66;
       
        if (g_Beats != 0)
        {
                temp = P1;                                                                        //用temp暂存P1口的值
                temp = temp & 0xF0;                                                        //只对P1口的低四位进行操作,要保护好高四位
                P1 = temp | BeatCode[index];                                //把节拍数送到P1口的低四位
                index++;
                index &= 0x07;                                                                 //8个节拍后重新归0;
                g_Beats--;                                                                        //节拍数递减1;
        }
        else
                P1 |= 0x0F;                                                                        //节拍数等于零时,关闭步进电机。
       
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

68

帖子

1

粉丝