本程序是利用两个外部中断来控制步进电机的运行和停止。
以下是proteus的仿真结果
以下是编译通过的结果:
以下是程序:
- /*
- * GccApplication12.c
- *
- * Created: 2014-9-3 22:02:36
- * Author: Administrator
- */
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar a;
- uchar tab[]={0x01,0x02,0x04,0x08}; //1相励磁,正转
- //interrupt[EXT_INT0] void int0_isr(void) //INT0加速控制
- ISR(INT0_vect)
- {
- a=1;
- }
- //interrupt[EXT_INT1] void int1_isr(void) //INT1减速控制
- ISR(INT1_vect)
- {
- a=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(a==1)
- {
- for(i=0;i<4;i++)
- {
- PORTC=tab[i];
- delay(10000);
- }
- }
- else if(a==0)
- {
- PORTC=0x00;
- }
- }
- }
|