Wie kan ich 16 bit T\C richtig initialisieren

Gast #32869
Lesenswert?

Hallo zusammen !!!
Vielleicht kan jemand mir helfen.
Wie kan ich richtig 16 bit T\C1 bei AT8515 initialisieren und TIM!_OVF 
interrupt realisieren? Ich will z.b. dass an PORT B LED 7 an geht.

Schreibe folgendes,aber funktioniert nicht.
Was mache ich falsch?
danke im voraus

Andrey Richter


.org 0x000 rjmp RESET
.org 0x000 rjmp TIM1_OVF

RESET:

.def temp =r16
.include"8515def.inc"
.org 0x000

  rjmp main
  rjmp interrupt

main:

  ldi temp,LOW(RAMEND)
  out SPL,temp
  ldi temp,HIGH(RAMEND)
  out SPH,temp

  ldi temp,0xff
  out DDRB,temp
  out PORTB,temp

  ldi temp,0
  out GIMSK,temp ;Gen. Interrupt Mask disable

  ldi temp,0
  out GIFR,temp ; Gen. Interrupt Flag disable

  ldi temp,0b100000000
  out TIMSK,temp ;T\C1 Overflow Interrupt enable

  ldi temp,0
  out TCCR1A,temp ;T\C1 Control Reg. disable

  ldi temp,0b00000101
  out TCCR1B,temp  ;  Prescaler is 1024

  ldi temp,0b11111111
  out TCNT1H,temp

  ldi temp,0
  out TCNT1L,temp

  sei

loop: rjmp loop

interrupt:

  cbi PORTB,7
  reti
Gast #32870
Lesenswert?

Mit .org 0x000 setzt Du die Adresse Deines Programms immer wieder auf 0. 
An Adresse 0 ist der Reset-Vektor.
Die ersten Adressen des Flash sind sogenannte Vektoren, sie werden als 
Sprungadresse verwendet, falls ein Interrupt auftritt. Für einen 2313 
sieht das ungefähr so aus:

.cseg
.org 0
  rjmp reset  ;Reset handler
  reti    ;External interrupt 0
  reti    ;External interrupt 1
  reti    ;Counter1 capture event
  reti    ;Counter1 compare match
  reti    ;Counter1 overflow
  reti    ;Counter0 overflow
  reti    ;UART RX complete
  reti     ;UART Data register empty
  reti    ;UART TX complete
  reti    ;Analog comparator


Für den 8515 hab ichs momentan nicht zur Hand, aber im Datenblatt wirst 
Du fündig.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren