اطلاعیه

Collapse
No announcement yet.

چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

    سلام دوستان من یک سوالی داشتم. من دوعدد تو تایمر م به صورت TH0و TL0 دارم میخوام که این دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم و بعد این عدد 16 بیتی را تقسیم بر 2 کنم .لطفا راهنمایی کنید که چه جوری این کار را انجام بدهم(فقط با زبان اسمبلی8051
    ممنونم

    #2
    پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

    با سلام توی 8051 می تونی این مقدار رو بخونی توی رجیستر dptrرجیستر کم ارزش و باارزش اون بار بکنی تنها این رجیستر می تونه یه جا به صورت 16 بیتی این دو عدد رو یجا برات لود بکنه

    دیدگاه


      #3
      پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

      سلام
      متاسفانه میکرو کنترل خانواده ی 8051 تقسیم عدد 16 بیتی را پوشش نمی دهد
      و شما باید خودتون یه برنام بنویسید و اونو بَست بدید
      مثلا 2ضرب در 3 = دو بار سه را با خودش جمع کنیم 3+3
      برای تقسیم هم به همین منوال
      شما باید یه زیر برنامه بنویسید که این کار رو انجام بده. دونه دونه هشت بیت را بر دو تقسیم و نتیجه هایش را در هم اثر بدهید
      موفق باشید
      خدا حافظ

      دیدگاه


        #4
        پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

        ولی دوستان من اگه این عدد را به دو هشت بیتی تبدیل کنم و هر کدوم را تقسیم بر دو کنم حاصل یک چیز دیگه در میاد

        دیدگاه


          #5
          پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

          نوشته اصلی توسط mhe
          ولی دوستان من اگه این عدد را به دو هشت بیتی تبدیل کنم و هر کدوم را تقسیم بر دو کنم حاصل یک چیز دیگه در میاد
          درسته این طوری نمیشه. منظور من هم این بود که باید یه رابطه ی ریاضی برای این کار بسازی. باید طبق یه رابطه بست دهی.
          خودتون فکر کنید و به هر جوابی که رسیدید اعلام کنید تا باهم درست کنیمش. یعنی خودتون سعی کنید من دیگه امشب وقت ندارم اگه حل نشد ایشالا فردا.
          خدا حافظ

          دیدگاه


            #6
            پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

            سلام
            خوب اگه فقط تقسیم بر 2 میخوای کار خیلی راحته
            چون واسه تقسیم بر 2 فقط لازمه یه شیفت به راست انجام بدی به همین راحتی
            حالا هر 2 عدد 8 بیتی رو شیفت بده به راست البته اول H رو بعد هم قسمت L رو البته با شیفت با carry
            اگه نیاز به توضیح بیشتر بود بگید.......

            دیدگاه


              #7
              پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

              بازم سلام به دوستان گلم.آقا من دارم یک فاصله یاب با آلتراسونیک و 8051 میسازم. برای محاسبه من عددبدست آمده در TLوTH1را بیرون کشیده هر عدد را به روش زیر تقسیم بر 2 کرده وپس از جمع کرده خارج قسمت و باقیمانده حاصل را درون r6 و همچننین r7 ریختم .دوتا سوال داشتم اول اینکه ببینید من درست اینکار رو کردم.اگه اشکال داره یکی لطف کنه برنامه این تیکه را بنویسه به خدا جبران میکنم. و دوم اگه این روش درسته من میخوام عدد بدست آمده درون R6 وR7را چه جوری روی سون سگمنت نشون بدم.ممنون میشم. به محض ساختن این مدار مدار را برای دوستان گل سایت قرار میدهم.

              مربوط به وقفه که به گیرنده وصل است:ORG 0013H
              SETB TR1
              HERE: JNB INT1,HERE
              CLR TR1
              MOV R0,TL1
              MOV R1,TH1
              LJMP CAL

              قسمت محاسباتی:
              CAL: MOV A,R0 ;CALCULATE TL1
              MOV B,#2
              DIV AB
              ADDC A,B
              MOV B,#34
              MUL AB
              MOV B,#10
              MUL AB
              MOV P1,A
              SJMP CAL1
              ;==============CALCULATE TH1===========
              CAL1: MOV A,R1 ;CALCULATE TL1
              MOV B,#2
              DIV AB
              ADDC A,B
              MOV B,#34
              MUL AB
              MOV B,#10
              MUL AB
              MOV R7,A

              دیدگاه


                #8
                پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

                smt پس کجایی؟
                یک جواب بده

                دیدگاه


                  #9
                  پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

                  سلام
                  در مورد سون سگمن فکر کنم تو سایت یه چیزایی باشه
                  اما مقدمتا عرض کنم که . شما از چه نوع سون سگمنتی می خواهی استفاده کنی؟
                  سون سگمنت رو دو جور میشه به میکرو وصل کرد یکی به روش مالتی پلکس کردن و دیگری به روش معمولی . که روش معمولی پایه های زیادی رو اشغال میکنه
                  حالا کدومشون

                  سوال اول را هم همین الآن فکر می کنم .
                  خدا حافظ

                  دیدگاه


                    #10
                    پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

                    من از روش مالتی پلکس میخوام انجام بدم .راست برنامه ام درست بود؟

                    دیدگاه


                      #11
                      پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیت

                      باز هم سلام

                      در مورد برنامه ی مالتی پلکس کردن ، من این برنامه را نوشتم و تو پروتئوس هم شبیه سازیش کردم، حتی تو انجمن هم هست . حالا هر کدوم که مایل بودید.

                      اما در مورد تقسیم برنامه ی شما رو دیدم نفهمیدم  بعد از یک بار تقسیم کردن و جمع کردن چرا در ثبات B  عدد 36 را ریخته اید
                      همون طور که دوستمون هم گفتند اگه فقط تقسیم بر دو می خواهید خیلی راحت هست . اما متاسفانه من الآن حضور ذهن ندارم و حتی کتاب میکرو هم  تو شهر خودمون جا مونده و الآن جلوم نیست تا حد اقل دستورات رو نگاه کنم. اما تا اونجایی کووه یادم بود خیلی راحت میشه همچین کاری کرد فقط با یه مکمل گرفتن و شیفت دادن میشد که من یادم نیست چی کار می کردیم. ایشالا دوستان دیگه این بخش ادامه خواهند داد ) .
                      خدا حافظ

                      دیدگاه


                        #12
                        پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

                        سلام .عزیزم من 34 و 10 را برای تبدیل عدد به 340 و ضربرد عدد به دست آمده گذاشته ام.340 هم سرعت صوت است اگه زمان اندازه گیری شده را نصف کنم و ضربدر سرعت صوت بکنیم فاصله مانبدست می اید ولی تنها مشکل من تو شناسایی عدد ونشون دادنش روی سون است

                        دیدگاه


                          #13
                          پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

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

                          اما چه جوری مالتی پلکس کنیم

                          شما در ابتدا باید یک رجیستر را برای نگه داری اعدادی که می خواهدی بر روی سون سگمنت نشان دهید اختصاص دهید. و تمام مطالبی را که پردازش کرده اید و می خواهید بر روی سون سگمنت نشان دهید در آنجا بریزید.
                          بعد شما باید در بازه های زمانی مشخصی این اعداد را بردارید و بر روی پایه ی خروج قرار دهید مثلا روی پایه ی پی یک و تا این اعداد را در پایه ی خروجی لود کردید بلافاصه پایه ی فعال ساز سون سگمنتی را که می خواهید اعداد در او نمایش داده بشه را فعال کنید.
                          مثلا شما می خواید رقم ده گان را بر روی ده گان سون سگمنت نشان دهید . عدد ده گان را از روی رجیستر سون سگمنت به پایه های پورت پی یک می ریزید و سریع پایه ی فعال ساز ده گان را فعال می کنید و همین طور بعد صد گان و الی آخر و وقعی یک دوره تمام شد ( یکان و ده گان و صدگان و ... را بر روی سون سگمنت های مربوطه ریختید) سریعا دوباره باید این حلقه را تکرار کنید تا سون سگمنت هاتون چشمک نزنند.
                          یعنی از پدیده ی خطای دید استفاده کنید. برای لمس کردن چگونگی کار همین الآن شما چند بار چشمتون رو سریعا باز و بسته کنید یعنی پلک بزنید. با این که شما لحظاتی چشمتون رو می بندید اما باز هم صفحه ی مانیتور را پیوسته بدون سیاه شدن کامل می بی نید . ( این روش هم این طوری کار میکنه)

                          خوب حالا یه مورد دیگه : اعدادی که شما از رجیستر سون سگمنت می خونید و نشونشون می دهید که بی سی دی نیستند بنابراین علائم بی مفهومی روی سون سگمنت ها نشون داده میشه .
                          حال دو راه وجود داره
                          1- استفاده از ای سی انکودر برای تبدیل اعداد پورت پی یک به بی سی دی و ارسال به سون سگمنت است
                          که شماره ی آی سی اش هم 7446 و یا 7448 هست
                          2- نوشتن زیر برنامه ایی که اعداد موجود در رجیستر سون سگمنت رو قبل از ارسال به پی یک به اعداد سون سکمنت تبدیل کند.

                          خدا حافظ

                          دیدگاه


                            #14
                            پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

                            این لینک ها را هم ببینید
                            می دونم خیلی کسل کننده هست. آدم مطلبی رو که می خواهد سخت پیدا میشه یعین تو لینک های زیر مطالب جور وا جوری هست که دستیابی به یک مطلب خاص رو سخت میکنه
                            من خودم هم برنامه ای که توضیح دادم رو نوشتم اگه خواستید براتون پلود کنم
                            اما تو لینک های زیر هم هست (البته نه به صورت مجزا اما مثلا تو پروژه ی ساعت مطمئنا سون سگمنت هم هست البته نه ساعت با ال سی دی!!)
                            http://www.eca.ir/forum2/index.php/topic,792.0.html
                            http://www.eca.ir/forum2/index.php/topic,1263.0.html
                            http://www.eca.ir/forum2/index.php/topic,775.0.html
                            http://www.eca.ir/forum2/index.php/topic,615.0.html
                            خدا حافظ

                            دیدگاه


                              #15
                              پاسخ : چگونه دو عدد 8 بیتی را به صورت یک عدد 16 بیتی تبدیل کنم؟

                              سلام

                              من خودم قبلا یه برنامه ای نوشته بودم برای همین کار که با مقایسه کار میکرد و یه مقدار طولانی بود
                              اما این برنامه ای که در پایی قرار میدهم خیلی خلاصه تر هست و از یه کتاب دیدمش

                              MOV R0,A
                              ANL A,#0FH
                              MOV P3,A
                              SETB P3.4
                              CALL DELAYS
                              -----------------------------------------------------
                              MOV A,R0
                              ANL A,#0F0H
                              SWAP A
                              MOV P3,A
                              SETB P3.5
                              CALL DELAYS
                              RET
                              ---------------------------------------
                              DELAYS:
                              MOV R3,#56H
                              WAIT: DJNZ R3,WAIT
                              RET

                              تو ضیحاتش رو هم خدمتتون عرض می کنم

                              هدف این هست که محتویات رجیستر A را که مقدار هگز داره توی پایه های P3.0 تا P3.3 بریزه
                              شاید تعجب کنید که محتویات یه رجیستر هشت بیتی چه جوری توی چهار بیت می ریزه
                              داستان این هست که اول چهار بیت کم ارزش رو میریزه
                              و بعد از یه زمانی
                              چهار بیت پر ارزش
                              توجه داشته باشید که به خروجی این پایه ها P3.0 تا P3.3 آی سی انکودر وصل میشه

                              بریم سراغ برنامه
                              برنامه را ادامه دهید تا جایی که به اولین خط ممتد رسیدید
                              تا اینجا برنامه میاد و 4بیت کم ارزش رجیستر Aرا در پورت P3 قرار می دهد و همزمان پایه ی P3.4را فعال می کند (این پایه پایه ی فعال ساز سون سگمنت یکان است
                              بعد یه زمانی صبر می کند
                              ----------------------------------
                              از خط اول تا دوم (آخرین خط)
                              همین داستان را برای چهار بیت پر ارزش انجام میده

                              ================================================== ===================================
                              که شما می توانید تایمری را تنظیم کنید تا در وقفه های زمانی ثابت این کار را ادامه دهد تا صفحه ی سون سگمنت چشمک نزند


                              موفق باشید
                              خدا حافظ

                              دیدگاه

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