📄 串口定时步进.c
字号:
#include<reg51.h>
//步进机控制端口定义//
sbit OPT=P2^4; //驱动器使能//
sbit SPL=P2^3; //脉冲//
sbit DIR=P2^2; //方向//
sbit ENA=P2^0; //步进机使能//
//定义默认初值为全局变量//
unsigned char maihuan=156;
//起动//
qidong(void)
{
OPT=1;DIR=0;ENA=1;
}
//停止//
tingzhi(void)
{
OPT=0;DIR=0;ENA=0;
}
//正转//
zhengzhuan(void)
{
OPT=1;DIR=0;ENA=1;
}
//反转//
fanzhuan(void)
{
OPT=1;DIR=1;ENA=1;
}
//加速//
jiaspeed(void)
{
if((maihuan+30<256)&&(OPT==1)&&(ENA==1)) maihuan+=30;
}
//减速//
jianspeed(void)
{
if((maihuan-30>60)&&(OPT==1)&&(ENA==1)) maihuan-=30;
}
//定时器初始化//
void et0_t0(){TMOD=0x21;IE=0x82;TH0=0xfe;TL0=0x0c;TR0=1;}
void et1_t1(){TMOD=0x21;IE=0x82;TH1=0xfd;TL1=0xfd;TR1=1;}
//定时器T0服务程序//
void t0_sever() interrupt 1
{
SPL=~SPL;
TH0=0xfe;
TL0=maihuan;
}
/**********主函数************/
void main()
{
unsigned char rdate;
ENA=0;OPT=0;SPL=0;DIR=0; //上电复位初状态并初始化//
SCON=0x50;
et0_t0();
et1_t1();
while(1)
{
if(RI==1) //判断是否接收完毕//
{
RI=0; //清接收完毕标志位//
rdate=SBUF; //存数据关进行相关判断//
if(rdate==0){ qidong();} //起动//
else if(rdate==1) {zhengzhuan();}//正转//
else if(rdate==2) {fanzhuan();} //反转//
else if(rdate==3) {jiaspeed();} //加速//
else if(rdate==4) {jianspeed(); }//减速//
else if(rdate==5) {tingzhi();} //停止//
else tingzhi();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -