;============================={INFORMATION}==================================
;	File:		pwm_led.asm
;	Project:	Programok/pwm_led
;	Author:		Tamás Nagy
;	Version:	1.00
;	Used PIC:	PIC18F26K80
;****************************************************************************
;============================={DESCRIPTION}==================================
;****************************************************************************
;==========================={SPECIFICATIONS}=================================
;****************************************************************************
;==================={PROCESSOR + INCLUDE + CONFIG}===========================
	#include	<p18f26k80.inc>
;****************************************************************************
;=============================={DEFINITIONS}=================================
;-------------------------------{I/O PORTS}----------------------------------
	cblock 	0x060	; Beginn General Purpose-Register
;-------------------------- counters	
		count1
		count2
		count3
;--------------------------
	endc
;--------------------------
;--- Reset --------------------------------------------------
	org	0x000
	goto	init		; reset -> init
;--------------------------
init	movlw	0x040
	movwf	OSCCON
	clrf	PORTC	
	clrf	LATC
	clrf	TRISC ; all output
	call	pause
	call	set_timer
;-------------------------- 
uu	
	call	pause
	movlw	0x02	; set pwm at 2/256
	movwf	CCPR2L
	call	pause	; wait 126ms
	movlw	0x10
	movwf	CCPR2L	; set pwm at 10/256
	call	pause
	movlw	0x40
	movwf	CCPR2L
	call	pause
	movlw	0x80
	movwf	CCPR2L
	call	pause
	movlw	0xFF	; max. power
	movwf	CCPR2L
	call	pause
	movlw	0x80
	movwf	CCPR2L
	call	pause
	movlw	0x40
	movwf	CCPR2L
	call	pause
	movlw	0x10
	movwf	CCPR2L
	goto	uu	; repeat

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
set_timer
	clrf	T2CON
	clrf	TMR2
	clrf	INTCON
	clrf	PIE1
	clrf	PIR1
	movlw	0xFF
	movwf	PR2 	; compare with 255
	movlw	0x02
	movwf	CCPR2L
	movlw	0x02
	movwf	T2CON	 ; prescaler 1:16 and postscaler 1:1
	movlw	0x3C
	movwf	CCP2CON
	bsf	T2CON,TMR2ON	;turn on timer, see pic16f628 datasheet
	return

;************************************************************************
;     Delay					                                             *
;************************************************************************
pause	movlw	0x02	 ;126 ms	
	movwf	count3
d3	movlw	0x3F	;63 ms
	movwf	count1
d1	movlw	0xFA	; 1ms  
	movwf	count2
d2	nop
	decfsz	count2,F	
	goto	d2		
	decfsz	count1,F	
	goto	d1		
	decfsz	count3,F    
	goto	d3          
	return
;============================================================
	end
;============================================================