wolf***
31.12.2006, 16:59
Hallo, ich möchte mich erstmal bei allen bedanken, die mir beim DB Assembler Befehl weitergeholfen haben. Es ist ein gutes Gefühl wenn man nicht so allein rumwuselt. Auf der Sprut Seite ist der Befehl DE nicht enthalten. Ich sitze an meinem ersten Programm. Es soll 8 LEDs am Port B steuern. Ich möchte gerne ein binäres Bitmuster im Speicher Ablegen, welches durch indirekte Adressierung die LED Muster zur Anzeige bringt. Mit mehr Erfahrung auch mal eine LED Matrix mit verschiedenen Mustern ansteuern. In meinem jetzigen Programm wird zwar das FSR Register hochgezählt, aber die indirekten Adressierten Speicherwerte werden nicht gefunden. Die erste Frage was mache ich falsch? Wo müssen die binären LED Musterwerte hin, in ein Fileregister oder in den Programmspeicher und wie geht das? Bei meinem Programm landen die Werte im Programmspeicher, kann die indirekte Adressierung hier angewand werden?
Ist der Befehl movfw INDF richtig? Hier das Programm:
list p=16f84a ;PIC type auswählen
;-------------------------------
;Pinbelegung
;Port b0(pin6) LED1
;Port b1(pin7) LED2
;Port b2(pin8) LED3
;Port b3(pin9) LED4
;Port b4(pin10)LED5
;Port b5(pin11)LED6
;-------------------------------
;Droste Ver.1 18.11.2006
;Lauflicht an Port B
;Takt: 4MHz, Quarz
;-------------------------------
;Includedatei für den 16f84 einbinden
#include <P16f84a.INC>
;Configuration festlegen
;4Mhz, Power On Timer, kein Watchdog, Xt-Oszillator
__config _PWRTE_ON & _WDT_OFF & _XT_OSC
;-------------------------------
init
;Variablennamen vergeben
loop equ 0x22
loop2 equ 0x23
;programm
bsf STATUS, RP0 ;zu bank 1
movlw 0x00 ;Port B alles Null
movwf TRISB ;Port B alles Ausgänge
bcf STATUS, RP0 ;zu bank 0
clrf PORTB ;alle LEDs aus
beginn movlw 0x40 ;Zeiger setzen
movwf FSR ;indirekte Adr.
loop3 movfw INDF ;Wert aus Sp.
movwf PORTB ;Wert Out
call Wait
incf FSR,f
movfw FSR
sublw 0x4d
btfsc STATUS,Z
goto beginn
goto loop3
Wait movlw d'250'
movwf loop
wai movlw .110
movwf loop2
wai2 nop
nop
nop
nop
nop
nop
decfsz loop2,f
goto wai2
retlw 0
goto beginn
org 0x40
de b'10001000'
de b'11001100'
de b'11101110'
de b'11111111'
de b'11111110'
de b'11111100'
de b'11111000'
de b'11110000'
de b'11100000'
de b'11000000'
de b'10000000'
de b'00000000'
de b'11111111'
de b'00011000'
end
Ich wünsche allen ein guten Rutsch und ein frohes neues Jahr und möchte mich schon im vorraus für die Hilfe bedanken.
MfG Wolf***[/code]
Ist der Befehl movfw INDF richtig? Hier das Programm:
list p=16f84a ;PIC type auswählen
;-------------------------------
;Pinbelegung
;Port b0(pin6) LED1
;Port b1(pin7) LED2
;Port b2(pin8) LED3
;Port b3(pin9) LED4
;Port b4(pin10)LED5
;Port b5(pin11)LED6
;-------------------------------
;Droste Ver.1 18.11.2006
;Lauflicht an Port B
;Takt: 4MHz, Quarz
;-------------------------------
;Includedatei für den 16f84 einbinden
#include <P16f84a.INC>
;Configuration festlegen
;4Mhz, Power On Timer, kein Watchdog, Xt-Oszillator
__config _PWRTE_ON & _WDT_OFF & _XT_OSC
;-------------------------------
init
;Variablennamen vergeben
loop equ 0x22
loop2 equ 0x23
;programm
bsf STATUS, RP0 ;zu bank 1
movlw 0x00 ;Port B alles Null
movwf TRISB ;Port B alles Ausgänge
bcf STATUS, RP0 ;zu bank 0
clrf PORTB ;alle LEDs aus
beginn movlw 0x40 ;Zeiger setzen
movwf FSR ;indirekte Adr.
loop3 movfw INDF ;Wert aus Sp.
movwf PORTB ;Wert Out
call Wait
incf FSR,f
movfw FSR
sublw 0x4d
btfsc STATUS,Z
goto beginn
goto loop3
Wait movlw d'250'
movwf loop
wai movlw .110
movwf loop2
wai2 nop
nop
nop
nop
nop
nop
decfsz loop2,f
goto wai2
retlw 0
goto beginn
org 0x40
de b'10001000'
de b'11001100'
de b'11101110'
de b'11111111'
de b'11111110'
de b'11111100'
de b'11111000'
de b'11110000'
de b'11100000'
de b'11000000'
de b'10000000'
de b'00000000'
de b'11111111'
de b'00011000'
end
Ich wünsche allen ein guten Rutsch und ein frohes neues Jahr und möchte mich schon im vorraus für die Hilfe bedanken.
MfG Wolf***[/code]