📄 sec.asm
字号:
;**************************************************
; 平凡单片机工作室
; http://www.mcustudio.com
; (c) Copyright 2003 Pingfan's McuStudio
; All rights Reserved
;sec.asm
;作者:周坚
;秒钟程序,每到1S,显示值加1,有高位0消隐功能
;本例可用ledkey.dll实验仿真板验证
;如用DSB-1A型单片机实验板将提供相应的程序
;**************************************************
FIRST EQU P2.7 ;第一位数码管的位控制
SECOND EQU P2.6 ;第二位数码管的位控制
SEC BIT 00H ;1秒到的标记
VALUE EQU 21H ;
COUNT EQU 22H ;软件计数器
COUNTER EQU 20 ;软件计数器的计数值,该值乘以定时器的定时值(50ms),即得到1s的定时值
;如果用实验仿真板,可以适当调整该数值,以适应你的电脑速度,以免过份影响实验效果 DISPBUF EQU 5EH ;5E,5FH是显示缓冲区
TMRVAR EQU 16857 ;(65536-50000)*12/11.0592 定时器初值
HIDDEN EQU 10
ORG 0000H
JMP START
ORG 0*8+3 ;INT0中断入口
RETI
ORG 1*8+3 ;TIMER0中断入口
JMP INT_T0 ;转去定时器0中断服务程序入口
ORG 2*8+3 ;INT1中断入口
RETI
ORG 3*8+3 ;TIMER1中断入口
RETI
ORG 4*8+3 ;串行中断入口
RETI
START:
MOV SP,#5FH ;设置堆栈指针初值
MOV VALUE,#0 ;秒计数器
MOV DISPBUF,#0;
MOV DISPBUF+1,#0
CALL DISP
CALL INIT_T0
CLR SEC
SETB EA ;开总中断
LOOP:
JBC SEC,NEXT ;一秒到,清除一秒到的标志
CALL DISP ;调用显示程序
JMP LOOP ;一秒未到,继续循环
NEXT:
MOV A,VALUE ;获得秒的数值
MOV B,#10
DIV AB ;二进制转化为十进制,十位和个位分送显示缓冲区
JZ NEXT1 ;如果A中值是0,高位0消隐
JMP NEXT2 ;否则直接送去显示
NEXT1:
MOV A,#HIDDEN
NEXT2:
MOV DISPBUF,A
MOV DISPBUF+1,B ;个位送显示缓冲区
CALL DISP
JMP LOOP
;主程序到此结束
DISP:
PUSH ACC ;ACC入栈
PUSH PSW ;PSW入栈
MOV A,DISPBUF ;取第一个待显示数
MOV DPTR,#DISPTAB
MOVC A,@A+DPTR ;取字形码
MOV P0,A ;将字形码送P0位(段口)
CLR FIRST ;开第一位显示器位口
LCALL DELAY ;延时5毫秒
SETB FIRST ;关闭第一位显示器(开始准备第二位的数据)
MOV A,DISPBUF+1 ;取显示缓冲区的第二位
MOV DPTR,#DISPTAB
MOVC A,@A+DPTR
MOV P0,A ;将第二个字形码送P0口
CLR SECOND ;开第二位显示器
LCALL DELAY ;延时
SETB SECOND ;关第二位显示
POP PSW
POP ACC
RET
DELAY:
PUSH PSW
SETB RS0
MOV R7,#50
D1: MOV R6,#50
D2: DJNZ R6,$
DJNZ R7,D1
POP PSW
RET
DISPTAB: DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H,0FFH
INIT_T0: ;初始化T0为10毫秒的定时器
MOV TMOD,#01H
MOV TH0,#HIGH(TMRVAR)
MOV TL0,#LOW(TMRVAR)
SETB ET0 ;开T0中断
SETB TR0 ;定时器0开始运行
RET ;返回
INT_T0:
PUSH ACC
PUSH PSW ;中断保护
MOV TH0,#HIGH(TMRVAR)
MOV TL0,#LOW(TMRVAR)
INC COUNT ;软件计数器加1
MOV A,COUNT
CJNE A,#COUNTER,INT_RET
MOV COUNT,#0 ;计到100,软件计数器清0
SETB SEC ;将秒标志置为1
INC VALUE ;秒的值加1
MOV A,VALUE
CJNE A,#60,INT_RET
MOV VALUE,#0
INT_RET:
POP PSW
POP ACC
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -