NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4912 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 4 از 4

موضوع: مشکل عجیب با اسمبلی

  1. #1
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض مشکل عجیب با اسمبلی

    سلام بع تمام دوستان
    من به یه مشکل عجیب و غزیر منتظره برخوردم
    من برای اسمبلی از AVR Studio استفاده میکنم :nerd: یه برنامه دارم مینویسم که اولش به این مشکل برخوردم
    مشکل اینه که نمیتونم توی رجیستر TCCR1B مقداری رو قرار بدم دقیقا من برای این کار از دستورات زیر استفاده میکنم
    کد:
    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

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر فعال ghaem313 آواتار ها
    تاریخ عضویت
    Oct 2009
    نام
    محمد قديمي
    نوشته ها
    233
    تشکر
    34
    تشکر شده 194 بار در 105 پست

    پیش فرض

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


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

  4. کاربران : 2 تشکر کرده اند از شما ghaem313 برای ارسال این پست سودمند:


  5. #3
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    سلام
    متشکر از راهنمایی شما
    من تازه میخوام اسمبلی کار کنم
    رو یه پروژه دارم کار میکنم که سرعت لازم دارم
    در ضمن چرا این کد رو که با مگا 644 شبیح سازی میکنم کار میکنه ؟

  6. #4
    کاربر فعال ghaem313 آواتار ها
    تاریخ عضویت
    Oct 2009
    نام
    محمد قديمي
    نوشته ها
    233
    تشکر
    34
    تشکر شده 194 بار در 105 پست

    پیش فرض

    کار خوبی میکنی که از اسمبلی استفاده میکنی
    اصلا باید این جوری باشه که از اسمبلی شروع کنی و بعد c طرف بیسیک هم اصلا نری
    اما در مورد سرعت بهت بگو که نوشتن برنامه تو اسمبلی تمرکز زیادی می خواد و اگر سرعت زیادی نیاز داری حتما برنامه ت خیلی بزرگه پس نوشتنش کار سختیه وباید گروهی انجامش بدی
    اما اگر حجم برنامه ات کمه با c هم میتونه کارکنی خصوصا اگه حافظه پشته زیاد باشه

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

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

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •