PIC 16F886 PORT A mag nicht
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache Assembler  |  Schnittstellen (Assembler)  |  PIC 16F886 PORT A mag nicht « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: PIC 16F886 PORT A mag nicht  (Gelesen 1055 mal)
 
Stephan
Jr. Member
**
Offline Offline

Beiträge: 88


Profil anzeigen
« am: Juli 24, 2010, 20:15:09 »

Ich arbeite mit einem 16F886 und möchte am PORT A, Pin 0 einen Zustand einlesen:

Code:

   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 ???
« Letzte Änderung: Juli 24, 2010, 21:12:48 von Stephan » Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: Juli 25, 2010, 09:41:05 »

Wie sieht die Hardware ?
Zitat
auch dann, wenn ich den Pin RA0 über einen Pullup high lege
Das hört sich so an, also ab der nicht immer da wäre. Das ist schon mal nicht ok.

Aber der Fehler liegt wohl eher daran, dass die ANSEL Register in Bank3 und nicht in Bank1 liegen.

Init for PortA:
Code:
BANKSEL PORTA ;
CLRF PORTA ;Init PORTA
BANKSEL ANSEL ;
CLRF ANSEL ;digital I/O
BANKSEL TRISA ;
MOVLW 01h ;Set RA<0> as input
MOVWF TRISA ;and set RA<7:1> as outputs

Gruß
Stefan
Gespeichert

Stephan
Jr. Member
**
Offline Offline

Beiträge: 88


Profil anzeigen
« Antworten #2 am: Juli 25, 2010, 10:39:57 »

Bingo !
Wer lesen kann ist eindeutig im Vorteil.

Danke. S
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.037 Sekunden mit 18 Zugriffen.
 
Top! Top!