timer4.asm

来自「Small RTOS51是为51系列单片机而编写的。它是完全免费的、源代码公开的」· 汇编 代码 · 共 51 行

ASM
51
字号
;**************************************************
;    平凡单片机工作室
;  http://www.mcustudio.com
;   (c) Copyright 2003 Pingfan's McuStudio
;    All rights Reserved
;timer4.asm
;作者:周坚   
;功能描述:两个灯同时闪烁,一个是0.25S闪一次,一个是0.5S闪一次,介绍项目中需要多个定时器的解决方法
;本例可用DSB-1A型单片机实验板验证
;本例可用ledkey.dll实验仿真板验证,但LED的闪烁速度与你的计算机性能有关
;如果闪烁速度过快,可适当调整第一、二行后的数值,按比例扩大,如调到50、100,
;**************************************************
    TM1     EQU     5
    TM2     EQU     10
    ORG     0000H
    AJMP    START
    ORG     000BH       ;定时器0的中断向量地址
    AJMP    TIME0       ;跳转到真正的定时器程序处
    ORG     30H
START:  
    MOV     P1,#0FFH    ;关所有的灯
    MOV     R6,#00H     ;软件计数器预清0
    MOV     R7,#00H
    MOV     TMOD,#00000001B ;定时/计数器0工作于方式1
    MOV     TH0,#3CH 
    MOV     TL0,#0B0H   ;即数15536
    SETB    EA          ;开总中断允许
    SETB    ET0         ;开定时/计数器0允许
    SETB    TR0         ;定时/计数器0开始运行
LOOP:   
    AJMP    LOOP        ;真正工作时,这里可写任意程序
TIME0:                  ;定时器0的中断处理程序
    INC     R6
    INC     R7          ;两个计数器都加1
    MOV     A,R6
    CJNE    A,#TM1,T_NEXT   ;30H单元中的值到了5了吗?
T_L1:
    CPL     P1.0        ;到了,取反P10
    MOV     R6,#0       ;清软件计数器
T_NEXT: 
    MOV     A,R7
    CJNE    A,#TM2,T_RET;31h单元中的值到10了吗?
T_L2:   
    CPL     P1.1
    MOV     R7,#0       ;到了,取反P11,清计数器,返回
T_RET:  
    MOV     TH0,#3CH
    MOV     TL0,#0B0H   ;重置定时常数
    RETI
    END

⌨️ 快捷键说明

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