Jump to content
ELFORUM - Forumul electronistilor

Executie linii program in ritmul intreruperilor


Recommended Posts

Hi all!Cum se pot executa instructiunile dintr-un program in ritmul intreruperilor date de TMR0?Spre exemplu urmatoarele instructiuni vreau sa se execute pe rand doar cand apare intreruperea.PORTB = %0000PORTB = %0001PORTB = %0010PORTB = %0100PORTB = %1000

Link to comment
  • Replies 16
  • Created
  • Last Reply

Top Posters In This Topic

Ce vrei sa faci este un fel real-time esalonat in timp. Eu am facut un ceas cu afisare pe 4 digiti 7 segmente si gestionarea timpului in felul acesta. Roman Black a prezentat teoretic si practic cateva variante de real time pe uC. Ideea principala este utilizarea unui contor in cadrul intreruperilor si in programul principal executia conditionata a ceva in functie de valoarea contorului. Insa pentru ce vrei sa faci ma gandesc ca se poate rezolva doar cu rutina de intrerupere cu anumite restrictii.

Link to comment
  • 4 weeks later...

Revin cu o noua intrebare:Se cunosc 8 variabile x0...x7 de tip biteCum pot seta un port la valoarea acestor variabile? De ex PORTB = %x0,x1,...x7 intr-o singura linie de comanda (sau ai multe chiar dar nu atribuind PORTB0= x0, PORTB1 = x1 samnd.)Merci!

Link to comment

Daca inteleg bine, cred ca vrei sa faci ceea ce se cheama in programare citire dintr-un vector. Pentru PIC, cel mai simplu, se poate folosi adresarea indirecta. In doua vorbe... declari variabilele una dupa alta, scri in registrul FSR adresa primei variabile, citesti/scri continutul acesteia din/in INDF, incrementezi FSR, etc... ,cand ajungi la ultima reinitializezi FSR. Pentru mai multe detalii iti recomand cu caldura datasheet-ul. Sper ca asta vrei sa faci....

Link to comment

Salutare.Aveti idee cate linii de cod pot fi scrise maxim in rutina de tratare a unei intreruperi.Am avut o problema de care mi-am dat seama cu mare greutate si stiu ca e din acesta cauza si de asta as vrea sa stiu pe viitor.Mai pe scurt in tratarea intreruperii de la T0 am pus:-sa incrementeze un contorMs-in functie de contorMs sa incrementeze un contorScontor10S=contorS%8Apoi tot in intrerupere afisam pe PORTB 2^contor10S si obtineam frumos pe PORTB un led care se misca frumos...Dupa asta am modificat si am pus pe PORTB un led cu 7 segmenteAm facut o functie led7seg care convertea dintr-un nr de la 0 la 9 in numarul care trebuie trimis pe PORTB ca sa afiseze pe segment...Ei bine din acest moment nu mai mergea nimic.Cu mare greutate dupa multe ore de masurat si chinuiala am luat-o de la capat si mi-am dat seama ca apelarea acestei ultime functii sarea cumva din spatiul alocat intreruperii si bloca tot PIC-ul.Asa ca am lasat in rutina de intreruperea doar calculul ptr ContorMs si ContorS si acum afisarea o fac in main si merge perfect!Asadar aveti idee care sunt limitarile legate de CE si CAT DE MULT COD se poate scrie in rutina de tratare a unei intreruperi?Merci!

Link to comment

O conditie "de baza" este ca durata de executie a codului de tratare a intreruperii sa nu depaseasca timpul pana survine alta intrerupere.... Nu exista limitari (in afara de spatiul de memorie) de genul numarului de linii de cod. Cel mai probabil la tine problema este faptul ca functia de convertire (probabil de genul PC+x) este in alta pagina de memorie fata de instructiunea care o apeleaza. Recomand sa citesti in datasheet mai multe destpre modul de organizare a memoriei la PIC-uri...sau, metoda rapida, sa aduci efectiv functia de conversie mai aproape de apelarea ei.

Link to comment

durata de executie a codului de tratare a intreruperii sa nu depaseasca timpul pana survine alta intrerupere....

Din cate stiu eu, intreruperile sunt dezactivate automat la intrarea in rutina de tratare a intreruperilor. Caz in care nu mai vine alta. Cel putin asa e la 16F627:

When an interrupt is responded to, the GIE is cleared

to disable any further interrupt, the return address is

pushed into the stack and the PC is loaded with 0004h.

 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines