求助,51定时器中断输出脉冲控制步进

2020-01-16 18:28发布

学51也有快半年了,却什么也没搞成,最近准备使用51定时器中断输出脉冲来控制步进,有现成的驱动,参考书上公式计算的定时器初值,输出的脉冲频率却低了很多,想来肯定是初值计算出的问题,却不知道该如何计算才正确,找了好多资料也没结果,望那位大哥帮忙指点一二,谢谢!

(原文件名:计算初值.png)


//晶振 12M
//使用定时器中断输出50KHZ脉冲,用来驱动步进)

void timer1(void) interrupt 3
{
Motor_CLK=~Motor_CLK;
TH1=0xff;
  TL1=0xec;
}
void main(void)
{
// AUXR|=0x40; //定时器工作在1T模式
TMOD=0x10; //定时器工作方式为1
TH1=0xff;  //
  TL1=0xec;

Motor_CLK=0;
RUN_LED=1; //运行led灭 低电平有效
STOP_LED=1; //停止led亮 高电平有效
TR1=1;
ET1=1;
//EA=1;
while(1)//循环等待
  {
    if (START_key==0)  //按下开始按钮
    {
         EA=1;      //开总中断,启动脉冲输出
         RUN_LED=0;  //运行led亮
         STOP_LED=0; //停止led灭
     }
       
    if (STOP_key==0)   //按下停止按钮
         {
          EA=0;       //关总中断,停止脉冲输出
          RUN_LED=1;   
      STOP_LED=1;
         }  
  }


}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
tuowai
1楼-- · 2020-01-16 22:01
补充下,我使用的是STC12C5A60S2,看资料说是1T的单片机,使用1T模式,脉冲同样也不对,还发现个问题,就是按下START时,输出脉冲会变慢!翻了很多资料,发现公式没错啊,什么原因,那位大哥指点下!感激!
millwood0
2楼-- · 2020-01-17 00:40
 精彩回答 2  元偷偷看……
tuowai
3楼-- · 2020-01-17 05:14
回复【2楼】millwood0
"使用定时器中断输出50khz脉冲,"
that's potentially too high, as you may not have enough time to process the interrupt before the next interrupt is fired.
try something lower.
-----------------------------------------------------------------------

好早哦,谢谢你的回复,我想问下,单纯就这个计算方法来说的话,有错误吗?如果没办法,我就使用低点的脉冲来试试了!因为之前在坛子里看到高手使用51输出2路100K脉冲,还需要对脉冲计数,所以我觉得应该问题不大的呀!
tuowai
4楼-- · 2020-01-17 06:04
【2楼】millwood0
"使用定时器中断输出50khz脉冲,"
that's potentially too high, as you may not have enough time to process the interrupt before the next interrupt is fired.
try something lower.
-----------------------------------------------------------------------

应该不全是脉冲过高的原因,我把初值改大后,脉冲噌就上来了,总觉的是计算哪个位置出了问题!
tuowai
5楼-- · 2020-01-17 10:06
【2楼】millwood0
"使用定时器中断输出50khz脉冲,"
that's potentially too high, as you may not have enough time to process the interrupt before the next interrupt is fired.
try something lower.
-----------------------------------------------------------------------

应该不全是脉冲过高的原因,我把初值改大后,脉冲噌就上来了,总觉的是计算哪个位置出了问题!
jack821119
6楼-- · 2020-01-17 15:50
肯定是脉冲过高的问题,如果50khz的话就意味着定时器的中断时间是20us,这样的时间太短了,

一周热门 更多>