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

📄 clock.asm

📁 多个仿真例子
💻 ASM
字号:
HOUR	EQU	30H	;小时计数单元
MIN	EQU	31H	;分钟计数单元
SEC	EQU	32H	;秒计数单元
COUNT	EQU	33H	;50ms计数单元
BUF	EQU	38H	;显示缓冲区首地址,共3字节
	ORG	0
	LJMP	START
	ORG	0BH
	LJMP	TS
	ORG	30H
START:	MOV	SP,#60H
	MOV	TMOD,#01H	;设T0为方式1
	MOV	TH0,#3CH
	MOV	TL0,#0B0H	;50ms定时初值
	SETB	PT0		;设T0为高级中断
	SETB	ET0		;允许T0中断
	MOV	COUNT,#20	;50ms计数单元赋初值
	MOV	HOUR,#0		;小时计数单元清零
	MOV	MIN,#0		;分钟计数单元清零
	MOV	SEC,#0		;秒计数单元清零
	SETB	TR0		;启动计数
LOOP:	CLR	EA		;关中断,避免读数时显示跳动
	MOV	BUF,HOUR	;存小时数到显示缓冲区
	MOV	BUF+1,MIN	;存分钟数到显示缓冲区
	MOV	BUF+2,SEC	;存秒数到显示缓冲区
	SETB	EA		;开中断
	LCALL	DISP
	SJMP	LOOP
;显示程序
;将BUF单元的3字节BCD码送数码管显示
DISP:	MOV	R0,#BUF
	MOV	R2,#3		;共显示3个字节的BCD码
	MOV	R3,#1		;位码初值
DISP1:	MOV	A,@R0
	ANL	A,#0FH
	MOV	DPTR,#DISP_TAB
	MOVC	A,@A+DPTR
	ANL	A,#7FH		;点亮末尾小数点以便于区分时间
	MOV	P0,A		;送段码
	MOV	A,R3
	MOV	P2,A
	RL	A
	MOV	R3,A
	LCALL	DELAY		;延时1ms
	MOV	A,@R0
	SWAP	A
	ANL	A,#0FH
	MOV	DPTR,#DISP_TAB
	MOVC	A,@A+DPTR
	MOV	P0,A		;送段码
	MOV	A,R3
	MOV	P2,A
	RL	A
	MOV	R3,A
	LCALL	DELAY
	INC	R0
	DJNZ	R2,DISP1
	RET
DISP_TAB:DB	0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0D8H
	DB	80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
;50ms定时中断服务程序
TS:	PUSH	PSW
	PUSH	ACC
	PUSH	DPH
	PUSH	DPL
	CLR	TR0
	MOV	TH0,#3CH
	MOV	TL0,#0B0H
	SETB	TR0
	DJNZ	COUNT,EXIT
	MOV	COUNT,#20
	MOV	A,SEC
	ADD	A,#1		;秒加1
	DA	A		;调整为BCD码
	MOV	SEC,A		;存秒
	CJNE	A,#60H,EXIT	;不到60秒则退出
	MOV	SEC,#0		;秒单元清零
	MOV	A,MIN
	ADD	A,#1		;分加1
	DA	A		;调整为BCD码
	MOV	MIN,A		;存分
	CJNE	A,#60H,EXIT	;不到60分则退出
	MOV	MIN,#0
	MOV	A,HOUR
	ADD	A,#1		;小时加1
	DA	A		;调整为BCD码
	MOV	HOUR,A		;存小时
	CJNE	A,#24H,EXIT	;不到24小时则退出
	MOV	HOUR,#0
EXIT:	POP	DPL
	POP	DPH
	POP	ACC
	POP	PSW
	RETI
DELAY:	MOV	R6,#250
L1:	NOP
	NOP
	DJNZ	R6,L1
	RET
	END

⌨️ 快捷键说明

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