Timer 1 optagemodus problem

N

Navid T

Guest
Hej venner
Jeg skrev dette program til timeren 1 optagemodus (mega32), jeg vil gerne se ICR1 høje byte på porta og lav byte på portB, men når jeg køre dette program isee lave byte på porta og highbyte på portb!
Whats forkert i mit program ??!!!
----------------------------------------------
# include "m32def.inc"
. ORG 0 $
RJMP SETUP
. ORG $ C
RJMP TIMER_CAP
. ORG 14 dollar
SETUP:
LDI R16, HIGH (RAMEND)
OUT SPH, R16
LDI R16, LOW (RAMEND)
OUT SPL, R16
LDI R16, $ FF
OUT DDRA, R16
OUT DDRB, R16
CBI DDRD, 6
SBI PORTD, 6
LDI R16 $ 0
OUT TCNT1H, R16
OUT TCNT1L, R16
LDI R16, 0B00000101
OUT TCCR1B, R16
LDI R16, 0B00100000
OUT TIMSK, R16
SEI
LOOP: RJMP LOOP
TIMER_CAP:
I R17, ICR1H
I R18, ICR1L
OUT PORTA, R17
OUT PORTB, R18
RETI
--------------------------------------------
Venlig hilsen

 
Hej,
Hvis du har en endianness indstilling i din compiler, sæt den til 'lidt' endian at få den høje byte til høj adresse og lav byte til at lave adresse.

Hilsen,
Laktronics

 
Hej og tak
I dont bruge en compiler, jeg skrev dette program i montage og så har jeg samlet det med avrstudio.

 
Adgang til 16-bit register

"At gøre en 16-bit skrive, den høje byte skal være skrevet før Lav byte. For en 16-bit
læse, skal Low byte læses før den høje byte. "

Prøv programmet efter udveksling af første og anden linje i TIMER_CAP

TIMER_CAP:
I R18, ICR1L
I R17, ICR1H
OUT PORTA, R17
OUT PORTB, R18
RETI

 
tak svicent
Jeg skrev en kode, som din kode første gang, og det er samme problem dytte så jeg ændrede det til det program, du ser her, men det var forkert for, jeg mener hvis jeg læser højt byte først og show på en havn, viser det høje byte på port b, og hvis jeg læste lave byte først og show på havnen en det viser, at lave byte i havn b igen!

 

Welcome to EDABoard.com

Sponsor

Back
Top