led0-99-tmr0-int.asm

来自「自己编写的一个PIC程序」· 汇编 代码 · 共 124 行

ASM
124
字号
;*****************************************************
;功能:实现两位数码管的0-99递增动态扫描,递增速度约为1秒
;特点:使用了TMR0的定时与中断功能,实现了数码管的动态扫描
;时间:2007年5月30日
;不足:1秒定时还不够精确
;*****************************************************
	include<p16f877.inc>

TimeNum	EQU	20H					;定义时间控制变量
DisNum	EQU	21H					;定义显示位控制变量
DelNum	EQU 22H					;定义延迟函数变量
Second	EQU	23H					;定义时间秒变量
Minute	EQU	24H					;定义时间分钟变量

		org		0
		goto	main
;********************中断服务子程序********************
		org		4
		incf	TimeNum,1		;控制秒是否该加1
		movlw	0eh
		subwf	TimeNum,0
		btfss	STATUS,Z
		goto	BACK
		clrf	TimeNum
		incf	Second,1
		movlw	0Ah				;控制分钟是否该加1
		subwf	Second,0
		btfss	STATUS,Z
		goto	BACK
		clrf	Second
		incf	Minute,1
		movlw	0Ah
		subwf	Minute,0
		btfss	STATUS,Z
		goto	BACK
		clrf	Minute
BACK	bcf		INTCON,T0IF		;清楚中断标志位
		movlw	0
		movwf	TMR0			;TMR0重新装入
		retfie
;*****************************************************

;*****************主程序开始**************************
main
		bcf		STATUS,RP0
		bcf		STATUS,RP1
		clrf	TimeNum			;清楚自定义变量
		clrf	DisNum
		clrf	Second
		clrf	Minute
		movlw	0a0h
		movwf	INTCON			;开总中断,使能TMR0中断

		bsf		STATUS,RP0
		bcf		STATUS,RP1
		movlw	07H				;将分频器分配给TMRO,分频比比1:256,时钟源为内部时钟源
		movwf	OPTION_REG
		movlw	0
		movwf	TRISC			;设置RC口为输出
		movwf	TRISD			;设置RD口为输出

		bcf		STATUS,RP0
		bcf		STATUS,RP1
		movlw	0
		movwf	PORTD
		movwf	PORTC
		movwf	TMR0			;装入TMR0初始值
	
Display	incf	DisNum,1		;控制数码管显示位
		movlw	01h
		andwf	DisNum,w
		addwf	PCL,F
		goto	DisS
		goto	DisG
DisS	movf	Minute,0		;显示十位
		call	TABLE
		movwf	PORTD
		movlw	0x01
		movwf	PORTC
		call	Delay
		clrf	PORTC
		goto	BACK1
DisG	movf	Second,0		;显示个位
		call	TABLE
		movwf	PORTD
		movlw	0x02
		movwf	PORTC
		call	Delay
		clrf	PORTC
BACK1	goto	Display
;**************************************************

;**************查表子程序**************************
TABLE
		addwf	PCL
		retlw	0c0h
		retlw	0f9h
		retlw	0a4h
		retlw	0b0h
		retlw	99h
		retlw	92h
		retlw	82h
		retlw	0f8h
		retlw	80h
		retlw	90h
;**************************************************

;************延迟子函数****************************
Delay	movlw	0ffh
		movwf	DelNum
NEXT1	decf	DelNum,1
		btfss	STATUS,Z
		goto	NEXT1
		movlw	0ffh
		movwf	DelNum
NEXT2	decf	DelNum,1
		btfss	STATUS,Z
		goto	NEXT2
	return
;**************************************************

END

⌨️ 快捷键说明

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