Gast
#410214
Hi, Ich habe gerade versucht als Anfänger einen Timer zu bauen. ICh habe einfach vor nach versch. stunden (200,1000,1500 usw) eine ausgabe über leds zu machen.. Jetzt wollte ich zunnächst einmal etwas im 3sec zum ausführen bringen.. Habe etwas in div. Tutorials gelesen und dabei ist folgendes herrausgekommen: .include "m8515def.inc" .def tmp = r16 .def sregsave = r17 ;Timerschritte pro Durchlauf .equ Timer_z = 48 ;Timerstartwert ableiten .equ Timer_s = 256-Timer_z .org 0x000 rjmp main ;reset reti ;INT0 (unbelegt) reti ;INT1 (unbelegt) reti ;Timer1 Capture (unbelegt) reti ;Timer1 Compare Match (unbelegt) reti ;Timer1 Overflow (unbelegt) rjmp timer0ov ;Timer0 Overflow reti ;UART, RX Complete (unbelegt) reti ;UART, Data register empty (unbelegt) reti ;UART, tx complete (unbelegt) reti ;Analog Comparator (unbelegt) ;Hauptprogramm main: ;Stack einrichten ldi tmp, LOW(RAMEND) out SPL, tmp ;PORT A einrichten ldi tmp, 0b11111111 out DDRA, tmp ;Timer 0 auf Startwert setzten ldi tmp, Timer_s out TCNT0, tmp ;Timer0 programmieren ;Prozessortakt mit Teilerfaktor 64 ldi tmp, 0b00000011 out TCCR0, tmp ;Timer0 Overflow INterrupt ;einschalten ldi tmp, 0b00000010 out TIMSK, tmp ;Interrupts global einschalten sei ;endlosschleife schleife: rjmp schleife timer0ov: ;ISR ;Timer0 Overflow ;Register sichern push tmp push sregsave ;SREG sichern in sregsave, SREG ;TImer neu programmieren ldi tmp, Timer_s out TCNT0, tmp ;hier folgen Befehle die alle 3 sec ausgeführt werden sollen ldi tmp, 0b11111111 out PORTA, tmp ;SREG wiederherstellen out SREG, sregsave ;Register wiederherstellen pop sregsave pop tmp ;Fertig reti Wenn ich das jetzt im simulator austesten möchte, zählt er zwar hoch bis er voll ist - löschen und neu beginnen tut er auch, aber er setzt mein port nicht auf high. woran kann das liegen? ich habe echt keine ahnung.. bin auch nicht wirklich drinn in der materie.. Gruß Jannik