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.

Det finns flera sätt att avläsa pulsgivaren på. Antingen avsöker man givaren så ofta att<br />

man inte riskerar att missa någon tillståndsändring, eller så låter man alla<br />

tillståndsförändringar generera avbrott, och låter avbrottsrutinen avläsa givaren.<br />

PIC-processorer har en speciell finess. Man kan programera dem att generera avbrott<br />

vid varje förändring på någon av fyra fyra portpinnar RB4 ... RB7. Denna finess<br />

används bland annat till datormöss, som ju har två pulsgivare ( för x-led och y-led )<br />

och därmed fyra signaler.<br />

(Observera! man bör undvika att använda PORTB till något annat om man utnyttjar<br />

denna finess).<br />

Vid avläsningen av givaren ser man till att lagra det föregående tillståndet för att<br />

kunna jämföra detta med det nuvarande tillståndet.<br />

Varje pil i tillståndsdiagrammet består av ett sådant tillståndspar old.new.<br />

Ett enkelt sätt att avläsa givaren är att räkna upp positionen vid pilen 00.01 och ned<br />

positionen vid pilen 01.00. Även om kontakten studsar blir "nettoresultatet" det<br />

rätta, eftersom man ju alltid måste gå den ena vägen en gång mer än den andra för att<br />

byta tillstånd.<br />

Enkoderavläsningsprogram<br />

quad_A och quad_B är bitvariabler för de portpinnar A och B signalen anslutits till.<br />

Det avlästa tillståndet och föregående tillstånd samlas i fyra bitar i variabeln trans<br />

( transition, övergång ). Här får man god användning för att kompilatorn Cc5x har<br />

bitoperationer ( som tillägg till ANSI-C ). Cc5x har även binära konstanter och<br />

eftersom det är tillåtet att att avgränsa grupper av bitar med punkt-tecken så blir det<br />

enkelt och tydligt att ange vilkor för de olika pilarna ( transitions ) i<br />

tillståndsdiagrammet, tex. som if( trans == 0b00.01 ).<br />

8

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

Saved successfully!

Ooh no, something went wrong!