Help assembler pic - BaroneRosso.it - Forum Modellismo

Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 20 marzo 09, 15:24   #1 (permalink)  Top
User
 
Data registr.: 20-12-2006
Messaggi: 252
Help assembler pic

Mi arrendo e chiedo lumi!!!

Sono due giorni che tento disperatamente di compilare un programma assembler e non riesco a capire:

ho fatto un primo programmino che legge una tensione, la converte via ADC e visualizza il risultato su una serie di led... fin qui tutto bene... compilato, caricato sul pic (pic16f877a), provato e funziona.

Adesso volevo complicare il programma e per farlo ho la necessita di definire delle variabili e qui mi incarto: uso la direttiva org appropriata, definisco le variabili, poi, altra direttiva org a zero e scrivo il programma ma...

in fase di compilazione mi da degli errori di overwrithing a partire dall'indirizzo della prima variabile... come se le variabili le avesse definite nella program memory e non nel file register... aiuto, aiuto, aiuto

grazie
Milus non è collegato   Rispondi citando
Vecchio 20 marzo 09, 16:57   #2 (permalink)  Top
User
 
Data registr.: 28-05-2005
Residenza: Roma
Messaggi: 660
Org vuol dire origine, per ogni variabile che tu pensi di aver dichiarato con org in realta hai detto al PIC di cominciare a scrivere in quella posizione, le variabili si usano con res:

Variabile res 1

Vuol dire che devi riservare 1 byte alla variabile Variabile (cioè 8 bit).

E poi non devi dare org 0 altrimenti comincia a scrivere il tuo programma nella posizione 0 dove ci sono i registri del PIC, devi scaricarti il datasheet del pic che usi e vedere dove comincia la program memory (mi pare 0x20) allora dai org 0x20 e comincia a scrivere il programma.
SoldatoSemplice non è collegato   Rispondi citando
Vecchio 20 marzo 09, 19:19   #3 (permalink)  Top
User
 
Data registr.: 20-12-2006
Messaggi: 252
Citazione:
Originalmente inviato da SoldatoSemplice Visualizza messaggio
Org vuol dire origine, per ogni variabile che tu pensi di aver dichiarato con org in realta hai detto al PIC di cominciare a scrivere in quella posizione, le variabili si usano con res:

Variabile res 1

Vuol dire che devi riservare 1 byte alla variabile Variabile (cioè 8 bit).

E poi non devi dare org 0 altrimenti comincia a scrivere il tuo programma nella posizione 0 dove ci sono i registri del PIC, devi scaricarti il datasheet del pic che usi e vedere dove comincia la program memory (mi pare 0x20) allora dai org 0x20 e comincia a scrivere il programma.
Intanto grazie per la risposta.
Ma io non ho definito le variabili con org, in pratica questo e' il codice:

PORTB EQU 0x06 ********qui ci sono le varie definizioni
PORTC EQU 0x07 dei nomi mnemonici dei registri
ADCON0 EQU 0x1F
ADRESH EQU 0x1E

__CONFIG 0x3d32 *** imposta configurazione pic

ORG 0x20 ****qui intendo spostarmi per non usare la prima
parte riservata
DH res 1 **** prima variabile
DL res 1 *** seconda variabile

ORG 0x00 ****qui intendo posizionarmi all'inizio della program
memory

****qui inizia il programma
BANKSEL TRISA ; Select TRISA <BANK1> ----seleziona banco 1
;imposta porte input/output
MOVLW B'11111111'
MOVWF TRISA ; Port A = input

Il problema e' che mi riserva le variabili nella program memory
anziche' nel file register... in effetti non capisco come faccia l'assembler
a capire che con il primo org intendo lavoare sulla ram e con il secondo
nella program memory...

Oh, puo darsi che farnetico ma...

Grazie ancora
Milus non è collegato   Rispondi citando
Vecchio 20 marzo 09, 19:28   #4 (permalink)  Top
User
 
L'avatar di marcosinatti
 
Data registr.: 10-06-2007
Residenza: Sansepolcro (Ar)
Messaggi: 1.948
Sono arruginito in assembler, ma io utilizzavo sempre la direttiva EQU invece che RES, con la EQU specifichi propio l'indirizzo di memoria dove mettere la viariabile, così sei sicuro.
Se per dire il pic che usi ha la ram per le variabili che va da 0x20 puoi scrivere

DH equ 0x20
DL equ 0x21

Ricordati che se usi variabili diverse dal banco 0 devi fale lo switch dei bank.

Guida pratica al PIC 16F84 - Memoria RAM/FLASH/EEPROM

EDIT:Avevo sbagliato, ho corretto il messaggio e aggiungo un esempio Guida pratica al PIC 16F84 - Esempio pratico: led lampeggiante

Ultima modifica di marcosinatti : 20 marzo 09 alle ore 19:35
marcosinatti non è collegato   Rispondi citando
Vecchio 20 marzo 09, 21:40   #5 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da Milus Visualizza messaggio
in effetti non capisco come faccia l'assembler
a capire che con il primo org intendo lavoare sulla ram e con il secondo
nella program memory...
In effetti non serve che lo capisca... quando definisci una variabile tu in realtà definisci l'indirizzo (cioè la cella di memoria) della variabile in cui scriverai e leggerai dei valori. Quando usi ad esempio l'istruzione movf xx,w il processore sa che deve prendere il valore contenuto nella locazione xx e metterlo nel registro w. Sono le istruzioni che usi che interpretano il valore come una locazione di memoria o una locazione di programma, non l'assemblatore!
Per definire le variabli hai tanti modi:
definire il valore assoluto di ogni variabile (dici tu dove è la variabile):
1) Dato EQU 0x12 vuol dire che la variabile Dato è nella locazione di memoria (dati) n. 0x12. sistema assolutamente sconsigliato.

2) Definire con ORG 0x0C l'inizio dell'area dati ed elencare le variabili specificando la direttiva RES n che riserva una o più locazioni di memoria
es:
ORG 0x0C ; inizio file register
Dato_1 res 1 ;locazione 0x0C
Dato_2 res 1 ;locazione 0x0D
... ecc. sistema comodo, ma non ottimale

3) Usare le direttive CBlock/endc che definiscono l'area variablili e che permettono di associare il nome delle variabili alle finestre di watch per il debug e permettono di creare una lista di simboli che aiuta nel debug del software. Es.

CBlock 0x0C ;inzio blocco
Dato_1
Dato_2
Dato_3
...
Dato_N
endc

Altro consiglio: invece di ridefinire i registri di sistema, includi il file del processore che stati usando (o quello generico pic.inc nelle ultime versioni) che contiene già tutti i nomi e gli indirizzi corretti dei registri per tutti i pic!

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 23 marzo 09, 11:35   #6 (permalink)  Top
User
 
Data registr.: 20-12-2006
Messaggi: 252
Grazie a tutti: problema risolto.

Studiando approfonditamente le guide di "mplab ide" e "mpasm" si scopre che
la definizione di variabili attraverso RES puo essere fatta solo per aree in 'program memory' (e non so a cosa possa servire) e anche in area 'file register' ma solo se si compila il source direttamente in codice 'absolute' al contrario se vuol generare un codice 'relocatable' o conunque un 'absolute' passando attraverso il linker le variabili devono essere definite con CBLOCK .

Ho provato e cosi' e': dunque mi sembra conveniente usare sempre e solo
CBLOCK

Grazie ancora per i suggerimenti
Milus non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
PIC, LCD & assembler... lorenzobonciani Circuiti Elettronici 3 14 febbraio 08 19:14
Assembler per PIC faustog Circuiti Elettronici 21 16 dicembre 07 23:49
i pic.????????? pilo Circuiti Elettronici 12 24 gennaio 05 19:07
pic Bissi CNC e Stampanti 3D 5 25 maggio 04 09:39
Pic, mio caro Pic.... fai4602 Circuiti Elettronici 7 24 novembre 03 19:34



Tutti gli orari sono GMT +2. Adesso sono le 08:54.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002