📄 step heixian_buhao.c
字号:
//有变速//中断扩展
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit STK_CP1=P1^3;
sbit STK_DIR1=P1^2;
sbit STK_CP2=P1^1;
sbit STK_DIR2=P1^0;
sbit p14=P1^4;
sbit p15=P1^5;
sbit p32=P3^2;
sbit p33=P3^3;
bit youzhuan=0,zuozhuan=0;
uchar n; //转度
#define N 250 //5/4
uchar heixian=0; // 黑线数
bit biansu=0;
uint T00,T11; //定时变量
void time0() interrupt 1 //电机1
{ if(youzhuan==1)
{ TR0=0;
TH0=(63536-T00)>>8; TL0=(63536-T00)%256; //x-2ms
TR0=1;
n++;
if(n==N)
{ n=0;
youzhuan=0;
}
}
else
{ TR0=0;
TH0=(65536-T00)>>8; TL0=(65536-T00)%256; //xms
TR0=1;
}
STK_CP1=~STK_CP1;
}
void time1() interrupt 3 //电机2
{ if(zuozhuan==1)
{ TR1=0;
TH1=(63536-T11)>>8; TL1=(63536-T11)%256; //-2ms
TR1=1;
n++;
if(n==N)
{ n=0;
zuozhuan=0;
}
}
else
{ TR1=0;
TH1=(65536-T11)>>8; TL1=(65536-T11)%256; //xms
TR1=1;
}
STK_CP2=~STK_CP2;
}
void int0() interrupt 0 //变速
{ heixian++;
}
void int1() interrupt 2
{ if( (p14==0) && (p15!=0) ) //不能同时为低
{ youzhuan=1;
zuozhuan=0;
n=0;
}
else if( (p14!=0) && (p15==0) ) //不能同时为低
{ youzhuan=0;
n=0;
zuozhuan=1;
}
else if( (p14==0) && (p15==0) )
{
youzhuan=0;
zuozhuan=0;
n=0;
}
}
main()
{ EA=0;
TMOD=0x11;
T00=4000;
TH0=(65536-T00)>>8; TL0=(65536-T00)%256; //4ms //中速
TR0=1; ET0=1;
T11=4000;
TH1=(65536-T11)>>8; TL1=(65536-T11)%256; //4ms //中速
TR1=1; ET1=1;
IT0=1; EX0=1; PX0=1;
IT1=1; EX1=1; PX1=1;
EA=1;
STK_DIR1=0;
STK_DIR2=1;
while(1)
{ TR0=1; TR1=1;
if(biansu==1)
{ switch(heixian)
{ case 1: T00=5000;
T11=5000; break; //慢速//5ms
case 2: T00=3000;
T11=3000; break; //加速//3ms
case 3: T00=4000;
T11=4000; break; //爬坡//4ms
case 4: //zanting=1;
//TR1=0;
//zuozhuan=0; youzhuan=0; n=0;
break; //坡上暂停2S
case 5: T00=5000;
T11=5000; break; //到顶减速//5ms
case 6: //TR0=0; TR1=0;
break; //停
default: break;
}
biansu=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -