[Atmel] 用AtmelStudio6.2跑mega16例程(7):控制步进电机

[复制链接]
1212|0
 楼主| ddllxxrr 发表于 2014-9-3 22:17 | 显示全部楼层 |阅读模式
本程序是利用两个外部中断来控制步进电机的运行和停止。

以下是proteus的仿真结果


以下是编译通过的结果:


以下是程序:
  1. /*
  2. * GccApplication12.c
  3. *
  4. * Created: 2014-9-3 22:02:36
  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;
  12. uchar tab[]={0x01,0x02,0x04,0x08};        //1相励磁,正转
  13. //interrupt[EXT_INT0] void int0_isr(void)         //INT0加速控制
  14. ISR(INT0_vect)
  15. {
  16.         a=1;
  17. }
  18. //interrupt[EXT_INT1] void int1_isr(void)         //INT1减速控制
  19. ISR(INT1_vect)
  20. {
  21.         a=0;
  22. }
  23. void delay(uint k)
  24. {
  25.         long i;
  26.         for(i=0;i<k;i++);
  27. }
  28. int main(void)
  29. {
  30.         uchar i;
  31.         DDRC=0xFF;                                  //端口初始化
  32.         PORTC=0xFF;
  33.         DDRD=0xF3;
  34.         PORTD=0xFF;
  35.         MCUCR=0x0A;                                 //定义INT0和INT1为下降沿时产生中断
  36.         GICR=0xC0;                                 //允许INT0和INT1产生中断
  37.         //#asm("sei")                                //开启总中断
  38.         sei();
  39.         while(1)
  40.         {
  41.                 if(a==1)
  42.                 {
  43.                         for(i=0;i<4;i++)
  44.                         {
  45.                                 PORTC=tab[i];
  46.                                 delay(10000);
  47.                         }
  48.                 }
  49.                 else if(a==0)
  50.                 {
  51.                         PORTC=0x00;
  52.                 }
  53.         }
  54. }



本帖子中包含更多资源

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

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

本版积分规则

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

2404

主题

7001

帖子

68

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