找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1365|回复: 10
打印 上一主题 下一主题
收起左侧

单片机定时器1US程序的疑惑

[复制链接]
跳转到指定楼层
楼主
ID:1093740 发表于 2023-9-25 08:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器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++;
        
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:485350 发表于 2023-9-25 10:21 | 只看该作者
什么MCU主频多少,定时器1us,中断跳转+push指令都不够
回复

使用道具 举报

板凳
ID:384109 发表于 2023-9-25 10:37 | 只看该作者
纯新手写的代码
回复

使用道具 举报

地板
ID:1085441 发表于 2023-9-25 11:46 | 只看该作者
1uS的时间太断了,我用过50uS定时器,1T的STC单片机,没问题。
回复

使用道具 举报

5#
ID:1093740 发表于 2023-9-25 12:01 来自手机 | 只看该作者
1 发表于 2023-9-25 10:21
什么MCU主频多少,定时器1us,中断跳转+push指令都不够

这不学习呢,普中开发板里的程序
回复

使用道具 举报

6#
ID:744809 发表于 2023-9-25 13:21 | 只看该作者
weilemin123 发表于 2023-9-25 12:01
这不学习呢,普中开发板里的程序

普中的是51单片机吧,执行一条指令就1us了,中断频率太高了,放弃吧。要么换单片机,换个带pwm功能的
回复

使用道具 举报

7#
ID:227484 发表于 2023-9-25 13:41 | 只看该作者
换一个好点的单片机试试
回复

使用道具 举报

8#
ID:1093740 发表于 2023-9-25 16:44 | 只看该作者
123156fsadf 发表于 2023-9-25 13:21
普中的是51单片机吧,执行一条指令就1us了,中断频率太高了,放弃吧。要么换单片机,换个带pwm功能的

恩。在学习,就是觉得这个中断时间太短了。会不会出问题,我也没试这个程序,之前自己做了个10us 都怕会出问题。 还没用过PWM芯片呢。在学习
回复

使用道具 举报

9#
ID:883242 发表于 2023-9-25 16:50 | 只看该作者
       TH1 = 0xFF;
        TL1 = 0xff;

这两句意味着什么楼主不明白吗?只要一个机器周期立马就会中断,干什么都来不及。
回复

使用道具 举报

10#
ID:1034262 发表于 2023-9-25 17:17 | 只看该作者
1us就多个NOP,ARM也一样。
回复

使用道具 举报

11#
ID:1097455 发表于 2023-10-27 13:55 | 只看该作者
>=100,更保险一点,路还很长
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表