hi, kann mir mal jemand schnell ein programm schreiben, das bei einem internen takt von 1mhz (atmega8) so im sekunden abstand eine led blinken lässt und bei höheren takten entsprechend schneller? möchte testen, ob ich einen quarz richtig angeschlossen hab. ist nicht so, dass ich kein assembler lernen möchte, nur wollte ich zuerst sichergehn, dass wenigstens die hardware in ordnung und richtig angeschlossen ist. mfg, johannes
;------------------------------------------------------------ ; timer1.asm ;------------------------------------------------------------ .include "m16def.inc" .device ATmega16 .def temp = r16 .def leds = r17 .equ start = 65536 - 7812 ; 2 hoch 16 minus 7812 .equ highValue = high(start) .equ lowValue = low(start) .org $0000 ; ***** INTERRUPT VECTORS ********************************* rjmp reset ; Reset Handler ;.org INT0addr ;= 0x0002 ; External Interrupt Request 0 ;.org INT1addr ;= 0x0004 ; External Interrupt Request 1 ;.org OC2addr ;= 0x0006 ; Timer/Counter2 Compare Match ;.org OVF2add ;= 0x0008 ; Timer/Counter2 Overflow ;.org ICP1addr ;= 0x000a ; Timer/Counter1 Capture Event ;.org OC1Aaddr ;= 0x000c ; Timer/Counter1 Compare Match A ;.org OC1Baddr ;= 0x000e ; Timer/Counter1 Compare Match B .org OVF1addr ;= 0x0010 ; Timer/Counter1 Overflow rjmp timer1 ;.org OVF0addr ;= 0x0012 ; Timer/Counter0 Overflow ;.org SPIaddr ;= 0x0014 ; Serial Transfer Complete ;.org URXCaddr ;= 0x0016 ; USART, Rx Complete ;.org UDREaddr ;= 0x0018 ; USART Data Register Empty ;.org UTXCaddr ;= 0x001a ; USART, Tx Complete ;.org ADCCaddr ;= 0x001c ; ADC Conversion Complete ;.org ERDYaddr ;= 0x001e ; EEPROM Ready ;.org ACIaddr ;= 0x0020 ; Analog Comparator ;.org TWIaddr ;= 0x0022 ; 2-wire Serial Interface ;.org INT2addr ;= 0x0024 ; External Interrupt Request 2 ;.org OC0addr ;= 0x0026 ; Timer/Counter0 Compare Match ;.org SPMRaddr ;= 0x0028 ; Store Program Memory Ready reset: ldi temp,low(RAMEND) ;Initialize stackpointer for parts with SW stack out SPL,temp ldi temp,high(RAMEND) ;Commented out since 1200 does not have SRAM out SPH,temp ldi temp, 0xFF out DDRB, temp ; PORTB configured for output ldi leds, 0xFF out PORTB, leds ; LEDs ausschalten ldi temp, 1<<TOIE1 ; 1000 0000 out TIMSK, temp ; Timer 1 interrupt ein ; Startwert des Timers einstellen: ldi temp, highValue out TCNT1H, temp ldi temp, lowValue out TCNT1L, temp ldi temp, 0b00000101 out TCCR1B, temp ; Timer 1 starten mit Vorteiler 1024 sei ; interrupts generell aktivieren main: loop: nop nop rjmp loop ;-------------------------------------------------- timer1: com leds out PORTB, leds ; Startwert des Timers neu einstellen: ldi temp, highValue out TCNT1H, temp ldi temp, lowValue out TCNT1L, temp reti
danke vielmals. habs sogar geschafft die geschafft die geschwindigkeit zu erhöhen. für wieviel mhz ist das programm denn ausgelegt udn wie lange soll dann die led leuchten?
Hallo, das Programm ist für 8Mhz und 1 Sekunde Blinkinterval. Taktfrequenz/Vorteiler/T1-Wert 8 000.000 /1024/7812 = 1 Es grüsst, Arno
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.