21.07.2013 Views

Programare PIC16F84.pdf

Programare PIC16F84.pdf

Programare PIC16F84.pdf

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

Întreruperile ce rămân nerezolvate şi ce au fost ignorate, sunt procesate când bitul GIE (GIE=1, toate<br />

întreruperile sunt permise) va fi şters. Când i s-a răspuns întreruperii, bitul GIE a fost şters, aşa că orice<br />

întreruperi adiţionale vor fi interzise, adresa de întoarcere a fost trimisă în stivă, iar adresa 0004h a fost scrisă<br />

în contorul programului – numai după aceasta începe răspunsul la o întrerupere! După ce este procesată<br />

întreruperea, bitul a cărui setare a cauzat o întrerupere trebuie şters, sau rutina de întrerupere va fi procesată<br />

automat tot mereu în timpul întoarcerii la programul principal.<br />

Păstrarea conţinutului regiştrilor importanţi<br />

Doar valoarea de întoarcere a contorului programului este înmagazinată într-o stivă în timpul unei întreruperi<br />

(prin valoare de întoarcere a contorului programului înţelegem adresa instrucţiunii ce trebuie executată, dar nu a<br />

fost executată pentru că a avut loc întreruperea). Păstrând doar valoarea contorului programului adesea nu este<br />

suficient. Unii regiştri ce sunt în uz în programul principal pot fi de asemenea în uz în rutina de întrerupere. Dacă<br />

ei nu sunt reţinuţi, programul principal va obţine valori complet diferite în acei regiştri în timpul întoarcerii dintro<br />

rutină de întrerupere, ceea ce va cauza erori în program. Un exemplu de asemenea caz este conţinutul<br />

registrului de lucru W. Dacă presupunem că programul principal a folosit registrul de lucru W pentru unele din<br />

operaţiile sale, şi că a păstrat în el o valoare ce este importantă pentru următoarea instrucţiune, atunci o<br />

întrerupere ce se va întâmpla înainte de acea instrucţiune va schimba valoarea registrului de lucru W, ce va<br />

influenţa direct programul principal.<br />

Procedura de înregistrare de regiştri importanţi înainte de a merge la o rutină de întrerupere se numeşte PUSH,<br />

în timp ce procedura ce aduce valorile înregistrate înapoi, se numeşte POP. PUSH şi POP sunt instrucţiuni ale<br />

altor microcontrolere (Intel), dar sunt atât de larg acceptate că o întreagă operaţie este numită după ele.<br />

PIC16F84 nu are instrucţiuni ca PUSH şi POP, şi ele trebuie să fie programate.

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

Saved successfully!

Ooh no, something went wrong!