step_motor2.c

来自「1. 以单极 2相磁化方式使步进电机正向旋转 2. 按中断开关的话」· C语言 代码 · 共 55 行

C
55
字号
/*============================================================
File Name :Step_Motor.c
说明 :
1. 以单极 1-2相磁化方式使步进电机正向旋转
2. 按中断开关,正-〉逆,逆-〉正 旋转
3. 不使用delay函数,使用定时器/计数器
=============================================================*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

const unsigned char one_two_phase[]={0x01,0x04,0x08,0x02,0x02,0x08,0x04,0x01};

volatile unsigned char phase_pnt,dir;

void initialize(void);
void go_step_12phase(void);

SIGNAL(SIG_INTERRUPT0)               // 外部中断0
{
     dir=~dir;
}

SIGNAL(SIG_OVERFLOW0)                // 定时器0溢出中断
{
     go_step_12phase();
	 TCNT0=0xea;
}
	 
int main(void)
{
     DDRD=0xf0;
	 initialize();
	 while(1);
}
	 
void go_step_12phase(void)
{
     if(!dir)
	     PORTD=(one_two_phase[phase_pnt++]<<4);
	 else
	     PORTD=(one_two_phase[phase_pnt--]<<4);
	 phase_pnt&=0x07;
}
	 
void initialize(void)
{
     EIMSK=0x01;                        // 使用外部中断0
	 EICRA=0x02;                        // 下降沿中断请求
	 TCNT0=0xea;                // {(0xff-oxea)+1}*1024*(1/14.7456Mhz)=1.572ms
	 TCCR0=0x07;                        // 定时器0 precaler=1024
	 TIMSK=0x01;                        // OCIE0=1, 定时器0溢出中断
	 sei();                                // 使能全局中断
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?