📄 bskz.c
字号:
/*步进电机变速控制*/
/*2007年7月14日*/
#include<reg51.h>
#define uchar unsigned char
uchar sn=10; /*步数*/
uchar idata nowrate[2]={0x00,0x00}; /*匀速定时器初值*/
uchar idata *pp;
bit pf=1; /*中断标志*/
void contrl(direct,mode)
bit direct; /*方向*/
uchar mode; /*速度控制*/
{
uchar i;
uchar idata *cmode;
uchar idata rise[20]; /*加速*/
uchar idata fall[20]; /*减速*/
uchar idata plus[7]={0x01,0x03,0x02,0x06,0x04,0x05,0x00}; /*正转*/
uchar idata minu[7]={0x05,0x04,0x06,0x02,0x03,0x01,0x00}; /*反转*/
if(direct) cmode=plus;
else cmode=minu;
switch(mode)
{
case 1:pp=rise;break; /*pp指向定时器初值*/
case 2:pp=nowrate;break;
case 3:pp=fall;break;
default:pp=nowrate;break;
}
do
{
P1=cmode[i]; /*输出转动控制字*/
if(cmode[++i]==0x00)i=0;
while(pf); /*等待定时时间到*/
pf=1;
if((mode==1)||(mode==3))pp+=2; /*定时器初值变化*/
}
while(sn--);
}
void intt0(void) interrupt 1 /*T/C0中断服务*/
{
TL0=*pp;nowrate[0]=TL0; /*赋T/C0初值,记录当前定时器初值*/
TH0=*(pp+1);nowrate[1]=TH0;
pf=0;
}
void main (void)
{
TMOD=0X01;
TH0=0x00;
TL0=0X00;
TR0=1;
ET0=1;
EA=1;
contrl(1,1);
sn=10;
contrl(1,2);
sn=10;
contrl(1,3);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -