📄 step_motor2.c
字号:
/*============================================================
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -