LIST p=18F1320
include "P18F1320.inc"
CONFIG OSC = HS, FSCM = OFF, IESO = OFF, PWRT = OFF, BOR = OFF, WDT = OFF, LVP = OFF, WRTC = OFF
;
; Software constants
; ==================
PreLoad = .58875 ; use to Preload Timer1 to generate 300Hz
;
; Software Vectors
; ================
;
org 0 ; Main Program
bra Init;
;
org 0X8 ; HiPri. INTs
TimerINT
;
; Timer1 ISR
; ==========
; Here we will just toggle a LED
; at each INT events
; producing 150Hz frequency
;
BTG LATB,0 ; Toggle LED on PORTB,0
BCF T0CON, TMR0ON ; stop TIMER0 -- 1
MOVLW LOW(PreLoad) ; load lowbyte - 1
MOVWF TMR0L ; -------------- 1
MOVLW HIGH(PreLoad) ; load HighByte -1
MOVWF TMR0H ; -------------- 1
BSF T0CON, TMR0ON ; start TIMER0 - 1
; ----------------
; Reload = --- 6
;
BCF INTCON, TMR0IF ; clear INT flag
RETFIE FAST ; getout of here
;
; Main Program
; ============
Init ;
; Configure PIC registers
; -----------------------
;
CLRF TRISB ; PORTB = output
CLRF LATB ; clear all PORTB I/Os
;
MOVLW 0XFF ;
MOVWF ADCON1 ; Disable ALL ADCs
;
BSF RCON,IPEN ; Enable priority levels on interrupts
;
MOVLW b'00100000' ; Enable
MOVWF INTCON ; TIMER0 int
BSF INTCON2,TMR0IP ; Set TMR0 to High priority
;
MOVLW b'00001000' ;
MOVWF T0CON ; Set TMR0 to
; off
; 16 bit
; clock source = internal
; no prescaller... 1:1
;
MOVLW LOW(PreLoad) ; Load Preload
MOVWF TMR0L ; value
MOVLW HIGH(PreLoad) ; into
MOVWF TMR0H ; TMR0
;
BSF INTCON, GIEH ; Enable Hi-Pri interupts
BSF T0CON, TMR0ON ; Start TIMER0
;
; Main loop
; ---------
Main ;
; nothing fancy, just
; toggle another LED on PORTB,1
;
BTG LATB,1 ; Toggle LED on PORTB,1
bra Main ; do it again
end