;	gpasm -a inhx8m pwm2.asm
;	Port 2 ON/OFF
;	PWM for servo with interrupt
;	DB Henrik Kressner

processor	10F322
include		p10f322.inc

	__CONFIG _WDTE_OFF & _FOSC_INTOSC

	org	H'00'  	; Reset vector
	goto	init

	org     0x04    ; Interrupt vector
	goto    intr

	org	H'05'
init	movlw   B'00110000'     	; Clock = 1 Mhz
	movwf   OSCCON
	clrf	PORTA
	movlw	B'0000110'
	movwf	WPUA			; Waek Pull Up
	bcf	OPTION_REG, NOT_WPUEN	; Enable WPUA
	bcf	TRISA, RA0		; Servo on RA0
	clrf	ANSELA			; All ports are digital
	movlw	D'78'			; Period = 20 mS
	movwf	PR2			; Configure the Timer2 period
	movlw   D'00000111'     	; Timer2 = on og prescaler = 64
	movwf   T2CON
	movlw	B'11000000'
	movwf	PWM1CON		; Enable PWM Module output1 og pin1
	bcf	PIR1, TMR2IF	; Clear the timer2 interrupt flag
	movlw   B'00000000'
	movwf   PWM1DCL
	movlw   B'11000000'     ; GEI and PEIE
	movwf   INTCON		; Enable interrupt
	bsf     PIE1, TMR2IE
	bcf     PIR1, TMR2IF

run	btfss	PORTA,RA1	; Read RA1
	goto	left
	btfss   PORTA,RA2       ; Read RA2
	goto	right
	movlw   D'6'            ; PulseWidth = 1,5 mS
	movwf   PWM1DCH
	goto 	run

left	movlw   D'8'            ; PulseWidth = 2 mS
	movwf   PWM1DCH
	goto	run

right	movlw   D'4'            ; PulseWidth = 1 mS
        movwf   PWM1DCH
        goto    run

intr	bcf     PIR1, TMR2IF    ; Enable timer2
	RETFIE

	end

