Ich arbeite mit einem 16F886 und möchte am PORT A, Pin 0 einen Zustand einlesen:
list p=16f886
#include <p16f886.inc>
ERRORLEVEL -302 ; schaltet Bank-Warnungen ab
; CONFIG 16F886
__CONFIG _CONFIG1, _DEBUG_OFF & _CP_OFF & _LVP_OFF & _BOR_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTOSCIO
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
bank0 macro
bcf STATUS, RP0 ; Bank 0
bcf STATUS, RP1
endm
bank1 macro
bsf STATUS, RP0 ; Bank 1
bcf STATUS, RP1
endm
bank2 macro
bcf STATUS, RP0 ; Bank 2
bsf STATUS, RP1
endm
bank3 macro
bsf STATUS, RP0 ; Bank 3
bsf STATUS, RP1
endm
;***********************************************************************
org 0x00
;***********************************************************************
; Initialisierung
init
; Ports
bank1
clrf ANSEL ; Port A digital
clrf ANSELH ; Port B digital
; clrf TRISA ; Port A alle output
clrf TRISB ; Port B alle output
clrf TRISC ; Port C alle output
clrf TRISE ; Port E alle output
bsf TRISA, 0 ; RA0 input für TSIC Daten
bsf TRISC, 3 ; SCL input
bsf TRISC, 4 ; SDA input
bank0
; clrf PORTA ; Ports initialisieren
clrf PORTB
clrf PORTC
clrf PORTE
clrf ADCON0 ; ADC disabled
bank2
clrf CM1CON0 ; Comparator 1 disabled
clrf CM2CON0 ; Comparator 2 disabled
; internen Oscillator einstellen, falls konfiguriert
bank1
movlw B'01100001' ; 4 MHz intern
movwf OSCCON
; Interrupts
bank0
clrf INTCON ; Interrupt disable
bank1
clrf PIE1 ; Interrupt disable
clrf PIE2 ; Interrupt disable
bsf PIE1, TMR1IE ; Timer 1 Interrupt enable
; verschiedenes
bank0
;***********************************************************************
main
btfsc PORTA, 0 ; wenn RA0=0 dann LED aus, wenn RA0=1 dann LED ein
goto set1
set0
bcf PORTB, 0 ; LED aus
goto main
set1
bsf PORTB, 0 ; LED ein
goto main
end
Eigentlich sollte die LED angehen, wenn RA0=1 und die LED ausgehen, wenn RA0=0
Leider ist dies nicht so, die LED ist immer aus, d.h. RA0 wird immer als 0 gelesen, auch dann, wenn ich den Pin RA0 über einen Pullup high lege. Ersetze ich den Befehl btfsc durch btfss ist die LED immer an, was dazu passt. Auch bei den anderen Pins des Port A geht es nicht, an den Ports B und C klappt es dagegen fehlerfrei. Der PIC funktioniert, mit 2 anderen Exemplaren passiert das gleiche.
Hat jemand eine Idee ???