PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل عجیب با اسمبلی



agape
15-11-2010, 23:39
سلام بع تمام دوستان
من به یه مشکل عجیب و غزیر منتظره برخوردم :baad:
من برای اسمبلی از AVR Studio استفاده میکنم :nerd: یه برنامه دارم مینویسم که اولش به این مشکل برخوردم
مشکل اینه که نمیتونم توی رجیستر TCCR1B مقداری رو قرار بدم :unh: دقیقا من برای این کار از دستورات زیر استفاده میکنم

ldi r16,(1<<CS10 | 1<<WGM12)
sts tccr1b,r16
مقدار 9 توی رجیستر R16 قرار میگیره ولی نمیره توی TCCR1B من که پاک گیج شدم نمیدونم مشکل از کجاست همین مشکلات رو با رجیستر های TIMSK , ocr1ah , ... دارم
میکروی مورد نظر هم مگا 16 است
اینم لیست برنامه

.include "m16def.inc"

.org 0
rjmp RESET


RESET:



; ************************************************** **************************************
; **** IO PORT A SETUP
; ************************************************** **************************************

sbi ddrb,0 ; HORIZONTAL SYNC PULSE
sbi ddrb,1 ; VERTICAL SYNC PULSE
sbi ddrb,2 ; TEST LED


; ************************************************** **************************************
; **** STARTUP SEQUENCE
; ************************************************** **************************************

; STACK POINTER
ldi r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16

; SET TIMER1 TO SCLK WITH RESET
ldi r16,(1<<CS10 | 1<<WGM12)
sts tccr1b,r16

; SET TIMER1 MATCH A INTERRUPT
ldi r16,(1<<OCIE1A)
sts timsk,r16

; SET TIMER1 INTERRUPT TIME A VALUE
ldi r16,high(636)
sts ocr1ah,r16
ldi r16,low(636)
sts ocr1al,r16

ghaem313
16-11-2010, 01:14
نه تنها تو TCCR1B بلکه تو بقیه ریجستر های i/o نمیتونی چیزی بریزی چون دستورت اشتباهه
دستور sts برای نوشتن در حافظه ست
دستور ldi برای رجیستر های cpu
دستور out برای نوشتن در رجیستر های i/o ,دستور in برای خواندن از رجیستر هایi/o ست


و تمامی امکانات avr مثل تلیمر و .... i/o هستند

agape
16-11-2010, 19:33
سلام
متشکر از راهنمایی شما
من تازه میخوام اسمبلی کار کنم
رو یه پروژه دارم کار میکنم که سرعت لازم دارم
در ضمن چرا این کد رو که با مگا 644 شبیح سازی میکنم کار میکنه ؟

ghaem313
16-11-2010, 20:34
کار خوبی میکنی که از اسمبلی استفاده میکنی
اصلا باید این جوری باشه که از اسمبلی شروع کنی و بعد c طرف بیسیک هم اصلا نری
اما در مورد سرعت بهت بگو که نوشتن برنامه تو اسمبلی تمرکز زیادی می خواد و اگر سرعت زیادی نیاز داری حتما برنامه ت خیلی بزرگه پس نوشتنش کار سختیه وباید گروهی انجامش بدی
اما اگر حجم برنامه ات کمه با c هم میتونه کارکنی خصوصا اگه حافظه پشته زیاد باشه

در مورد این که چرا مگا 46 اون اجرا کرده من موندم چون تو آخر دیتا شیتش نوشته STS دستوری برای Store Direct to SRAM هستش

من یکی از آرزو هام اینه که بدونم توی برنامه c مثلا از خط nام تاخط mام چه زمانی طول میکشه.اون وقته که میتونی به درستی از watchdog استفاده کنی