Hallo, ich knabbere schon geraume Zeit an einem Problem, das für mich irgendwie keinen Sinn ergibt. Um es hier zu beschreiben, habe ich den Code nur auf das Problem selbst abgespeckt. Beschreibung: Bei auslösen des externen Interupts 2 (Taster auf STK501) soll der Timer 3 aktiviert werden... Das wird er auch, er soll bis zum OC hochzählen. Mein Simulator hört allerdings beim unteren OC (OCL) auf zu zählen, und ich habe keine Ahnung, warum. Kann mir vielleicht jemand helfen? ICh wäre seeeeeeehr dankbar, da ich demnächst sonst hinter einen Zug springe.. ;-) .include "m128def.inc" .def temp1=r16 .def highValue = r24 ;definition highVariable für Endwert des 16bit Timers (ab 26 x,y,z !!!!!!) .def lowValue = r25 ;definition lowVariable für Endwert des 16bit Timers .equ highValue = 0x0f .equ lowVvalue = 0x22 ;************************************************************ ; ; Interrupts definieren .cseg .org 0x0000 jmp reset ; Reset Handler jmp RETURN ; IRQ0 Handler jmp RETURN ; IRQ1 Handler jmp EXT_INT2 ; IRQ2 Handler jmp RETURN ; EXT_INT3 ; IRQ3 Handler jmp RETURN ; EXT_INT4 ; IRQ4 Handler jmp RETURN ; EXT_INT5 ; IRQ5 Handler jmp RETURN ; EXT_INT6 ; IRQ6 Handler jmp RETURN ; EXT_INT7 ; IRQ7 Handler jmp RETURN ; TIM2_COMP ; Timer2 Compare Handler jmp RETURN ; TIM2_OVF ; Timer2 Overflow Handler jmp RETURN ; TIM1_CAPT ; Timer1 Capture Handler jmp RETURN ; TIM1_COMPA ; Timer1 CompareA Handler jmp RETURN ; TIM1_COMPB ; Timer1 CompareB Handler jmp RETURN ; TIM1_OVF ; Timer1 Overflow Handler jmp RETURN ; TIM0_COMP ; Timer0 Compare Handler jmp RETURN ; TIM0_OVF ; Timer0 Overflow Handler jmp RETURN ; SPI_STC ; SPI Transfer Complete Handler jmp RETURN ; USART0_RXC ; USART0 RX Complete Handler jmp RETURN ; USART0_DRE ; USART0,UDR Empty Handler jmp RETURN ; USART0_TXC ; USART0 TX Complete Handler jmp RETURN ; ADC ; ADC Conversion Complete Handler jmp RETURN ; EE_RDY ; EEPROM Ready Handler jmp RETURN ; ANA_COMP ; Analog Comparator Handler jmp RETURN ; TIM1_COMPC ; Timer1 CompareC Handler jmp RETURN ; TIM3_CAPT ; Timer3 Capture Handler jmp RETURN ; TIM3_COMPA ; Timer3 CompareA Handler jmp RETURN ; TIM3_COMPB ; Timer3 CompareB Handler jmp RETURN ; TIM3_COMPC ; Timer3 CompareC Handler jmp RETURN ; TIM3_OVF ; Timer3 Overflow Handler jmp RETURN ; USART1_RXC ; USART1 RX Complete Handler jmp RETURN ; USART1_DRE; USART1,UDR Empty Handler jmp RETURN ; USART1_TXC ; USART1 TX Complete Handler jmp RETURN ; TWI ; Two-wire Serial Interface Interrupt Handler ;***************************************************************** ;.cseg ; Codesegment reset: ;.include "stackinit.inc" ldi temp1, high(RAMEND) out SPH, temp1 ;Stackpointer high initialisieren ldi temp1, low(RAMEND) out SPL, temp1 ;Stackpointer low initialisieren rcall port_init lds temp1, EIMSK ;Aktiviere ExtInt2, 1 und 0 (wichtig : EIMSK erst auslesen mit IN!!!) sbr temp1, 4 out EIMSK, temp1 lds temp1,EICRA ;Fallende Flanke auf ExtInt2, 1 und 0 als Trigger (wichtig : EICRA erst auslesen!!!) sbr temp1, 1<<ISC21 | 0<<ISC20 sts EICRA,temp1 sei ;************************************************************ loop: rjmp loop ;*********************************************************************** ********* Timer3: sts OCR3AH, highValue ;OutputCompare einstellen sts OCR3AL, lowValue ;Clear timer on compare match (OCR1), ;Vorteiler 1 (CS 001) => 8 MHz Takt, ;clear timer on compare match mode (CTC) 0b00001001 ;ldi temp4, Null ldi temp1, 0b00001001 ;0<<WGM13 | 1<<WGM12 | 0<<CS12 | 0<<CS11 | 1<<CS10 sts TCCR3B, temp1 ;Output compare toggle, PWM aus 0b01000000 ;ldi temp3, Null ldi temp1, 0b01000000 ;0<<COM1A1 | 1<<COM1A0 | 0<<WGM11 | 0<<WGM10 sts TCCR3A, temp1 ret ;************************************************************* ; ; Portinit port_init: ldi temp1, 0xff out DDRB, temp1 ;PortB als Ausgang out PORTB, temp1 ;alle LEDs aus .. test out DDRC, temp1 ;PortC als Ausgang out DDRE, temp1 ;PortE als Ausgang ldi temp1, 0xf0 ;Port D0-3 als Eingang out DDRD, temp1 ret ;******************************************************************** ; ; EXTERNER INTERRUPT2 EXT_INT2: rcall Timer3 ;Timer1-Unterprogramm aufrufen (Timer einstellen und starten) reti RETURN: ;wegen Adresse zwischen 2 Interupts +2 =>2 Takte zwischen Interupts reti
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.