标题: 51单片机程序为什么会卡在定时器中断里? [打印本页]

作者: 叫大个不叫老朱    时间: 2022-12-5 22:02
标题: 51单片机程序为什么会卡在定时器中断里?
最近在学习步进电机梯形加减速,我把脉冲放到定时器中断里,加速是正常的,但就是不能达到预设速度,LED显示卡在中断里了,谢谢大家

单片机源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit M3=P2^0;//脉冲
sbit D1=P1^0;//LED
uchar aa;
uint w,a;

void main()      
{
        w=3000;      
        TMOD=0x01;
        TH0=(65536-w)/256;
        TL0=(65536-w)%256;
        EA=1;                                 
        ET0=1;                                 
        TR0=1;                                          
        while(1)
                 {
                        D1=1;
                }      
}


void timer0() interrupt 1 //定时器0中断服务程序
{      
        TH0=(65536-w)/256;
        TL0=(65536-w)%256;

                if(w>=300)//加速
                {
                        w--;
                }
                        M3=1;
                        M3=0;
                D1=0;
}
作者: Hephaestus    时间: 2022-12-5 23:45
不是卡住了,而是w=299以后,你没有任何处理代码,所有的值都不变,就有了卡住的效果。
作者: 叫大个不叫老朱    时间: 2022-12-6 07:35
Hephaestus 发表于 2022-12-5 23:45
不是卡住了,而是w=299以后,你没有任何处理代码,所有的值都不变,就有了卡住的效果。

299以后不是应该进入中断的频率不变的吗,固定初值的话400就应该达到预设转速的,可是300还没有达到,而且300和2都一样的转速,让我百思不得其解
作者: 1261867136qq    时间: 2022-12-6 08:27
叫大个不叫老朱 发表于 2022-12-6 07:35
299以后不是应该进入中断的频率不变的吗,固定初值的话400就应该达到预设转速的,可是300还没有达到,而 ...

楼上说的没错啊,300后,就都不变了,初值 3000,是3MS,吧,那你变成300后,才几百us,的中断,感觉不出来
作者: 叫大个不叫老朱    时间: 2022-12-6 08:47
1261867136qq 发表于 2022-12-6 08:27
楼上说的没错啊,300后,就都不变了,初值 3000,是3MS,吧,那你变成300后,才几百us,的中断,感觉不出 ...

应该是几百微秒一个脉冲的,但是实际电机转速没有达到,而且初值300和2,电机转速没有区别,如果固定初值在400就应该达到预设转速的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1