list p=16F88, b=8, c= 102, n=71, t=on, st=off, f=inhx32
;******************************************************************
;* *
;* Filename: 16F88 PWM.asm *
;* Author: Mike McLaren, K8LH (k8lh_at_arrl.net) *
;* Date: 20-Jun-05 (last revision 20-Jun-05) *
;* *
;* PWM Test Program *
;* *
;* Using a 16F88 with 20-MHz clock *
;* *
;* *
;* MPLab: 7.11 (tabs=8) *
;* MPAsm: 4.01 *
;* *
;******************************************************************
#include <p16f88.inc>
errorlevel -302
__CONFIG _CONFIG1, _CCP1_RB0&_LVP_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;******************************************************************
;* *
;******************************************************************
org 0x0000
RESET clrf STATUS ; |B0
clrf PORTA ; clear Port A data latches |B0
clrf PORTB ; clear Port B data latches |B0
movlw h'07' ; |B0
movwf CMCON ; turn comparator off |B0
bsf STATUS,RP0 ; select bank 1 |B1
clrf ANSEL ; digital I/O, no ADC pins |B1
clrf TRISA ; port A all outputs |B1
clrf TRISB ; port B all outputs |B1
bcf STATUS,RP0 ; select bank 0 |B0
;
; setup PWM (20-MHz clock)
;
movlw b'00000010' ; |B0
movwf T2CON ; TMR2 prescale:16 (3.2-usecs) |B0
movlw d'010' ; |B0
movwf CCPR1L ; 10% duty cycle? |B0
bsf STATUS,RP0 ; select bank 1 |B1
movlw d'100'-1 ; 100 3.2-usec 'ticks' |B1
movwf PR2 ; Period=320-usecs, Freq=3125-Hz |B1
bcf STATUS,RP0 ; select bank 0 |B0
movlw b'00001100' ; |B0
movwf CCP1CON ; put CCP module in PWM mode |B0
bsf T2CON,TMR2ON ; turn on TMR2 |B0
;
; now test to see if the LED on RB3 is glowing at 10% brightness
;
LOOP goto LOOP ;loop indefinately |B0
;
;******************************************************************
end