⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51单时钟完成多点分别计时.txt

📁 共有 45 个程序源码
💻 TXT
字号:
三、时钟对多事件分别计数的具体途径

    对于实时性要求不是很高的时间可以通过如下方式实现。在完成基本的定时器工作方式设定以后,也就是设定定时器的计数方式,比如16位或8位,以及计数的初始值,以及启动中断的方式,建议使“SETB   TR0”的方式。并且允许中断。在中断服务程序中,开辟存储单元,以8个事件为例,每个事件不一定同时发生,每个事件发生以后以相同的时间延迟,再进行下一步的任务,为了完成定时延时,事件发生的时刻记作A1,A2,A3。。。。。。A10,中段服务程序中首先检查有无这些既定的事件发生,没有则不做任何处理,恢复计数初值后退出中断,相反,假如检测到AX(X=1、2、3。。。。。。)事件发生则给预先选定的对应的内存单元增加1,也就是执行累加运算,比如,

A1~50H;        表示A1对应的存储单元是50h
A2~51H;        表示A2对应的存储单元是51h
A3~52H;
。   。
。   。
。   。
A7  57H;       表示A7对应的存储单元是57h

    假如A3事件发生,则对52H内存表示的地址单元增加1,使用的指令是“INC  52H”,可以预先计算事件延时时间与计数单元数值的关系,当对应的数值到了预先设定的值时,执行下一任务。比如开关操作等等,并且恢复初始值以便继续循环控制。这样可以分别对A1到A7,8个任务分别计时,时间可以相同也可以不同,具体的情况可以根据中断程序中寄存器累计的实际值与根据需要所设定的预定值比较而实现。

    四、典型应用

    也许大家都看到过繁华街道上的拼图式广告牌吧,有十几个或者几十个三棱柱,通过旋转,构成不同的画面,在每幅画面都停留一段时间,这正好是上面介绍的情况,当一个棱柱的某个画面转到特定的角度,比如正对马路的方向,该画面必须停留,等所有与此画面相连接而能拼成完整画面的其他柱面到来,也就是从柱面开始启动到下一次停下来需要所有画面经过相同的时间,然而所有的主面不可能同时启动,可能为了形成某种观赏效果,有意依次启动,或由中间开始启动,逐渐向两边延伸,等等,所有这些事件的转动控制实质就是定时控制,先启动,先停止。最终保证所有的画面构成一幅完整的画面,而且必须是一个平面,我通过这种方法成功地完成了8组和15组转动马达的起停控制,实践证明这种方法简单可行。部分原程序如下所示。基本流程和部分程序代码如下。





以下是定时中断服务程序的全部代码,可以完成对8个事件的时间统计,并在时间满足条件时,调用子程序OUT01,是对外部开关的控制指令。通过这段程序,成功实现了一个定时器对多个事件的自动运行控制(以下程序仅供参考)。

TIME0:                  CLR       TR0
                 PUSH      PSW
                        PUSH      ACC 
                        MOV       TL0,#22H;定时100ms重新启动定时器0
                 MOV       TH0,#1CH
               
LINSHI:                 MOV       A,2AH
                        CJNE       A,#0FFH,DEA
                        SETB       TR0
                        POP        ACC
                 POP        PSW   
                        RETI
                       
DEA:                    MOV       A,2AH
                        CJNE      A,#00H,DE1
                        MOV       A,2CH
                        CJNE      A,#00H,DE1
                        ;SETB      TR0
                        POP       ACC
                 POP       PSW   
                        RETI                                         
DE1:                    JNB       2AH.0,DEAL1
DE2:                    JNB       2AH.1,DEAL2
DE3:                    JNB       2AH.2,DEAL3
DE4:                    JNB       2AH.3,DEAL4I
DE5:                    JNB       2AH.4,DEAL5I
DE6:                    JNB       2AH.5,DEAL6I
DE7:                    JNB       2AH.6,DEAL7I
DE8:                    JNB       2AH.7,DEAL8I     
                    LJMP      FINISH
                      
DEAL4I:                 LJMP      DEAL4                        
DEAL5I:                 LJMP      DEAL5
DEAL6I:                 LJMP      DEAL6                        
DEAL7I:                 LJMP      DEAL7  
DEAL8I:                 LJMP      DEAL8                        
DEAL1:                  JNB       2CH.0,DE2
                        INC       50H
                        MOV       A,50H
                        CJNE      A,#20,DE2
                        CLR       2CH.0                        
                        LCALL     OUT01
                        mov       50h,#00h
                        LJMP      DE2                        
DEAL2:                  JNB       2CH.1,DE3
                        INC       51H
                        MOV       A,51H
                        CJNE      A,#20,DE3                        
                        CLR       2CH.1                        
                        LCALL     OUT01
                        MOV       51H,#00H
                        LJMP      DE3   
 DEAL3:                JNB       2CH.2,DE4
                 INC       52H
                        MOV       A,52H
                        CJNE      A,#20,DE4
                        CLR       2CH.2
                        LCALL     OUT01
                        MOV       52H,#00H
                        LJMP      DE4 
DEAL4:                JNB       2CH.3,DE5I
                INC       53H
                        MOV       A,53H
                        CJNE      A,#20,DE5I
                        CLR       2CH.3
                        LCALL     OUT01
                        MOV       53H,#00H
DE5I:                   LJMP      DE5
DEAL5:                 JNB       2CH.4,DE6I
                 INC       54H
                        MOV       A,54H
                        CJNE      A,#20,DE6I
                        CLR       2CH.4
                        MOV       54H,#00H
                        LCALL     OUT01
DE6I:                   LJMP      DE6
DEAL6:                  JNB       2CH.5,DE7I
                  INC       55H
                        MOV       A,55H
                        CJNE      A,#20,DE7I
                        CLR       2CH.5
                        LCALL     OUT01
                        MOV       55H,#00H
DE7I:                   LJMP      DE7
DEAL7:                  JNB       2CH.6,DE8I
                 INC       56H
                        MOV       A,56H
                        CJNE      A,#20,DE8I
                        CLR       2CH.6
                        LCALL     OUT01
                        MOV       56H,#00H
DE8I:                   LJMP      DE8
DEAL8:                 JNB       2CH.7,FINISH
                 INC       57H
                        MOV       A,57H
                        CJNE      A,#20,FINISH
                        CLR       2CH.7
                        LCALL     OUT01
                        MOV       57H,#00H

                            
FINISH:                 MOV       A,2CH
                        CJNE      A,#00H,TUI
                        
                      
                        SETB      TR0;SETB      TR0
                 POP       ACC
                 POP       PSW
                 RETI
 TUI:                SETB      TR0;开定时器   
                 POP       ACC
                 POP       PSW   
                        RETI
OUT01:              MOV      A,2CH
                        MOV      P2,A
                        CLR      G0
                        LCALL    DELAY
                        CLR      CLOCK
                        LCALL    DELAY
                        SETB     CLOCK
                        NOP
                        
                        CLR      CLOCK
                        SETB     G0
                        LCALL    DELAY
                        RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -