Off timer program of 30 or 60 minutes for PIC12F629
The television, I was using everyday, did not work the "OFF Timer". So, I made the OFF Timer by using the PIC12F629 and the solid-state relay (SSR).
The program of PIC12F629 is used assembler.
Off timer used PIC12F629
Because it had come to manage to use the PIC microcomputer, the off timer that was able to be used also for the television by holding the study of PIC concurrently was made.
It made with PIC microcomputer PIC12F629 by using the kit of solid-state relay (SSR) of Akizuki Electronic commerce.
I used the Tera-Pad editor of free software and made the program of the assembler of PIC. MPLAB IDE Ver.7.4 of the Microchip Co. and writing the PIC program handled AKI-PIC programmer Ver.4 the PIC development tool by Akizuki Electronic commerce.
Of course, you can use the air conditioner or the television or the radio, the radio-cassette, if you change the cooling fin bigger.
How to use this program. (assembler program of an off timer)
Please make the assembler program file name timer30_60.asm etc. , preserve in the editor etc. , and use it.
Off timer program for 30 or 60 minutes.
; Filename: timer30_60.asm ; Date:2007.06.02 ; File Version: 1.0 ; OFF Timer 30_60 min. ; Author: D.Ishikawa ;********************************************************************** ; Files required: ;********************************************************************** 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 __IDLOCS 0x0100 ;Ver 1.00 #define OUT_LED GPIO,1 ; #define OUT_TMR GPIO,2 ; #define IN_P GPIO,3 ; #define ON_TIME d'30' ; ;***** VARIABLE DEFINITIONS w_temp EQU 0x20 ; variable used for context saving status_temp EQU 0x21 ; variable used for context saving CNT1 EQU 0x22 CNT2 EQU 0x23 CNT3 EQU 0x24 CNT4 EQU 0x25 ;********************************************************************** ;initialize eeprom locations ORG 0x2100 DE "OFF Timer_30_60min." 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_LED ; bcf OUT_TMR ; btfsc IN_P ; goto _60MIN ; _30MIN bsf OUT_TMR ; call DLY_30 OFF_30 bcf OUT_TMR ; goto OFF_30 _60MIN bsf OUT_TMR ; call DLY_60_30 call DLY_30 OFF_60 bcf OUT_TMR ; goto OFF_60 ;Delay Routine DLY_30 ; movlw ON_TIME ;1*30=30min movwf CNT4 DLY_6 ;60S movlw d'60' ;1*60=60S movwf CNT3 DLY_5 ;1S ;0.5*2=1S bsf OUT_LED ; call DLY_500 bcf OUT_LED ; call DLY_500 decfsz CNT3,f goto DLY_5 decfsz CNT4,f goto DLY_6 return DLY_60_30 ; movlw ON_TIME ;1*30=30min movwf CNT4 DLY_4 ;60S movlw d'30' ;2*30=60S movwf CNT3 DLY_3 ;2S ;0.5*4=2S bsf OUT_LED ; call DLY_500 call DLY_500 bcf OUT_LED ; call DLY_500 call DLY_500 decfsz CNT3,f goto DLY_3 decfsz CNT4,f goto DLY_4 return DLY_500 ;500mS movlw d'250' ;2mS*250=500mS movwf CNT2 DLY_2 ;2mS DLY_2 loop movlw d'249' ; (1) 1cycle=1 micro S movwf 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 CNT1,f ;1 2 goto DLY_1 ;2 decfsz CNT2,f ; 1 goto DLY_2 ; (2) return END ;directive 'end of program'