vasile doru Postat Septembrie 19, 2007 Partajează Postat Septembrie 19, 2007 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
lucicop Postat Septembrie 19, 2007 Partajează Postat Septembrie 19, 2007 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
vasile doru Postat Septembrie 20, 2007 Autor Partajează Postat Septembrie 20, 2007 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 Postat Septembrie 24, 2007 Partajează Postat Septembrie 24, 2007 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
MirceaM Postat Noiembrie 7, 2007 Partajează Postat Noiembrie 7, 2007 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
vasile doru Postat Noiembrie 13, 2007 Autor Partajează Postat Noiembrie 13, 2007 Merci pt informatie. Deocamdata am modificat programul si nu mai am nevoie de reset, dar am sa incerc si metoda ta. Cele 2 instructiuni ar fi clear PCLATH si GOTO 0x0000. Link spre comentariu
vasile doru Postat Noiembrie 14, 2007 Autor Partajează Postat Noiembrie 14, 2007 Merge perfect cu instructiunileclear PCLATHgoto 0x0000 Link spre comentariu
Abram Burel Postat Noiembrie 14, 2007 Partajează Postat Noiembrie 14, 2007 In ce limbaj e "clear PCLATH"?Si ce face el in afara de 0 -> PCLATH? Are vreo legatura cu initializarea registrilor la valorile de reset? Link spre comentariu
bogdanm Postat Noiembrie 14, 2007 Partajează Postat Noiembrie 14, 2007 N-are nicio treaba. Daca vreti ca valorile initiale ale registrilor sa arate fix ca in datasheet dupa reinitializare, reset e singura optiune. Link spre comentariu
Abram Burel Postat Noiembrie 15, 2007 Partajează Postat Noiembrie 15, 2007 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
MirceaM Postat Noiembrie 15, 2007 Partajează Postat Noiembrie 15, 2007 Faptul ca la CCS instructiunea mentionata isi face datoria este cert. Adaug ca CCS vers 4.038 (din 2007) este ceva cu totul deosebit. Link spre comentariu
lucicop Postat Noiembrie 16, 2007 Partajează Postat Noiembrie 16, 2007 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
Abram Burel Postat Noiembrie 16, 2007 Partajează Postat Noiembrie 16, 2007 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum