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

📄 时钟.txt

📁 关于单片机中流水线处理,红绿灯转化等实验
💻 TXT
字号:
	CURR_NUM_1	EQU	30H	;HEX
	CURR_NUM_2	EQU	31H
	CURR_NUM_3	EQU	32H
	VAR_TIME	EQU	33H	;soft timer
;***********************************************************
	org	0000H
	jmp	MAIN

	org	000BH
	jmp	interrupt_T0
;************************************************************
	org	0030H

MAIN:
	mov	p0,#0FFH
	mov	p1,#0FFH
	mov	p2,#0FFH
	mov	P3,#0FFH

	mov	CURR_NUM_1,#39H
	mov	CURR_NUM_2,#39H
	mov	CURR_NUM_3,#16H
	mov	VAR_TIME,#00H

	mov	TMOD,#01H
	mov	TH0,#0B1H	;20ms,load number
	mov	TL0,#0E0H
	setb	TR0	;start T0
	setb	ET0		;Enable T0 interrupt
	setb	EA		;Enable interrupt

MAIN_LOOP:
	jnb	TF0,NEXT_LOOP		;if not oveflow,then refsh display
	clr	TF0		;clear the tag of overflow
	mov	TH0,#0B1H
	mov	TL0,#0E0H
	inc	VAR_TIME	;add 20ms
	/*if VAR_TIME=50,then time for 1s*/
	mov	a,VAR_TIME
	cjne	a,#50,NEXT_LOOP
	mov	VAR_TIME,#00H
	call	NUM_ADD

NEXT_LOOP:
	call	DISPLAY_NUM
	jmp	MAIN_LOOP
	ret

;***********************************************************
interrupt_T0:
	push	acc		;pay attention to here
	push	psw
	;jnb	TF0,INT_T0_EXIT		;if not oveflow,then refsh display
	;clr	TF0		;clear the tag of overflow
	mov	TH0,#0B1H
	mov	TL0,#0E0H
	inc	VAR_TIME	;add 20ms
	/*if VAR_TIME=50,then time for 1s*/
	mov	a,VAR_TIME
	cjne	a,#50,INT_T0_EXIT
	mov	VAR_TIME,#00H
	call	NUM_ADD

INT_T0_EXIT:
	pop	psw
	pop	acc

	reti
;**********************************************
DISPLAY_NUM:
	;A<-A/B
	mov	a,CURR_NUM_1
	mov	b,#0AH
	div	ab
	mov	r0,a
	;disply the low value
	mov	a,b
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	mov	p0,a	;Display the number
	mov	p2,#11111011B
	call	DELAY_DISP

	;Display the high value
	mov	a,r0
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	mov	p0,a
	mov	p2,#11110111B
	call	DELAY_DISP

	;A<-A/B
	mov	a,CURR_NUM_2	;CURR_NIM is the high 4
	mov	b,#0AH
	div	ab
	mov	r0,a
	;disply the low value
	mov	a,b
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	mov	p0,a	;Display the number
	mov	p2,#11101111B
	call	DELAY_DISP
	;Display the high value
	mov	a,r0
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	mov	p0,a
	mov	p2,#11011111B
	call	DELAY_DISP

	;A<-A/B
	mov	a,CURR_NUM_3	;CURR_NIM is the high 4
	mov	b,#0AH
	div	ab
	mov	r0,a
	;disply the low value
	mov	a,b
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	mov	p0,a	;Display the number
	mov	p2,#10111111B
	call	DELAY_DISP
	;Display the high value
	mov	a,r0
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	mov	p0,a
	mov	p2,#01111111B
	call	DELAY_DISP

	ret
;***************************************************
NUM_ADD:
	mov	a,CURR_NUM_1
	cjne	a,#59,INC_NUM_1
	mov	CURR_NUM_1,#00H
	
	mov	a,CURR_NUM_2
	cjne	a,#59,INC_NUM_2
	mov	CURR_NUM_2,#00H	
	
	mov	a,CURR_NUM_3
	cjne	a,#23,INC_NUM_3
	mov	CURR_NUM_3,#00H

	jmp	NUM_ADD_EXIT

INC_NUM_3:
	inc	CURR_NUM_3
	jmp	NUM_ADD_EXIT

INC_NUM_2:
	inc	CURR_NUM_2
	jmp	NUM_ADD_EXIT

INC_NUM_1:
	inc	CURR_NUM_1
	jmp	NUM_ADD_EXIT

NUM_ADD_EXIT:
	
	ret


;*************************************************************
DELAY_DISP:
	mov	R7,#5
DELAY_DISP_LOOP:
	mov	R6,#150
	djnz	R6,$
	mov	R6,#200
	djnz	R6,$

	djnz	R7,DELAY_DISP_LOOP

	ret
;******************************************************
TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;**********************************************************
	END	

⌨️ 快捷键说明

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