门关键词: 逆变器工作原理图 单联双控电路图 sony耳麦 数字钟电路 变矩器的工作原理 叠层式电感器 无线蓝牙耳机
IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
电子元器件搜索:
维库电子市场网是知名的电子元器件交易网站,为电子生产企业提供IC库存和技术资料查询服务。
软件无误差的定时中断程序,供初学者学习和行家拍砖
新闻出处:21ic 发布时间: 2007-10-07
5880527 发布于 2007-10-7 13:19:00
;看了论坛里很多关于定时器精度的帖子,很是迷惑,一个定时器有那么难伺候吗,特地写一段,12MHZ,定时器0无累计误差和相对误差,绝对误差可以通过T0H、T0L的初始值一次性修正。有比这精度更高的欢迎贴出来探讨
TL    EQU    030H    ;保存定时器响应时间用
T0H    DATA    0F8H    ;修改T0H\T0L可以得到想要的定时中断
T0L    DATA    036H

        
           ORG     0000H
            LJMP    MAIN
           ORG     000BH    
           MOV     TL,TL0    ;中断响应时的定时器值保存用于后面修正用
           LJMP    CTC0     
           ORG     001BH    
           LJMP    CTC1     
           ORG     30H
MAIN:    MOV     SP,#080H
            MOV     TMOD,#011H                
           SETB    PT0        ;此级别必须最高
         SETB    ET0
         SETB    TR0
         SETB    ET1
         SETB    TR1
         SETB    EA    
    
LOOP:   NOP    ;主循环的任何指令都不会影响执行时间,虽然影响中断响应速度
        NOP
        LJMP    LOOP
;===        
CTC0:   PUSH    PSW    
             PUSH    DPH        
             PUSH    DPL        
             PUSH    ACC        
             MOV     A,TL        ;不同的TL会跳得不同的距离
             MOV     DPTR,#TAB
             JMP      @A+DPTR
TAB:    NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP      ;NOP指令不能太少,否则不够跳而出现错误
            NOP
            NOP
        
            MOV     TH0,T0H
            MOV     TL0,T0L        
            CPL       P1.0    ;此处开始软件方面无误差(可以根据实际情况修改输出以便用示波器观察)
            NOP
            POP     ACC    
            POP     DPL    
            POP     DPH    
            POP     PSW        
            RETI
CTC1:   PUSH    PSW
                
        POP     PSW
        RETI   
            END
(为方便去掉了无关的其它中断细节)

* - 本贴最后修改时间:2007-10-8 9:43:52 修改者:5880527


123654789 发布于 2007-10-7 13:22:00
频率有 漂移  使你徒劳


5880527 发布于 2007-10-7 13:27:00
本程序只是对中断响应的不一致进行了处理,只保证软件方面无误差,不考虑晶振方面的因素,所以应该能满足前面yangfeng163网友所提的定时器要求


123654789 发布于 2007-10-7 13:30:00
就要 汇编

不能 用 C


5880527 发布于 2007-10-7 13:41:00
能彻底修正其它方法不能真正定时输出的缺点


etual 发布于 2007-10-7 15:33:00
楼主先用你的单片机跑24小时,看误差了多少?


5880527 发布于 2007-10-7 18:18:00
     呵呵,其实做电子时钟不用修正都能做到比较高的精度,靠定时中断的概率来保证。比如你最小时间是1毫秒,这里面实际有很多0.999毫秒、0.998毫秒、1.001毫秒...之类的,这样快的和慢的平均起来就是1毫秒了,只要你的初始值取得恰当,这个有点靠运气的感觉。
    还有就是每次都修正,延迟的时间加到初始值里去,把下次中断提前弥补这次中断造成的延迟,这个比较合理点,还有自动重装之类的修正方法等等。
    前面有网友在“单片机的定时器输出的方波信号频率稳定度怎么样?”里提到的“能不能达到晶振的数量级?”都不能用上述方法实现,因为那些方法都无法保证同一指令在同一时刻执行,只能照我所说的方法来弥补中断响应的不一致,以便达到执行时刻的一致性,那个CPL P1.0能保证每次都同一时刻执行。
   当然如果做电子时钟我那方法很可能会精度不高,因为那个初始值第一次算起来比较费劲,我也没具体去算过或说测试过,不过如果准了则软件无误差,这个可以凑或是计算的





关闭】 【打印
 
相关专题
 
友情链接:
© 2007 电子元件网 网站地图