打印
[Atmel]

用AtmelStudio6.2跑mega16例程(8)

[复制链接]
842|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
利用外部中断0和外部中断1,控制步进电机的正反转:

以下是程序:

/*
* GccApplication13.c
*
* Created: 2014-9-4 20:52:42
*  Author: Administrator
*/


#include <avr/io.h>
#include <avr/interrupt.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,flag_a;
uchar b,flag_b;
uchar tab1[]={0x02,0x06,0x04,0x0C,0x08,0x09,0x01,0x03};        //半步励磁,正转
uchar tab2[]={0x03,0x01,0x09,0x08,0x0C,0x04,0x06,0x02};        //半步励磁,正转
//interrupt[EXT_INT0] void int0_isr(void)         //INT0启动、停止控制
ISR(INT0_vect)
{
        a++;
        if(a==1)
        {
                flag_a=1;
        }
        else if(a>=2)
        {
                a=0;
                flag_a=0;
                flag_b=0;
        }
}
//interrupt[EXT_INT1] void int1_isr(void)         //INT1正、反转控制
ISR(INT1_vect)
{
        b++;
        if(b==1)
        {
                flag_b=1;
                PORTD &=~(1<<0);
                PORTD|=(1<<1);
        }
        else if(b==2)
        {
                flag_b=2;
                PORTD|=(1<<0);
                PORTD&=~(1<<1);
                b=0;
        }
}
void delay(uint k)
{
        long i;
        for(i=0;i<k;i++);
}
int main(void)
{
        uchar i;
        DDRC=0xFF;                                  //端口初始化
        PORTC=0xFF;
        DDRD=0xF3;
        PORTD=0xFF;
        MCUCR=0x0A;                                 //定义INT0和INT1为下降沿时产生中断
        GICR=0xC0;                                 //允许INT0和INT1产生中断
        //#asm("sei")                                //开启总中断
        sei();
        while(1)
        {
                if(flag_a==1)
                {
                        if(flag_b==1)
                        {
                                for(i=0;i<8;i++)
                                {
                                        PORTC=tab1[i];
                                        delay(10000);
                                }
                        }
                        else if(flag_b==2)
                        {
                                for(i=0;i<8;i++)
                                {
                                        PORTC=tab2[i];
                                        delay(10000);
                                }
                        }
                }
                else if(a==0)
                {
                        PORTC=0x00;
                }
        }
}

相关帖子

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

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6963

帖子

68

粉丝