本帖最后由 SD10A 于 2015-3-29 18:10 编辑
使用的ATMEGA16L
龙戈电子的L298N 驱动板
程序 使用内部1MHZ 实际延时程序套用8MHZ程序(估计延时得乘以8杯)
两项四线 8拍步进程序试验了延时40 50 60 100等只有50的时候才能转动一点就停下来
#include "iom16v.h"
#include "macros.h"
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
uchar runz[8]={0x05,0x01,0x09,0x08,0x0a,0x02,0x06,0x04}; //两相四线八拍工作方式数组
uchar runf[8]={0x05,0x01,0x09,0x08,0x0a,0x02,0x06,0x04};
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);//8MHZ时候用的
}
}
//*******端口初始化
void Stepmotor_IO_init()
{uchar z;
DDRB=0XFF;
PORTB=0XFF;//PD0-PD3 输出低电平
DDRA=0;
PORTA=0XFF;
//DDRA|=BIT(PA6);
//PORTA|=BIT(PA6);
}
//*******
void main()
{uchar z;
Stepmotor_IO_init();
while(1)
{
if(PINA&BIT(PA1))//
{for(z=0;z<8;z++) //改变数组的长度值需改变这个数字8,8为数组的长度。
{
PORTB=runf[z];
delay(40);//只有值是50的时候才能稍微转动一点点
}
}
else
{for(z=0;z<8;z++) //改变数组的长度值需改变这个数字8,8为数组的长度。
{
PORTB=runz[z];
delay(40);
}
}
}
}
|