اطلاعیه

Collapse
No announcement yet.

تفکیک ارقام ده دهی در اعداد باینری

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

    تفکیک ارقام ده دهی در اعداد باینری

    سلام
    من و دوستم تو این پروژمون یه گیر دیگه هم خوردیم :sad: :cry:
    یه مداری تو این پروژه لازمه که عدد ۸ بیتی رو به صورت بیانری بگیره و ارقام ده دهیش رو جدا کنه و به صورت باینری بهمون بده
    یعنی مثلا عدد 01110000 (112 در مبنای 2) رو بگیره و خروجی بهمون ۳ تا خروجی ۴ بیتی بده . 0001 (عدد ۱) و 0001 (عدد ۱) و 0010 (عدد ۲)
    اگه کمک کنید واقعا ممنونتون میشیم :(

    #2
    پاسخ : تفکیک ارقام ده دهی در اعداد باینری

    نوشته اصلی توسط soroush_tayyebi
    سلام
    من و دوستم تو این پروژمون یه گیر دیگه هم خوردیم :sad: :cry:
    یه مداری تو این پروژه لازمه که عدد 8 بیتی رو به صورت بیانری بگیره و ارقام ده دهیش رو جدا کنه و به صورت باینری بهمون بده
    یعنی مثلا عدد 01110000 (112 در مبنای 2) رو بگیره و خروجی بهمون 3 تا خروجی 4 بیتی بده . 0001 (عدد 1) و 0001 (عدد 1) و 0010 (عدد 2)
    اگه کمک کنید واقعا ممنونتون میشیم :(
    سلام
    در چه محیطی و با چه زبانی برنامه نویسی میکنید؟
    روش کار به این صورت است که عدد گرفت شده را به مبنای ده تبدیل کنید 01110000 > 112
    سپس ارقام عدد بدست آورده را جدا سازی کنید 112 > 1 ، 1 ، 2 ( خیلی راحته اول تقسیم بر 100 کن خارج قسمت را در یه متغیر ذخیره کن سپس خارج قیمت بدست آمده ضربدر 100 را از عدد اصلی کسر کن میماند 12 سپس عدد جدید را بر 10 تقسیم کن و خارج قسمت ( جز صحیح منظورم ) را در متغیر دوم که یک میشه در این مثال و بعد خارج قسمت دوم را ضربدر 10 و از عدد اصلی دومی که 12 بود کم کنید 2 بدست می آید و آن را در متغیر سوم ذخیره کنید.
    1 و 1 و 2 را بدست آوردی حالا هر یک را جداگانه به باینری تبدیل کن
    موفق باشید :applause:
    کمتر سخن گویم
    بیشتر عمل کنیم

    دیدگاه


      #3
      پاسخ : تفکیک ارقام ده دهی در اعداد باینری

      نوشته اصلی توسط mpc
      سلام
      در چه محیطی و با چه زبانی برنامه نویسی میکنید؟
      روش کار به این صورت است که عدد گرفت شده را به مبنای ده تبدیل کنید 01110000 > 112
      سپس ارقام عدد بدست آورده را جدا سازی کنید 112 > 1 ، 1 ، 2 ( خیلی راحته اول تقسیم بر 100 کن خارج قسمت را در یه متغیر ذخیره کن سپس خارج قیمت بدست آمده ضربدر 100 را از عدد اصلی کسر کن میماند 12 سپس عدد جدید را بر 10 تقسیم کن و خارج قسمت ( جز صحیح منظورم ) را در متغیر دوم که یک میشه در این مثال و بعد خارج قسمت دوم را ضربدر 10 و از عدد اصلی دومی که 12 بود کم کنید 2 بدست می آید و آن را در متغیر سوم ذخیره کنید.
      1 و 1 و 2 را بدست آوردی حالا هر یک را جداگانه به باینری تبدیل کن
      موفق باشید :applause:
      سلام
      دوست عزیز ممنونم از پاسختون . من مدارش رو میخوام نه برنامه نویسیش رو . شغل خود من برنامه نویسی هستش و با کد راحت میتونم این کار رو بکنم ولی استاد مدار منطقی تو دانشگاه پروژه ای داده که این یه تیکه از اون پروژه هستش که توش موندم:(

      دیدگاه


        #4
        پاسخ : تفکیک ارقام ده دهی در اعداد باینری

        تا دو رقم میدونم ولی سه رقم باید یه سرچی کنم بگم
        اگه درست فهمیدم شما میخوای یه دیکدر باینری به BCD طراحی کنی؟
        البته با یه حافظه 8*256 هم میشه اینکار کرد

        بفرما
        الگوریتم کار اینجا میتونی ببینی
        http://people.ee.duke.edu/~dwyer/courses/ece52/Binary_to_BCD_Converter.pdf
        یه مثال هم با Verilog نوشته

        اگه می خوای با آی سی طراحی کنی از 74185 استفاده کن
        http://www.utm.edu/staff/leeb/DM74185.pdf
        [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

        دیدگاه


          #5
          پاسخ : تفکیک ارقام ده دهی در اعداد باینری

          نوشته اصلی توسط ADMlN
          تا دو رقم میدونم ولی سه رقم باید یه سرچی کنم بگم
          اگه درست فهمیدم شما میخوای یه دیکدر باینری به BCD طراحی کنی؟
          البته با یه حافظه 8*256 هم میشه اینکار کرد

          بفرما
          الگوریتم کار اینجا میتونی ببینی
          http://people.ee.duke.edu/~dwyer/courses/ece52/Binary_to_BCD_Converter.pdf
          یه مثال هم با Verilog نوشته

          اگه می خوای با آی سی طراحی کنی از 74185 استفاده کن
          http://www.utm.edu/staff/leeb/DM74185.pdf
          لطفا اگر ایرادی در صحبت هام میبینید بفرمایید:
          این الگوریتم ظاهرا تا 19 بیشتر جواب نمیده بعد از اون باید با 6 جمع بشه تا جواب بدست بیاد. در ضمن بعد از 29 یکبار 6 هم جواب نمیده.

          در کل رابطه ای که برای باینری به BCD بشه استفاده کرد اون هم بدون کدنویسی به نظر کار خیلی سختی میاد ولی میتونم بگم رابطه زیر برای اعداد صادق هست:

          اعداد زیر 100 یعنی (0 تا 99) به ازای هر دهگان یکبار با 6 جمع بشند جواب درست میشه مثلا : 99=(01100011) به اضافه 9*6 =54= (0110110) میشود 1001 1001 که معادل BCD عدد 99 هست.

          اعداد بین 100 تا 199 به ازای هر صدگان یکبار به اضافه 25 بار با 6 جمع میشن مثلا 100 قرار هست بشه 0000 0000 0001 که با (1100100) مقدار 100-256 = 156 = 26*6 تا فاصله داره!

          امیدوارم موفق باشید!
          It's nice to be important but it's important to be nice!

          از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.

          دیدگاه


            #6
            پاسخ : تفکیک ارقام ده دهی در اعداد باینری

            نوشته اصلی توسط رضا شفقی
            لطفا اگر ایرادی در صحبت هام میبینید بفرمایید:
            این الگوریتم ظاهرا تا 19 بیشتر جواب نمیده بعد از اون باید با 6 جمع بشه تا جواب بدست بیاد. در ضمن بعد از 29 یکبار 6 هم جواب نمیده.

            در کل رابطه ای که برای باینری به BCD بشه استفاده کرد اون هم بدون کدنویسی به نظر کار خیلی سختی میاد ولی میتونم بگم رابطه زیر برای اعداد صادق هست:

            اعداد زیر 100 یعنی (0 تا 99) به ازای هر دهگان یکبار با 6 جمع بشند جواب درست میشه مثلا : 99=(01100011) به اضافه 9*6 =54= (0110110) میشود 1001 1001 که معادل BCD عدد 99 هست.

            اعداد بین 100 تا 199 به ازای هر صدگان یکبار به اضافه 25 بار با 6 جمع میشن مثلا 100 قرار هست بشه 0000 0000 0001 که با (1100100) مقدار 100-256 = 156 = 26*6 تا فاصله داره!

            امیدوارم موفق باشید!
            مطمئنی؟
            الگوریتم محدودیت خاصی نداره و فرمولش اینه

            1. Shift the binary number left one bit.
            2. If 8 shifts have taken place, the BCD number is in the Hundreds, Tens, and Units column.
            3. If the binary value in any of the BCD columns is 5 or greater, add 3 to that value in that BCD column.
            4. Go to 1.


            مثلا عدد 120 میشه 0111,1000
            شیفت 1 : 0,1111,0000
            شیفت 2 : 01,1110,0000
            شیفت 3 : 011,1100,0000
            شیفت 4: 0111,1000,0000
            جمع : 1010,1000,0000
            شیفت 5: 1,0101,0000,0000
            جمع : 1,1000,0000,0000
            شیفت 6: 11,0000,0000,000
            شیفت 7: 110,0000,0000,0000
            جمع : 1001,0000,0000,0000
            شیفت 8: 1,0010,0000,0000,0000
            نتیجه : 1,0010,0000 => 1,2,0 => 120

            [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

            دیدگاه


              #7
              پاسخ : تفکیک ارقام ده دهی در اعداد باینری

              حق با شماست برداشت من از الگوریتم اشتباه بود!
              It's nice to be important but it's important to be nice!

              از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.

              دیدگاه


                #8
                پاسخ : تفکیک ارقام ده دهی در اعداد باینری

                نوشته اصلی توسط soroush_tayyebi
                سلام
                دوست عزیز ممنونم از پاسختون . من مدارش رو میخوام نه برنامه نویسیش رو . شغل خود من برنامه نویسی هستش و با کد راحت میتونم این کار رو بکنم ولی استاد مدار منطقی تو دانشگاه پروژه ای داده که این یه تیکه از اون پروژه هستش که توش موندم:(
                سلام
                من متوجه نشدم چون شما کامل توضیح نمیدهید که میخواهید با PC این کار را انجام بدهید یا با AVR یا با قطعات آی سی های لاجیک این کار را انجام دهید؟ :redface:
                کمتر سخن گویم
                بیشتر عمل کنیم

                دیدگاه

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