You are on page 1of 2

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
errorlevel
__CONFIG
__CONFIG

<p16f88.inc>
-302
_CONFIG1, _CCP1_RB0&_LVP_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
_CONFIG2, _IESO_OFF & _FCMEN_OFF

;******************************************************************
;*
*
;******************************************************************
org
RESET

0x0000

clrf
STATUS
clrf
PORTA
clrf
PORTB
movlw h'07'
movwf CMCON
bsf
STATUS,RP0
clrf
ANSEL
clrf
TRISA
clrf
TRISB
bcf
STATUS,RP0

;
;
;
;
;
;
;
;
;
;

clear Port A data latches


clear Port B data latches
turn comparator off
select bank 1
digital I/O, no ADC pins
port A all outputs
port B all outputs
select bank 0

|B0
|B0
|B0
|B0
|B0
|B1
|B1
|B1
|B1
|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

You might also like