📄 main.c
字号:
#include "fun.h"
void Timer0_interrupt() interrupt 1
{
//以下通过剩余步数来判断电机处于运行过程中的哪个阶段
if (step > (1000 - 64) ) //加速阶段
{
//切换到高一级转速
TH0 = speedtable[1000-step] >>8;
TL0 = speedtable[1000-step];
}
else if (step < (1000 - 64) && step > 64) //匀速阶段
{
//保持最高转速
TH0 = speedtable[63] >>8;
TL0 = speedtable[63];
}
else if (step < 64 && step >0) //减速阶段
{
//切换到低一级转速
TH0 = speedtable[step] >>8;
TL0 = speedtable[step];
}
else
{
//其它情况停机
//关定时器,关PWM,恢复运行锁,步数清零
TH0 = speedtable[0] >>8;
TL0 = speedtable[0];
TR0=0;
CR=0;
run_flag=0;
step=0;
en = 0;
}
step--;//步数减1
}
main()
{
ms_delay(20);
init_port();
init_timer0();
init_pca();
EA = 1;//开总中断
s1=1;
s2=1;
run_flag = 0;
en = 0;
dir=1;
step = 0;
while(1)
{
if (run_flag == 0) //只有在电机停止的时候才接受操作
{
if (s1 == 0)//正转按钮
{
ms_delay(10);
if (s1 ==0) //启动电机正转
{
dir = 1;
en=1;
step = 1000;//设置5圈1000步
run_flag=1;//设置电机运转锁
CR = 1; // 启动PWM
//设定T0溢出频率
TH0 = speedtable[0] >>8;
TL0 = speedtable[0];
TR0=1;//启动定时器0
}
}
if (s2 == 0)//反转按钮
{
ms_delay(10);
if (s2 ==0) //启动电机反转
{
dir = 0;
en = 1;
step = 1000;//设置5圈1000步
run_flag=1;//设置电机运转锁
CR = 1; // 启动PWM
//设定T0溢出频率
TH0 = speedtable[0] >>8;
TL0 = speedtable[0];
TR0=1;//启动定时器0
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -