- Messaggi: 105
- Ringraziamenti ricevuti 5
Pulsanti e PIC16F84A
Il mio problema è il seguente sto utilizzando il simulatore PIC Simulator IDE ma questo non prevede dei pulsanti ma solo una tastiera a matrice di cui riporto una foto:
E' possibile adattare questa tastiera al mio scopo settando in qualche modo le varie linee?
Grazie per l'eventuale aiuto.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- mikysmcv
- Autore della discussione
- Premium Member
vado a memoria di quando usavo quel simulatore: dovrebbe esserci "microcontroller view" tra gli strumenti, ti apre l'immagine schematica del pic con tute le porte.
Cliccando su una porta puoi metterla a 0,1 o ad un valore analogico a seconda di com'è impostata.
Matteo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Matteo Garia
- Moderator
- Messaggi: 376
- Ringraziamenti ricevuti 38
Però questo conportamento è un pò anomalo in base al codice, che adesso riporto per chiarezza:
PROCESSOR 16F84
RADIX DEC
INCLUDE "P16F84.INC"
;Setup of PIC configuration flags
;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 0CH
;Reset Vector
;Punto di inizio del programma al reset della CPU
ORG 00H
;Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB
bsf STATUS,RP0
;Definizione delle linee di I/O (0=Uscita, 1=Ingresso)
;Definizione della porta A
movlw 00011111B
movwf TRISA & 7FH
;Definizione della porta B
;Le linee da RB0 a RB3 vengono programmate in uscita per essere collegate ai quattro led
;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate ai quattro pulsanti
movlw 11110000B
movwf TRISB & 7FH
;Commuta sul primo banco dei registri
bcf STATUS,RP0
MainLoop
;Spegne tutti i led
clrf PORTB
;Se e' premuto il pulsante SW1 accende il LED1
btfss PORTB,SW1
bsf PORTB,LED1
;Se e' premuto il pulsante SW2 accende il LED2
btfss PORTB,SW2
bsf PORTB,LED2
;Se e' premuto il pulsante SW3 accende il LED3
btfss PORTB,SW3
bsf PORTB,LED3
;Se e' premuto il pulsante SW4 accende il LED4
btfss PORTB,SW4
bsf PORTB,LED4
goto MainLoop
END
Ad esempio se come nell'immagine seguente:
metto ad ON RB7 il led collegato alla linea 3 non mi si accende più (sullo strumento che riporta gli 8 led) però mi si accende il led collegato alla linea 7.
Non riesco a capire il perchè accade ciò
Si prega Accedi o Crea un account a partecipare alla conversazione.
- mikysmcv
- Autore della discussione
- Premium Member
- Messaggi: 105
- Ringraziamenti ricevuti 5
btfss PORTB,SW4
quando va a controllare il bit 7 trova questo sempre ad 1 per ogni ciclo e quindi salta sempre l'istruzione successiva, ovvero:
bsf PORTB,LED4
la quale dovrebbe far accendere il quarto led.
Fino a questo punto ragiono in modo corretto o sbaglio qualcosa?
Se ciò che ho detto è giusto, non riesco però a capire il perchè si accenda quel led collegato alla linea RB7 in quanto questa è stata settata come ingresso all'inizio del programma, grazie all'istruzione:
movlw 11110000B
movwf TRISB & 7FH
quindi se è un ingresso non si dovrebbe accendere quel led, o mi sbaglio?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- mikysmcv
- Autore della discussione
- Premium Member
- Messaggi: 105
- Ringraziamenti ricevuti 5
mi spiace, in assembler non ti so aiutare, non l'ho mai imparato (pic simulator lo usavo a scuola in basic)
Matteo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Matteo Garia
- Moderator
- Messaggi: 376
- Ringraziamenti ricevuti 38
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.