Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Assembler » Wiedermal ASM für y-Controller

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.02.2005, 17:32 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Also, ich versuche eine Art "Relais" mit dem Mikrocontroller zu bauen, d.h:

RA0 <- Taster <- Masse
RB0 -> LED -> Strom
RB1 -> LED -> Strom
RB2 -> LED -> Strom

Man soll nun immer wenn man den Taster drückt die LEDS durchschalten:

Aus -> RB0 -> RB1 -> RB2 -> Aus -> ...

nur scheiter ich momentan an den "if"'s

also:


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

;***********************************;
; Programm Beginn                   ;
;***********************************;
          org       0x00
          goto      INIT
  
INIT:     org       0x10

          bsf       STATUS, RP0     ; auf Bank 1 umschalten
          movlw     B'11111111'     ; PortA alle Input
          movwf     TRISA
          movlw     B'00000000'     ; PortB alle Output
          movwf     TRISB
          bcf       STATUS, RP0     ; auf Bank 0 zurückschalten

          clrf      PORTA
          clrf      PORTB
          clrf      Position

MAIN:    
          call       Aus
          
          btfss     RA0                 ; Wie ist das nun? Wenn gesetzt, überspringe goto MAIN?
          goto      MAIN

          ; tja ab hier haperts nun ...
          ; Wenn Position = 1 call RB0_Act
          ; Wenn Position = 2 call RB1_Act
          ; Wenn Position = 3 call RB2_Act
          ; Wenn Position > 3, clrf Position
          
          goto      MAIN
          
  
;***********************************;

Aus:
          clrf      PORTB
          return

RB0_Act:
          bsf      RB0
          return

RB1_Act:
          bsf      RB1
          return
          
RB2_Act:
          bsf      RB2
          return

          end


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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 { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Assembler ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: