Vai al contenuto
PLC Forum


Registri Tris/potr Sul Pic 16f84 - Simulazione anomala


scarica

Messaggi consigliati

Salve ragazzi questo è il mio primo post su questa sezione ed avrei bisogno di una spiegazione riguardo la simulazione con MPLAB del sorgente ASM. che più sotto ho riportato

In realtà la prova consiste nel testare il comportamento dei registri TRISA/PORTA TRISB/PORTB

e visualizzare atraverso la WiNDOW dei FSR di MPLAB il cambio di stato dei bit interessati

Quando simulo il progetto attraverso il tasto STEP INTO noto che quando arrivo alla linea

BSF PORTB,LED1 il bit RB0 nel registro PORTB non mi cambia di stato ma rimane al valore 0

IDEM per tutte le altre.

Ho fatto anche altre prove con altri sorgenti ASM sempre orientati a testare le porte

simulando interruttori e LED che si accendono ma ottengo lo stesso comportamento non

corretto in particolar modo sul registro PORTA/B

Sbaglio forse a configurare MPLAB?

Ho commetto un sbaglio di concetto ?

L'esempio che ho riportato è preso da corso di Tanzilli

L'MPLAB che uso è la versione 6.60 utilizzando il simulatore SIM.

Questo che segue è il sorgente.

----------------------------------------------------------------------------------------------------------

processor 16F84

RADIX DEC

INCLUDE "P16F84.INC"

errorlevel -302

;Setup of PIC configuration flag

;XT oscillator

;Disable watch dog timer

;Enable power up timer

;Disable code protect

__config 3FF1H

LED1 EQU 0

LED2 EQU 1

LED3 EQU 2

LED4 EQU 3

SW1 EQU 4

SW2 EQU 5

SW3 EQU 6

SW4 EQU 7

ORG 00H ; Reset Vector (Punto di inizio del programma al reset del Pic)

BSF STATUS,RP0 ; SWICTH BANCO 1

; Definizione delle linee di I/O (0=uscita I=Ingresso)

; Definizione della porta A le linee da RA0 a RA4 vengono programmate in ingresso

MOVLW b'0000'

MOVWF TRISA

;Definizione della porta B le linee da RB0 a RB3 vengono programmate in uscita per essere collegate ai 4 LED.

;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate ai 4 pulsanti

MOVLW b'11111111'

MOVWF TRISB

BCF STATUS,RP0 ; SWICT BANCO 0

MainLoop

;spengi tutti i led

CLRF PORTB

;Se è premuto il pulsante SW1 accende il LED1

BTFSS PORTB,SW1

BSF PORTB,LED1

;Se è premuto il pulsante SW2 accende il LED2

BTFSS PORTB,SW2

BSF PORTB,LED2

;Se è premuto il pulsante SW3 accende il LED3

BTFSS PORTB,SW3

BSF PORTB,LED3

;Se è premuto il pulsante SW4 accende il LED4

BTFSS PORTB,SW4

BSF PORTB,LED4

goto MainLoop

END

-----------------------------------------------------------------------------------

Un saluto a tutti da

Scarica :)

Link al commento
Condividi su altri siti


Ciao!

Io vedo però dal codice che tu hai scritto, che la PORTB è confugurata interamente come ingressi digitali e non come uscite.

(Forse è li l'errore).

Link al commento
Condividi su altri siti

;Definizione della porta B le linee da RB0 a RB3 vengono programmate in uscita per essere collegate ai 4 LED.

;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate ai 4 pulsanti

MOVLW b'11111111'

MOVWF TRISB

Link al commento
Condividi su altri siti

:D esatto ........l'errore è quello da voi segnalato........grazie mille ;)

Ho un'altro quesito da porvi su queste righe di ASM

del tutto inventate riguardanti sempre il comportamento delle porte del PIC

.................

................

BSF STATUS,RP0 ; Select bank 1 (selezione del banco 1)

1) MOVLW 0xFF ;\ 0xFF = 1111 1111 porte B tutte in INPUT

2) MOVWF TRISB ;/

BCF STATUS,RP0 ; Select bank0

3) MOVWF PORTB ; poi le pongo tutte alla stato 1

BSF STATUS,RP0 ; Select bank 1 (selezione del banco 1)

4) MOVLW 0x00 ;\

5) MOVWF TRISB ; Poi le configuro come OUT

................

che senso ha configurare una porta (nell'esempio la B) in INPUT righe 1) e 2)

e poi mettere i pin tutti alla stato 1 riga 3)

Di fatto simulando queste righe di programma con MPLAB se il registro PORTB

valeva 0x00, quando arrivo alla riga 3) non mi cambia nel valore 0xFF ma rinane

inchiodato a 0X00. Solo quando eseguo le righe 4) e 5) allora vedo cambiare contemporaneamente

anche il registro PORTB a 0xFF

Questo comportamento è conseguenza della presenza del Data-Latch implementato su ogni bit del registro PORTB che memorizza

ogni transizione di stato di tali bit?

Il valore che si vuole scrivere sul registro PORTB con la 3) rimane memorizzato su questo D-LACH lungo 8bit per poi essere

successivamente scritto quando la configurazione di TRISB è coerente (OUT riga 5)?

Scusate per tutto questo giro di parole ma non trovavo altro modo di porre il problema.

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...