Thông báo

Collapse
No announcement yet.

chuyển số 16bit thanh bcd...

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • chuyển số 16bit thanh bcd...

    mình có đọc qua mấy bài trên điễn đàn ve cách chuyển đổi 16b sang bcd.
    nhưng đọc hoài mà ko hiểu.
    Click image for larger version

Name:	BinarytoBCD.jpg
Views:	1
Size:	349.7 KB
ID:	1414208
    đây là 1 cách,nhưng chưa rõ cách làm.mấy bác bác nào rành nhào vô chỉ e cải.
    cảm ơn mọi người
    đàn bà sinh ra để đàn ông ăn hiếp...ko ăn được thì hiếp....

  • #2
    ai biết giúp mình với...
    đàn bà sinh ra để đàn ông ăn hiếp...ko ăn được thì hiếp....

    Comment


    • #3
      mục đích bạn chuyển đổi là gì

      Comment


      • #4
        dùng đếm xung thôi.
        giá trị xung ở thx và tlx,mình đưa vào xử lí để đưa ra led 7 đoạn đó mà.
        đàn bà sinh ra để đàn ông ăn hiếp...ko ăn được thì hiếp....

        Comment


        • #5
          để đưa ra led 7 đoạn bạn chỉ cần chia kết quả cho 10 lấy phần nguyên để hiển thị là nhannh nhất chứ theo cái bảng trên thì chương trình còn dài hơn nhiều

          Comment


          • #6
            thì chia...nhưng vấn đề là nếu là số ffh...
            làm sao mình hiển thị được
            Last edited by dinhthuan911; 10-09-2012, 22:22.
            đàn bà sinh ra để đàn ông ăn hiếp...ko ăn được thì hiếp....

            Comment


            • #7
              nếu Chung biết có thể chỉ cho mình ko.mình ko rành lắm...đang học dần dần thôi.
              đàn bà sinh ra để đàn ông ăn hiếp...ko ăn được thì hiếp....

              Comment


              • #8
                Dùng tra bảng đi nhanh hơn và tiện hơn
                vd về chuyển 16 sang BCD
                Dieukhien(Tab_7s[input%10]);
                input/=10;
                Dieukhien(Tab_7s[input%10]);
                trong đó input là cái số cần chuyển
                Yêu em do duyên số
                lấy em do sự cố xảy ra.........

                Comment


                • #9
                  255 thì sao phải lưu dạng 16 bit cho nó khổ ra thế ? 8 bit vẫn được cơ mà ?

                  Comment


                  • #10
                    chư hiểu lắm...mấy bác chỉ rõ hơn xíu đi.
                    đàn bà sinh ra để đàn ông ăn hiếp...ko ăn được thì hiếp....

                    Comment


                    • #11
                      Nguyên văn bởi dinhthuan911 Xem bài viết
                      chư hiểu lắm...mấy bác chỉ rõ hơn xíu đi.
                      ví dụ 124 bạn chia 10 đc 1 dư 24
                      lấy 24 chia 10 đc 2 dư 4
                      nếu viết ASM :
                      MOV A,#124
                      MOV B,#10
                      DIV AB ;A=#1 B=#24
                      MOV A,30H ;30H=#1
                      MOV B,#10
                      DIV AB ;A=#2 b=#4
                      MOV A,31H ;31H=#2
                      MOV B,32H ;32H=#4

                      Comment


                      • #12
                        nhưng nếu nó là 1000 xung thì ntn...
                        mình dùng counter đếm xung.giá trị nó nằm ở 2 thanh ghi tl va th.
                        vậy thì sao ma ghéo lại được để mà tính toán.
                        đàn bà sinh ra để đàn ông ăn hiếp...ko ăn được thì hiếp....

                        Comment


                        • #13
                          heyyyy...
                          em lấy tl ra hiển thị.được tới 255...khi tới 256 tức là th = 1,tl = 00000000b
                          nó sai bét rồi...
                          giờ ghép làm sao để khi tl tang toi 11111111b,th là 000000001 thì nó hiẻn thị là 256...
                          đàn bà sinh ra để đàn ông ăn hiếp...ko ăn được thì hiếp....

                          Comment


                          • #14
                            Nguyên văn bởi dinhthuan911 Xem bài viết
                            heyyyy...
                            em lấy tl ra hiển thị.được tới 255...khi tới 256 tức là th = 1,tl = 00000000b
                            nó sai bét rồi...
                            giờ ghép làm sao để khi tl tang toi 11111111b,th là 000000001 thì nó hiẻn thị là 256...
                            Mình không biết bạn định hiển thị lên bao nhiêu LED 7 thanh. Nhưng làm theo cách của anh "chung1608" đi bạn, cách đó mọi người vẫn dùng, có làm sao đâu!
                            Nếu số bạn đếm (từ 100 - 999) thì bạn chia cho 10 hai lần, lần chia đầu được số hàng hàng trăm chứa ở trong thanh ghi A (bạn cất nó vào một vùng RAM nào đó tùy bạn), số dư ở thanh ghi B, lấy số dư chia cho 10 một lần nữa được số hàng chục lưu ở thanh ghi A (bạn lại cất nó vào vùng RAM nào đó), còn số dư chính là số hàng đơn vị lưu ở thanh ghi B (cũng cất nó vào 1 vùng RAM). Tương tự số đến từ 1000 - 9999 thì chia cho 10 ba lần, lần đầu được số hàng nghìn, lần tiếp theo được số hàng trăm, rồi hàng chục và hàng đơn vị, cứ vậy nếu số lớn hơn 9999 thì chia cho 10 bốn lần, 5 lần ..v.v.
                            Khi cần hiển thị số hàng nào thì bạn lấy giá trị của số hàng đó ra và tra mã cho khớp với mã hiển thị của LED 7 thanh vậy là được!


                            P/S: Việc chia cho 10 bao nhiêu lần là tùy thuộc vào số LED 7 thanh bạn có: 2 Led thì chia 1 lần là đủ, 3 LED thì chia 2 lần, 4 LED thì chia 3 lần ... N LED thì chia N-1 lần cho 10.

                            Comment


                            • #15
                              có cái code của "khoai Tây" cho bạn tham khảo nè ^^
                              Code:
                              ;*******************************************************************************
                              ;Hex16ToASCII:
                              ;converts a 16 bit binary number to a 
                              ;string of ASCII characters.
                              ;*******************************************************************************
                              ;Input:
                              ;R6--low byte of the 16BIT hext data
                              ;R5--hi byte
                              ;output:
                              ;R4-- 1'S dec nuber of ACII
                              ;R3-- 10'S dec number of ASCII 
                              ;R2-- 100'S dec nuber of ASCII
                              ;R1-- 1000'S dec number of ASCII
                              ;R0-- 10000'S dec number of ASCII
                              
                              ;usage:
                              ;clear R0,R1,R2,R3,R4
                              ;mov R5,High BYTE of the data to be converted
                              ;mov R6,Low byte of the data to be converted
                              ;--------------------------------
                              Hex16ToASCII:
                              push PSW
                              push ACC
                              
                              CLR C
                              MOV R0,#0 ;10,000 counter clear
                              
                              Hex16ASCIILoop1:	
                              MOV	A,R6	 ;"16bit hex data" - 10,000 (2710H)
                              SUBB A,#10H
                              MOV R6,A ;save left value
                              
                              MOV A,R5
                              SUBB A,#27H
                              MOV R5,A
                              
                              JC Hex16AsciiComp1 
                              ;if "16bit hex data"< 10,000,jump to skip1
                              
                              INC R0 ;else save 10,000s counter 
                              jmp Hex16ASCIILoop1 
                              ;again:"16bit hex data" - 10,000 (2710H)
                              
                              Hex16AsciiComp1: 
                              ;here is the compensation at condition
                              ;"16bit hex data"< 10,000
                              ;because we have subtrate it with 10,000
                              ;so add 10,000
                              
                              ;get the 1,000s',100s',10s',1s' value to R5R6
                              MOV	 A,R6
                              ADD	 A,#10H
                              MOV	 R6,A
                              MOV	 A,R5
                              ADDC	A,#27H
                              MOV	 R5,A
                              CLR C 
                              ;End of the compensation	
                              MOV	 R1,#0	 ;1,000 counter clear
                              
                              Hex16ASCIILoop2: 
                              ;subtrate the left data by 1,000(3E8)
                              ;repeatedly,until R5R6<1,000
                              MOV A,R6
                              subb A,#0E8H
                              mov R6,A
                              
                              MOV A,R5
                              subb A,#03H
                              MOV R5,A
                              
                              JC Hex16AsciiComp2 
                              ;the left R5R6 <1,000,jump to compesation 2
                              
                              INC R1 ;else save the 1,000 counter R1
                              jmp Hex16ASCIILoop2
                              
                              Hex16AsciiComp2: 
                              ;Compensate because subbtrate 1000 from R5R6
                              ;at the condition R5R6<1000
                              MOV A,R6
                              ADD A,#0E8H
                              MOV R6,A
                              
                              MOV A,R5
                              ADDC A,#03H
                              MOV R5,A
                              CLR C
                              
                              MOV R2,#0 
                              ;100S' counter clear 
                              
                              Hex16AsciiLoop3: 
                              ;the 100s' (64H)condition
                              mov A,R6
                              SUBB A,#64H
                              mov R6,A
                              
                              MOV A,R5
                              subb A,#0
                              MOV R5,A
                              JC Hex16AcsiiComp3
                              INC R2 
                              jmp Hex16AsciiLoop3
                              Hex16AcsiiComp3:
                              mov A,R6
                              ADD A,#64H
                              MOV R6,A
                              MOV A,R5
                              ADDC A,#0
                              MOV R5,A
                              
                              CLR C
                              MOV R3,#0 
                              ;10S' counter clear
                              Hex16AsciiLoop4: 
                              ;10S' CONDITION, (R5 =0,so despite it)
                              mov A,R6
                              SUBB A,#0AH
                              MOV R6,A
                              
                              JC Hex16AsciiComp4
                              INC R3 
                              jmp Hex16AsciiLoop4
                              Hex16AsciiComp4:
                              
                              add A,#0AH
                              MOV R6,A 
                              ;here R6 represent 1S'
                              mov R4,a 
                              ;1S' counter ->R4
                              
                              ;NOW R4,R3,R2,R1,R0 all add 30H,to get real 
                              ;ASCII code
                              clr c
                              
                              mov A,R4
                              addc A,#30H
                              MOV R4,A
                              
                              MOV A,R3
                              ADD A,#30H
                              MOV R3,A
                              
                              MOV A,R2
                              ADD A,#30H
                              MOV R2,A
                              
                              MOV A,R1
                              ADD A,#30H
                              MOV R1,A
                              
                              MOV A,R0
                              ADD A,#30H
                              MOV R0,A
                              pop PSW
                              pop ACC
                              RET 
                              
                              end
                              ;END OF CONVERATION ROUTINE.
                              ;=========================================

                              Comment

                              Về tác giả

                              Collapse

                              dinhthuan911 hehe Tìm hiểu thêm về dinhthuan911

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X