Hallo Leute, ich habe Probleme mit der Timeraktiverung. Im folgenden ASM-Code möchte ich den Timer0 benutzen. Bei der Simulation im AVR-Studio wird der Interrupt auch ausgelöst (alle 17.54ms). Dadurch wird die "Count"-Variable hochgezählt die, wenn sie gleich NULL ist, den TONLOOP abbricht. Normalerweise sollte der Ton an PortB ca. 4,3 sec anstehen. Wie gesagt im AVR-Studio funktionierts aber auf dem STK500 ist der Ton, bzw. eine Ausgabe auf PORTB nur so lange aktiv, wie eine Taste betätigt wird. Auch mit anderen Testprogrammen hatte ich mit der Timerfunktion noch kein Glück. Kann mit jemand von Euch sagen wo der Fehler liegt? Vielen Dank Gruß Boris TCCR0 = 0x05 -> 128us bei 8MHz TIMSK = 0x02 -> Interrupt enable TCNT0 = 0x77 -> Offset, ergibt Interruptzeit von 17.54ms ;*** STK500 LEDS and SWITCH demo .include "8515def.inc" .def Temp = r21 ;temp reg .def Delay = r17 ;delay var 1 .def Delay2 = r18 ;delay var 2 .def Count = r19 .def Null = r20 ;presel = 5 .equ PRE_SEL = 0x05 ;prescale select Timer0 CK/1024 ;128us bei 8Mhz ; 102,4us bei 10MHz .equ TC0_IE = 0x02 ;Bit 1 TIMSK Interrupt enable .equ OFFSE_TC = 0x77 ;offset = 119 d.h. noch 137 zyklen -> 17,536ms x 4 = 70ms ; 137x128us = 17,536ms einstellungen für 8MHz .org $0000 rjmp RESET ;Reset handler .org OVF0addr rjmp tim0_ovf ;Timer0 overflow handler ;**** Init RESET: ldi r16, RAMEND out SPL, r16 ; setup stack pointer sei ser Temp out DDRB,Temp clr Null ldi Count,0x01 ldi r31,high(sinu + 0x0200) ;Setup Z pointer High ldi r30,low(sinu + 0x0200) ;Setup Z pointer low ; clear accumulator ldi r29,0x00 ldi r28,0x00 ; init add register ldi r24, 0x00 ;Frequenz einstellen ldi r25, 0x00 ; Ton 1 = 0x56d6 1060Hz ok, ldi r26, 0x00 ;wird für den Frequenzbereich der ldi temp,PRE_SEL out TCCR0,temp ;interruptzeit einstellen ldi temp,OFFSE_TC out TCNT0,temp ;Offset für timer ldi Count, 0xfa ;Offset Counter ;**** LOOP: ; out PORTB,Temp sbis PIND,0x00 ;if portd pin0 = 0 rcall SETT0 sbis PIND,0x01 ;if portd, pin1 = 0 rcall SETT1 sbis PIND,0x02 rcall SETT2 sbis PIND,0x03 rcall SETT3 sbis PIND,0x04 rcall SETT4 sbis PIND,0x05 rcall SETT5 sbis PIND,0x06 rcall SETT6 ;rcall TONLOOP ;Ton Ausführen ;wait DLY: dec Delay brne DLY dec Delay2 brne DLY rjmp LOOP ;repeat loop forever SETT0: ; ldi Temp,0x01 ; out PORTB,Temp ;time interrupt enable ldi temp,TC0_IE out TIMSK,temp ;TOIE0 bit 1 setzen ldi r24, 0xd6 ;Frequenz einstellen ldi r25, 0x56 ; Ton 1 = 0x56d6 1060Hz ok, rcall TONLOOP clr temp out TIMSK,temp ;disable Timer ret SETT1: ; ldi Temp,0x02 ; out PORTB,Temp ;time interrupt enable ldi temp,TC0_IE out TIMSK,temp ;TOIE0 bit 1 setzen ldi r24, 0x07 ;Frequenz einstellen ldi r25, 0x5f ; Ton 1 = 0x56d6 1060Hz ok, rcall TONLOOP clr temp out TIMSK,temp ;disable Timer ret SETT2: ; ldi Temp,0x04 ; out PORTB,Temp ;time interrupt enable ldi temp,TC0_IE out TIMSK,temp ;TOIE0 bit 1 setzen ldi r24, 0x0a ;Frequenz einstellen ldi r25, 0x68 ; Ton 1 = 0x56d6 1060Hz ok, rcall TONLOOP clr temp out TIMSK,temp ;disable Timer ret SETT3: ; ldi Temp,0x08 ; out PORTB,Temp ;time interrupt enable ldi temp,TC0_IE out TIMSK,temp ;TOIE0 bit 1 setzen ldi r24, 0xce ;Frequenz einstellen ldi r25, 0x88 ; Ton 1 = 0x56d6 1060Hz ok, rcall TONLOOP clr temp out TIMSK,temp ;disable Timer ret SETT4: ; ldi Temp,0x0f ; out PORTB,Temp ;time interrupt enable ldi temp,TC0_IE out TIMSK,temp ;TOIE0 bit 1 setzen ldi r24, 0xd7 ;Frequenz einstellen ldi r25, 0xa3 ; Ton 1 = 0x56d6 1060Hz ok, rcall TONLOOP clr temp out TIMSK,temp ;disable Timer ret SETT5: ; ldi Temp,0x10 ; out PORTB,Temp ;time interrupt enable ldi temp,TC0_IE out TIMSK,temp ;TOIE0 bit 1 setzen ldi r24, 0x39 ;Frequenz einstellen ldi r25, 0xb4 ; Ton 1 = 0x56d6 1060Hz ok, rcall TONLOOP clr temp out TIMSK,temp ;disable Timer ret SETT6: ; ldi Temp,0x20 ; out PORTB,Temp ;time interrupt enable ldi temp,TC0_IE out TIMSK,temp ;TOIE0 bit 1 setzen ldi r24, 0xfe ;Frequenz einstellen ldi r25, 0xd4 ; Ton 1 = 0x56d6 1060Hz ok, rcall TONLOOP clr temp out TIMSK,temp ;disable Timer ret TONLOOP: ; inc Count add r28,r24 ;1 cyc adc r29,r25 ;1 cyc adc r30,r26 ;1 cyc wenn r30+ wird zeiger incr. lpm ;3 cyc out PORTB,r0 ;1 cyc cpse Count,Null ;1 cyc skip next if Count = null rjmp TONLOOP ;2 cyc rücksprung ret ; retun zu set ;*************************************************************** ;interupt ;*************************************************************** tim0_ovf: push r16 ;? ; dec cnt7 ;dekrement couter ldi temp,OFFSE_TC ;timer offstet out TCNT0,temp inc Count ;increment count pop r16 ;? reti .org 0x200 ;steht im Prgspeicher 0x400 bis 0x4f sinu: .db 0x80,0x83,0x86,0x86,0x89,0x8c,0x8f,0x92 .db 0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab .db 0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1 .db 0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5 .db 0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6 .db 0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3 .db 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc .db 0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff .db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe .db 0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8 .db 0xf7,0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed .db 0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde .db 0xdc,0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc .db 0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6 .db 0xb3,0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f .db 0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86 .db 0x83,0x80,0x7c,0x79,0x76,0x73,0x70,0x6d .db 0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54 .db 0x51,0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e .db 0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a .db 0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19 .db 0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c .db 0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03 .db 0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00 .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01 .db 0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07 .db 0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12 .db 0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21 .db 0x23,0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33 .db 0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49 .db 0x4c,0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60 .db 0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79
Beitrag #7019026 wurde von einem Moderator gelöscht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.