Programare PIC16F84.pdf
Programare PIC16F84.pdf
Programare PIC16F84.pdf
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.