|
網(wǎng)上找來的代碼,我不懂修改,望大佬幫幫我吧
#include <AT89X51.h>
static unsigned int count; //計(jì)數(shù)
static int step_index; //步進(jìn)索引數(shù),值為0-7
static bit turn; //步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向
static bit stop_flag; //步進(jìn)電機(jī)停止標(biāo)志
static int speedleve1; //步進(jìn)電機(jī)轉(zhuǎn)速參數(shù),數(shù)值越大速度越慢,最小值為1,速度最快
static int spcount; //步進(jìn)電機(jī)轉(zhuǎn)速參數(shù)計(jì)數(shù)
void delay(unsigned int endcount); //延時(shí)函數(shù),延時(shí)為 endcount*0.5毫秒
void gorun(); //步進(jìn)電機(jī)控制步進(jìn)函數(shù)
void main(void)
{
count = 0;
step_index = 0;
spcount = 0;
stop_flag = 0;
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
EA = 1; //允許CPU中斷
TMOD = 0x11; //設(shè)定時(shí)器0和1為16位模式1
ET0 = 1; //定時(shí)器0中斷允許
TH0 = 0xFE;
TL0 = 0x0C; //設(shè)定時(shí)每隔0.5ms中斷一次
TR0 = 1; //開始計(jì)數(shù)
turn = 0;
speedlevel = 2;
delay(10000);
speedlevel = 1;
do{
speedlevel = 2;
delay(10000);
speedlevel = 1;
delay(10000);
stop_flag=1;
delay(10000);
stop_flag=0;
}while(1);
}
//定時(shí)器0中斷處理
void timeint(void) interrupt 1
{
TH0=0xFE;
TL0=0x0C; //設(shè)定時(shí)每隔0.5ms中斷一次
count++;
spcount--;
if(spcount<=0)
{
spcount = speedlevel;
gorun();
}
}
void delay(unsigned int endcount)
{
count=0;
do{}while(count<endcount);
}
void gorun()
{ if (stop_flag==1)
{
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
return;
}
switch(step_index)
{
case 0: //0
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
break;
case 1: //0、1
P1_0 = 1;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 2: //1
P1_0 = 0;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 3: //1、2
P1_0 = 0;
P1_1 = 1;
P1_2 = 1;
P1_3 = 0;
break;
case 4: //2
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 0;
break;
case 5: //2、3
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 1;
break;
case 6: //3
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
break;
case 7: //3、0
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
}
if (turn==0)
{
step_index++;
if (step_index>7)
step_index=0;
}
else
{
step_index--;
if (step_index<0)
step_index=7;
}
}
報(bào)錯(cuò)提示
89C52.C(27): error C202: 'speedlevel': undefined identifier
|
|