Vorobo
09.10.2004, 10:35
Hallo Leute,
ich bin neu hier im Forum und vor allem ein Neuling was PICs angeht.
Darum hab ich auch Probleme mit dem folgenden Code:
;************************************************* *************
;*
;* Pinbelegung
;* ----------------------------------
;* PORTA:
;* Pin Funktion
;* 0 Ausgang
;* 1 Ausgang
;* 2 Ausgang
;* 3 Ausgang
;* 4 Ausgang
;* 5 Ausgang
;*
;* PORTB:
;* Pin Funktion
;* 0 Ausgang
;* 1 Ausgang
;* 2 Ausgang
;* 3 Ausgang
;* 4 Ausgang
;* 5 Ausgang
;* 6 Ausgang
;* 7 Ausgang
;*
;* PORTC:
;* NN
;*
;*
;************************************************* *************
; Includedatei für den 16F84 einbinden
list p=16f876
#include <P16f876.INC>
ERRORLEVEL -302 ; SUPPRESS BANK SELECTION MESSAGES
;************************************************* *********
; Variablennamen vergeben
dx EQU 0x20
dy EQU 0x21
org 0 ; Programmstart immer bei 0
goto init ; Init ausführen
;************************************************* *********
; Anfangsinitialisierung
init
CLRF dx ; Schleifenende
CLRF dy ; Schleifenzaehler
MOVLW H'55' ; Schleifenlaenge ins W-Register setzen`
MOVWF dx ; Schleifenlaenge aus W-Register nach dx
BSF STATUS, RP0 ; auf Bank 1 umschalten
BCF STATUS, RP1 ;
MOVLW B'00000000' ; PortA alle output
MOVWF TRISA
MOVLW B'10001111' ; PortA dig output
MOVWF ADCON1
MOVLW B'00000000' ; PortB alle output
MOVWF TRISB
BSF STATUS, RP0 ; auf Bank 0 zurückschalten
BCF STATUS, RP1 ;
CLRF PORTB ; alle Port A Latches ausschalten
CLRF PORTA ; alle Port B Latches ausschalten
;************************************************* *********
; Hauptprogrammschleife
Main
MOVF dx,0 ; lädt Schleifenende
MOVWF dy ; setzt Schleifenzähler
SchleifeBegin
MOVF dy,0 ; hohle Schleifenzähler ins W-Register
NOP
MOVWF PORTA ; W-Register auf PORT A ausgeben
XORLW H'00' ; Komplement bilden
MOVWF PORTB ; Komplement auf PORT B ausgeben
DECF dy,1 ; dy um eins erniedrigen
MOVF dy,1 ; Prüfen auf 0 und Zero-Flag setzen
BNZ SchleifeBegin
NOP ; ende
end
Irgendwie läuft das Alles nicht so richtig!
Könnt ihr mir helfen?
Danke Vinc
ich bin neu hier im Forum und vor allem ein Neuling was PICs angeht.
Darum hab ich auch Probleme mit dem folgenden Code:
;************************************************* *************
;*
;* Pinbelegung
;* ----------------------------------
;* PORTA:
;* Pin Funktion
;* 0 Ausgang
;* 1 Ausgang
;* 2 Ausgang
;* 3 Ausgang
;* 4 Ausgang
;* 5 Ausgang
;*
;* PORTB:
;* Pin Funktion
;* 0 Ausgang
;* 1 Ausgang
;* 2 Ausgang
;* 3 Ausgang
;* 4 Ausgang
;* 5 Ausgang
;* 6 Ausgang
;* 7 Ausgang
;*
;* PORTC:
;* NN
;*
;*
;************************************************* *************
; Includedatei für den 16F84 einbinden
list p=16f876
#include <P16f876.INC>
ERRORLEVEL -302 ; SUPPRESS BANK SELECTION MESSAGES
;************************************************* *********
; Variablennamen vergeben
dx EQU 0x20
dy EQU 0x21
org 0 ; Programmstart immer bei 0
goto init ; Init ausführen
;************************************************* *********
; Anfangsinitialisierung
init
CLRF dx ; Schleifenende
CLRF dy ; Schleifenzaehler
MOVLW H'55' ; Schleifenlaenge ins W-Register setzen`
MOVWF dx ; Schleifenlaenge aus W-Register nach dx
BSF STATUS, RP0 ; auf Bank 1 umschalten
BCF STATUS, RP1 ;
MOVLW B'00000000' ; PortA alle output
MOVWF TRISA
MOVLW B'10001111' ; PortA dig output
MOVWF ADCON1
MOVLW B'00000000' ; PortB alle output
MOVWF TRISB
BSF STATUS, RP0 ; auf Bank 0 zurückschalten
BCF STATUS, RP1 ;
CLRF PORTB ; alle Port A Latches ausschalten
CLRF PORTA ; alle Port B Latches ausschalten
;************************************************* *********
; Hauptprogrammschleife
Main
MOVF dx,0 ; lädt Schleifenende
MOVWF dy ; setzt Schleifenzähler
SchleifeBegin
MOVF dy,0 ; hohle Schleifenzähler ins W-Register
NOP
MOVWF PORTA ; W-Register auf PORT A ausgeben
XORLW H'00' ; Komplement bilden
MOVWF PORTB ; Komplement auf PORT B ausgeben
DECF dy,1 ; dy um eins erniedrigen
MOVF dy,1 ; Prüfen auf 0 und Zero-Flag setzen
BNZ SchleifeBegin
NOP ; ende
end
Irgendwie läuft das Alles nicht so richtig!
Könnt ihr mir helfen?
Danke Vinc