21.12.2013 Views

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Hur läser/skriver man till 16-bit<br />

"free running" Timer1?<br />

Timer1 är en 16-bitarsräknare. Den måste läsas av som två 8-bitarstal, de 8 mest<br />

signifikanta bitarna TMR1H och de 8 minst signifikana bitarna TMR1L. Detta kan vara<br />

ett problem eftersom Timern kan "slå runt" mellan avläsningarna av 8-bits talen.<br />

Följande kod visar det säkra sättet<br />

( men eventuellt interrupt måste vara avstängt under avläsningen):<br />

long unsigned int time;<br />

unsigned char TEMPH;<br />

unsigned char TEMPL;<br />

TEMPH = TMR1H;<br />

TEMPL = TMR1L;<br />

if (TEMPH == TMR1H) /* Timer1 has not rolled over = good value */<br />

{<br />

time = TEMPH*256;<br />

time += TEMPL;<br />

}<br />

else /* Timer1 has rolled over - no new rollover for some time */<br />

/* read a new good value */<br />

{<br />

time = TMR1H*256;<br />

time += TMR1L;<br />

}<br />

Det kan också vara problematiskt att skriva till en 16-bitarsräknare eftersom det måste<br />

ske som två 8-bitarstal. Detta är det säkra sättet (Interrupt måste vara avstängt under<br />

skrivningen):<br />

TMR1L = 0; /* clear low byte = no rollover for some time */<br />

TMR1H = 12345/256; /* high byte of constant 12345 */<br />

TMR1L = 12345%256; /* low byte of constant 12345 */<br />

Observera att Timer1 ofta används tillsammans med en CCP-enhet. Vid Capture läses<br />

Timer1 av på ett säkert sätt av hårdvaran och resultatet hamnar i registerparet CCPRH<br />

och CCPRL.<br />

long unsigned int time;<br />

time = CCPR1H*256 + CCPR1L<br />

21

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

Saved successfully!

Ooh no, something went wrong!