Takt testen (Led soll blinken)

Gast #303643
Lesenswert?
• ▲
▼
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
Gast #303644
Lesenswert?
• ▲
▼
;------------------------------------------------------------
; 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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.