Sari la conținut
ELFORUM - Forumul electronistilor

reset software la PIC


vasile doru

Postări Recomandate

Salut!

Am scris un program (in JAL) pt un PIC16F877 in care la un moment fac resetarea software a PIC-lui prin instructiunea asm goto 0x0000 . Pana aici programul a mers cum am vrut eu, dar de cand am mai adaugat si alte chesti in program nu mai face resetarea (executa incorect programul), cu toate ca procedura de reset a ramas aceeasi.

Este corecta instructiunea asm goto 0x0000 pt asa ceva?

Link spre comentariu
  • Răspunsuri 12
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • vasile doru

    4

  • Abram Burel

    3

  • MirceaM

    2

  • lucicop

    2

Top autori în acest subiect

La adresa 0x0000 se afla vectorul de reset, unde pui un goto catre functia de intrare in program (main - compilatorul pune, daca programezi in C). Facand un goto 0x0000 tu nu faci practic decat sa sari in main(), fara a reseta variabilele si registrii. Pentru reset cel mai sigur e sa activezi watchdog-ul si sa pui un while (1); in program si se va reseta de la watchdog.

Link spre comentariu

Am incercat astfel: PSA = 0 si WDT activat (pt ca folosesc TMR0 in programeste) si cand vreau sa se produca resetarea PSA = 1, dar nu merge, PIC-ul nu functioneaza, cred ca sta in reset.Intrebarea mea este daca PSA = 0 si WDT activat se produce resetarea datorita Watchdog-lui?

Link spre comentariu
Vizitator senoctar

Depinde cui ii este atribuit prescaler-ul.Initial este atribuit la watchdog, deci PSA = 0 va reseta controlerul chiar cu watchdog disabled (daca nu se urmeaza pasii explicati in PICMicro).Totusi nu m-as baza pe aceasta, cu toate ca mie mi-a mers, mai bine dai enable la watchdog si astepti pana la reset.Timerul de la watchdog nu am gasit daca poate fi scris spre esemplu sa il setezi la 255, sa faca reset la instructiunea urmatoare. Nu cred ca are registru asociat.

Link spre comentariu
  • 1 lună mai târziu...

CCS PIC C Compiler are o instructiune numita reset_cpu(); Daca nu ma insel genereaza doar 2 instructiuni elementare, a doua fiind un salt la adresa 0. Reseteaza si variabilele de ram ("It will jump to location 0 on PCB and PCM parts and also reset the registers to power-up state"), e buna de folosit.

Link spre comentariu

Eeei, nu e singura optiune. Daca vrei neaparat ca in afara de initializarea unor valori sa fi sigur ca alti registri se seteaza pe valoarea default, n-ai decat sa consumi cateva instructiuni in care sa "fortezi" aceasta valoare. Oricum nu vei avea de-a face cu toti, ci doar cu cei ce te intereseaza.

Link spre comentariu

Nu ar trebui sa va bazati pe un compilator atunci cand scrieti niste instructiuni. Daca le scrieti direct in assembler, nu vad de ce ar fi diferit de la un compilator la altul. Cum ati verificat ca isi face datoria in fiecare caz ?

Link spre comentariu

Nu exista doua oricare instructiuni de cod assembler pentru PIC 16F877 care combinate sa duca la initializarea registrilor la valorile de cold reset.

Ori compilatorul ala are vreo instructiune care genereaza o secventa de initializare mai ampla (deci nu fix doua), ori e o afirmatie valabila pe cazuri particulare (caz in care cele doua ar putea fi suficiente.

 

Eu as recomanda celor ce au nevoie de un soft reset sa aplice ce am spus in postul anterior: initializati toate registrele cu care lucrati la valorile de care aveti nevoie chiar daca acestea sunt chiar cele de cold reset. Nu cred ca o sa ajungeti din cauza asta in criza de memorie. Sunt alte locuri in care puteti optimiza programul, daca se intampla totusi.

Nu mai zic ca initializarea asta are si un rol "didactic" :)

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