Maskinnära programmering 6B2266
Maskinnära programmering 6B2266
Maskinnära programmering 6B2266
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
PR2-registret<br />
Om oscillatorfrekvensen är 4 MHz och Timer2's prescaler är inställd på 1/4<br />
( T2CON ) så ska periodregistret PR2 således laddas med talet 249.<br />
CCPR 10 bitar<br />
50% Duty-cycle ger:<br />
Enklaste sättet att variera Duty-cycle är nu att skriva tal mellan 0 och 249 till CCPRLregistret.<br />
( Skriver man ett tal i CCPRL-registret som är större än talet i PR2-registret, tex 250,<br />
så upphör PWM-signalen).<br />
Programmet pwm1k62x.c<br />
/* pwm1k62x.c PWM testprogram for 16f628 */<br />
/* PWM frequency = 1000 Hz. PWM DutyCycle = 50%. */<br />
#include "16f628.h"<br />
#pragma config |= 0x3ff0<br />
void main(void)<br />
{<br />
/* Settings CCP1 PWM-mode */<br />
PR2 = 249;<br />
/* 10 bit Duty 0b01111101.0.0 = 500 */<br />
CCPR1L = 0b01111101;<br />
/* CCP1X = 0 CCP1Y = 0 later on */<br />
TRISB.3 = 0; /* CCP1 is output at RB3 ( pin 9 ) */<br />
T2CON = 0b0.0000.1.01;<br />
/* 0, 0000 (1:1 postscale), 1 (TMR2 on), 01 (1:4 prescale) */<br />
CCP1CON = 0b00.0.0.1111;<br />
/* --, 0 (CCP1X), 0 (CCP1Y), 1111 (PWMmode 11xx) */<br />
while(1) nop();<br />
}<br />
39