  title  "Test of 16-bit Timer, by PEK"

;
; Test av kod för PIC16F876
;


  LIST P=16F876, R=DEC

  INCLUDE "P16F876.inc"

  __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC


;
; Registers
;
counter	EQU	0x20
_w	EQU	0x21
_status	EQU	0x22


  PAGE

;
; Start of Program
;
  org	0
  goto	Main

  org	4
  goto	Timer_ISR		; Timer ISR


Main

; Init Ports
  bsf	STATUS, RP0
  clrf	TRISB & 0x07F	; All out on PortB 
  bcf	STATUS, RP0


; Init Timer
  bsf	STATUS, RP0
  movlw	0x04
  movwf	PIE1 & 0x07F	; TMR1 compare interrupt enable
  bcf	STATUS, RP0

  movlw	0x0D
  movwf	T1CON

  movlw	0x0A
  movwf	CCP1CON		; Compare event
  movlw	0x50
  movwf	CCPR1L
  movlw	0x00
  movwf	CCPR1H

  clrf	TMR1L		; Init Timer compare value
  clrf	TMR1H

  bsf	INTCON, PEIE
  bsf	INTCON, GIE


; Init Registers
  clrf	counter


Loop
  incf	counter, f
  movf	counter, w
  movwf	PORTB
  goto	Loop


Timer_ISR
  movwf	_w		; Save registers
  movf	STATUS, w
  movwf	_status

  clrf	TMR1L		; Init Timer compare value
  clrf	TMR1H

  bcf	PIR1, CCP1IF	; Clear the flag

  clrf	counter

  movf	_status, w
  movwf	STATUS
  movf	_w, w
  retfie


  END
