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

📄 ex1001.asm

📁 PIC单片机指令集
💻 ASM
字号:
;
;	LCD + PRECISION TIMER (00.00~99.99 SEC) (Timer0)
;
	LIST P=16F877, R=DEC
	#INCLUDE P16F877.INC
	CBLOCK 0X20
	ENDC
;
;	define RAM
;
	CBLOCK
	 TIMBFH, TIMBFL			; for precission timer
	 R0_PRC100mS
	 R0:2				; reserve 2 bytes for LCD LINE2
	 W_BAK, STATUS_BAK		; back up RAM for w register
	 BCDBFH, BCDBFL			; buffers for HEX to BCD converter
	ENDC
;
;	define data
;
DATMR0	EQU 256-125 			; 125*16uS=2mS(for 16 MHz)
;
;
;.......................................................................
;
	ORG 0
	NOP
	GOTO MAIN		; reset vector
;
	ORG 4			; 
	MOVWF W_BAK		; save w register
	SWAPF STATUS,W		; save STATUS register
	MOVWF STATUS_BAK
	MOVLW DATMR0		; 
	ADDWF TMR0		; restore TMR0

	DECF R0_PRC100mS

	BCF INTCON,T0IF		; clear interrupt flag
	SWAPF STATUS_BAK,W
	MOVWF STATUS
	SWAPF W_BAK
	SWAPF W_BAK,W		; restore w register without affecting status
	RETFIE			; return + (bsf INTCON,GIE)
;
;................................
;
MAIN:
;
	BANKSEL OPTION_REG	; OPTION_REG is in bank1
	MOVLW B'00000101'	; RBPU(0),INTEDG(0),T0CS(0=INT),T0SE(0)
				; PSA(0=PRESC to timer)
				; PS2~0(101=1/64)
	MOVWF OPTION_REG
	BANKSEL TMR0
	MOVLW DATMR0		; 64*125=2000uS for 16 MHz crystal
	MOVWF TMR0		; reset buffer of timer0
	MOVLW 50		; 50*2mS=100mS
	MOVWF R0_PRC100mS	; reset 50*2mS counter
;
	BSF INTCON,T0IE		; actuate timer0 interrupt
	BSF INTCON,GIE		; actuate global interrupt
;
	CLRF TIMBFH		; clear buffers of timer
	CLRF TIMBFL
	CLRF R0		; clear buffers of LCD line 2
	CLRF R0+1
;
;
MAIN1:
	CALL PRC_100mS		; precission 100 mS timer
	call	L2homeLCD	; move cursor to the beginning of line 2
	MOVLW	' '
	CALL	putcLCD
	MOVLW	' '
	CALL	putcLCD

	MOVF 	R0,W
	CALL 	putHexLCD	
;
	MOVLW 	'.'
	CALL 	putcLCD		; put the decimal point
;
	MOVF	R0+1,W
	CALL 	putHexLCD	
;
put_SEC:
	MOVLW ' '
	CALL putcLCD
;
	MOVLW 'S'
	CALL putcLCD
;
	MOVLW 'e'
	CALL putcLCD
;
	MOVLW 'c'
	CALL putcLCD
;
	GOTO MAIN1
;
;
;.............................................................................
;
;	precission 100mS timer
;
PRC_100mS:
	TSTF R0_PRC100mS
	SKPZ
	GOTO PRC_100mS
;
	MOVLW 50
	MOVWF R0_PRC100mS		; restore 50*2 mS counter
;
	MOVLW .10			; only ten digit of TIMBFL is used
	ADDWF TIMBFL			; hence add .10 every time
	MOVF TIMBFL,W
	CALL HX2BCD
	MOVF BCDBFL,W
	MOVWF R0+1
	SKPZ				; Adjust sec every 10*0.1 sec
	GOTO PRC_100mS1			; end of suroutine

	MOVWF TIMBFL			; 0x0a-->.10
	INCF TIMBFH			; TIMBFH+1
	MOVF TIMBFH,W
	CALL HX2BCD
	MOVF BCDBFL,W
	MOVWF R0
	SKPNZ
	MOVWF TIMBFH			; 0x64-->.100
PRC_100mS1:
	RETURN
;
;
;---------------------------------------------------------------;
								;
	#INCLUDE <LCD.INC>					;
								;
; Defines for I/O ports that provide LCD data & control		;
								;
LCD_DATA	equ	PORTB					;
LCD_CNTL	equ	PORTB					;
								;
RS	equ	5	; RS=PORTB,5				;
E	equ	4						;
								;
;===============================================================;
;---------------------------------------------------------------;
								;
	#INCLUDE <HX2BCD.INC>					;
								;
;===============================================================;
;
;
;
	END

⌨️ 快捷键说明

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