Sari la conținut
ELFORUM - Forumul electronistilor

Cum sa programez un PIC


sofian

Postări Recomandate

Buna ziua.void interrupt(void) { PORTA=0b00000001;... DELAY_MS(100);}

Cum e legat butonul la RB7?Nu stiu daca de aici se trage, da' nu stergi nicaieri informatia despre intreruperea tratata (RBIF in cazul tau).In mod normal rutina ar trebui sa se uite cine a generat intreruperea, sa execute codulnecesar si sa stearga informatia despre intrerupere:
void interrupt(void) {      if(RBIF && RBIE)  //testezi daca intreruperea e de la RB; eventual pentru mai multe butoane testezi si butonul     {         PORTA=0b00000001;         DELAY_MS(100);         PORTA=0b00000000;         DELAY_MS(100);         PORTA=0b00000001;         DELAY_MS(100);         PORTA=0b00000000;         DELAY_MS(100);         PORTA=0b00000001;         DELAY_MS(100);         PORTA=0b00000000;         DELAY_MS(100);         RBIF = 0; //stergi flagul      }}
Mai multe detalii gasesti in data-sheet.
Link spre comentariu
  • Răspunsuri 602
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    54

  • Vlad Mihai

    28

  • bbogdanmircea

    27

  • seichter

    24

Top autori în acest subiect

Imagini postate

Vad ca RBIF nu se face 1 daca apas pe buton.am incercat cu if(RBIE && RBIF ) {} si if(RBIF){} si nu se verifica nici una.Asa scrie si in datasheet despre RBIF "cleared in software" dar nu merge.Schema am simulat-o in PROTEUS .-butonul intre RB7 si + ,LED ul legat direct de uc pe A0...n-a mers-am pus o rezistenta intre RB7 si - astfel incat sa fie pe 0 cand nu apas butonul ...nici asa n-a mers

Link spre comentariu

A0 e, dupa reset, intrare analoga, asa ca daca nU faci A0 I/O digital (CMCON=0x07 parca, verifica in data-sheet la comparator (?)) sunt sanse sa mearga ciudat.Pentru LED in montajul practic/fizic trebuie rezistenta de limitare a curentului, altfel poti avea surprize.In rest, am gresit la sterul RBIF. Ca sa-l stergi trebuie intai sa citesti PORTB (ca sa ai aceeasi stare intre intrare si ce are portul in registii) si duoa aia sa stergi flagul. De ce nu se activeaza intreruperea n-am idee.

This interrupt can wake the device from SLEEP. Theuser, in the interrupt service routine, can clear theinterrupt in the following manner:a) Any read or write of PORTB. This will end themismatch condition.b) Clear flag bit RBIF.A mismatch condition will continue to set flag bit RBIF.Reading PORTB will end the mismatch condition andallow flag bit RBIF to be cleared.

Link spre comentariu

Nu pot sa-mi dau seama de ce nu se face flag-ul acela 1.Am sters if-ul acela si am facut citirea portului inainte de stergerea lui RBIF .. x=PORTB;....RBIF=0; si merge adica nu mai repeta rutina de intrerupere la infinit cum facea inainte.CMCON=0b00000111 nu pare sa aibe efect.Multumesc.

Link spre comentariu

Poti pune o poza cu schema (ceva sa se poata deschide oriunde - jpeg, png, pdf...)?Am vaga senzatie ca la tine cand butonul nu e apasat intrarea e in aer.Ca sa detecteze schimbarea de stare *), o intrare trebuie sa primeasca 2 stari logice distincte si bine definite. Adica sa fie la un potential "in repaus" si la alt potential "activata". La butoane se foloseste de obicei o rezistenta legata intre pin si, sa zicem, VDD (5V) si butonul intre pin si (mai ramane) masa/GND. Cat timp butonul nu e apasata intrarea e trasa de rezistenta la VDD (pull-up), cand apesi butonul (poti pune si 100 nF in paralel cu el) intrarea e pusa la masa.Poti folosi si varianta "inversata" - resitenta spre masa (pull-down) si butonul spre VDD, da' cred ca prima varianta e mai populara (oate si pentru ca la portul B poti activa rezistentele interne de pull-up si economisesti o rezistenta).*) De fapt recomandarea generala e ca nici o intrare de CI sa nu ramana in aer (neconectata). Chiar si intrarile nefolosite e bine sa fie legate la un potential stabil (masa sau VDD).

Link spre comentariu

Dacă am codul sursă, cum îl compilez cu mplab ide pentru un pic16f876A în hex? are cineva timp să îmi explice? mulțumesc!Sau poate îl compilează cineva pentru mine.

Link spre comentariu

Mulțumesc frumos! Codul e pentru un VA metru cu pic 16f876A cred că am ars ADC de la pic din pinul 2 și 3. se poate modifica ca să se folosească ceilalți 2 pini de ADC? 4 pentru măsurare V și 5 pentru măsurare A?

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări