Automatic re-set PIC timer program for burglar alarm system

The automatic re-set timer for the crime prevention buzzer was made by using PIC12F629. It introduces the assembler program.

Automatic re-set timer for crime prevention buzzer that uses PIC12F629

The bell keeps ringing generally though the bell rings as for the crime prevention buzzer when the thief was about to enter. With this, after the fixed time, it is stopped because surroundings are troubled you and it is inconvenient. In addition, to operate even by degrees how many after it stops, the crime prevention buzzer is set again.

However, because the timer had not been found to be suitable at the production this time, multi cooking stove timer ATC12112 of National was adjusted to five minutes of the turning on mode and it used it.

Recently Because it had come to be able to use the PIC microcomputer, the timer of this ATC12112 was replaced with PIC12F629. It introduces it because it easily made it to good.

Assembler that uses PIC12F629 program

; Filename:	bell_timer.asm
; Date:		2007.08.03
; File Version:	1.0
; Bell Timer 3sec. 5min
; Author:		D.Ishikawa
;**********************************************************************
	list	p=12f629		;list directive to define processor
	#include	<p12f629.inc>	;processor specific variable definitions

	errorlevel	-302	; suppress message 302 from list file

__CONFIG _CP_ON & _CPD_ON & _BODEN_ON & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 

#define	OUT_TMR	GPIO,2	;
#define	IN_P	GPIO,3	;

;***** VARIABLE DEFINITIONS
w_temp		EQU	0x20	;variable used for context saving 
status_temp	EQU	0x21	;variable used for context saving

TMP_CNT1		EQU 0x22
TMP_CNT2		EQU 0x23
TMP_CNT3		EQU 0x24
TMP_CNT4		EQU 0x25
;**********************************************************************
	ORG	0x000	;processor reset vector
	goto	main	;go to beginning of program

	ORG	0x004	;interrupt vector location
	movwf	w_temp	;save off current W register contents
	movf	STATUS,w	;move status register into W register
	movwf	status_temp	;save off contents of STATUS register

;isr code can go here or be located as a call subroutine elsewhere

	movf	status_temp,w	;retrieve copy of STATUS register
	movwf	STATUS		;restore pre-isr STATUS register contents
	swapf	w_temp,f
	swapf	w_temp,w		;restore pre-isr W register contents
	retfie	;return from interrupt

;these first 4 instructions are not required if the internal oscillator is not used

main
	call	0x3FF		;retrieve factory calibration value
	bsf	STATUS,RP0	;set file register bank to 1 
	movwf	OSCCAL		;update register with factory cal value 
	bcf	STATUS,RP0	;set file register bank to 0

;remaining code goes here

	bcf	STATUS,RP0	;set file register bank to 0
	bcf	STATUS,RP1	;set file register bank to 0

	clrf	INTCON		;

	clrf	GPIO		;

	bsf	STATUS,RP0	;
	clrf	TRISIO		;
	bsf	TRISIO,3	;

	clrf	IOC		;
	movlw	b'10000000'	;
	movwf	OPTION_REG	;

	bcf	STATUS,RP0	;

	bcf	OUT_TMR		;

	btfsc	IN_P		;
	goto	_5MIN		;

_3SEC
	call	DLY_500
	call	DLY_500
	call	DLY_500
	call	DLY_500
	call	DLY_500
	call	DLY_500
SET3	bsf	OUT_TMR	;
	goto	SET3

_5MIN
	call	DLY_5MIN
SET5	bsf	OUT_TMR	;
	goto	SET5

;Delay Routine

DLY_5MIN			;
	movlw	d'5'		;1*5=5min
	movwf	TMP_CNT4
DLY_4			;60S
	movlw	d'120'		;0.5*120=60S
	movwf	TMP_CNT3
DLY_3
	call	DLY_500
	decfsz	TMP_CNT3,f
	goto	DLY_3
	decfsz	TMP_CNT4,f
	goto	DLY_4
	return

DLY_500			;500mS
	movlw	d'250'		;2mS*250=500mS
	movwf	TMP_CNT2
DLY_2			;2mS	;
	movlw	d'249'		;	(1)		1cycle=1 micro S
	movwf	TMP_CNT1		;	(1)
	nop			;	(1)
	nop			;	(1)
	nop			;	(1)
	nop			;	(1)
DLY_1			;  DLY_1 loop
	nop			;1	 1
	nop			;1	 1
	nop			;1	 1
	nop			;1	 1
	nop			;1	 1
	decfsz	TMP_CNT1,f	;1	 2
	goto	DLY_1		;2
	decfsz	TMP_CNT2,f	;	 1
	goto	DLY_2		;	(2)
	return

;initialize eeprom locations

	ORG	0x2100
	DE	0x00, 0x01, 0x02, 0x03

	END			;directive 'end of program'

How to use of the assembler program.

Please make the file name bell_timer.asm etc. , preserve, and use it.