D.Stolarek
04.10.2004, 10:58
Hi Leute
ich hab da ein Problem in meinem Code.
ich weiss nich wie ich diese schleife richtig machen soll.
ich habe schon vieles versucht nur ich bekomms nich hin, das der dann immer bei 125 anfängt und nich bei 0.
also wenn ihr mir helfen könntet wäre ich euch sehr dankbar
list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
;***** VARIABLE DEFINITIONS *****
w_temp Equ 0x0C ; variable used for context saving
status_temp Equ 0x0D ; variable used for context saving
w_copy Equ 0x20 ; Backup für Akkuregister
s_copy Equ 0x21 ; Backup für Statusregister
T0SC Equ OPTION_REG
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program
;Interrupt routine falls diese mal benötigt wird
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
main
; PortA wird hier initialisiert
BCF STATUS, RP0 ; RP0=0
CLRF PORTA ; Initialisierung von PortA
; durch löschen des Data latches
BSF STATUS, RP0 ; Markiere Bank 1
MOVLW 0x0F ; nutzen für den DatenVerzeichniss
MOVWF TRISA&0x7f ; SET RA<3:0> als Input
; SET RA4 als Output
; PortB wird hier initialisiert
BCF STATUS, RP0 ; RP0=0
CLRF PORTB ; Initialisierung von PortA
; durch löschen des Data latches
BSF STATUS, RP0 ; Markiere Bank 1
MOVLW 0xCF ; nutzen für den DatenVerzeichniss
MOVWF TRISB&0x7f ; SET RA<3:0> als Input
; SET RB<5:4> als Output
; SET RB<7:6> als Output
movwf w_copy ; w retten
swapf STATUS, w ; STATUS retten
movwf s_copy ;
NOCHMAL
BCF STATUS, RP0 ; auf Bank 0 wechseln
MOVLW 0x7D ; 0x83 = 131 ; 0x7D = 125
MOVWF TMR0 ; 131 oder 125 müsste hier drin stehen
MOVLW 1
TIMER
BSF STATUS, RP0 ; auf Bank 1 wechseln
; BCF OPTION_REG&0x7f, T0SE ; bin mir nich sicher ob ichs brauche beim Vorteiler
; Flanke
BSF OPTION_REG&0x7f, T0SE ; hier wird für RA4 die Low Flanke gewählt
MOVF T0SE, F ; hier wird es unter der Speicherzelle gesichert
; movf TMR0, F
; das ist das Timer-Register
; Vorverteiler Aktivieren
BCF OPTION_REG&0x7f, PSA ; hier mit wird der Vorverteiler auf 0 gesetzt und aktiviert
BCF OPTION_REG&0x7f, PS2 ; damit man den vorverteiler auf 16/1 einstellt
BSF OPTION_REG&0x7f, PS1 ; hier wird PS1 auf 1 gesetzt
BSF OPTION_REG&0x7f, PS0 ; hier wird PS0 auf 1 gesetzt
;Timer
;BSF OPTION_REG&0x7f, T0CS ; T0SC wird auf 1 gesetzt damit der Vorverteiler mit benutzt werden kann
BCF OPTION_REG&0x7f, T0CS ; hier wird in der Speicherzelle T0SC die 0 gesetzt
MOVF T0CS, F ; nun wird es unter der Speicherzelle gesichert
NOP
NOP
ADDWF TMR0,W ; +1 ergibt 0x00 in w, wenn TMR0=0xFF
BTFSS STATUS,Z ; Sprung, wenn Z-Flag gesetzt
GOTO TIMER
GOTO NOCHMAL
END
wenn fehler im code sind bitte sagt sie mir und ich versuche es entweder mit euch oder alleine zu lösen.
aber ich bin für alle hilfe dankbar die ihr mir gebt
mit freundlichen grüßen
d.stolarek
ich hab da ein Problem in meinem Code.
ich weiss nich wie ich diese schleife richtig machen soll.
ich habe schon vieles versucht nur ich bekomms nich hin, das der dann immer bei 125 anfängt und nich bei 0.
also wenn ihr mir helfen könntet wäre ich euch sehr dankbar
list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
;***** VARIABLE DEFINITIONS *****
w_temp Equ 0x0C ; variable used for context saving
status_temp Equ 0x0D ; variable used for context saving
w_copy Equ 0x20 ; Backup für Akkuregister
s_copy Equ 0x21 ; Backup für Statusregister
T0SC Equ OPTION_REG
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program
;Interrupt routine falls diese mal benötigt wird
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
main
; PortA wird hier initialisiert
BCF STATUS, RP0 ; RP0=0
CLRF PORTA ; Initialisierung von PortA
; durch löschen des Data latches
BSF STATUS, RP0 ; Markiere Bank 1
MOVLW 0x0F ; nutzen für den DatenVerzeichniss
MOVWF TRISA&0x7f ; SET RA<3:0> als Input
; SET RA4 als Output
; PortB wird hier initialisiert
BCF STATUS, RP0 ; RP0=0
CLRF PORTB ; Initialisierung von PortA
; durch löschen des Data latches
BSF STATUS, RP0 ; Markiere Bank 1
MOVLW 0xCF ; nutzen für den DatenVerzeichniss
MOVWF TRISB&0x7f ; SET RA<3:0> als Input
; SET RB<5:4> als Output
; SET RB<7:6> als Output
movwf w_copy ; w retten
swapf STATUS, w ; STATUS retten
movwf s_copy ;
NOCHMAL
BCF STATUS, RP0 ; auf Bank 0 wechseln
MOVLW 0x7D ; 0x83 = 131 ; 0x7D = 125
MOVWF TMR0 ; 131 oder 125 müsste hier drin stehen
MOVLW 1
TIMER
BSF STATUS, RP0 ; auf Bank 1 wechseln
; BCF OPTION_REG&0x7f, T0SE ; bin mir nich sicher ob ichs brauche beim Vorteiler
; Flanke
BSF OPTION_REG&0x7f, T0SE ; hier wird für RA4 die Low Flanke gewählt
MOVF T0SE, F ; hier wird es unter der Speicherzelle gesichert
; movf TMR0, F
; das ist das Timer-Register
; Vorverteiler Aktivieren
BCF OPTION_REG&0x7f, PSA ; hier mit wird der Vorverteiler auf 0 gesetzt und aktiviert
BCF OPTION_REG&0x7f, PS2 ; damit man den vorverteiler auf 16/1 einstellt
BSF OPTION_REG&0x7f, PS1 ; hier wird PS1 auf 1 gesetzt
BSF OPTION_REG&0x7f, PS0 ; hier wird PS0 auf 1 gesetzt
;Timer
;BSF OPTION_REG&0x7f, T0CS ; T0SC wird auf 1 gesetzt damit der Vorverteiler mit benutzt werden kann
BCF OPTION_REG&0x7f, T0CS ; hier wird in der Speicherzelle T0SC die 0 gesetzt
MOVF T0CS, F ; nun wird es unter der Speicherzelle gesichert
NOP
NOP
ADDWF TMR0,W ; +1 ergibt 0x00 in w, wenn TMR0=0xFF
BTFSS STATUS,Z ; Sprung, wenn Z-Flag gesetzt
GOTO TIMER
GOTO NOCHMAL
END
wenn fehler im code sind bitte sagt sie mir und ich versuche es entweder mit euch oder alleine zu lösen.
aber ich bin für alle hilfe dankbar die ihr mir gebt
mit freundlichen grüßen
d.stolarek