اطلاعیه

Collapse
No announcement yet.

کمک خیلی خیلی فوری واسه روز سه شنبه همین هفته

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

    کمک خیلی خیلی فوری واسه روز سه شنبه همین هفته

    سلام
    روشی پیدا کنید که عدد باینری را به عدد bcd تبدیل کنید و بر عکس و یک ریزبرنامه برای هر دو بنویسید.
    به زبان اسمبلی در 8051
    لطفا کمک کنید خیلی فوری میخوام

    #2
    پاسخ : کمک خیلی خیلی فوری واسه روز سه شنبه همین هفته

    u

    دیدگاه


      #3
      پاسخ : کمک خیلی خیلی فوری واسه روز سه شنبه همین هفته

      نوشته اصلی توسط محمد مینائیان
      سلام
      روشی پیدا کنید که عدد باینری را به عدد bcd تبدیل کنید و بر عکس و یک ریزبرنامه برای هر دو بنویسید.
      به زبان اسمبلی در 8051
      لطفا کمک کنید خیلی فوری میخوام
      با سلام
      روش تبدیل عدد باینری به عدد بی سی دی:
      عدد باینری در اکومولاتور
      mov a,#xxb
      عدد 100 در رجیستر بی
      mov b,#100d
      تقسیم
      div ab
      نتیجه ( خارج قسمت ) ( عدد صدگان ) در رجیستر 30h
      mov 30h,a
      باقیمانده تقسیم برای تبدیل دهگان و یکان
      mov a,b
      عدد 10 در رجیستر بی
      mov b,#10d
      تقسیم
      div ab
      عدد دهگان در رجیستر 31h
      mov 31h,a
      عدد یکان در رجیستر 32h
      mov 32h,b
      این هم یه برنامه دیگه به نقل از سایت www.8052.com:
      ;************************************************* *******************
      ;************************************************* *******************
      ;** Function: bcd_to_byte **
      ;** Purpose: Convert a two-byte BCD into a single byte **
      ;** Input: A = Hi byte to convert (ASCII 0x30-0x39,0x41-0x46)**
      ;** R0 = Lo byte to convert (ASCII 0x30-0x39,0x41-0x46)**
      ;** Output: A = Converted value (binary 0x00-0xFF) **
      ;** Destroyed Registers: None **
      ;************************************************* *******************
      ;************************************************* *******************
      bcd_to_byte:
      XCH A,R0
      SUBB A,#30h
      JNB ACC.4,bcd_to_byte_2
      SUBB A,#07h
      bcd_to_byte_2:
      XCH A,R0
      SUBB A,#30h
      JNB ACC.4,bcd_to_byte_3
      SUBB A,#07h
      bcd_to_byte_3:
      SWAP A
      ORL A,R0
      RET

      ;************************************************* *******************
      ;************************************************* *******************
      ;** Function: byte_to_bcd **
      ;** Purpose: Convert a single byte into two BCD digits **
      ;** Input: A = Byte to convert (0x00-0xFF) **
      ;** Output: A = High nibble (ASCII 0x30-0x39,0x41-0x46) **
      ;** R0 = Low nibble (ASCII 0x30-0x39, 0x41-0x46) **
      ;** Destroyed Registers: None **
      ;************************************************* *******************
      ;************************************************* *******************
      byte_to_bcd:
      MOV R0,A
      ANL A,#0Fh
      ADD A,#0F6h
      JNC byte_to_bcd_2
      ADD A,#07h
      byte_to_bcd_2:
      ADD A,#3Ah
      XCH A,R0
      SWAP A
      ANL A,#0Fh
      ADD A,#0F6h
      JNC byte_to_bcd_3
      ADD A,#07h
      byte_to_bcd_3:
      ADD A,#3Ah
      RET

      END

      دیدگاه


        #4
        پاسخ : کمک خیلی خیلی فوری واسه روز سه شنبه همین هفته

        سلام
        شما می تونی از روش زیر هم استفاده کنی:

        دستور DA A

        از این دستور برای جمع BCD استفاده می شود همانطور که می دانیم اعداد ما از 0 تا 9 می باشد که در میکرو بعد از جمع ممکن است این حاصل جمع BCD نباشد و برای ما قابل فهم نیست یعنی اینکه قابل نمایش روی سون سگمنت یا LCD نیست که برای حل این مشکل از دستور DA A استفاده می شود قابل ذکر است که این دستور تنها بعد از دستور جمع و با انباره می تواند کار کند یعنی اینکه قبل از DA A باید از دستور جمع حتما استفاده شود. عددی که قرار است برای BCD بودن تست شود اول باید انباره قرار گیرد و سپس از این دستور استفاده کنیم. این دستور یک بایت را چک می کند و در صورت لزوم به نیبل پایین عدد 6 را اضافه می کند تا این BCD استاندارد شود و برای نیبل بالا عدد 6 یعنی 60 را اضافه می کند. به مثال های زیر توجه کنید!
        17H+28H=3FH=00111111B

        عدد F یک عدد BCD نمی باشد همانطور که می دانیم حداکثر عدد یعنی 9 دارای کد 1001 می باشد که در نیبل پایین این عدد 1111 می باشد برای BCD کردن آن به صورت زیر عمل می کنیم. ابتدا عدد را در انباره قرار داده و سپس از دستور DA A استفاده می کنیم دستور به طور خودکار عدد 6 را به نیبل پایین اضافه می کند.

        MOV A,#17H 17

        ADD A,#28H +28

        DA A 3F+06=45H

        برای نیبل بالا هم همین مراحل انجام می گیر البته همانطور گفتیم این دستو خودکار است یعنی اینکه اگر خود حاصل جمع BCD بود دیگر عدد 6 را اضافه نمی کند.

        دیدگاه


          #5
          پاسخ : کمک خیلی خیلی فوری واسه روز سه شنبه همین هفته

          نوشته اصلی توسط محمد مینائیان
          سلام
          روشی پیدا کنید که عدد باینری را به عدد bcd تبدیل کنید و بر عکس و یک ریزبرنامه برای هر دو بنویسید.
          به زبان اسمبلی در 8051
          لطفا کمک کنید خیلی فوری میخوام
          سلام.

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


          متشکرم
          www.icesi.ir

          دیدگاه

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