Interruptroutine = keine Ausgabe

Oskar01

Mitglied
24. März 2008
267
0
16
Köln
Sprachen
  1. Assembler
Hallo,
habe folgendes Prog geladen, wird im Simulator wie Compiler auch ohne Fehlermeldung behandelt, gibt mir aber nichts am Port aus.
Nachdem ich den Handler auf TIFR geändert hatte, wird ohne Error und Warning assembliert, blinkt die LED auch dann im Testlauf, läßt sich durch verschiedene Vorteilerwerte auch in etwa in der Frequenz bestimmen, aber der Studio4-Simulator speichert das Objekt-File nicht ab (Error an Adresse 00000E).

Irgendwie verstehe ich das nicht.

Ist das OVF0addr-Argument wohl nur ein Platzhalter für die "Adresse" oder das Register, das noch durch ein typspezifisches ersetzt werden muß?
Der Interrupt-Impuls (laienhaft ausgedrückt) bzw. der Overflow muß doch irgendwo "rauskommen". Im Simulator sah ich, daß sich das TIFR-Register schön ändert, deswegen habe ich damit mal experimentiert.

Hier das lauffähige Proggi:
PHP:
;  * Test Interruptroutine 
;  * LED  an PortB Bit 01 blinkt mit ca. 5 Hz
;  * CPU Takt 4 MHz , ATMega8515

.nolist
.include "8515def.inc"
.list

.def temp = r16
.def temp1 = r17	
.def led = r18

.equ daten = portb

.org 0x0000

rjmp main

.org TIFR 	; OVF0addr--->bewirkt nichts

rjmp timer0_overflow

main:			; Stapelzeiger - Init

ldi	temp,	low(ramend)
out	SPL,	temp
ldi	temp,	high(ramend)
out	SPH,	temp
			; Port - Init
ldi	temp,	0x01
out	ddrb,	temp
ldi	temp,	0xFF
mov	led,	temp
ldi	temp,	0x05	; Timer 1 Vorteiler 1:1024
out	TCCR0,	temp
ldi	temp,	0x01	; Interruptausgabe mit TOIE0 enablen
out	TIMSK,	temp
sei			; generelle Interruptfreigabe

loop:
rjmp loop

timer0_overflow:

mov	temp1,	led
andi	temp1,	0x01
out	daten,	temp1
com	led		; Zweierkomplement für LED an und aus
reti


Danke schon mal..

Gruß von Oskar01
 
Hallo Oscar,

das kann nicht funktionieren...

Code:
[COLOR=#000000][COLOR=#007700].[/COLOR][COLOR=#0000bb]org TIFR     [/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000bb]OVF0addr[/COLOR][COLOR=#007700]--->[/COLOR][COLOR=#0000bb]bewirkt nichts 
rjmp timer0_overflow 
[/COLOR][/COLOR]
TIFR ist das Timer-Interrupt-Flag-Register und kein Interrupt-Vektor. Die Einsprungadresse des Timer0-Overflow-Interrupts ist beim ATmega8515 0x07. Das Register TIFR ist im IO-Bereich auf der Adresse 0x38, das ist weit ausserhalb aller Interrupteinsprünge.

Richtig müsste es lauten:
Code:
.org 0x07
rjmp timer0_overflow
Grüße,
Dirk
 
Danke...

Hallo Dirk,
es klappt jetzt, es musste auch noch

ldi temp, 0x02 ; Interruptausgabe mit TOIE0 enablen
out TIMSK, temp



heißen.
Danke für den Tip mit der "Einsprungadresse".
Hier jetzt noch der vollständige lauffähige Code:
PHP:
;  * Test Timer-Interruptroutine 
;  * LED  an PortB Bit 01 blinkt mit ca. 5 Hz
;  * CPU Takt 4 MHz , ATMega8515

.nolist
.include "8515def.inc"
.list

.def temp = r16
.def temp1 = r17	

.equ led = portb

.org 0x0000

rjmp Hauptprogramm

.org 0x007

rjmp Timerueberlauf

Hauptprogramm:		; Stapelzeiger - Init

ldi	temp,	low(ramend)
out	SPL,	temp
ldi	temp,	high(ramend)
out	SPH,	temp
;			; Port - Init
ldi	temp,	0x01
out	ddrb,	temp
ldi	temp1,	0x01
out	led,	temp1
ldi	temp,	0x05	; Timer 1 Vorteiler 1:1024
out	TCCR0,	temp
ldi	temp,	0x02	; Interruptausgabe mit TOIE0 enablen
out	TIMSK,	temp
sei			; generelle Interruptfreigabe

Ende:

rjmp Ende

Timerueberlauf:

inc	temp1
andi	temp1, 0x01
out	led, temp1
reti


Schönen Sonntag noch,

Gruß von Oskar01
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)