标题: 单片机定时器1US程序的疑惑 [打印本页]

作者: weilemin123    时间: 2023-9-25 08:11
标题: 单片机定时器1US程序的疑惑
定时器1US,中断计数一次,
        timer1++;
    count++;
在主函数中, 是否来的及响应这个数据的变化, 我的理解程序一条一条执行,他中断后,退出来还是要继续执行。 来不及检测到count的数值,所以这里写

                if(count>100)        if(timer1>1000)  //PWM周期为1000*1us   而不是if(count==100)        if(timer1==1000)  是这个原因么。
/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{        
        Timer1Init();  //定时器1初始化
        while(1)
        {
                if(count>100)                                                        
                {  
                        count=0;
                        if(DIR==1)                                           //DIR控制增加或减小
                        {
                          value++;
                        }                        
                        if(DIR==0)
                        {
                          value--;
                        }
                                
                }

                if(value==1000)
                {
                  DIR=0;
                }
                if(value==0)
                {
                  DIR=1;
                }        
                                
                if(timer1>1000)  //PWM周期为1000*1us
                {
                        timer1=0;
                }
                if(timer1 <value)        
                {
                        PWM=1;
                }
                else
                {
                        PWM=0;
                }               
        }               
}

/*******************************************************************************
* 函 数 名       : Time1
* 函数功能                 : 定时器1的中断函数
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/

void Time1(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断
{
        TH1 = 0xFF;
        TL1 = 0xff;   //1us
        timer1++;
    count++;
        
}



作者: 18680365301    时间: 2023-9-25 10:21
什么MCU主频多少,定时器1us,中断跳转+push指令都不够
作者: 人中狼    时间: 2023-9-25 10:37
纯新手写的代码
作者: cnfloatleaf    时间: 2023-9-25 11:46
1uS的时间太断了,我用过50uS定时器,1T的STC单片机,没问题。
作者: weilemin123    时间: 2023-9-25 12:01
1 发表于 2023-9-25 10:21
什么MCU主频多少,定时器1us,中断跳转+push指令都不够

这不学习呢,普中开发板里的程序
作者: 123156fsadf    时间: 2023-9-25 13:21
weilemin123 发表于 2023-9-25 12:01
这不学习呢,普中开发板里的程序

普中的是51单片机吧,执行一条指令就1us了,中断频率太高了,放弃吧。要么换单片机,换个带pwm功能的
作者: 13869300    时间: 2023-9-25 13:41
换一个好点的单片机试试
作者: weilemin123    时间: 2023-9-25 16:44
123156fsadf 发表于 2023-9-25 13:21
普中的是51单片机吧,执行一条指令就1us了,中断频率太高了,放弃吧。要么换单片机,换个带pwm功能的

恩。在学习,就是觉得这个中断时间太短了。会不会出问题,我也没试这个程序,之前自己做了个10us 都怕会出问题。 还没用过PWM芯片呢。在学习
作者: Hephaestus    时间: 2023-9-25 16:50
       TH1 = 0xFF;
        TL1 = 0xff;

这两句意味着什么楼主不明白吗?只要一个机器周期立马就会中断,干什么都来不及。
作者: coody_sz    时间: 2023-9-25 17:17
1us就多个NOP,ARM也一样。
作者: 圣博朗西斯    时间: 2023-10-27 13:55
>=100,更保险一点,路还很长




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