timecnt.asm

来自「DALI系统主控制器的软件代码」· 汇编 代码 · 共 83 行

ASM
83
字号
; *************************************************************************** ;
; Event Timer by Ross Fosler						      ;
; v1.00	02/13/01   ... created ... 					      ;
;								 	      ;
; *************************************************************************** ;


; *****************************************************************************
	subtitle	"Event Timer ..."
; *****************************************************************************


; *****************************************************************************
#include	p16f628.inc	; Standard include file
#include	instruct.inc	; Bring in complex instructions
#include	user_mac.inc	; Bring in application specific instructions
; *****************************************************************************


; *****************************************************************************
	EXTERN	MILLISECONDS, OVER_LOAD_CNT, COUNTER_L, BRIDGE_STATUS
	EXTERN	STATUS_COPY, W_COPY
; *****************************************************************************


; *****************************************************************************
TIME_COUNT	CODE	
; *****************************************************************************
TimeCounter
	banksel	PORTA				; *** Select Bank 0 ***
	
	sublf	0xC6, TMR0, F			; Prime for 200us overflow (4MHz clock)
	
	incf	COUNTER_L, F			; Count up to 1ms
	cflbis	COUNTER_L, 0x05, Jp1	
	clrf	COUNTER_L			; Reset counter

	incf	MILLISECONDS, F			; Update the event timer

	brset	BRIDGE_STATUS, 2, Jp1		; Skip if in overload shutdown

	btfss	CMCON, C1OUT			; Overload counter
	incf	OVER_LOAD_CNT, F	 
	btfsc	CMCON, C1OUT
	decf	OVER_LOAD_CNT, F

	movf	OVER_LOAD_CNT, W		; Hold above 0
	btfsc	STATUS, Z
	bsf	OVER_LOAD_CNT, 0

	comf	OVER_LOAD_CNT, W		; Determine if OL for more than 255ms
	btfsc	STATUS, Z
	goto	OverLoad

Jp1	bcf	INTCON, T0IF			; Clear the int flag

	swapf	STATUS_COPY, W			; Restore data
	movwf	STATUS		
	swapf	W_COPY, F
	swapf	W_COPY, W

	retfie					; End of ISR

OverLoad
	bsf	BRIDGE_STATUS, 2

	movlf	0x37, CMCON			; Release the regulator
	bcf	PORTA, 4

	bcf	INTCON, T0IF			; Clear the int flag

	swapf	STATUS_COPY, W			; Restore data
	movwf	STATUS		
	swapf	W_COPY, F
	swapf	W_COPY, W

	retfie

	GLOBAL	TimeCounter
; *****************************************************************************

	END

⌨️ 快捷键说明

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