Neway Inserito: 23 ottobre 2007 Segnala Share Inserito: 23 ottobre 2007 Vi espongo il problema che devo risolvere: In un pic 12F675 ho l'ADC che mi legge un valore che va da 0 a 1024. Vorrei memorizzarlo nella eeprom interna, ma questa accetta solo 8 bit per cella, pari ad un valore da 0 a 255. dovrei quindi spezzare la variabile in 8 + 2 bit, e poi memorizzare ogni pezzo n una cella di memoria diversa, per poi ricomporre il tutto. Come faccio praticamente a spezzare la suddetta variabile?P.S. Programmo in mikrobasic. GrazieCiaoAdriano Link al commento Condividi su altri siti More sharing options...
Simons Inserita: 23 ottobre 2007 Segnala Share Inserita: 23 ottobre 2007 posso suggerirti come fare ma non il codice perchè uso C.questa sarebbe la routine che ho scritto:permette di scrivere 1 word usando 2 bytes della eeprom interna void write_word(BYTE startaddress, long int data) { write_eeprom(startaddress,*(&data)); write_eeprom(startaddress+1,*(&data+1)); } in pratica memorizza su startaddress il primo byte di data, che sarebbe *(&data) (l'* e la & sono ad uso puntatori) e poi memorizza nell'indirizzo successivo a startaddress il secondo byte di data ovvero *(&data+1) stessa cosa per la lettura: long int read_word(BYTE startaddress) { long int output; *(&output)=read_eeprom(startaddress); *(&output+1)=read_eeprom(startaddress+1); return output; } i passi da seguire sostanzialmente sono questi:per la scrittura (supponendo X il byte di partenza nella eeprom e con Y la variabile da memorizzare):- scrivi su X il byte Y(1)- scrivi su X+1 il byte Y(2)per la lettura (stesse supposizioni ma usando Z come variabile di output)- leggi il byte X contenente Y(1) e mettilo in Z(1)- leggi il byte X+1 contenente Y(2) e mettilo in Z(2)- ritorna il valore Z come word (intero lungo per quanto riguarda il C)spero d'essere stato d'aiuto Link al commento Condividi su altri siti More sharing options...
Neway Inserita: 26 ottobre 2007 Autore Segnala Share Inserita: 26 ottobre 2007 Ho risolto, grazie mille per l'aiuto!!! Link al commento Condividi su altri siti More sharing options...
steven Inserita: 28 ottobre 2007 Segnala Share Inserita: 28 ottobre 2007 SalvePer chi usa l'assembler la risposta è la seguente:;***** SubRoutine Write Eeprom ************************************WriteEeprom go_bank3 btfsc EECON1,WR goto $-1 go_bank0 movf eeprom_adr,w go_bank2 movwf EEADR go_bank0 movf eeprom_data,w go_bank2 movwf EEDATA go_bank3 bcf EECON1,EEPGD bsf EECON1,WREN bcf INTCON,GIE movlw 0x55 movwf EECON2 movlw 0xAA movwf EECON2 bsf EECON1,WR bsf INTCON,GIE bcf EECON1,WREN go_bank0 return*******************************Due Variabili di appoggioeeprom_adreeprom_data*******************************La lettura della analogica restituisce già due variabili separate:ADRESHADRESL Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora