Guten Morgen,
ich eigne mir momentan erste Erfahrungen mit Assembler und
Mikrocontrollern an. Der erste Testaufbau auf Steckboard und die erste
Programmierung hat geklappt, die Schleife für die Verzögerung zur
Visualisierung der blinkenden LED jedoch funktioniert nicht!
Ohne Schleife kann ich mit dem Oszi die HIGH-LOW Wechsel des Ausgangs
beobachten, aber selbst kleinste Schleifen gehen nicht - der Ausgang
bleibt dauerhaft HIGH. Wenn ich die Funktion 'Delay' durch einfache
"nop"s ersetze, dann zeigt mir das, das der Sub-Routinen Aufruf
zumindest schon einmal funktioniert. Muss also irgendwie an dem
Konstrukt ..
1 | Loop1 decfsz COUNT1, 1
|
2 | goto Loop1
|
3 | decfsz COUNT2,1
|
4 | goto Loop1
|
liegen. Ich dachte aber das sollte so funktionieren?
Der Gesamte Code:
1 | ;-----------------------------------------------------------------------
|
2 |
|
3 | LIST P=16F630, R=DEC
|
4 | errorlevel 0 ,-302
|
5 | INCLUDE "P16f630.inc"
|
6 |
|
7 | ;-----------------------------------------------------------------------
|
8 |
|
9 | STATUS equ 0x03 ;Adresse des STATUS-Registers
|
10 | TRISC equ 0x87 ;Adresse des Tristate-Registers für Port A
|
11 | PORTC equ 0x07 ;Adresse Port A
|
12 | COUNT1 equ 0x08 ;Erster Counter für Verzögerung
|
13 | COUNT2 equ 0x09 ;Zweiter Counter für Verzögerung
|
14 |
|
15 | ;-----------------------------------------------------------------------
|
16 | __CONFIG _CP_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _WDT_OFF & _MCLRE_OFF
|
17 |
|
18 | ;-----------------------------------------------------------------------
|
19 |
|
20 | ORG 0x000 ; Reset-Vektor für Prozessor
|
21 |
|
22 | ;****Ports definieren****
|
23 |
|
24 | bcf STATUS,RP0 ;Bank 0
|
25 | clrf PORTC ;Init PORTC
|
26 | bsf STATUS,RP0 ;Wechsel zu Bank 1
|
27 | movlw 0x00 ;Alle Ports als Ausgang
|
28 | movwf TRISC
|
29 | bcf STATUS,RP0 ;Wechsel zu Bank 0
|
30 | movlw 0x01 ;LED on
|
31 |
|
32 | ;****LED ausschalten****
|
33 |
|
34 | START xorwf PORTC,1 ;LED togglen
|
35 |
|
36 | ;****Verzögerung hinzufügen
|
37 |
|
38 | call Delay
|
39 |
|
40 | ;****Jetzt zurück zum START
|
41 |
|
42 | goto START
|
43 |
|
44 | ;****Subroutine
|
45 |
|
46 | Delay
|
47 |
|
48 | Loop1 decfsz COUNT1, 1
|
49 | goto Loop1
|
50 | decfsz COUNT2,1
|
51 | goto Loop1
|
52 |
|
53 | return
|
54 |
|
55 | ;****Ende des Programms
|
56 |
|
57 | end
|
Hat jemand eine Idee?