Non sei registrato? Registrati subito cliccando QUI! E goditi tutte le funzionalita' del sito!


Vai al contenuto



Foto

Bsf Portb,0 Perchè Non Va?


  • Per cortesia connettiti per rispondere
8 risposte a questa discussione

#1 Doohan

Doohan

    Utente con >60 post

  • Utenti PLC Forum +
  • StellettaStellettaStelletta
  • 73 messaggi

Inviato 20 maggio 2010 - 23:37

Ciao, ho un problemino con un "nuovo" pic....
Sono i primi tentativi con un PIC16F886, qualcosa non mi torna!! sad.gif

	PROCESSOR	16F886
	RADIX  DEC
	INCLUDE  "P16F886.INC"
;	ERRORLEVEL	-202
;	ERRORLEVEL	-203
;	ERRORLEVEL	-207
;	ERRORLEVEL	-302


	__config	_CONFIG1,0010001111100100B
	__config	_CONFIG2,0011111111111111B


;-------------------------------- REGISTRI SU BANCO 0 --------------------------------

Count0  equ	20h;riservato per delay software
Count1  equ	21h;riservato per delay software
LCDTemp  equ	22h;...
AUX  equ	23h;...


;-------------------------------------------------------------------------------------

	ORG     00h	;Punto di inizio del programma al reset della CPU
	goto	Start

;------------------------------------- INTERRUPTS ------------------------------------

	ORG     04h
	nop
	retfie

;----------------------------------- FINE INTERRUPTS ----------------------------------


;----------------------------- INIZIO PROGRAMMA AL RESET ------------------------------

Start

	bsf	STATUS,RP0;Seleziona Banco 1

	bsf	OSCCON,6
	bsf	OSCCON,5;Oscillatore a 4MHz
	bcf	OSCCON,4

	movlw	B'00000000';Prescaler che divide di 2 volte il clock su Fosc/4, destinazione Timer0, Pull-up abilitati su PortA
	movwf	OPTION_REG


;-------------------------------- DEFINIZIONE PIN I\O ---------------------------------

;PORTA

	movlw	B'00000000'
	movwf	TRISA

;PORTB

	movlw	B'00000000'
	movwf	TRISB

;PORTC
	movlw	B'00001000'
	movwf	TRISC

;PORTE
	movlw	B'00000000'
	movwf	TRISE


	bsf	STATUS,RP1
	bcf	STATUS,RP1;Seleziona Banco 1



;-------------------------------- PROGRAMMA PRINCIPALE ---------------------------------

	bcf	STATUS,RP0;Seleziona Banco 0

	clrf	PORTA
	clrf	PORTB
	clrf	PORTC
	clrf	PORTE
	clrf	AUX

	bsf	PORTB,0
	bsf	PORTB,1
	bsf	PORTB,2
	bsf	PORTB,3
	bsf	PORTB,4
	bsf	PORTB,5
	bsf	PORTB,6
	bsf	PORTB,7

MainLoop
	bsf	PORTC,2
	call	Tempo
	bcf	PORTC,2
	call	Tempo
	goto	MainLoop

;---------------------------------- FINE DEL PROGRAMMA ---------------------------------


;------------------------------------- SUBROUTINES -------------------------------------

Tempo  	;Delay software di 0,1 secondi
	....
	return

;---------------------------------- FINE SUBROUTINES ---------------------------------


	END

Il lampeggio di MainLoop su PORTC,2 lo fa correttamente

la cosa strana sono i comandi:
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
bsf PORTB,3
bsf PORTB,4
bsf PORTB,5
bsf PORTB,6
bsf PORTB,7

Io mi trovo a 5V solo i pin 6 e 7, gli altri sono a massa!! wallbash.gif

se invece sostituisco gli 8 bsf ... con le segunti istruzioni

movlw B'11111111'
movwf PORTB

tutti i pin della porta B sono a Vcc...

Qualcuno sa spiegarmi l'arcano??


#2 giacomo56

giacomo56

    Utente con >150 post

  • Utenti PLC Forum +
  • StellettaStellettaStellettaStelletta
  • 185 messaggi

Inviato 21 maggio 2010 - 13:12

Se non ci sono errori nel programma, è probabile che dipenda da cosa hai collegato alla porta B. Nell'eseguire l'istruzione bsf PORTB,7 il pic legge le tensioni su tutti i piedini, modifica il bit 7 e poi riscrive il byte così modificato sulla porta B. Se per esempio sul pin 0 la tensione è troppo bassa la interpreta come valore basso (anche se l'avevamo messo a 1) e dopo l'istruzione bsf PORTB, 7 ti ritrovi il pin 0 basso.

Ciao

#3 Doohan

Doohan

    Utente con >60 post

  • Utenti PLC Forum +
  • StellettaStellettaStelletta
  • 73 messaggi

Inviato 21 maggio 2010 - 13:28

giacomo56+21/05/2010, 14:12--> (giacomo56 [at] 21/05/2010, 14:12)

-> Se non ci sono errori nel programma, è probabile che dipenda da cosa hai collegato alla porta B. Nell'eseguire l'istruzione bsf PORTB,7 il pic legge le tensioni su tutti i piedini, modifica il bit 7 e poi riscrive il byte così modificato sulla porta B. Se per esempio sul pin 0 la tensione è troppo bassa la interpreta come valore basso (anche se l'avevamo messo a 1) e dopo l'istruzione bsf PORTB, 7 ti ritrovi il pin 0 basso.

Ciao

Grazie per la risposta ma non è così semplice: i pin sono scollegati, li vado solo a misurare con il tester ma 6 su 8 li trovo a massa invece che a Vcc...

se invece uso

movlw B'11111111'
movwf PORTB

funziona correttamente.

In rete ho trovato questo:
http://www.microchip.com/forums/tm.aspx?m=...=1&key=𯑌
quando sono a casa provo ad usare LATB al posto di PORTB...

vi faro' sapere come va!

#4 giacomo56

giacomo56

    Utente con >150 post

  • Utenti PLC Forum +
  • StellettaStellettaStellettaStelletta
  • 185 messaggi

Inviato 21 maggio 2010 - 13:56

Si, allora il problema è un altro. I PIC16F non hanno i registri LAT. Ho visto che sulla porta B ci sono gli ingressi analogici, disabilitali.

Ciao.

#5 Doohan

Doohan

    Utente con >60 post

  • Utenti PLC Forum +
  • StellettaStellettaStelletta
  • 73 messaggi

Inviato 21 maggio 2010 - 14:10

giacomo56+21/05/2010, 14:56--> (giacomo56 [at] 21/05/2010, 14:56)

-> Si, allora il problema è un altro. I PIC16F non hanno i registri LAT. Ho visto che sulla porta B ci sono gli ingressi analogici, disabilitali.

Ciao.

Quella degli ingressi analogici potrebbe essere....

ho guardato il DS.. in effetti i pin "cattivi" sono quelli dove posso avere anche ingressi analogici e al reset i pin vengono configurati come ingressi analogici...

resterebbe la stranezza del compostamento diverso tra il BSF sul singolo bit della porta B e la scrittura con il movlw --> movwf

#6 giacomo56

giacomo56

    Utente con >150 post

  • Utenti PLC Forum +
  • StellettaStellettaStellettaStelletta
  • 185 messaggi

Inviato 21 maggio 2010 - 14:16

Probabilmente legge gli ingressi analogici!

#7 kappa47

kappa47

    Utente con >60 post

  • Utenti PLC Forum +
  • StellettaStellettaStelletta
  • 133 messaggi

Inviato 24 maggio 2010 - 02:03

Prova ad inserire una “nop” dopo ogni “bsf PORTB,x”.
Bye.



#8 accacca

accacca

    Utente con >1600 post

  • Forum Card Member
  • 2216 messaggi

Inviato 24 maggio 2010 - 07:42

Sono ignorante e non so valutare se questo può esserti d'aiuto
ti lascio lo stesso il link
http://www.edaboard....opic160293.html



#9 Doohan

Doohan

    Utente con >60 post

  • Utenti PLC Forum +
  • StellettaStellettaStelletta
  • 73 messaggi

Inviato 24 maggio 2010 - 22:39

Grazie a tutti ragazzi, risolto disabilitando gli ingressi analogici di ANSELH

smile.gif

Ciao