Vai Indietro   PcTuner Forum > Sezione Hardware > Programmazione PIC
Arcade Registrazione Blogs Regolamento Feedback FAQ Lista Utenti Calendario Segna come Letti

Ultimi 5 blog pubblicati su PcTuner Blog
Data Titolo

Rispondi
 
Strumenti Discussione ModalitÓ Visualizzazione
Vecchio 03-04-2007, 19.57.54   #1
Registered User
 

Iscritto da: 03-04-2007
Locazione: Liguria
Messaggi: 18
Feedback: (0)
PIC12F510 accesso alla memoria RAM

Ciao,

Da un p˛ di tempo vi sto leggendo , e sembra finalmente di aver trovato un forum in italiano fatto di cose concrete sulla materia microcontrollori..
Da un po di tempo ho iniziato a programmare in asm i microcontrollori PIC . ho iniziato con un PIC12F510 xche penso sia uno dei meno complicati ( non si direbbe visto che ho un problema )
Con questo micro sto cercando di capire 2 cose : come accedere alla memoria dopo 0x0F e con quale registro setto i pin delle due porte come INP o OUT
Se provo ad assegnare un valore oltre 0x0f, quando simulo non viene assegnato.Guardando il datasheet trovo tre 'aree' general purpose e vedo dal disegno che questo micro ha 2 banchi di memoria.
PerchŔ c'e una netta divisione tra 0xA-0xF e 0x10-0x1F essendo nello stesso banco di memoria (bank 0)?

Avrei 'risolto' il problema seguendo quanto scritto nel datasheet,e cioe caricando l'FSR con 0x10 oppure con BCF FSR,5 ( come suggerito nelle note)
ma non ho capito perche.
Tra l'altro vedo che dop aver caricato l'FSR , d'ora in poi posso continuare ad accedere alle prime locazione di memoria ( 0xA..) e viceversa.
Non ho capito come si usa l'FSR vi posto il listato..
Scusate la lunghezza del post, qualcuno puoi aiutarmi? Gli sarei grato Thank
Codice:
	list      p=12F510                   
	#include "p12F510.inc"      

	__CONFIG   _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC & _IOSCFS_ON



PARK					EQU   .10
SU					  EQU   .11
PARK1					EQU   .11
PARK2					EQU   .12
PARK3					EQU   .13
PARK4					EQU   .14
PARK5					EQU   .15
PARK6					EQU   .16
PARK7					EQU   .17
PARK8					EQU   .18
BYTE					EQU   .19
CONT					EQU   .20

	ORG     0x3FF             ; processor reset vector

; Internal RC calibration value is placed at location 0x3FF by Microchip
; as a movlw k, where the k is a literal value.

	ORG     0x000        
	movwf   OSCCAL       ; update register with factory cal value 



;RAM AZZERATA DA 0X10 A 0X1F

START	
				MOVLW 0x10 			;initialize pointer
				MOVWF FSR 			;to RAM
NEXT
				CLRF INDF 				;clear INDF register
				INCF FSR,F 				;inc pointer
				BTFSC FSR,4 			;all done?
				GOTO NEXT 			;NO, clear next

			        CLRF GPIO
				CLRF C1ON
				MOVLW  B'10110001'   ; AN2-AN0  DIV8  - A/D ACCESO 
				MOVWF ADCON0
				MOVLW B'00101110'    ; PORTE TRIS?
				MOVWF GPIO
				MOVLW .0
				MOVWF OSCCAL        ; TARATURA OSC
				
				BCF FSR,5			
								
				MOVLW .255
				MOVWF BYTE		

MAIN
				BSF ADCON0,2
				BCF ADCON0,3
							
				MOVLW .16
				MOVWF CONT
				
							
WAIT
				DECFSZ  CONT,F		
				GOTO WAIT

				BSF ADCON0,GO
AD									
				BTFSC ADCON0,GO
				GOTO AD
				MOVF ADRES, W 
				MOVWF SU


;TIMER0

				MOVF SU,W						;SU>TMR0?
				ADDWF  BYTE-TMR0,0
				SKPNC
				GOTO GP41	
GP40
				 BCF GPIO,4
GP41
				BSF GPIO,4		

				GOTO MAIN


	END                       ; directive 'end of program'
__________________
MPLAB 7.50

Ultima Modifica di /*FSR*/ : 03-04-2007 20.12.18.
/*FSR*/ Non in Linea   Rispondi Citando
Vecchio 03-04-2007, 21.13.02   #2
Registered User
 

Iscritto da: 29-10-2006
Messaggi: 1,613
Feedback: (0)
Quote:
Originariamente inviato da /*FSR*/
come accedere alla memoria dopo 0x0F
Allo stesso modo con cui accedi agli altri... accedi al primo banco quando FSR<5> è 0, al secondo banco quando è 1
Quote:
e con quale registro setto i pin delle due porte come INP o OUT
Utilizzando l'istruzione tris.
Quote:
Se provo ad assegnare un valore oltre 0x0f, quando simulo non viene assegnato.
Non mi risulta, a quale linea di codice ti riferisci esattamente?
Quote:
Guardando il datasheet trovo tre 'aree' general purpose e vedo dal disegno che questo micro ha 2 banchi di memoria.
Perchè c'e una netta divisione tra 0xA-0xF e 0x10-0x1F essendo nello stesso banco di memoria (bank 0)?
Credo che la linea separi semplicemente la zona che nel secondo banco è solo una "copia" del primo banco.
Quote:
Non ho capito come si usa l'FSR vi posto il listato..
Il registro FSR in sè, serve per l'indirizzamento indiretto, ma il bit 5 serve per selezionare il banco RAM. La parte bassa, sotto 0x0F o 0x2F è sempre accessibile da entrambi i banchi, mentre la parte alta è distinta, quindi a seconda del banco selezionato accedi a locazioni diverse.
__________________
Paolo BB Conte - Utente PIC Dipendente
DEV - L'Elettronica Open Source
Le mie Foto

Ultima Modifica di BitBerzerkir : 03-04-2007 21.17.04.
BitBerzerkir Non in Linea   Rispondi Citando
Vecchio 03-04-2007, 22.03.55   #3
Registered User
 

Iscritto da: 03-04-2007
Locazione: Liguria
Messaggi: 18
Feedback: (0)
Ciao grazie per la risposta

Quote:
Non mi risulta, a quale linea di codice ti riferisci esattamente?
In questa
Quote:
Codice:
                                BCF FSR,5			
								
				MOVLW .255
				MOVWF BYTE
Se elimino 'BCF FSR,5' il registro BYTE non viene caricato a 255

ps:
Come mai non posso ( almeno cosi sembra dalla simulazione ) usare lo status register, bit 5 per cambiare banco di memoria?
Grazie ancora ciao
__________________
MPLAB 7.50
/*FSR*/ Non in Linea   Rispondi Citando
Vecchio 03-04-2007, 22.26.36   #4
Registered User
 

Iscritto da: 29-10-2006
Messaggi: 1,613
Feedback: (0)
Quote:
Originariamente inviato da /*FSR*/
Se elimino 'BCF FSR,5' il registro BYTE non viene caricato a 255
Ci sono soltanto due possibilità, se il bit FSR<5> in quel momento è 1 viene scritto il registro all'indirizzo 0x33, se invece FSR<5> è zero viene scritto il registro 0x13. Quindi in questo caso devi usare bcf perchè alla fine del ciclo precedente questo bit viene settato

Quote:
Come mai non posso ( almeno cosi sembra dalla simulazione ) usare lo status register, bit 5 per cambiare banco di memoria?
Questo bit fa riferimento alle pagine nella memoria programma (non alla RAM), serve quando esegui un salto (goto o call) da una pagina ad un'altra di questa memoria.
__________________
Paolo BB Conte - Utente PIC Dipendente
DEV - L'Elettronica Open Source
Le mie Foto
BitBerzerkir Non in Linea   Rispondi Citando
Vecchio 04-04-2007, 03.01.18   #5
Registered User
 

Iscritto da: 03-04-2007
Locazione: Liguria
Messaggi: 18
Feedback: (0)
Ciao

Quote:
Ci sono soltanto due possibilitÓ, se il bit FSR<5> in quel momento Ŕ 1 viene scritto il registro all'indirizzo 0x33, se invece FSR<5> Ŕ zero viene scritto il registro 0x13. Quindi in questo caso devi usare bcf perchŔ alla fine del ciclo precedente questo bit viene settato
Esatto il bit FSR<5> era settato..

Quote:
Questo bit fa riferimento alle pagine nella memoria programma (non alla RAM), serve quando esegui un salto (goto o call) da una pagina ad un'altra di questa memoria.
Ehm..Esatto in questo PIC si, Page1 e Page0.

In altri PIC come il PIC16F819 , nello STATUS esistono i bit RP0 e RP1 per cambiare banco di memoria RAM, basterebbe ogni volta cambiare banco con RP0 e RP1 cosi da accedere in modo diretto alla locazione interessata, senza usare FSR e INDF dove FSR contiene l'indirizzo e INDF il valore,(cosý mi pare di aver capito)
A questo punto mi chiedo ed Ŕ l'ultima prometto!,
qual'Ŕ il vantaggio di accedere alla memoria con FSR e INDF,forse di non cambiare ogni volta il banco di memoria con RP0 e RP1 nel caso ad esempio volessimo prendere il valore di un registro (GPR) residente in altri banchi o accedere in 'modo incrementale' vedi forse tabelle ecc..?
Grazie per la pazienza, ciao!
__________________
MPLAB 7.50

Ultima Modifica di /*FSR*/ : 04-04-2007 03.13.06.
/*FSR*/ Non in Linea   Rispondi Citando
Vecchio 04-04-2007, 10.10.00   #6
Registered User
 

Iscritto da: 29-10-2006
Messaggi: 1,613
Feedback: (0)
Quote:
Originariamente inviato da /*FSR*/
qual'Ŕ il vantaggio di accedere alla memoria con FSR e INDF,forse di non cambiare ogni volta il banco di memoria con RP0 e RP1 nel caso ad esempio volessimo prendere il valore di un registro (GPR) residente in altri banchi o accedere in 'modo incrementale' vedi forse tabelle ecc..?
Grazie per la pazienza, ciao!
Lo scopo di FSR Ŕ utilizzare l'indirizzamento indiretto, per accedere come dici te a tabelle, a strutture dati ecc.
__________________
Paolo BB Conte - Utente PIC Dipendente
DEV - L'Elettronica Open Source
Le mie Foto
BitBerzerkir Non in Linea   Rispondi Citando
Vecchio 04-04-2007, 12.43.33   #7
Registered User
 

Iscritto da: 03-04-2007
Locazione: Liguria
Messaggi: 18
Feedback: (0)
Ho capito ti ringrazio
__________________
MPLAB 7.50
/*FSR*/ Non in Linea   Rispondi Citando
Rispondi Per le vostre immagini su questo forum potete usare PcTunerUp!
Iscriviti gratuitamente alla nostra newsletter.


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori)
 
Strumenti Discussione
ModalitÓ Visualizzazione

Regole di scrittura
non Puoi inserire messaggi
non Puoi rispondere ai messaggi
non Puoi inviare allegati
non Puoi modificare i tuoi messaggi

codice vB Ŕ Attivo
Smilies Ŕ Attivo
[IMG] il codice Ŕ Attivo
Il codice HTML Ŕ Disattivato
Trackbacks are Disattivato
Pingbacks are Disattivato
Refbacks are Disattivato
Vai al Forum


Tutti gli Orari sono GMT +2. Attualmente sono le 08.02.13.


Powered by vBulletin Versione 3.6.12
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ę 2010 - Master New Media S.r.l. a socio unico - P.I. 02947530784. Tutti i diritti di proprietÓ letteraria e artistica sono riservati- Privacy
www.pctuner.net Ŕ testata telematica registrata presso il Tribunale di Torino, n. 39 del 07.05.2008, Editore Master New Media S.r.l.