Nastavení vstupních a výstupních pinů u 12F675

Zdravím, předem dotazu upozorňuji, že jsem totální začátečník co se týká programování uP. Učím se na 16F84, ale potřeboval bych jednu aplikaci co jsem vytvořil předělat do levnějšího 12f675, ale vubec se mi nedaří. Nevím totiž jak udělat piny aby byl jeden vstupní (tlačítko) a jeden výstupní (LED). Díval jsem se i do příručky, ale nejsem z ní moc moudrej. Přikládám část kódu. Děkuji za každou cennou radu Filip

[code]
LIST P=12F675
INCLUDE<P12F675.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

#DEFINE SVETLO GPIO, GP0 ;pin7 jako vstup
#DEFINE RELE GPIO, GP1 ;pin6 jako vzstup na rele

cblock
d1
d2
d3
endc

MOVLW 0x07
MOVWF CMCON
BSF STATUS,RP0
MOVLW 0x00
MOVWF ANSEL
BCF STATUS,RP0

;z verze pro 16f84
; BSF STATUS,RP0
; MOVLW B’11111111’
; MOVWF ANSEL
; BCF STATUS,RP0

BCF	RELE

START BTFSS SVETLO ;cekej na svetlo
GOTO $-1
BTFSC SVETLO ;potom cekej na tmu
GOTO $-1
BSF RELE ;sepne rele a ceka několik sekund pak se vraci na START
GOTO cekat



… [/code]

:arrow_right: administrator: přejmenováno z "Nastavení pinu u 12F675"

Musíš nastavit registr TRISIO, tam se určuje, co bude vstup a co výstup.

Mohl bych poprosit ještě o trochu nakopnutí?
Pochopil jsem to s TRISIO nějak takto

BSF STATUS,RP0
MOVLW B’00000001’
MOVWF TRISIO
BCF STATUS,RP0

Děkuji

Jj, to je přesně ono.

Díky zase o krok dále :slight_smile: ještě bych potřeboval vysvětlit
MOVLW B’00000001’ jak mám nastavit ten správný bit (pin7 jako vstupní)? Dik

Takto: MOVLW B’10000000’

**Pamatuj si:
1 = I / IN ( Vstup )
0 = O / OUT ( Výstup ) **

Ale tvůj 12F675 má pouze pin 0-5.

Tak tento kod už mi v simulátoru MPLAB krásně chodí, ale po nahraní do švába to nereaguje :frowning:

LIST P=12F675
	INCLUDE<P12F675.INC>
	__CONFIG _PWRTE_OFF & _BODEN_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

#DEFINE BANK0    BCF   STATUS,5
#DEFINE BANK1    BSF   STATUS,5
#DEFINE	SVETLO	GPIO,0		;pin7 jako vstup
#DEFINE	RELE	GPIO,4		;pin3 jako vystup na rele

cblock
	d1
	d2
	d3
	endc



	BANK1
           CALL       0X3FF ;Nastavi vnitrni oscilator
           MOVWF      OSCCAL
           CLRF       ANSEL 
           MOVLW      B'000001'; GP0 jako vstup
           MOVWF      TRISIO
	BANK0
           MOVLW      0X07
           MOVWF      CMCON  ; vypne komparator
           CLRF       GPIO

	

	BCF	RELE

START	BTFSS	SVETLO  ;cekej na svetlo
	GOTO	$-1
	BTFSC	SVETLO		;potom cekej na tmu
	GOTO	$-1
	BSF		RELE		;sepne rele a ceka několik sekund pak se vraci na START
	GOTO	cekat	

cekat
			;999990 cycles
	movlw	0x07
	movwf	d1
	movlw	0x2F
	movwf	d2
	movlw	0x03
	movwf	d3
cekat_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	cekat_0

			;6 cycles
	goto	$+1
	goto	$+1
	goto	$+1

			;4 cycles (including call)
	return





GOTO	START

	END

První dva “#DEFINE” smaž, to je blbost, stejně jako návěští “BANK1” a “BANK0”. Banky přepínej pomocí volání registru, který chceš nastavit, např. BANKSEL TRISIO, překladač už si sám zjistí, která banka to je. “GOTO cekat” změň na “CALL cekat”, “GOTO START” z konce dej hned za ten CALL. Napiš pak co se stalo.

Edit: Jo, a v “cblock” Ti nějak chybí, odkud se má začít. Proměnné si okomentuj; když je jich jen pár, možná je lepší je deklarovat pomocí EQU.