001
12.02.2005, 13:35 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
man man man, hab nun rausgefunden wo der fehler lag und hab nun endlich kapiert wie das mit den btfss funktioniert
Code: |
LIST P=PIC16F84A, F=INHX8M
#include <p16F84A.inc>
#define RA0 PORTA,0
#define RB0 PORTB,0 #define RB1 PORTB,1 #define RB2 PORTB,2
__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC
Position equ 0x22 ; Zähler für Position Schlaf equ 0x23 ; Zähler für Warteschleife Schlaf2 equ 0x24 ; Zähler für Warteschleife
;***********************************; ; Programm Beginn ; ;***********************************; org 0x00 goto INIT INIT: org 0x10
bsf STATUS, RP0 ; auf Bank 1 umschalten movlw B'00000000' ; PortA alle Input hier: 1 ist out, 0 ist in movwf TRISA movlw B'00000000' ; PortB alle Output hier: 0 ist out, 1 ist in movwf TRISB bcf STATUS, RP0 ; auf Bank 0 zurückschalten
clrf PORTA clrf PORTB clrf Position
MAIN: btfss RA0 ; Wenn RA0 "aus", goto MAIN goto MAIN
incf Position btfsc Position,2 ; Wenn Bit2 0000 0100 gesetzt clrf Position btfss Position,1 goto CHECK0_1 ; Wenn nicht Bit1 0000 0010 gesetzt CHECK2_3 btfss Position,0 ; Wenn nicht Bit0 0000 0001 gesetzt goto RB1_Act
goto RB2_Act
CHECK0_1: btfss Position,0 goto Aus_Act goto RB0_Act
CONT: call WAIT goto MAIN
;***********************************;
Aus: clrf PORTB return
Aus_Act: call Aus goto CONT
RB0_Act: call Aus bsf RB0 goto CONT
RB1_Act: call Aus bsf RB1 goto CONT RB2_Act: call Aus bsf RB2 goto CONT
WAIT: movlw D'250' movwf Schlaf
WAIT2: movlw .110 movwf Schlaf2 WAIT3: nop nop nop nop nop nop decfsz Schlaf2, F goto WAIT3
decfsz Schlaf, F goto WAIT2 retlw 0
end
|
-- class God : public ChuckNorris { }; |