Sari la conținut
ELFORUM - Forumul electronistilor

Eroare la asamblare fisier asm.


Ata

Postări Recomandate

  • Răspunsuri 39
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Ata

    16

  • 10vid

    6

  • Liviu M

    4

  • costi002

    4

Top autori în acest subiect

Nu va merge.Registrul W tot pe 8 biti ramane.Nu am incercat sa inteleg ce face codul ala, dar am inteles ca din tabelul ala se citesc niste valori ptr un delay.Eu as incerca modificarea rutinei de delay in asa fel incat sa nu fie nevoie de valori mai mari de 255, daca precizia ar fi suficienta.Sau un timer.Un link catre proiect nu ar fi rau, sa vedem si noi despre ce e vorba.

Link spre comentariu

@Ashky: sunt curios ce program ai folosit pentru a calcula aceste valori necesare intarzierilor dorite??? Ca eu nu inteleg de ce ai obtinut valori ce depasesc limita de 2^8 cat poate gestiona un registru pe 8 biti.

Link spre comentariu

Era Ata nu Ashky, iar daca te uiti in fisierul atasat pe prima pagina o sa vezi ca o unitate a numerelor alora returnate din map *) "dureaza" ~0,1 ms. Asa ca pentru 39 ms are nevoie de 390.

 

Nu am zis ca merge cu 18Dh, si nici nu este tot una cu 8Dh

N-ai zis, da' in cazul asta chiar este.

Atata timp cat asamblorul retine si lucreaza numai cu 8 biti (cel putin asa zice el in warning), inseamna ca pe al 9-lea (0x100) il arunca. Asa ca desi tu ii spui sa foloseasca 0x18D, el foloseste numai 0x8D.

De-aia ziceam, incearca cu 0x8D si ai sa vezi ca obtii aceleasi rezultate ca si cu 0x18D. Daca am dreptate, atunci te poti juca cu valori in jurul lui 0x8D sa vezi daca obtii ce-ti trebuie.

Sper ca acum am fost mai clar.

 

*) ca intreba cineva mai devreme - din numele variabilelor mie mi se pare ca seamana a harti de control de aprindere la motoare.

Link spre comentariu

E pe lângă subiect, dar Grammar Nazi ar spune următoarele:

Cuvântul "îmi" se scrie întotdeauna legat, niciodată "î-mi".

Exemple:

- "Îmi trebuie", "îmi dă", "îmi merge" şi tot aşa, se scriu fără liniuţă.

- "Vreau să-mi meargă", se scrie cu liniuţă, pentru că vine de la "Vreau să îmi meargă", dar lipseşte litera "î".

Spor la programat!
Link spre comentariu

Da, este un soft pentru aprindere cu avans variabil si depasesc 255 pentru ca am nevoie de extra avans, adica semnalul sa se dea (cam asa ar fi) inainte de a fi primit, deci cu o intarziere sub 360 grade. de aceea ajung la acele valori, 18Dh. 8d, nu imi(imi,imi,imi) da intarzierea de care am nevoie, 39.7mS.

 

http://www.transmic.net/en/home.htm

Softul merge bine, dar cu date pana in 255, aprinderea este construita.

Dar pentru alt motor imi trebuie cu datele de care zic.

Link spre comentariu

Se zice că cel care nu ştie (în cazul de faţă eu), se repede să dea sfaturi, pentru că discuţia i se pare interesantă, iar cel ce ştie nu se bagă, pentru că subiectul discutat nu prezintă interes (el ştie deja). Aşa că iată-mă-s dându-mi cu părerea.

:rade:

 

N-am scris un rând în asamblare pentru PIC-uri, pentru alte tipuri de procesoare, am mai scris câte ceva. Eu înţeleg din fişierul ".txt" ataşat, cam aşa:

Se face o adresare indexată şi, în funcţie de întârzierea dorită, subrutina de temporizare întoarce o constantă, constantă care probabil va fi apoi decrementată sau incrementată într-o buclă - asta n-am mai urmărit, dar aşa ar fi normal să fie - cu scopul obţinerii unei anumite temporizari.

 

Acum, pentru 39.7mS, trebuie să începi să numeri de la 0 toate instrucţiunile de tip retlw care urmează după addwf PCL,1 ; add W + PCL, până ajungi în dreptul celei la care scrie la comentarii 39.7mS (comentariu = tot ce e scris pe acelaşi rând, dar e după semnul punct şi virgulă).

 

În cazul nostru este a 49-a instrucţiune după addwf PCL,1.

Deci, după mine, ar trebui modificat şi în loc de

map   org h'200'      addwf PCL,1		; add W + PCL
să se scrie

map   org h'200'      addwf PCL,49		; add W + PCL
Sintaxa exactă pentru cifra 49 nu o ştiu, dar am vrut să adun 49 în zecimal, NU în hexazecimal (o fi cu punct în faţă sau altfel, habar n-am). Dacă cei de la Microchip au respectat regulile de bun simţ din programare, atunci ar trebui să se scrie doar 49, fără nimic altceva.

 

Am observat că mai e o buclă la adresa 0x300, unde scrie

map2   org h'300'       addwf PCL,1
La fel şi acolo, în loc de cifra 1, ar trebui pus numărul instrucţiunii care corespunde cu temporizarea dorită.

 

Nu mi-am bătut capul cu ce face fiecare buclă şi de ce sunt două.

Ce vreau să subliniez este că nu se pune nicăieri "18Dh". În loc de "1" din "addwf PCL,1" se pune a câta instrucţiune conţine constanta dorită.

Link spre comentariu

Dacă cei de la Microchip au respectat regulile de bun simţ din programare, atunci ar trebui să se scrie doar 49, fără nimic altceva.

Cum s-a mai precizat la inceputul treadului, in functie de ce RADIX ai selectat ca default, cifrele aferente acelui radix le poti scrie goale.Cat despre functionarea programului, n-ai inteles pe deplin, acel tabel e avansul functie de RPM-ul calculat, nicidecum un tabel de transformare al avansului (de ex. avans log functie de avans lin. etc.).Am modificat acel txt, am dublat unitatea de timp a retardului dat de tabel.

asm.txt

Link spre comentariu

Vorbim mâine.

Uită te rog ce am scris referitor la modificarea fişierului txt, pentru că m-ai păcălit, nu ai spus toată povestea...

 

Între timp, m-am uitat peste setul de instrucţiuni de la PIC şi am ajuns la concluzia că ce vrei tu, nu se poate.

Numărul maxim care poate fi scris într-o instrucţiune RETLW k este cuprins între 0 şi 255 zecimal (adică e pe 8 biţi). Tu vrei să bagi în 8 biţi numărul 0x18D (adică 397). Asta nu se poate oricum l-ai scrie, pentru că 397 este mai mare decât 255. Pur şi simplu, nu încape.

 

Am impresia că fişierul pe care l-ai ataşat: viewtopic.php?p=1126734#p1126734 nu este al autorului, e modificat de altcineva, aşa e?

 

Nu am parcurs chiar tot articolul, dar răspunsul la întrebarea ta este ferm. Ce vrei tu, nu se poate. 397 e mai mare decât 255. Nu vei putea asambla niciodată instrucţiunea RETLW 397, indiferent cum o scrii.

 

De fapt, ce vrei să faci/obţii?

Adică, de ce vrei să modifici curba originală?

 

Pune te rog şi un link către fişierul autorului în versiunea originală, fără modificări.

Link spre comentariu

.....Ce vreau să subliniez este că nu se pune nicăieri "18Dh". În loc de "1" din "addwf PCL,1" se pune a câta instrucţiune conţine constanta dorită.

Eu sintaxa asta o interpretez asa:

registrul W se aduna cu registrul PCL iar rezultatul se pune in PCL.Din cate stiu eu 1 inseamna ca rezultatul operatiei se pune in f.

Link spre comentariu

Aseară aveam limbariţă, n-ar fi trebuit să încep să-mi dau cu părerea în necunoştinţă de cauză.De obicei nu fac aşa, dar de data asta am comis-o. :jytuiyu Totuşi, am precizat încă de la primele cuvinte şi repet: nu ştiu asamblare pentru PIC, toate presupunerile au fost făcute după ureche, deci vă rog ignoraţi ce am scris. Probabil că am spus acolo numai tâmpenii :nebunrau: , nu vă bateţi capul cu ele.

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