Newsgroup: it.hobby.elettronica.digitale
Titolo: definire variabile a 1 bit

Salve a tutti!
Domanda da novizio... ho bisogno definire una variabile (R1) lunga1 bit...
da prelevare dalla Variabile USC e avevo pensato di fare come segue:
nell'header mettere:
ORG 32
..........
USC   RES 1
......... e poi definire la variabile in questo modo
#Define R1 USC,0
........
ma quando, per verificare se tutti va bene, inserisco l'istruzione:
movf R1,W
in W mi trovo l'intero valore di USC
e nel listato mi trovo:
000004     823     MOVF 0x23, W
dove 0x23 è l'indirizzo di USC (ci sono altre 3 variabili prima)
Dove Sbaglio?
Grazie Sergio

 in W mi trovo l'intero valore di USC
io ho sempre usato movf con due soli parametri quindi lavorando con l'intero
valore a 8 bit. quando ho bisogno di usare variabili di un bit (anche in C
faccio lo stesso) alloco una variabile da un byte e a livello logico
stabilisco che ogni bit per me rappresenta un'informazione. quindi poi usare
le istruzioni che operano sui bit per estrarre il valore dell'n-esimo bit
(che corrisponde all'n-esima variabile).
Marco

 ha scritto nel messaggio
news:6Mffc.125932$Kc3.4...@twister2.libero.it...


 W = R1 & 0x01;
si, esattamente. intendevo entrambe le soluzioni, ma visto che lui usa l'asm
credo che non abbia poi tante alternative!
ciao,
Marco

 ha scritto nel messaggio
news:CIgfc.126081$Kc3.4...@twister2.libero.it...
[...]


 ha scritto nel messaggio
news:6Mffc.125932$Kc3.4...@twister2.libero.it...


 Sono un pņ cotto. ;)


 ha scritto nel messaggio
news:6jgfc.54090$hc5.2...@news3.tin.it...


 Sono un pò cotto. ;)


 come si fa a definire una variabile di 1 bit...
In assembler non ci sono variabili, ma solo registri e istruzioni che li
maneggiano (interamente o un bit alla volta). Le direttive come RES, EQU,
#DEFINE servono solamente per associare ad essi un nome simbolico comodo da
ricordare, non a definirne il tipo come avviene nei linguaggi ad alto
livello. Il considerare quei registri delle variabili e' una nostra
astrazione funzionale, infatti possiamo considerare 3 registri assieme e
dire che contengono una variabile a 24 bit, come possiamo prendere un
singolo bit di un singolo registro e dire che quel bit e' una variabile
booleana, ma queste distinzioni non fanno parte dell'assembler.
Claudio F

 ha scritto nel messaggio
news:c5k7ja$2jpvd$2...@ID-201124.news.uni-berlin.de...


 (Puoi verificare in fase di debugging).
Sacrosanto: gli ho detto io di scriverci un byte!!! :))))
In realtà volevo scrivere:
#define   BIT0     1
Tutto il resto è valido.
Devo dormire...
Buonanotte! :)
Gabriele

 al byte.
Piccola precisazione, in C puoi definire variabili di tot bit, anche
di uno solo, per mezzo dei bitfield di un record.
Non sono esattamente variabili e ci sono alcune limitazioni,
ma mi pare (non ho qui il libro) che siano previste anche dal
K&R anche se in modo molto superficiale.
In ogni caso sono un modo per gestire variabili di un bit, poiche'
lasci al complilatore il lavoro di usare maschere, and e or.

 :P
A dire il vero io ho appena cominciato... mi è sembrato che i Pic fossero i
più diffusi, e ho optato per quelli...anche in considerazione del possibile
materiale a supporto da recuperare in rete....
In effetti ho visto che hanno una architettura abbastanza diversa dagli
intel ad esempio... e invece mi piacerebbe qualcosa che fosse "comune"...
Proverò a dare una occhiata ainche agli AVR...
Grazie del consiglio
Sergio
Sergio

 decisamente superiore rispetto all'omologo della Microchip. De gustibus...
sottoscrivo pienamente! e anche i compilatori C per gli AVR mi sembrano piů
interessanti dei cugini PIC!
Marco

 #define   BIT0     1
scrivere 1, 0x01, 0b00000001, ecc non fa nessuna differenza per il
compilatore. quando gli fai fare la AND con il registro si tratta di
un'operazione tra 2 registri a 8 bit in sostanza (a livello hardware
insomma, considerando la CPU a 8 bit) e quindi il secondo registro conterrà
quel valore.
Alla fine comunque il codice che hai scritto funziona, per leggere gli altri
bit basta dichiarare
#define BIT1    2
#define BIT2    4
#define BIT3    8
e così via,
oppure, con una macro, si può fare una cosa molto + simpatica:
#define BIT(x)    (1<<x)
Var = R1 & BIT(0);
Poi per scrivere quei bit il disorso è un po' differente, ma si tratta
sempre di lavorare con maschere di bit insomma.
Io personalmente ho avuto finora sempre RAM sufficiente per usare un intero
byte per contenere un valore booleano.
E' un po' uno spreco, ma tutto sommato è meno casinistico e più veloce (sia
scriverlo che eseguirlo).
Ad ogni modo SergioBS aveva chiesto un consiglio in asm... lì conviene usare
le istruzioni che lavorano sui singoli bit, sono fatte proprio per questo.
P.S: anche io preferisco AVR ;)
--
...:::Zmaster:::...
zmaste...@tin.it
www.zmaster.tk

 ha scritto nel messaggio
news:YVvfc.3940$Qc.1...@twister1.libero.it...



Ottimo. Così possiamo scambiare un pò di pareri in futuro. :)
Saluti.
Gabriele.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


secondo me ne vale la pena, qui trovi un sacco di roba 
http://www.avrfreaks.net/
se ti registri puoi scaricare delle applicazioni funzionati, in ASM e
in C
ciao
  Stefano

 ha scritto nel messaggio
news:nd6t70du9185l574o...@4ax.com...



Mi interessa questa cosa.
Forse alludi all'utilizzo delle union?
Se si, sarebbe simpatico scoprire che impatto comportano sia in termini di
dimensioni dell'HEX che di consumo di RAM.


 dove trovo eventualmente un programmatore HW a basso costo..
Qui viene il bello! La programmazione seriale In-Circuit avviene a bassa
tensione, il programmatore č semplicissimo, un solo integrato che fa da
buffer (io una volta siccome ho lasciato in giro il programmatore ho
programmato un micro collegandolo direttamente alla porta parallela O:-).
dai un'occhiata all'AVR ISP che trovi su 
www.lancos.com
 (o .it?)
il mio l'ho fatto direttamente dentro il connettore della porta parallela :)
Niente di piů facile.
--
...:::Zmaster:::...
zmaster.adsl[ANTISPAMSYSTEM]@
tin.it
www.zmaster.tk

 Niente di più facile.


dove trovo eventualmente un programmatore HW a basso costo..
Puoi usare Ponyprog, sul sito ci sono anche gli schemi dei
programmatori e credo che Claudio li possa fornire già montati.
http://www.lancos.com/
ciao
  Stefano

 Ottimo. Così possiamo scambiare un pò di pareri in futuro. :)
Ok! Finalmente spunta fuori qualcuno che usa questi micro :)
--
...:::Zmaster:::...
zmaster.adsl[ANTISPAMSYSTEM]@
tin.it
www.zmaster.tk

 ancora da che parte si tiene in mano il Micro...
beh... programmare un micro senza avere il circuito attorno non ha molto
senso... se ti serve solo per prorammarlo e traferirlo poi sul circuito vero
e proprio allora basta lo stesso farsi un mini circuito dove alimenti i
micro e ci attacchi il connettore di programmazione
Marco

 dimensioni dell'HEX che di consumo di RAM.
Il risparmio di ram e' sicuro, la quantita' di codice dipende
da quanto e' ottimizzante il compilatore, per rendertene
conto devi guardare il listato disassemblato del codice
prodotto.
Comunque ho visto che il compilatore Hi Tech PCC
dispone del tipo bit che probabilmente e' piu' comodo
che usare struct.

 ha scritto nel messaggio
news:n1zfc.127604$Kc3.4...@twister2.libero.it...


 ha scritto nel messaggio
news:dt8t705u4bnh31m67...@4ax.com...


l'header i vari TRISx, flag, fuses, etc....
Ti avevo già suggerito di andare a vedere su 
http://www.avrfreaks.net
puoi scaricare AVRstudio e WinAvr, il complatore GNU, il tutorial per
fare il 'make' e diversi esempi con progettini funzionanti, oltre a
tutti i datasheet Atmel, un forum con molte faq, e tante altre cose.
Puoi guardare anche su 
http://www.riccibitti.com/
 dove trovi progetti
funzionanti anche con AVR e il codice C con gli header e tutto il
resto. In basso a sinistra trovi l'AVR webring, una miniera di siti
con realizzazioni con AVR.
Dovrebbe essere sufficiente per iniziare, forse l'unico vero problema
potrebbe essere il reperimento di qualche campione, perchè dicono che
Atmel non cura molto gli hobbisti, ma io ho visto dei 2313 da un
rivenditore di elettronica.
ciao 
  Stefano
 

 ha scritto nel messaggio
news:9772805m3mvbahijq...@4ax.com...
