Gast
#3145031
Hallo Community,
ich habe unteres Programm entwickelt/zusammenkopiert für einen AtMega8.
Beim assemblieren kommt aber folgender Fehler:
Error: Overlapping Code-segments :
Start = 0x000E, End = 0x000E, Length = 0x0001
Start = 0x0000, End = 0x001C, Length = 0x001D
Please check your .ORG directives !
Das Problem liegt eindeutig in Zeile 7. (".org 0x000E") Ich habe auch
schon 0x000E durch 0x00E, 0x00e, 0x000e oder durch ADCCaddr ersetzt.
Ergebnislos - immer dieselbe Fehlermeldung.
Kann mir jemand helfen? Das Interrupt-Kapitel im AVR-Tut habe ich mir
schon durchgelesen.
.include "m8def.inc"
.def zero = r18
.def count = r16
.def temp1 = r17
.org 0x000E
rjmp increment
.org 0x0000
rjmp main ; Reset Handler
;
main:
ldi temp1, HIGH(RAMEND)
out SPH, temp1
ldi temp1, LOW(RAMEND)
out SPL, temp1
ldi temp1, $FF
out DDRD, temp1
ldi temp1, 0
loop:
add ZL, temp1 ; und ausgehend vom Tabellenanfang
adc ZH, r18 ; die Adresse des Code Bytes berechnen
lpm ; dieses Code Byte in das Register r0
laden
out PORTD, r0 ; und an die Anzeige ausgeben
rjmp loop
increment:
inc temp1
;
Codes: ; Die Codetabelle für die Ziffern 0
bis 9
; sie regelt, welche Segmente für
eine bestimmte
; Ziffer eingeschaltet werden
müssen
;
.db 0b00000000 ; 0: a, b, c, d, e, f
.db 0b10000000 ; 1: b, c
.db 0b11000000 ; 2: a, b, d, e, g
.db 0b11100000 ; 3: a, b, c, d, g
.db 0b11110000 ; 4: b, c, f, g
.db 0b11111000 ; 5: a, c, d, f, g
.db 0b11111100 ; 6: a, c, d, e, f, g
.db 0b11111110 ; 7: a, b, c
.db 0b01111110 ; 8: a, b, c, d, e, f, g
.db 0b00111110 ; 9: a, b, c, d, f, g
.db 0b00011110
.db 0b00001110
.db 0b00000110
.db 0b00000010
.db 0b00000001