利用定时器T0产生时钟信号

【例题6-10  利用定时器T0产生时钟信号。
这个程序的目的是为了练习用定时器产生实时时钟信号,此程序是自动打铃器程序的一部分,个别地方有改动,主要是不让一些其他功能影响定时器的思路。仿真文件名是:T0实时钟.ASM。可以使用伟福纯软件仿真来观察程序的运行和所产生的时间信息。利用伟福软件打开这个程序,编译通过后,复位,全速运行,一小会之后,按暂停。软件界面下方有运行时间,然后比较在DATA窗口中地址为08H,09H,0AH,0BH等单元的数据所代表的时间,应该是相同的。注意,DATA窗口中的数据是16进制的。还要注意一点,把仿真器设置的晶振频率设置为6MHZ。程序中有几条指令前面打了分号,是不用的指令,保留在此的目的是与自动打铃器建立联系(见第11章)。
;T0方式1中断练习 ;
;f=6MHz ;T0方式1,定时,0.1
;T0中断允许,高优先
;主程序使用工作寄存器第0组,T0中断使用第1头部跟踪组
;------------定时器T0时间常数------------------------------
TH0H        EQU      26H              ;高字节
TL0L        EQU      27H              ;低字节
;-----------1字节 直接地址 变量----------------------------
XX          EQU      6DH                ;临时存储一字节数据
YY          EQU      6EH       
;-----------程序开始--------------------------------------
        org      0000h
        ljmp    main              ;转主程序
        org        000bh
        ljmp     T0FW              ;t0中断服务程序
        org     0030h
main:      mov         sp,#2fh    ;堆栈从30H开始,初始化开始
        clr     rs1              ;主程序使用工作寄存器第0
        clr     rs0
        mov     r7,#16          ;以下16个单元请0
        mov     th0h,#03ch      ;t0初值高字节,定时0.1,初始值为
;15536=3cb0h
        mov     tl0l,#0b0h      ;t0初值低字节,定时0.1,初始值为
;15536=3cb0h
        mov     tcon,#01h      ;01H=00000001B,INT0下降沿触发
        mov     ie,#9fh          ;9FH=10011111B,全允许
        mov     ip,#02h          ;02h=00000010b,t0高优先
        mov     tmod,#01h      ;t0方式1
        mov     th0,th0h        ;定时0.1,初始值为15536=3cb0h
        mov     tl0,tl0l        ;定时0.1,初始值为15536=3cb0h
        setb     tr0              ;启动t0,初始化完
loop:      nop                      ;主循环
            nop                      ;暂时没有任务
            nop                      ;等待中断
            sjmp     loop            ;死循环,永不结束
;-----------------------
        org         0100h指路器
;--------定时器0中断服务程序-------------------------------
;t0方式1,初值15536,100毫秒中断一次,高优先级
;产生时间:100毫秒在08H,即0.1=08H
;=09H;=0AH;=0BH;=0CH;=0DH;星期=0EH;(2)=0fh
T0FW:      PUSH      ACC            ;保护现场
        PUSH      B                ;保护现场
        PUSH      PSW       
        SETB     脉动测速中心RS0              ;选择工作寄存器第1
        CLR     RS1
        MOV     TH0,TH0H          ;定时器重新赋值,高字节
        MOV     TL0,TL0L          ;低字节
        INC     R0                ;100毫秒数      (08H)
        CJNE     R0,#10,$+3        ;比较100毫秒数够10
        JC         T0FWZ              ;不够10就是不够1秒,转中断结束
        INC     R1                ;100毫秒数够101秒数加1 (09H)
            SETB      kvm管理系统DSP            ;可以调用一次显示程序
            INC     SEC1              ;临时计数器秒数加1
            MOV     R0,#0            ;100毫秒数从0开始
        CJNE     R1,#60,$+3    光标跟随    ;秒数加1后,要判断是否够1
            JC      T0FWZ            ;不够,结束中断
            INC      R2              ;1分,分数加1  (0AH)
          SETB      COMPARE        ;允许比较打铃时间
          MOV      R1,#0            ;1分,秒数要从0开始
          CJNE      R2,#60,$+3
          JC         T0FWZ
          INC      R3              ;60=1小时 葵花脱粒机  (0BH)
          MOV      R2,#0
          CJNE      R3,#24,$+3
          JC      T0FWZ
          MOV      R3,#0
          INC      R4                ;日数        (0CH)
            MOV      A,R5            ;月份
            DEC     A              ;月份表中一月在第0位置
            MOV      DPTR,#MONTH_TAB ;每月日数表首
            MOVC      A,@A+DPTR      ;查表得到日数
            MOV      XX,A            ;日期送XX,以便比较
            INC      XX              ;超限数
            MOV      A,R4            ;日数
            CJNE      A,XX,$+3
            JC         T0FWA              ;比较日数和本月应该有的日数
            MOV      R4,#1            ;超过本月最大日期就回到1
            INC     R5                ;月数 (0DH)
            CJNE     R5,#13,$+3
            JC         T0FWA
            MOV     R5,#1            ;=1
            INC      R7              ;年加1(最后2位数。年的前2位数默认是20
T0FWA:      INC      R6                ;星期(0EH)
            CJNE      R6,#08H,$+3
            JC         T0FWZ
            MOV     R6,#1
T0FWZ:      POP      PSW              ;恢复现场
            POP      B
            POP      ACC
            RETI                      ;定时器0中断服务程序到此结束
;每月日数表
MONTH_TAB:  DB  31,28,31,30,31,30,31,31,30,31,30,31  ;1月,2
;---------------------------------------------------------------------
        END

本文发布于:2024-09-22 14:38:12,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/127708.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:程序   中断   时间   软件   产生   日数   运行
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议