21.12.2013 Views

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!