Forum: Mikrocontroller und Digitale Elektronik Frunktioniert das Programm?


von Thom (Gast)


Lesenswert?

Hallo,

da leider mein testboard kaputt ist wollte ich euch fragen ob das 
programm so funktioniert

    list p=16f84A
    #include <p16f84a.inc>
    __config  _PWRTE_ON & _WDT_OFF & _XT_OSC

ZAEHL1  equ 0c        ;Erster Zaehler für Warteschleife
ZAEHL2  equ 0d        ;Zweiter Zaehler für Warteschleife

;******************************************Initialisierung************** 
*************
Org 0

init
    bsf      STATUS, RP0
    movwf    B'00000000'
    movwf    TRISB
    bcf      STATUS, RP0
    clrf    PORTB

;*****************************************Programm********************** 
*************
loop
    bsf      PORTB, 0
    call    Loop1
    bcf      PORTB, 0
    call    Loop1
    goto     loop

Loop1
      decfsz ZAEHL1,1    ;Ziehe 1 ab von 255
    goto Loop1          ;wenn nicht 0, springe zu Loop1
    decfsz ZAEHL2,1   ;Ziehe 1 ab von 255
    goto Loop1
    return

    end

Danke im vorraus

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Dafür gibt es doch Simulatoren.

von Thom (Gast)


Lesenswert?

hab noch nie was mim pic sim gemacht war immer auf atmel

von taugenichts (Gast)


Lesenswert?

>da leider mein testboard kaputt ist wollte ich euch fragen ob das
>programm so funktioniert

Da du nicht schreibst, was das Programm machen soll, kann dir keiner 
sagen, ob es das macht, was du willst. Ich vermute aber, du willst Pin 
B0 toggeln. Das müsste so funktionieren.

Und - wer lehrt eigentlich immer soetwas:

>Org 0

>init
>    bsf      STATUS, RP0
>    movwf    B'00000000'
>    :


Beim PIC16*84* liegen bei

  0x0000 der Reset Vector und bei
  0x0004 der Peripheral Interrupt Vector

Da sollte man aus stiltechnischen Gründen nicht mit dem eigentlichen 
Code beginnen. Besser wäre generell eine Struktur wie:
1
 org  0x00              ; Reset Vector
2
 goto  Reset            ; -> zur Reset Routine
3
4
 org  0x04              ; Peripheral Interrupt Vector
5
 goto  ISR              ; -> zur Interrupt Service Routine
6
7
8
Reset:
9
  abc.....              ; hier irgendwelche initialisierungen
10
  xyz.....              ; hier irgendwelche initialisierungen
11
  :
12
  goto  main            ; und Programm starten
13
14
ISR:
15
  aaa.....              ; Hier die Interrupt Service Routine 
16
  :                     ; (falls Interrupts verwendet werden
17
  retfie                ; und ISR verlassen
18
19
main:
20
  ; hier das Programm beginnen

von taugenichts (Gast)


Lesenswert?

... was übrigens fehlt, ist das Initialisieren der Zählervariablen 
ZAEHL1 und ZAEHL2. Du gehst einfach davon aus, dass der Wert beim 
Programmstart 255(dez) ist - aber ist das denn sichergestellt? Ich 
glaube nicht. Das ist zwar hier, bei diesem Programm nicht besonders 
wichtig, aber du solltest dir angewöhnen, auch bei kleinsten Programmen 
auf solche Sachen zu achten.

von Thom (Gast)


Lesenswert?

sowas lernt man in der Berufsschule :)

Die LED soll blinken am RB0

Danke für eure Tips

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.