位置:51电子网 » 技术资料 » 电源技术

AT89C2051驱动步进电机的电路和源码

发布时间:2008/5/26 0:00:00 访问次数:675

        

    

    

    电路如图所示:

    

    

    

    程序

    stepper.c

    stepper.hex

    /*

    * stepper.c

    * sweeping stepper's rotor cw and cww 400 steps

    * copyright (c) 1999 by w.sirichote

    */

    #include c:\mc51\8051io.h /* include i/o header file */

    #include c:\mc51\8051reg.h

    register unsigned char j,flag1,temp;

    register unsigned int cw_n,ccw_n;

    unsigned char step[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90}

    #define n 400

    /* flag1 mask byte

    0x01 run cw()

    0x02 run ccw()

    */

    main()

    {

    flag1=0;

    serinit(9600);

    disable(); /* no need timer interrupt */

    cw_n = n; /* initial step number for cw */

    flag1 |=0x01; /* initial enable cw() */

    while(1){

    {

    tick_wait(); /* wait for 10ms elapsed */

    energize(); /* round-robin execution the following tasks every 10ms */

    cw();

    ccw();

    }

    }

    }

    cw(){

    if((flag1&0x01)!=0)

    {

    cw_n--; /* decrement cw step number */

    if (cw_n !=0)

    j++; /* if not zero increment index j */

    else

    {flag1&=~0x01; /* disable cw() execution */

    ccw_n = n; /* reload step number to ccw counter */

    flag1 |=0x02; /* enable cww() execution */

    }

    }

    

    }

    ccw(){

    if((flag1&0x02)!=0)

    {

    ccw_n--; /* decremnent ccw step number */

    if (ccw_n !=0)

    j--; /* if not zero decrement index j */

    else

    {flag1&=~0x02; /* disable ccw() execution */

    cw_n = n; /* reload step number to cw counter */

    flag1 |=0x01; /* enable cw() execution */

    }

    }

    }

    tick_wait(){ /* cputick was replaced by simpler asm code 10ms wait */

    asm" jnb tcon.5,*"; /* wait for tf0 set */

    asm" clr tcon.5"; /* clear tf0 for further set */

    asm" orl th0,#$dc"; /* reload th0 with $dc, tl0 = 0 */

    }

    energize(){

    p1 = step[(j&0x07)]; /* only step 0-7 needed */

    }

    学习过程中遇到问题了吗?请进入 论坛讨论

    

    

        

    

    

    电路如图所示:

    

    

    

    程序

    stepper.c

    stepper.hex

    /*

    * stepper.c

    * sweeping stepper's rotor cw and cww 400 steps

    * copyright (c) 1999 by w.sirichote

    */

    #include c:\mc51\8051io.h /* include i/o header file */

    #include c:\mc51\8051reg.h

    register unsigned char j,flag1,temp;

    register unsigned int cw_n,ccw_n;

    unsigned char step[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90}

    #define n 400

    /* flag1 mask byte

    0x01 run cw()

    0x02 run ccw()

    */

    main()

    {

    flag1=0;

    serinit(9600);

    disable(); /* no need timer interrupt */

    cw_n = n; /* initial step number for cw */

    flag1 |=0x01; /* initial enable cw() */

    while(1){

    {

    tick_wait(); /* wait for 10ms elapsed */

    energize(); /* round-robin execution the following tasks every 10ms */

    cw();

    ccw();

    }

    }

    }

    cw(){

    if((flag1&0x01)!=0)

    {

    cw_n--; /* decrement cw step number */

    if (cw_n !=0)

    j++; /* if not zero increment index j */

    else

    {flag1&=~0x01; /* disable cw() execution */

    ccw_n = n; /* reload step number to ccw counter */

    flag1 |=0x02; /* enable cww() execution */

    }

    }

    

    }

    ccw(){

    if((flag1&0x02)!=0)

    {

    ccw_n--; /* decremnent ccw step number */

    if (ccw_n !=0)

    j--; /* if not zero decrement index j */

    else

    {flag1&=~0x02; /* disable ccw() execution */

    cw_n = n; /* reload step number to cw counter */

    flag1 |=0x01; /* enable cw() execution */

    }

    }

    }

    tick_wait(){ /* cputick was replaced by simpler asm code 10ms wait */

    asm" jnb tcon.5,*"; /* wait for tf0 set */

    asm" clr tcon.5"; /* clear tf0 for further set */

    asm" orl th0,#$dc"; /* reload th0 with $dc, tl0 = 0 */

    }

    energize(){

    p1 = step[(j&0x07)]; /* only step 0-7 needed */

    }

    学习过程中遇到问题了吗?请进入 论坛讨论

    

    

相关IC型号

热门点击

 

推荐技术资料

Seeed Studio
    Seeed Studio绐我们的印象总是和绘画脱离不了... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!