Hallo!
Ich komme von einem Proglem zum nächsten!
Diesmal ist es ein Progblem mit dem Timer, hier ist mal das Programm:
Die Probleme sind nun, das ich den Timer0 Overflow interrupt nicht ohne Fehlermeldung aktivieren kann. Er schreibt dann immer hin: "error, Operant 1 out of range: 0x6e"Code:.NOLIST ; List-Output unterdrücken .INCLUDE <usb162def.inc> .LIST ; List-Output wieder aufdrehen ;Registeraufteilung .def temp = r16 .CSEG ; was nun folgt, gehört in den FLASH-Speicher .org 0x0000 jmp Initialisierung ;RESET jmp kein_Interrupt ;INT0 ;External Interrupt Request 0 jmp kein_Interrupt ;INT1 ;External Interrupt Request 1 jmp kein_Interrupt ;INT2 ;External Interrupt Request 2 jmp kein_Interrupt ;INT3 ;External Interrupt Request 3 jmp kein_Interrupt ;INT4 ;External Interrupt Request 4 jmp kein_Interrupt ;INT5 ;External Interrupt Request 5 jmp kein_Interrupt ;INT6 ;External Interrupt Request 6 jmp kein_Interrupt ;INT7 ;External Interrupt Request 7 jmp kein_Interrupt ;PCINT0 ;Pin Change Interrupt Request 0 jmp kein_Interrupt ;PCINT1 ;Pin Change Interrupt Request 1 jmp kein_Interrupt ;USB General ;USB General Interrupt request jmp kein_Interrupt ;USB Endpoint ;USB Endpoint Interrupt request jmp kein_Interrupt ;WDT ;Watchdog Time-out Interrupt jmp kein_Interrupt ;TIMER1 CAPT ;Timer/Counter1 Capture Event jmp kein_Interrupt ;TIMER1 COMPA ;Timer/Counter1 Compare Match A jmp kein_Interrupt ;TIMER1 COMPB ;Timer/Counter1 Compare Match B jmp kein_Interrupt ;TIMER1 COMPC ;Timer/Counter1 Compare Match C jmp kein_Interrupt ;TIMER1 OFV ;Timer/Counter1 Overflow jmp kein_Interrupt ;TIMER0 COMPA ;Timer/Counter0 Compare Match A jmp kein_Interrupt ;TIMER0 COMPB ;Timer/Counter0 Compare Match B jmp TIMER0_OVF ;Timer/Counter0 Overflow jmp kein_Interrupt ;SPI, STC ;SPI Serial Transfer Complete jmp kein_Interrupt ;USART1 RX ;USART1 Rx Complete jmp kein_Interrupt ;USART1 UDRE ;USART1 Data Register Empty jmp kein_Interrupt ;USART1TX ;USART1 Tx Complete jmp kein_Interrupt ;ANALOG COMP ;Analog Comparator jmp kein_Interrupt ;EE READY ;EEPROM Ready jmp kein_Interrupt ;SPM READY ;Store Program Memory Ready kein_Interrupt: reti Initialisierung: ;Stackpointer ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ;Aus/Eingänge ldi temp, 0b11111111 out DDRB, temp ; Ausgang sbi DDRC, 2 ;Timer0 aktivieren ldi temp, 0b00000001 out TIMSK0, temp ldi temp, 0b00000101 out TCCR0B, temp sei Hauptprogramm: sbi PortC, 2 ldi temp, 0b01010101 out PortB, temp Ende: rjmp Ende TIMER0_OVF: push temp in temp, SREG push temp cpi temp, 0b01010101 breq PC+3 ldi temp, 0b01010101 rjmp PC+2 ldi temp, 0b10101010 out PortB, temp pop temp out SREG, temp pop temp reti
0x6e ist TIMSK0. Seltsamer weise steht beim TIMSK0 bei der Adresse na(0x6e). Wenn na jetzt not avalable heißt, was den fehler erklären würde, dann frage ich mich, warum steht das da?
Im Simmulator ist das allerdings kein Problem da man ja einfach den Interrupt so aktivieren kann (per Mausklick), allerdings springt der ausgelöste Interrupt nicht auf die richtige Adresse!!!
jetzt frage ich mich WARUM ärgert mich der Atmel so sehr?
Bitte Helft mir, auch wenn es nur eine bestätigung für einen richtigen code ist![]()






Zitieren

Lesezeichen