Newsgroup: it.hobby.elettronica.digitale
Titolo: lettura e scrittura su EEprom PIC- boh!

Dopo aver letto il suo manuale di Sergio Tanzilli ho iniziato a scrivere
piccoli programmi per il PIC 16F84.
Per imparare a gestire correttamente l'area di memoria del PIC ho scritto
un programma (in allegato)
dove vado a scrivere un valore numerico, successivamente vado a leggerlo,
eseguo un operazione
matematica ed in funzione del risultato accendo un led.
Successivamente scrivo sempre su quest'area di memoria un secondo numero.
Ed il programma inizia nuovamente da capo ovvero, va a leggere il numero
precedentemente scritto nella memoria ed essendo quest'ultimo cambiato,
accende un secondo led.
In pratica dovrei ottenere un un multivibratore astabile, si accende un
led e si spegne il secondo e successivamente si accende il secondo e si
spegne il primo.
Il problema è che il programma non va avanti, non gira.
Sarei grato dell'eventuale aiuto fornitomi da parte di qualcuno.
N.b.
Per capire lo stato di avanzamento del programma ho utilizzato altri led,
collegati su altre porte del PIC.Inoltre alcune istruzioni sono
"disabilitate" dal punto e virgola ;  (usate per prove)
doni...@libero.it
Allego programma:
;-------------------------
; MULTIVIBRATORE ASTABILE
; 2003, DONINO
;-------------------------
        PROCESSOR       16F84
        RADIX           DEC
        INCLUDE         "P16F84.INC"
        ERRORLEVEL      -302
        ;SETUP OF PIC CONFIGURATION FLAGS
        ;XT OSCILLATOR
        ;DISABLE WATCH DOG TIMER
        ;ENABLE POWER UP TIMER
        ;DISABLE CODE PROTECT
        __CONFIG        3FF1H
        ORG     0CH
	MINUTI  RES	 1
	SEC	  RES	 1
	  DATO    RES 1
	  COUNT   RES 2
        ;RESET VECTOR
        ;START POINT AT CPU RESET
        ORG     00H
        BSF     STATUS,RP0
        MOVLW   00011100B
        MOVWF   TRISA 
        MOVLW   11110010B
        MOVWF   TRISB 
        BCF     STATUS,RP0
	CLRF	PORTA
      CLRF  PORTB		;PORTA A STATO BASSO 0 TUTTE LE USCITE
	BSF   PORTB,3
	CALL DELAY_1
	CALL MEMO_1
	BCF   PORTB,3
PIPPO
	CALL DELAY_1
	;BCF   STATUS,Z	;METTO A 0 IL BIT Z DI STATUS
	BSF   PORTA,0
	CALL DELAY_1
	CALL	LEGGI		;MEMO CARICATO A 1? (CX)
	BCF   PORTA,0
	;SUBWF DATO, W
	;ANDWF D'1'			; ESEGUO UNA AND TRA W E IL VALORE DECIMALE 1
     	;XORLW D'1'		 ; ESEGUO UN OR ESCLUSIVA TRA W E IL VALORE DECIMALE 1
      ;BTFSS STATUS, Z    ;SE IL RISULTATO VALE 0 ESEGUI L'ISTRUZ. GOTO L2
	MOVWF DATO
	DECFSZ DATO,1
	GOTO	 L1
	GOTO	 L2
L1
        BSF     PORTB,0		;LED SU PIN 6
	  CALL    MEMO_1
        CALL    DELAY_1
	  BCF     PORTB,0		
        GOTO    PIPPO
L2
        BSF     PORTB,2		;LED SU PIN 8
	  CALL    MEMO_0
        CALL    DELAY_1
	  BCF     PORTB,2		
        GOTO    PIPPO
        ;SUBROUTINES
        ;SOFTWARE DELAY
DELAY_1
	CLRF	SEC
	CLRF	MINUTI
	MOVLW 10	; 10SEC. PER TEST
	;MOVLW 60	; 1 MIN.
	MOVWF SEC
DELAY_G
        ; INIZIALIZZA TMR0 PER OTTENERE 250 CONTEGGI PRIMA DI ARRIVARE A
ZERO.
        ; IL REGISTRO TMR0 E' UN REGISTRO AD 8 BIT QUINDI SE VIENE
INCREMENTATO
        ; NUOVAMENTRE QUANDO ARRIVA A 255 RICOMINCIA A CONTARE DA ZERO.
        ; SE LO SI INIZIALIZZA A 6 DOVRA' ESSERE INCREMENTATO 256 - 6 =
250 VOLTE
        ; PRIMA PASSARE PER LO ZERO.
        MOVLW   6
        MOVWF   TMR0
        ; IL REGISTRO COUNT VIENE INIZIALIZZATO A 125 IN QUANTO IL SUO
SCOPO E' FAR
        ; USCIRE IL LOOP
        MOVLW   125
        MOVWF   COUNT
        ;LOOP DI CONTEGGIO
DELAYLOOP
        ;TMR0 VALE 0 ?
        MOVF    TMR0,W
        BTFSS   STATUS,Z
        GOTO    DELAYLOOP       ;NO, ASPETTA...
        MOVLW   6               ;SI, REIMPOSTA TMR0 E CONTROLLA SE
        MOVWF   TMR0            ;E' PASSATO PER 125 VOLTE PER LO ZERO
        DECFSZ  COUNT,1
        GOTO    DELAYLOOP
 
	DECFSZ SEC,F
	GOTO DELAY_G
      RETURN
;***********************MEMO****
MEMO_1
	MOVLW	0
	MOVWF	EEADR
	MOVLW	1
	MOVWF	EEDATA
	BSF	STATUS,RP0
	BCF     INTCON, GIE  ; Disable INTs.
	;BCF EECON1, EEPGD 	;Punta alla memoria
	BSF	EECON1,WREN
	MOVLW 85 
	MOVWF EECON2 		;WRITE 55H (SEQUENZA RICHIESTA)
	MOVLW 170 
	MOVWF EECON2 		;WRITE AAH
	BSF	EECON1,WR
      BSF     INTCON, GIE  ; Enable INTs
CHKWE_1
	BTFSC EECON1,WR         ;WR=0 (SCRITTURA TERMINATA) ?
	GOTO CHKWE_1		;NO: RICONTROLLA
	BCF EECON1, WREN 		;DISABILITA SCRITTURA
	RETURN
MEMO_0
	MOVLW		0
	MOVWF		EEADR
	MOVLW		2
	MOVWF		EEDATA
	BSF		STATUS,RP0
	BCF     INTCON, GIE  ; Disable INTs.
	;BCF EECON1, EEPGD 	;Punta alla memoria
	BSF		EECON1,WREN
	MOVLW 85 
	MOVWF EECON2 		;WRITE 55H (SEQUENZA RICHIESTA)
	MOVLW 170 
	MOVWF EECON2 		;WRITE AAH
	BSF		EECON1,WR
      BSF     INTCON, GIE  ; Enable INTs
CHKWE_0
	BTFSC EECON1,WR         ;WR=0 (SCRITTURA TERMINATA) ?
	GOTO CHKWE_0		;NO: RICONTROLLA
	BCF EECON1, WREN 	;DISABILITA SCRITTURA
	RETURN
LEGGI
	BCF	STATUS,RP0
	MOVLW	0
	MOVWF	EEADR
	BSF	STATUS,RP0
	BSF	EECON1,RD
	BCF	STATUS,RP0
	MOVF	EEDATA,W
	RETURN
END
 
---------------------------------------------------------------------
Questo articolo e` stato inviato via web dal servizio gratuito 
http://www.bismark.it/Newsgroup
 segnala gli abusi ad 
st...@bismark.it

"disabilitate" dal punto e virgola ;  (usate per prove)
bč, visto che hai deciso di investire parte del tuo tempo sul pic,
l'ideale sarebbe imparare ad usare il simulatore su mplab. Un book
mark rende tutto mooolto piů semplice che utilizzare dei led di
segnalazione...
SB
---------------------------------------------------
togli i caratteri accentati per rispondere via mail