اطلاعیه

Collapse
No announcement yet.

برنامه نویسی به زبان اسمبلی

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : برنامه نویسی به زبان اسمبلی

    اخیرا در ارتقاء سخت افزار و نرم افزار یک سیستم صنعتی با مشکلی برخورد کردم، به این ترتیب که ارتباط rs485 در مواردی از عملکرد قطع و ارتباط مختل می شد. با توجه به جواب دادن نسخه قبلی این طرح از نظر نرم افزاری و قطع ناگهانی ارتباط سریال در بین انجام عملیات، احتمالات مختلف و متعددی برای وجود این مشکل از منظر سخت افزاری مطرح بود و مورد بررسی قرار گرفت:

    1- قطع بودن یا نقص در اتصالات rs485
    2- اشکال در IC های sp485
    3- اشکال سخت افزاری در eeprom سریال که اطلاعات از روی آن خوانده و ارسال می شد.
    4- سایر اشکالات مرتبط با سخت افزار نظیر عدم پایداری تغذیه و وجود اشکال در اسیلاتورهای دو طرف ارتباط و ...

    بعد از ساعت ها بررسی و تست و کار طاقت فرسا، در نهایت معلوم شد که اشکال بوجود آمده متوجه هیچ یک از موارد فوق نبوده است. بلکه علیرغم مشترک بودن نرم افزار در نسخه های قبلی و جدید، تنها به دلیل اضافه شدن 4 دستور اسمبلی sbi و cbi در یک روتین وقفه که چند ده هزار بار احضار می شود، به دلیل بار پردازشی بسیار بالای تحمیل شده در حد 100 درصد به cpu و علیرغم اینکه این دستورت تنها 8 سیکل را از نظر زمانی به خود اختصاص می دهند، این مشکل بوجود آمده بود. در نهایت با بهینه سازی انجام شده در دستورالعمل ها و کاهش چند سیکل از بار پردازشی cpu در روتین وقفه، این مشکل حل شد. این یک نمونه ای از کاربردهایی است که به هیچ وجه نمی توان آن را با توجه به توان پردازشی AVR، با روشی به غیر از برنامه نویسی اسمبلی پیاده سازی کرد و اگر قرار بود به غیر از این روش برنامه نویسی در این کاربرد مورد استفاده قرار بگیرد (C و Basic و ...)، نیاز به خانواده هایی با توان پردازشی بالاتر و فرکانس کلاک بیشتر بود. از این نظر استفاده از حداکثر توان پردازشی avr با استفاده از برنامه نویسی اسمبلی و بدون نیاز به استفاده از خانواده های قویتر، می تواند یک ارزش افزوده ناشی از ابزار نرم افزاری را در تولید ایجاد کند (به دلیل استفاده از سخت افزار ارزان تر) و حداقل در این کاربرد به خصوص، این روش برنامه نویسی به دلیل فراهم کردن امکان انجام کاربرد مورد نظر با avr، بسیار به صرفه بوده است.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      پاسخ : برنامه نویسی به زبان اسمبلی

      با سلام
      علیرغم مشترک بودن نرم افزار در نسخه های قبلی و جدید، تنها به دلیل اضافه شدن 4 دستور اسمبلی sbi و cbi در یک روتین وقفه که چند ده هزار بار احضار می شود، به دلیل بار پردازشی بسیار بالای تحمیل شده در حد 100 درصد به cpu و علیرغم اینکه این دستورت تنها 8 سیکل را از نظر زمانی به خود اختصاص می دهند، این مشکل بوجود آمده بود
      این sbi و cbi های اضافه رو شما از روی کد اسمبلی خروجی کامپایلر نتیجه گیری کردید یا از روی کد اسمبلی که خودتون نوشته بودید؟

      در نهایت با بهینه سازی انجام شده در دستورالعمل ها و کاهش چند سیکل از بار پردازشی cpu در روتین وقفه، این مشکل حل شد. این یک نمونه ای از کاربردهایی است که به هیچ وجه نمی توان آن را با توجه به توان پردازشی AVR، با روشی به غیر از برنامه نویسی اسمبلی پیاده سازی کرد و اگر قرار بود به غیر از این روش برنامه نویسی در این کاربرد مورد استفاده قرار بگیرد (C و Basic و ...)، نیاز به خانواده هایی با توان پردازشی بالاتر و فرکانس کلاک بیشتر بود.
      امکانش هست که کد اون قسمت رو قبل و بعد از اصلاح شدن قرار بدین ؟

      میشه میکرو و فرکانس کارش هم که باهاش کار کردین رو بگین دقیقا چی بوده؟

      دیدگاه


        پاسخ : برنامه نویسی به زبان اسمبلی

        نوشته اصلی توسط mojtaba_led
        این sbi و cbi های اضافه رو شما از روی کد اسمبلی خروجی کامپایلر نتیجه گیری کردید یا از روی کد اسمبلی که خودتون نوشته بودید؟
        این یک برنامه چندهزار خطی است که با اسمبلی نوشته شده است.

        نوشته اصلی توسط mojtaba_led
        امکانش هست که کد اون قسمت رو قبل و بعد از اصلاح شدن قرار بدین ؟

        میشه میکرو و فرکانس کارش هم که باهاش کار کردین رو بگین دقیقا چی بوده؟
        فرکانس کار میکروکنترلر 16 مگاهرتز است. در مورد اصلاح انجام شده این توضیح می تواند مفید باشد که بعضی متغیرهایی که در SRAM تعریف شده بود و بنابراین برای انجام عملیات روی آن باید یکبار از طریق LDS در چند رجیستر (مثلا R16 و R17 و R18) قرار می گرفت و بعد از عملیات مورد نظر از طریق STS در محل خود ذخیره می شد به چند رجیستر داخلی که آزاد بود منتقل شد و بنابراین در زمانی که برای فراخوانی از SRAM و ذخیره سازی مجدد مصرف می شد، صرفه جویی به عمل آمد و همین فرصت ایجاد شده برای CPU سبب حل مشکل شد.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          پاسخ : برنامه نویسی به زبان اسمبلی

          پیرو چند پست قبل، تجربه ای حاصل شد که ذکر آن می تواند مفید باشد.
          در یک سیستم مبتنی بر AVR و دارای ورودی های میکروسوئیچ و با حجم پردازش تا مرزهای توان CPU، گزارش شد که در مواقعی میکروسوییچ ها از کار می افتند و عمل نمی کنند. برای دست یافتن به منبع مشکل، مراحل زیر طی شد:

          1- در ابتدا طبقه ورودی که میکرسوئیچ ها از طریق آن به میکروکنترلر متصل بودند، بررسی و مشخص شد که مدارات سالم هستند.

          2- مسئله Hang کردن میکروکنترلر مورد بررسی قرار گرفت که معلوم شد در زمان بروز مشکل، میکروکنترلر سایر وظایف خود را به درستی انجام می دهد و بنابراین مسئله Hang کردن منتفی است.

          3- با توجه به نویز القایی شدید ناشی از سروموتور ها و اینورتر و ... روی بدنه دستگاه، اصلاحاتی در نحوه اتصال ورودی ها برای حفاظت از اسپایک های احتمالی ایجاد شد که عملا نتیجه ای نداشت.

          4- در مرحله بعد این احتمال بررسی شد که شاید به هر دلیلی پورت متصل به میکروسوییچ ها از کار می افتد. سوال مطرح شده این بود که چرا سایر پورت ها از کار نمی افتند. بنابراین ورودی ها به پورت دیگری منتقل شدند. اما روی پورت دیگر هم همین مشکل برقرار بود.

          5- در مرحله بعد تغییری در برنامه اعمال شد، به این ترتیب که اطلاعات خوانده شده از ورودی ها را روی خروجی های دیگری ظاهر کند تا به این ترتیب بتوان اطلاع حاصل کرد که در زمان ایجاد این مشکل، آیا اطلاعات درست از پین های ورودی خوانده می شود یا خیر. با آزمایش های انجام شده مشخص شد که در زمان بوجود آمدن این مشکل، آنچه در خروجی منعکس می شود، نشان دهنده ورودی های واقعی نیست. به عبارت دیگر ورودی ها به صورت صحیح خوانده نمی شوند.

          6- از مرحله قبل می توان اینگونه نتیجه گیری کرد که یا بافر ورودی پورت از کار می افتد که وضعیت نادرست روی خروجی منعکس می شود و یا محتوای پورت اصولا خوانده نمی شود. با توجه به مکان قرارگیری خواندن پورت در روتین وقفه تایمر و وجود وقفه دیگری با اولویت استاتیک بالاتر (آدرس کمتر در جدول بردار وقفه)، این احتمال قوی مطرح شد که به دلیل وقوع پی در پی وقفه دیگر با اولویت استاتیک بالاتر، برنامه هیچ گاه نمی تواند وارد وقفه تایمر شود و بنابراین روند خواندن پورت مختل می شود. برای بررسی این مسئله بجای استفاده از وقفه، از روش Polling برای چک کردن Flag وقفه تایمر و سپس خواندن پورت استفاده شد که در این حالت تقاضای پی در پی وقفه ها نمی تواند مانع اجرای برنامه در حلقه اصلی شود و بعد از هر وقفه حداقل یک دستور اجرا می شود. بعد از پیاده سازی این روش، خوشبختانه مشکل برطرف شد که نشان دهنده متوقف شدن روند اجرای وقفه تایمر به دلیل تقاضای وقفه های مکرر توسط یک وقفه با اولویت استاتیک بالاتر است.

          7- نتیجه گیری از مراحل بالا: این مشکل به دلیل تقاضاهای مکرر وقفه و عدم توانایی CPU برای پاسخگویی به وقفه با اولویت پایین تر ایجاد شد و برای برطرف کردن آن، عملیات خواندن پورت در فواصل زمانی مشحص که از اولویت زمانی بسیار بالایی هم برخوردار نبود، از روتین وقفه به حلقه اصلی منتقل شد.
          جدیدترین ویرایش توسط طراح; ۱۵:۲۴ ۱۳۹۶/۰۱/۲۸.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            پاسخ : برنامه نویسی به زبان اسمبلی

            با سلام

            تحلیل عالی بود.

            منبع آن وقفه اولویتدار که به دلیل تکرر فراخوانی، فرصت رسیدگی به سایر وقفه ها را نمی دهد چیست؟
            و در این شرایط که مشکل دار شده، آن عامل ، چه درصدی از زمان را فعال است؟
            تریگر آن وقفه با لبه است یا سطح؟

            مشابه این نوع هنگ کردن ( خفه شدن پردازنده در تکرر وقفه ) در چند مورد برای من هم رخ داده،
            بعضا با بررسی و تحلیل ، کشف و رفع شده.

            با سپاس

            پ.ن:
            از نسل اسمبلی کاران تعداد زیادی نمانده ، اینجا شما و جناب aliila مانده اید!
            گشتی در لاله زار
            http://www.eca.ir/forum2/index.php?topic=76138.0

            http://www.eca.ir/forum2/index.php?topic=76141

            دیدگاه


              پاسخ : برنامه نویسی به زبان اسمبلی

              وقفه دیگر ناشی از یک تایمر است که به دلیل مشغول بودن بیش از حد سیستم، در شرایط خاصی پاسخ گویی به آن به تاخیر می افتد و در این شرایط با هر بار اجرای وقفه، در پایان روتین آن تقاضای مجددی ایجاد می شود و فرصتی برای پاسخگویی به وقفه تایمر دیگر و با اولویت پائین تر ایجاد نمی شود.
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


                پاسخ : برنامه نویسی به زبان اسمبلی

                سلام
                میشه ادامه بدین آموزش اسمبلی رو؟
                من خیلی مایلم یاد بگیرم
                و شخص حرفه ای مثل شما کم پیدا میشه
                ممنون
                به یک عدد موتور براشلس دست دوم نیازمندم

                فوری
                09373606205
                بهرامی

                دیدگاه


                  پاسخ : برنامه نویسی به زبان اسمبلی

                  درصفحات ابتدایی تاپیک، مطالب زیادی در مورد برنامه نویسی اسمبلی و عملکرد دستورالعمل ها نوشته شده که فراتر از آن اگر سوالی دارید می توانید مطرح کنید. از نظر آموزش کلی هم در ادامه فیلم های آموزش AVR بعد از توضیح سخت افزارهای باقیمانده، در مورد instruction set های اسمبلی خانواده AVR توضیح داده خواهد شد.
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


                    پاسخ : برنامه نویسی به زبان اسمبلی

                    [left][right]سلام به همگی دوستان.من تازه ایکسمگا با اسمبلی رو شروع کردم.کد زیر رو با AVR STUDIO 4برای ارتباط سریال با کامپیوتر نوشتم(باXMEGA64A3).اما وقتی اجراش میکنم کامپایلر هیچ کدوم از رجیستر ها رو نمیشناسه و ارور میده که UNDEFINED SYMBOL.(البته در مورد نام رجسترها).اگه میشه یه کمکی بکنید اشکالو بفهمم.ببخشید وقتتونو گرفتم.
                    (عذر میخوام که سوالو تو دو تا تاپیک مطرح کردم)

                    [left].CSEG
                    RJMP MAIN
                    .ORG 0X032
                    RJMP NDAT
                    .ORG 0X100
                    MAIN:
                    SER R19
                    OUT PORTD.DIRSET,R19
                    LDI R19,0X08
                    OUT PORTC.DIRSET,R19
                    LDI R19,0X03
                    OUT OSC.CTRL,R19
                    A1:
                    SBRS OSC.STATUS,1
                    RJMP A1
                    SBI USARTC0.CTRLB,3
                    LDI R21,0X10
                    OUT USARTC0.CTRLA,R21
                    LDI R22,12
                    OUT USARTC0.BAUDCTRLA,R22
                    LDI R23,40
                    OUT USARTC0.BAUDCTRLB,R23
                    SEI
                    A2:
                    LDI R25,0X55
                    OUT PORTD.OUT,R23
                    RJMP A2
                    NDAT:
                    LDI R24,'A'
                    OUT USARTC0.DATA,R24
                    RETI

                    دیدگاه


                      پاسخ : برنامه نویسی به زبان اسمبلی

                      1- در ابتدای کد باید نوع میکروکنترلر را مشخص کنید:

                      کد:
                      .INCLUDE "atxmega64a3def.inc"


                      2- برای نام رجیسترها بجای . از _ استفاده کنید. (مثلا PORTA_OUT)

                      3- محدوده آدرس رجیسترهای مورد نظر در کد شما، اجازه استفاده از دستوراتی مانند OUT و SBI و مانند آن را نمی دهد و بجای استفاده از OUT باید از STS و آدرس مناسب استفاده کنید. بجای SBI هم بصورت مناسب از OR یا ORI استفاده کنید. دستور SBRS هم تنها می تواند با R0-R31 بکار رود و نوع استفاده از آن صحیح نیست.
                      اوژن: به معنای افکننده و شکست دهنده است
                      دانایی، توانایی است-Knowledge is POWER
                      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                      دیدگاه


                        پاسخ : برنامه نویسی به زبان اسمبلی

                        سلام.اقای طراح از اینکه وقت گذاشتید سوال منو جواب دادید ممنونم.بی زحمت چندتا سوال دیگه هم داشتم.در شبه دستور .ORG دوم که به main میپریم,ادرس جلوی .ORG از کجا باید شروع بشه؟وکمترین مقدارش چیه؟
                        سوال بعدیم اینه که روشی در اسمبلی وجود نداره که بشه مستقیما رجیستر های واحدهایی مثل تایمر, یوزارت,DMA,و . . . رومقداردهی و دستکاری کرد؟

                        برنامه ی زیرهم برنامه ی اولمه,جواب هم داد و خروجی روی hyperterminal دیدم.به نظر شما برنامه بهینه است؟اگه نه باید چی کار کنم؟

                        **serial commiunication.just transmit**

                        .INCLUDE "ATxmega64A3def.inc"
                        .CSEG
                        JMP MAIN
                        .ORG USARTC0_DRE_vect
                        JMP NDAT
                        .ORG 0X1000
                        MAIN:
                        LDI R19,0XFF
                        STS PORTD_DIRSET,R19
                        LDI R19,0X08
                        STS PORTC_DIRSET,R19
                        LDI R19,0X03
                        STS OSC_CTRL,R19
                        A1:
                        LDS R19,OSC_STATUS
                        SBRS R19,1
                        RJMP A1
                        LDI R29,0XD8
                        STS CPU_CCP,R29
                        LDI R29,0X01
                        STS CLK_CTRL,R29
                        LDI R21,0X03
                        STS USARTC0_CTRLC,R21
                        LDI R22,12
                        STS USARTC0_BAUDCTRLA,R22
                        LDI R23,0X40
                        STS USARTC0_BAUDCTRLB,R23
                        LDI R25,0X08
                        STS USARTC0_CTRLB,R25
                        LDI R21,0X01
                        STS USARTC0_CTRLA,R21
                        LDI R21,0X01
                        STS PMIC_CTRL,R21
                        SEI
                        LDI R25,0XFF
                        STS PORTD_OUT,R25
                        A2: RJMP A2
                        NDAT:
                        LDI R24,'A'
                        STS USARTC0_DATA,R24
                        RETI


                        شرمنده وقتتنو گرفتم.

                        دیدگاه


                          پاسخ : برنامه نویسی به زبان اسمبلی

                          جدولی برای آدرس بردارهای وقفه وجود دارد که در فصل 14 اطلاعات سری A3 قابل دسترسی است. با توجه به آدرس های مذکور و وقفه های مورد استفاده می توانید آدرس ابتدای کد خود (بعد از بردارها وقفه) را بدست آورید. در مورد سوال بعدی هم بصورت خاص در مورد پورت ها می توان با استفاده از نسبت دادن آنها به پورت های مجازی، از دستوراتی مانند SBI و CBI استفاده کرد. اما برای بقیه رجیسترها باید آنها را به R0-R31 منتقل و بعد از تغییرات مجددا در جای خود ذخیره کنید. درباره محتوای برنامه هم در فرصت دیگری آن را بررسی خواهم کرد.
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


                            پاسخ : برنامه نویسی به زبان اسمبلی

                            استاد خیلی ممنونم وقت گذاشتید جواب رو دادید.
                            مشکلی که جدیدا در برنامه نویسی اسمبلی باهاش برخورد کردم کار با تایمرهاست.اول اینکه با اسمبلی چجوری میشه یه رجیستر 16 بیتی مثلا TCC0_PER رو دستکاری کرد؟(من که هر چقدر با TEMP و رجیستر ها و دستورات دیگه کار کردم نتونستم بهش مقدار بدم.)
                            دوم اینکه برای شبیه سازی تابع DELAY بااستفاده از تایمر(ایجاد یک تاخیر ساده)باید با کدوم رجیستر ها از واحد تایمر/کانتر کار کرد؟( رجیسترهای این واحد زیادندوشبیه به هم و در MANUAL هم توضیحات مبهمه.)
                            باز هم از اینکه وقت ارزشمند شما رو گرفتم عذر میخواهم.
                            ممنون

                            دیدگاه


                              پاسخ : برنامه نویسی به زبان اسمبلی

                              نوشته اصلی توسط ilia20
                              مشکلی که جدیدا در برنامه نویسی اسمبلی باهاش برخورد کردم کار با تایمرهاست.اول اینکه با اسمبلی چجوری میشه یه رجیستر 16 بیتی مثلا TCC0_PER رو دستکاری کرد؟(من که هر چقدر با TEMP و رجیستر ها و دستورات دیگه کار کردم نتونستم بهش مقدار بدم.)
                              این سوال شما را تاکنون ندیده بودم. برای مقدار دهی به رجیسترهای 16 بیتی در XMEGA، باید ابتدا به بایت با ارزش کمتر و در مرحله بعد به به بایت با ارزش بیشتر مقدار دهی شود (این روال در AVR برعکس است). نکته اصلی برای این کار در برنامه نویسی اسمبلی، استفاده از آدرس رجیستر برای بایت پائین تر و آدرس بعد از آن برای بایت بالاتر است. مثلا:

                              کد:
                              LDI	R16,LOW(15999)
                              STS	TCC0_PER,R16
                              LDI	R16,HIGH(15999)
                              STS	TCC0_PER+1,R16


                              سوال بعدی شما هم در مورد رجیسترهای تایمرهاست و ارتباطی به برنامه نویسی اسمبلی ندارد که می توانید آن را در تاپیک مناسب مطرح کنید.
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه


                                پاسخ : برنامه نویسی به زبان اسمبلی

                                سلام به همه دوسنان
                                جناب طراح یه سوال داشتم در مورد تشخیص عبور از صفر یک موج سینوسی.چطور میشه با میکرو این کار رو انجام بدیم؟یه جایی خوندم کا میکرو مقایسه کننده ای داره که برای این کاره!نحوه استفاده از اون رو اگه میشه توضیح بدین(قبلا از اینکه ممکنه سوالم جای نامربوطی طرح شده باشه عذر میخوام ولی چون کاربر تازه واردی هستم امیدوارم به بزرگی خودتون ببخشید)

                                دیدگاه

                                لطفا صبر کنید...
                                X