Doohan

Bsf Portb,0 Perchè Non Va?

9 messaggi in questa discussione

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??

Condividi questa discussione


Link discussione
Condividi su altri siti

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

Condividi questa discussione


Link discussione
Condividi su altri siti
giacomo56+21/05/2010, 14:12--> (giacomo56 @ 21/05/2010, 14:12)

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=

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.

Condividi questa discussione


Link discussione
Condividi su altri siti
giacomo56+21/05/2010, 14:56--> (giacomo56 @ 21/05/2010, 14:56)

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

Condividi questa discussione


Link discussione
Condividi su altri siti

Probabilmente legge gli ingressi analogici!

Condividi questa discussione


Link discussione
Condividi su altri siti

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

Bye.

Condividi questa discussione


Link discussione
Condividi su altri siti

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

smile.gif

Ciao

Condividi questa discussione


Link discussione
Condividi su altri siti

Registrati o accedi per inserire messaggi

Devi essere un utente registrato per lasciare un messaggio. La registrazione è GRATUITA.

Crea un account

Iscriviti alla nostra comunità. È facile!


Registra un nuovo account

Connettiti

Hai già un account? Connettiti qui


Connettiti adesso