;#################### ;## TIMER1 Example ## ;#################### ; GP5 as output, use timer0 for blinking ; by testing bit T0IF in register INTCON for overflow errorlevel -302 ; Turn off banking message ; known tested (good) code ;######################### ;## PROC DEFINITIONS ## ;######################### ; Set User ID Memory __idlocs 0x55aa ; Set configuration bits using definitions from the include file, p16f84.inc __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _CP_OFF & _MCLRE_OFF list p=12f629 ; Include file, change directory if needed include "p12f629.inc" ;######################### ;## PIN DEFINITIONS ## ;######################### ; GP5 OUT LED1 (Active LOW) ; GP4 I/O () ; GP3 INP () ; GP2 I/O () ; GP1 I/O () ; GP0 I/O () LED1_P EQU b'100000' ; OUTPUTs LED1 EQU GP5 ; INPUTs ;######################### ;## CONSTANTS ## ;######################### ;######################### ;## GLOBAL REGISTERS ## ;######################### ;######################### ;## MACROS ## ;######################### #define PAGE0 bcf STATUS,RP0 ; [M] Switch to page 0 in RAM #define PAGE1 bsf STATUS,RP0 ; [M] Switch to page 1 in RAM LED1_ON macro ; [M] Turn on LED1 bcf GPIO,LED1 endm LED1_OFF macro ; [M] Turn off LED1 bsf GPIO,LED1 endm ;################################################################################### ;################################################################################### ;#### S T A R T #### ;################################################################################### ;################################################################################### ;Initialization of basic registers Reset_vector org 0x0000 goto Init Irq_vector org 0x0004 retfie Init ; ############## ; Adjust osc calibration constant, read it from EEPROM PAGE1 ; Set page 0 call 0x3ff movwf OSCCAL ; Read osc calibration value and set it PAGE0 clrwdt ; Reset watchdog ;############### ; Set INPUTS/OUTPUTS PAGE1 movlw ~(LED1_P) ; LED1 will be output movwf TRISIO ; Set direction ; Set OFF comparators movlw 7 movwf CMCON ;############### ; Set TIMER0 movlw b'111' ; Prescaler - divider to 1:256 movwf OPTION_REG; PAGE0 clrf TMR0 ; Init of TIMER0 bcf INTCON,T0IF ; Init of interrupt bit ;####################################### ; MAIN LOOP ;####################################### M_L0: btfss INTCON,T0IF ; Testing interrupt bit for overflow of TIMER0 goto M_L0 ; back to loop bcf INTCON,T0IF ; TIMER0 overflow -> clear interrupt bit btfsc GPIO,GP5 ; change LED1 goto Led1_on goto Led1_off ;############### ;Functions ;############### Led1_off: LED1_OFF goto M_L0 Led1_on: LED1_ON goto M_L0 end