PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schleife erstellen mit Assembler



D.Stolarek
04.10.2004, 09: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

05.11.2004, 15:28
Hallo Damian,

BITTE BEACHTE AUCH MEIN POSTING IM PIC-FORUM VOM 04.11.04
http://www.fernando-heitor.de/picforum/viewtopic.php?p=3155#3155

GRUSS
INGO

stegr
05.11.2004, 16:39
@Ingo: gute Idee... =D>

@damian: auch ich hab mal klein mit den pics angefangen... Meine ersten Erfahrungen mit PICs machte in ner Projektarbeit musste ich nen Protokollkonverter für ein I2C-ähnliches Protokoll nach RS232 bauen...
Da hab ich auch erstmal den Wald vor lauter Bäumen nicht gesehen.
Dann hab ich mir mal das Datenblatt durchgelesen (und zwar wirklich das ganze) und mal versucht ein paar LED's blinken zu lassen...
Das hat dann auch nach ner Weile geklappt... (die Fuses waren am Anfang mein Hauptproblem) und ab da an gings dann problemlos...

Nur solltest du dir unbedingt die Sachen durchlesen.

Du sagst, dass du ein Praktikum machst, also bist du da um zu lernen. Das erste, das man in nem Praktikum lernt, ist, dass man nicht nur seine Zeit absitzt, sondern sich auch in der Zeit mit dem Thema beschäftigt. Wenn du als Thema bekommen hast, von einer Funkstrecke den Datenanfang zu detektieren, dann ist das auch das Thema... und wenn mich einer dann davon wegholt, dass ich irgendwas kopieren soll, dann würde ich mal mit meinem Chef reden, denn sowas kann nicht wirklich sein...

Ansonsten würde ich dich bitten nicht von einem Forum zum nächsten zu springen, nur weil die dir gesagt haben, dass du mal was selber erarbeiten sollst.

Sowohl hier wie auch dort helfen dir alle gerne, aber wenn du nicht bereit bist auch selber mal was zu tun, dann kannst du nicht erwarten, dass man dir fertige Lösungen präsentiert.

Ingo wird sich ja jetzt mit dir treffen und ich hoffe, dass du dann etwas daraus gelernt hast.

Wenn du dann noch ein Problem hast, kannst du dich gerne melden, aber bitte stell nicht die gleichen Fragen nochmal, die wir schon beantwortet haben...

MfG
Stefan

PS: mit der Beantwortung deiner Frage warte ich mal dein Treffen mit Ingo ab; und dann sehen wir weiter... ;)