Liebes Forum,
ich habe mich vor ein paar Jahren schon ein bischen mit µC (eigentlich
nur PIC) beschäftigt. Jetzt wollte ich wieder anfangen und habe mir dazu
erst einmal ein kleines Versuchsboard aufgebaut. PORTB ist komplett mit
active-high Schaltern belegt. An PORTD habe ich je nach Jumper eine
7-Segmentanzeige oder 8 LEDs (auch active-high). Das erste Testprogramm
hat einwandfrei funktioniert. Es hat in der main-Schleife einfach PORTB
auf PORTD kopiert.
Der nächste Schritt ist eigentlich kein großer. PORTB wird eingelesen,
die 4 MSB "rausgeundet" und dann das Ergebnis als HEX auf der
7-Segmentanzeige angezeigt.
Ich finde soweit keinen Fehler in meinem Code:
1 | ; Übungsbeispiel Hex-Converter
|
2 | ; PORTB auf 7Segment und in Hex darstellen
|
3 |
|
4 | list p=16f877a
|
5 | include "p16f877a.inc"
|
6 |
|
7 | __CONFIG 0x3F41
|
8 |
|
9 | org 0x00 ; Programmstart (also 0x00)
|
10 | goto init
|
11 |
|
12 | org 0x04 ; Interuptadresse
|
13 |
|
14 | init
|
15 | BCF STATUS, RP1 ;Wechsel auf Bank1 (RP1 = 0, RP0 = 1)
|
16 | BSF STATUS, RP0
|
17 | MOVLW 0xFF ; PORTB Eingang
|
18 | MOVWF TRISB
|
19 | MOVLW 0x00 ;PORTD Ausgang
|
20 | MOVWF TRISD
|
21 |
|
22 | BCF STATUS, RP0 ;Wechsel auf Bank0 (RP1 = 0, RP0 = 0)
|
23 |
|
24 |
|
25 | ; HEX-Zeichen in Speicher schreiben
|
26 | MOVLW 0x3F
|
27 | MOVWF 0x30
|
28 |
|
29 | MOVLW 0x06
|
30 | MOVWF 0x31
|
31 |
|
32 | MOVLW 0x5B
|
33 | MOVWF 0x32
|
34 |
|
35 | MOVLW 0x8F
|
36 | MOVWF 0x33
|
37 |
|
38 | MOVLW 0x66
|
39 | MOVWF 0x34
|
40 |
|
41 | MOVLW 0x6D
|
42 | MOVWF 0x35
|
43 |
|
44 | MOVLW 0x7D
|
45 | MOVWF 0x36
|
46 |
|
47 | MOVLW 0x07
|
48 | MOVWF 0x37
|
49 |
|
50 | MOVLW 0x7F
|
51 | MOVWF 0x38
|
52 |
|
53 | MOVLW 0x67
|
54 | MOVWF 0x39
|
55 |
|
56 | MOVLW 0x77
|
57 | MOVWF 0x3A
|
58 |
|
59 | MOVLW 0x7C
|
60 | MOVWF 0x3B
|
61 |
|
62 | MOVLW 0x39
|
63 | MOVWF 0x3C
|
64 |
|
65 | MOVLW 0x3F
|
66 | MOVWF 0x3D
|
67 |
|
68 | MOVLW 0x79
|
69 | MOVWF 0x3E
|
70 |
|
71 | MOVLW 0x71
|
72 | MOVWF 0x3F
|
73 |
|
74 | main
|
75 |
|
76 | MOVF PORTB, 0
|
77 | ANDLW 0x0F
|
78 | ADDLW 0x30
|
79 | MOVF W, 0
|
80 | MOVWF PORTD
|
81 | goto main
|
82 |
|
83 | END
|
Ich habe NOPs an verschiedenen Stellen versucht. Der µC sollte so weit
in Ordnung sein. Komplett gelöscht hab ich ihn auch dazwischen ein paar
mal.
Einen Schaltplan gibts auf Anfrage gerne auch. Nachdem ich den aber nur
handschriftlich hab, der Fehler vielleicht offensichtlich ist und das
erste Programm bei gleicher Beschaltung funktioniert wollt ich mir
ehrlich gesagt Arbeit ersparen.
Bitte um Ratschläge.