#define uchar unsigned char
#define uint unsigned int
uint time
void timer1(void) interrupt 1 using 1{ //定時器0中斷,定時1ms//
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
time++;
}
void delay(uint n){ //壹般延時
while(--n);
}
void delay_moto(uint dtime){ //延時
TR0=1;
while(time<=dtime);
time=0;
TR0=0;
}
void moto(bit cf,uchar n,uint dtime){ //電機驅動子程序,
uchar idata zhpai[4]={0x01,0x02,0x04};
uchar idata fpai[4]={0x04,0x02,0x01};
uchar i,l=0;
if(cf==0) //正轉,A-B-C-A
for(i=0;i<n;i++){
P1=zhpai[l];//P1.2~1.0為輸出口,分別為A、B、C
l++;
delay_moto(dtime);
if(l==3)l=0;
}
else{ //反轉,C-B-A-C
for(i=0;i<n;i++){
P1=fpai[l];
l++;
delay_moto(dtime);
if(l==3)l=0;
}
}
}
void main(){
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
while(1){
moto(0,3,70);//正轉,轉三相,每相間隔70ms
delay(10000);
moto(1,3,70);//反轉,轉三相,每相間隔70ms
delay(10000);
}
}