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

📄 disp2.asm

📁 Small RTOS51是为51系列单片机而编写的。它是完全免费的、源代码公开的多任务实时操作系统。它可在无任何外部数据存储器的单片80C51系统上运行
💻 ASM
字号:
;**************************************************
;    平凡单片机工作室
;  http://www.mcustudio.com
;   (c) Copyright 2003 Pingfan's McuStudio
;    All rights Reserved
;disp2.asm
;作者:周坚   
;功能描述:定时中断实现显示的程序,第一位始终显示0,第二位显示在0-9之间循环
;本例可用dpj.dll实验仿真板验证
;如果用DSB-1A型单片机实验板,将提供相应的程序
;**************************************************
    Counter EQU     59H     ;计数器,显示程序通过它得知现正显示哪个数码管
    FIRST   EQU     P2.7    ;第一位数码管的位控制
    SECOND  EQU     P2.6    ;第二位数码管的位控制
    DISPBUF EQU     5AH     ;显示缓冲区为5AH和5BH
    ORG     0000H
    AJMP    START
    ORG     000BH           ;定时器T0的入口
    AJMP    DISP            ;显示程序
    ORG     30H
START:  
    MOV     SP,#5FH         ;设置堆栈
    MOV     P1,#0FFH
    MOV     P0,#0FFH
    MOV     P2,#0FFH        ;初始化,所显示器,LED灭
    MOV     TMOD,#00000001B ;定时器T0工作于模式1(16位定时/计数模式)
    MOV     TH0,#HIGH(65536-2000)
    MOV     TL0,#LOW(65536-2000)
    SETB    TR0
    SETB    EA
    SETB    ET0
    MOV     Counter,#0      ;计数器初始化
    MOV     DISPBUF,#0      ;第一位始终显示0
    MOV     A,#0
LOOP:   
    MOV     DISPBUF+1,A     ;第二位轮流显示0-9
    INC     A
    LCALL   DELAY
    CJNE    A,#10,LOOP
    MOV     A,#0
    AJMP    LOOP            ;在此中间可以按排任意程序,这里仅作示范。
;主程序到此结束
DISP:                       ;定时器T0的中断响应程序
    PUSH    ACC             ;ACC入栈
    PUSH    PSW             ;PSW入栈
    MOV     TH0,#HIGH(65536-2000);定时时间为2000个周期,约2170微秒
    MOV     TL0,#LOW(65536-2000)
    SETB    FIRST
    SETB    SECOND          ;关显示
    MOV     A,#DISPBUF      ;显示缓冲区首地址
    ADD     A,Counter 
    MOV     R0,A
    MOV     A,@R0           ;根据计数器的值取相应的显示缓冲区的值
    MOV     DPTR,#DISPTAB   ;字形表首地址
    MOVC    A,@A+DPTR       ;取字形码
    MOV     P0,A            ;将字形码送P0位(段口)
    MOV     A,Counter       ;取计数器的值
    JZ      DISPFIRST       ;如果是0则显示第一位
    CLR     SECOND          ;否则显示第二位
    AJMP    DISPNEXT
DISPFIRST:
    CLR     FIRST           ;显示第一位 
DISPNEXT:
    INC     Counter         ;计数器加1
    MOV     A,Counter
    DEC     A               ;如果计数器计到2,则让它回0
    DEC     A 
    JZ      RSTCOUNT 
    AJMP    DISPEXIT
RSTCOUNT:
    MOV     Counter,#0      ;计数器的值只能是0或1
DISPEXIT:   
    POP     PSW
    POP     ACC
    RETI
DELAY:                      ;延时130毫秒
    PUSH    PSW
    SETB    RS0
    MOV     R7,#255
D1: MOV     R6,#255
D2: NOP
    NOP
    NOP
    NOP
    DJNZ    R6,D2
    DJNZ    R7,D1
    POP     PSW
    RET
DISPTAB:DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H 
END

⌨️ 快捷键说明

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