[Atmel] 用AtmelStudio6.2跑mega16例程(8)

[复制链接]
963|0
 楼主| ddllxxrr 发表于 2014-9-4 21:36 | 显示全部楼层 |阅读模式
利用外部中断0和外部中断1,控制步进电机的正反转:

以下是程序:

  1. /*
  2. * GccApplication13.c
  3. *
  4. * Created: 2014-9-4 20:52:42
  5. *  Author: Administrator
  6. */


  7. #include <avr/io.h>
  8. #include <avr/interrupt.h>
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. uchar a,flag_a;
  12. uchar b,flag_b;
  13. uchar tab1[]={0x02,0x06,0x04,0x0C,0x08,0x09,0x01,0x03};        //半步励磁,正转
  14. uchar tab2[]={0x03,0x01,0x09,0x08,0x0C,0x04,0x06,0x02};        //半步励磁,正转
  15. //interrupt[EXT_INT0] void int0_isr(void)         //INT0启动、停止控制
  16. ISR(INT0_vect)
  17. {
  18.         a++;
  19.         if(a==1)
  20.         {
  21.                 flag_a=1;
  22.         }
  23.         else if(a>=2)
  24.         {
  25.                 a=0;
  26.                 flag_a=0;
  27.                 flag_b=0;
  28.         }
  29. }
  30. //interrupt[EXT_INT1] void int1_isr(void)         //INT1正、反转控制
  31. ISR(INT1_vect)
  32. {
  33.         b++;
  34.         if(b==1)
  35.         {
  36.                 flag_b=1;
  37.                 PORTD &=~(1<<0);
  38.                 PORTD|=(1<<1);
  39.         }
  40.         else if(b==2)
  41.         {
  42.                 flag_b=2;
  43.                 PORTD|=(1<<0);
  44.                 PORTD&=~(1<<1);
  45.                 b=0;
  46.         }
  47. }
  48. void delay(uint k)
  49. {
  50.         long i;
  51.         for(i=0;i<k;i++);
  52. }
  53. int main(void)
  54. {
  55.         uchar i;
  56.         DDRC=0xFF;                                  //端口初始化
  57.         PORTC=0xFF;
  58.         DDRD=0xF3;
  59.         PORTD=0xFF;
  60.         MCUCR=0x0A;                                 //定义INT0和INT1为下降沿时产生中断
  61.         GICR=0xC0;                                 //允许INT0和INT1产生中断
  62.         //#asm("sei")                                //开启总中断
  63.         sei();
  64.         while(1)
  65.         {
  66.                 if(flag_a==1)
  67.                 {
  68.                         if(flag_b==1)
  69.                         {
  70.                                 for(i=0;i<8;i++)
  71.                                 {
  72.                                         PORTC=tab1[i];
  73.                                         delay(10000);
  74.                                 }
  75.                         }
  76.                         else if(flag_b==2)
  77.                         {
  78.                                 for(i=0;i<8;i++)
  79.                                 {
  80.                                         PORTC=tab2[i];
  81.                                         delay(10000);
  82.                                 }
  83.                         }
  84.                 }
  85.                 else if(a==0)
  86.                 {
  87.                         PORTC=0x00;
  88.                 }
  89.         }
  90. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2404

主题

7002

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部