Thông báo

Collapse
No announcement yet.

Có bác nào có chương trình chuyển đổi giữa các dạng mã.

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

  • Có bác nào có chương trình chuyển đổi giữa các dạng mã.

    Em muốn hỏi các bác có các chương trình chuyển đổi từ
    mã BIN -->mã HEX
    mã BIN --> mã DEC
    mã BIN --> mã BCD
    mã HEX --> mã DEC
    mã HEX --> mã BCD
    mã BCD --> mã HEX
    mã BCD --> mã DEC
    mã DEC --> mã BCD
    mã DEC --> mã HEX
    em muốn đọc giá trị ADC về mà nhân giá trị này với 39 hiển thị ra LCD, nhưng chưa biết cách thực hiện như thế nào các bác giúp đỡ em với code ASm nhé!

  • #2
    Nguyên văn bởi mr.ngoc Xem bài viết
    Em muốn hỏi các bác có các chương trình chuyển đổi từ
    mã BIN -->mã HEX
    mã BIN --> mã DEC
    mã BIN --> mã BCD
    mã HEX --> mã DEC
    mã HEX --> mã BCD
    mã BCD --> mã HEX
    mã BCD --> mã DEC
    mã DEC --> mã BCD
    mã DEC --> mã HEX
    em muốn đọc giá trị ADC về mà nhân giá trị này với 39 hiển thị ra LCD, nhưng chưa biết cách thực hiện như thế nào các bác giúp đỡ em với code ASm nhé!
    Éc
    Thế mà còn hỏi ah
    Dọc lại sách đi
    đọc lại cách chuyển đỏi các hệ số đi

    Comment


    • #3
      Nguyên văn bởi mr.ngoc Xem bài viết
      Em muốn hỏi các bác có các chương trình chuyển đổi từ
      mã BIN -->mã HEX
      mã BIN --> mã DEC
      mã BIN --> mã BCD
      mã HEX --> mã DEC
      mã HEX --> mã BCD
      mã BCD --> mã HEX
      mã BCD --> mã DEC
      mã DEC --> mã BCD
      mã DEC --> mã HEX
      em muốn đọc giá trị ADC về mà nhân giá trị này với 39 hiển thị ra LCD, nhưng chưa biết cách thực hiện như thế nào các bác giúp đỡ em với code ASm nhé!
      nếu cậu sử dụng ASM thì vẫn có thể chuyển đổi được nhưng hơi phức tạp và khó hiển thị thập phân. Còn với C thì đã có hàm ép kiểu để chuyển đổi giá trị ra chuỗi ASCII và hiển thị ra LCD hàm này cực kỳ đơn giản:

      PHP Code:
      void speed_display()
      {
        
      char buf [10];
        
      float y,x,rpm,rps;
        
      x=speed;
        
      y=0.00015*x+0.00115;
        
      rps=y*50;
        
      rpm=60/rps;
        
      sprintf (buf"%f %s",rpm);
        
      prints(buf);
        print(
      " rpm");
      }  
      //========================================================
      void prints(char str[])
      {
           
      int i;
          for(
      i=0;i<7;i++)
          {
               
      lcd_port=str[i];
              
      write_dat();
              
      delay(30);
          }


      Comment


      • #4
        bạn có sách nào ko giới thiệu cho mình với! chương trình viết bằng ASM nhá thanksss!

        Comment


        • #5
          cảm ơn chumanh ha! dùng C thì ko phải nghĩ đằng này dùng ASM nên việc tính toán công thức phức tạp quá mình ko hiểu lắm nên muốn xin các đoạn code chuyển đồi giữa các dạng mã để tính toán xem thế nào!!!?

          Comment


          • #6
            Bạn có thể đọc tài liệu này http://www.mediafire.com/?v6ibyeb3dprx3mc

            Comment


            • #7
              trong asm hex,hec,binary bạn lập trình nó tự hiểu mà bạn,ví dụ:
              mov a,#10
              cjne a,#0ah,nhay
              bạn đưa vào a giá trị thập phân là 10 nhưng bạn so sánh với 0ah nó vẫn hiểu mà , số binary tuơng tự.
              Trường hợp bạn muốn lấy số 39 về rồi hiển thị ra lcd ta dùng cách sau:
              +bạn đang có số 39 dạng thập phân thì bạn chia 39 cho 10 bạn được số 3 hàng chục bạn lưu vô biến chuc,số dư là 9 bạn lưu vo biến donvi.
              +lcd hiển thị ra là mã ascii vì vậy bạn phải cộng thêm 48 cho biến chuc và biến donvi thì bạn có số cần hiển thị ra lcd.Cộng thêm 48 do mã ascii số 3 là 51,lấy 51-3 bạn được số phải cộng thêm để được mã ascii,tuơng tự cho số 9.
              Đây là 1 đoạn code mình viết chuyển hex sang bcd với số hex đưa vào là số có 3 chữ số:
              org 000h
              tam equ 31h
              tam1 equ 30h
              mov tam,P1
              mov a,tam
              mov b,#100
              div ab
              mov 42h,a
              mov b,#100
              mul ab
              mov tam1,a
              mov a,tam
              clr c
              subb a,tam1
              mov tam,a
              mov b,#10
              div ab
              mov 41h,a
              mov b,#10
              mul ab
              mov tam1,a
              mov a,tam
              clr c
              subb a,tam1
              mov 40h,a
              mov r0,#42h
              mov p2,@r0
              end

              Comment


              • #8
                Code:
                ;---DINH NGHIA CAC CHAN CHO LCD----------
                LCD_DATA EQU P2
                LCD_RS BIT P0.5
                LCD_RW BIT P0.6
                LCD_E BIT P0.7
                
                HANG1 EQU 40H
                HANG2 EQU 41H
                
                COT EQU R2 
                
                BYTE_ASCII_L EQU 31H
                BYTE_ASCII_H EQU 32H
                BYTE_CHUYENDOI EQU 33H
                
                ;---------------adc0804----------------------------
                ADC_DATA EQU P1
                ADC_DATA1 EQU 30H
                RD_ADC BIT P0.0
                WR_ADC BIT P0.1
                INTR BIT P0.2
                ;---------
                DONVI EQU 34H
                CHUC EQU 35H
                TRAM EQU 36H
                M_TRAM EQU 37H
                M_CHUC EQU 38H
                M_DONVI EQU 39H
                
                SO1 EQU 3AH
                SO2 EQU 3BH
                SO3 EQU 3CH
                SO4 EQU 3DH
                SO5 EQU 3EH
                SO6 EQU 3FH
                SO7 EQU 42H
                SO8 EQU 43H
                SO9 EQU 44H
                SO10 EQU 45H
                SO11 EQU 46H
                
                X_TIME EQU R7
                GIO EQU R6
                PHUT EQU R5
                GIAY EQU R4	
                ;-----------------------------------------------------------------------------------------
                		ORG 0000H
                		JMP MAIN
                
                		ORG 000BH	;DIA CHI VECTO NGAT TIEMR0
                		LJMP ISR_TIMER0
                
                		ORG 0100H
                MAIN:
                	MOV HANG1,#80H
                	MOV HANG2,#0C0H
                	MOV X_TIME,#0
                	MOV GIO,#0
                	MOV PHUT,#0
                	MOV GIAY,#0
                	MOV TMOD,#01H	;TIMER0 CHE DO 1
                	MOV TH0,#3CH
                	MOV TL0,#0B0H	;NAP THOI GIAN NGAT LA 50ms
                	MOV IE,#10000010B	;KHOI TAO NGAT TIMER0
                	LCALL LCD_INIT
                	MOV DPTR,#THONGBAO1
                	LCALL SEND2LCD		
                	MOV A,#0CH
                	LCALL LCD_COMMAND
                	SETB TR0
                L1:	
                	MOV A,HANG1
                	MOV COT,#10
                	LCALL GOTOXY
                	LCALL READ_ADC
                	MOV B,#39
                	MUL AB
                	MOV SO2,A
                	MOV SO1,B
                	MOV A,SO1
                	LCALL BIN2BCD
                	MOV A,TRAM
                	LCALL WRITENUM1
                	MOV A,CHUC
                	LCALL WRITENUM1
                	MOV A,DONVI
                	LCALL WRITENUM1
                
                	MOV A,HANG2
                	MOV COT,#0
                	LCALL GOTOXY
                	MOV A,GIO
                	LCALL WRITENUM2
                	MOV A,#':'
                	LCALL LCD_DISPLAY
                	MOV A,PHUT
                	LCALL WRITENUM2
                	MOV A,#':'
                	LCALL LCD_DISPLAY
                	MOV A,GIAY
                	LCALL WRITENUM2
                
                	JMP L1	 
                ;********************************************************************************************
                ;********************************************************************************************
                ;-------HAM CHUYEN DOI LAY MAU GIA TRI ADC---------
                READ_ADC:		
                	CLR WR_ADC	;BAT DAU CHUYEN DOI
                	SETB WR_ADC
                HERE: JB INTR,HERE	;CHO CHUYEN DOI XONG
                	CLR RD_ADC
                	SETB RD_ADC	
                	MOV A,ADC_DATA
                	MOV ADC_DATA1,ADC_DATA	
                ;	CALL BIN2BCD
                	RET
                ;----
                BIN2BCD:
                	MOV B,#10
                	DIV AB
                	MOV DONVI,B
                	MOV B,#10
                	DIV AB
                	MOV CHUC,B
                	MOV TRAM,A
                	RET
                ;-----------------END CONVERT ADC------------------
                ;********************************************************************************************
                ;********************************************************************************************
                ;=========Cac ham` giao tiep LCD========================
                ; Khoi tao LCD 
                LCD_INIT: 
                        MOV     A,#38H        ;init. LCD 2 do`ng, ma tra^.n 5x7  
                        LCALL   LCD_COMMAND 
                        MOV     A,#0EH        ;LCD on, cursor on 
                        LCALL   LCD_COMMAND
                        MOV     A,#01H        ;clear LCD 
                        LCALL   LCD_COMMAND
                        MOV     A,#06H        ;cursor di.ch pha?i 
                        LCALL   LCD_COMMAND 
                        MOV     A,#80H 		  ;DUA CON TRO VE DAU DONG 1
                        LCALL   LCD_COMMAND 
                        RET  
                ; Gui 1 lenh vao LCD 
                LCD_COMMAND:                      ;command strobe 
                        ACALL   READY         ;is LCD ready? 
                        MOV     LCD_DATA,A          ;xua^'t ma~ le^.nh 
                        CLR     LCD_RS            ;RS=0: le^.nh 
                        CLR     LCD_RW            ;R/W=0 -> ghi ra LCD 
                        SETB    LCD_E             ;E=1 -> ta.o ca.nh xuo^'ng 
                        CLR     LCD_E             ;E=0 ,cho^'t 
                        RET  
                ; Gui 1 ki tu vao LCD 
                LCD_DISPLAY:                      ;data strobe 
                        ACALL   READY         ;is LCD ready? 
                        MOV     LCD_DATA,A    ;xua^'t du+~ lie^.u   
                        SETB    LCD_RS        ;RS=1 for data 
                        CLR     LCD_RW        ;R/W=0 to write to LCD 
                        SETB    LCD_E         ;E=1 -> tao canh xuong 
                        CLR     LCD_E         ;E=0, cho^'t  
                        RET   
                ;--------gui 1 chuoi ki tu den LCD--------------          
                SEND2LCD:                      
                        CLR     A 
                        MOVC    A,@A+DPTR 
                        JZ      EXIT_SEND 
                        LCALL   LCD_DISPLAY
                        INC     DPTR 
                        SJMP    SEND2LCD 
                EXIT_SEND: 
                		RET  
                ;-------------------------------------------------           
                ;HAM SET VI TRI CON TRO
                ;COLUM=R2(0-15), ROW=R3 (0-1)
                ;-------------------------------------------------
                GOTOXY:
                	ADD A,COT
                	LCALL LCD_COMMAND
                	RET	 
                ;-------------------------------------------------
                ;WRITE NUMBER 2 DIGIT IN LCD
                WRITENUM1:
                	PUSH PSW
                	PUSH ACC
                	PUSH B	
                	MOV B,#10
                	DIV AB
                	ADD A,#48
                	MOV A,B
                	ADD A,#48
                	LCALL LCD_DISPLAY
                	POP B
                	POP ACC
                	POP PSW
                	RET
                
                WRITENUM2:
                	PUSH PSW
                	PUSH ACC
                	PUSH B	
                	MOV B,#10
                	DIV AB
                	ADD A,#48
                	LCALL LCD_DISPLAY
                	MOV A,B
                	ADD A,#48
                	LCALL LCD_DISPLAY
                	POP B
                	POP ACC
                	POP PSW
                	RET	
                WRITENUM3:
                	PUSH PSW
                	PUSH ACC
                	PUSH B	
                	MOV B,#100
                	DIV AB
                	ADD A,#48
                	LCALL LCD_DISPLAY
                	MOV A,B
                	MOV B,#10 
                	DIV AB
                	ADD A,#48
                	LCALL LCD_DISPLAY
                	MOV A,B
                	ADD A,#48
                	LCALL LCD_DISPLAY
                	POP B
                	POP ACC
                	POP PSW
                	RET	 
                ;----------------kie^?m tra co+` BF ---------------
                READY:  
                	SETB    LCD_DATA.7          ;LCD_DATA.7: input 
                	CLR     LCD_RS           ;RS=0: thanh ghi le^.nh 
                	SETB    LCD_RW            ;R/W=1: ddo.c 
                BACK:   
                	CLR     LCD_E             ;E=0 -> ta.o ca.nh le^n 
                	SETB    LCD_E             ;E=1   
                	JB      LCD_DATA.7,BACK     ;cho+` busy flag=0 
                	RET 
                ;============CHUYEN DOI BCD-->ASCII================================
                BCD2ASCII:
                	MOV A,BYTE_CHUYENDOI	;CHUYEN DU LIEU NHAN DC VAO THANH NGHI A
                	MOV R2,A	;LUU GIA TRI A TAM THOI VAO R2
                	ANL A,#0FH	;XOA BYTE CAO CUA  DU LIEU
                	ORL A,#30H
                	MOV BYTE_ASCII_L,A
                	MOV A,R2
                    SWAP A		; HOAN DOI BYTE CAO <-->BYTE THAP
                	ANL A,#0FH
                	ORL A,#30H
                	MOV BYTE_ASCII_H,A
                	RET
                ;---------KET THUC KHAI BAO CHO LCD----------------
                ;**********************************************************************************************
                ;**********************************************************************************************
                ISR_TIMER0:
                	CLR TR0
                	INC X_TIME
                	CJNE X_TIME,#4,C1
                	LCALL READ_ADC
                	MOV COT,#10
                	LCALL GOTOXY
                	LCALL READ_ADC
                	MOV B,#39
                	MUL AB
                	LCALL WRITENUM2
                	MOV A,B
                	LCALL WRITENUM2
                
                C1:	
                	CJNE X_TIME,#20,EXIT_ISR	
                
                	MOV X_TIME,#0
                	INC GIAY
                	CJNE GIAY,#60,EXIT_ISR
                	MOV GIAY,#0
                	INC PHUT
                	CJNE PHUT,#60,EXIT_ISR
                	MOV PHUT,#0
                	INC GIO
                	CJNE GIO,#24,EXIT_ISR
                	MOV GIO,#0
                EXIT_ISR:
                	MOV TH0,#3CH
                	MOV TL0,#0B0H	;NAP THOI GIAN NGAT LA 50ms
                	SETB TR0
                	RETI   
                
                THONGBAO1: DB "TEMP:",0
                
                
                END
                Đây là toàn bộ code của em viết ! đo nhiệt độ và đồng hồ hiển thị trên LCD16x02. đồng hồ hồ thì đã ok! nhưng còn phần hiển thị nhiệt độ nữa em làm mãi mà ko đc vì em ko biết cách thực hiện các phép tính trong ASM để hiển thị kết quá quả là giá trị nhiệt độ lên LCD.
                L1:
                MOV A,HANG1
                MOV COT,#10
                LCALL GOTOXY
                LCALL READ_ADC
                MOV B,#39
                MUL AB
                MOV SO2,A
                MOV SO1,B
                MOV A,SO1
                LCALL BIN2BCD
                MOV A,TRAM
                LCALL WRITENUM1
                MOV A,CHUC
                LCALL WRITENUM1
                MOV A,DONVI
                LCALL WRITENUM1

                MOV A,HANG2
                MOV COT,#0
                LCALL GOTOXY
                MOV A,GIO
                LCALL WRITENUM2
                MOV A,#':'
                LCALL LCD_DISPLAY
                MOV A,PHUT
                LCALL WRITENUM2
                MOV A,#':'
                LCALL LCD_DISPLAY
                MOV A,GIAY
                LCALL WRITENUM2

                JMP L1
                đoạn ctr chính của em đây mòn các bác giúp đỡ em với! em không upfile lên 4um đc em up len mediafire mong các bác xem và giúp em với nhé!
                http://www.mediafire.com/?cbruc1k0ogdjaka

                Comment


                • #9
                  Nguyên văn bởi trimen Xem bài viết
                  trong asm hex,hec,binary bạn lập trình nó tự hiểu mà bạn,ví dụ:
                  mov a,#10
                  cjne a,#0ah,nhay
                  bạn đưa vào a giá trị thập phân là 10 nhưng bạn so sánh với 0ah nó vẫn hiểu mà , số binary tuơng tự.
                  Trường hợp bạn muốn lấy số 39 về rồi hiển thị ra lcd ta dùng cách sau:
                  +bạn đang có số 39 dạng thập phân thì bạn chia 39 cho 10 bạn được số 3 hàng chục bạn lưu vô biến chuc,số dư là 9 bạn lưu vo biến donvi.
                  +lcd hiển thị ra là mã ascii vì vậy bạn phải cộng thêm 48 cho biến chuc và biến donvi thì bạn có số cần hiển thị ra lcd.Cộng thêm 48 do mã ascii số 3 là 51,lấy 51-3 bạn được số phải cộng thêm để được mã ascii,tuơng tự cho số 9.
                  Đây là 1 đoạn code mình viết chuyển hex sang bcd với số hex đưa vào là số có 3 chữ số:
                  org 000h
                  tam equ 31h
                  tam1 equ 30h
                  mov tam,P1
                  mov a,tam
                  mov b,#100
                  div ab
                  mov 42h,a
                  mov b,#100
                  mul ab
                  mov tam1,a
                  mov a,tam
                  clr c
                  subb a,tam1
                  mov tam,a
                  mov b,#10
                  div ab
                  mov 41h,a
                  mov b,#10
                  mul ab
                  mov tam1,a
                  mov a,tam
                  clr c
                  subb a,tam1
                  mov 40h,a
                  mov r0,#42h
                  mov p2,@r0
                  end
                  ý của mình là đọc giá trị ADC từ ADC0804 về rồi lấy giá trị đó nhân với số 39 (vì mạch của mình chân Vref/2 để hở, VIN+ có dải vào từ 0-5V. vì thế mình ngồi tính ra cái công thức nhietdo=ADC*39) nhưng trong ASM mình quả là ko hiểu làm thế nào để thực hiện đc phép tính đó rồi lấy quả hiển thị lên LCD. ví dụ ADC đọc về = 128 --> nhiệt độ đo được hiển thị lên LCD là 49.9 độ. bạn có ý kiến j hay giúp mình với??
                  thankss bạn nhiều

                  Comment


                  • #10
                    phép nhân bị tràn lớn quá,nếu là c thì xử lí được còn asm thì mình chịu,hay bạn tham khảo thử code asm của mấy đồ án máy tính điện tử xem giải thuật nhân của họ thế nào.

                    Comment


                    • #11
                      sao phép nhân lại bị tràn lớn quá hả bạn?? mình nghĩ kết quả là 1 số 16bit mà bạn?? giá trị đọc từ ADC về là số nhị phân(binary) rồi mình thực hiện MUL AB (B=#39) thì kết quả là 1 số 16bit byte cao --> B. byte thấp --> A. hy` chắc vấn đề bây giờ là hiển thị thôi bạn ah! mình muốn hiển thị ra LCD thì phải đổi số HEX này sang mã DEC (demical) hay mã BCD. bạn có đoạn code nào để chuyển đổi các dạng mã ko bạn??

                      Comment


                      • #12
                        Nguyên văn bởi mr.ngoc Xem bài viết
                        sao phép nhân lại bị tràn lớn quá hả bạn?? mình nghĩ kết quả là 1 số 16bit mà bạn?? giá trị đọc từ ADC về là số nhị phân(binary) rồi mình thực hiện MUL AB (B=#39) thì kết quả là 1 số 16bit byte cao --> B. byte thấp --> A. hy` chắc vấn đề bây giờ là hiển thị thôi bạn ah! mình muốn hiển thị ra LCD thì phải đổi số HEX này sang mã DEC (demical) hay mã BCD. bạn có đoạn code nào để chuyển đổi các dạng mã ko bạn??
                        Giải thuật cho vấn đề này là:
                        - Nhân giá trị ADC với 39 -> số 16bit(B cao, A thấp)
                        - Chia kết quả cho 1000 -> Số hàng chục để hiển thị LCD
                        - Chia số dư cho 100 -> số đơn vị để hiển thị LCD
                        - Hiển thị dấu chấm lên LCD
                        - Chia tiếp số dư cho 10 -> Số thập phân hiển thị LCD...
                        Phép nhân thì ok rồi, phép chia bạn phải thực hiện chia 16bit(4992 trong ví dụ của bạn) cho 16bit(1000), bạn có thể vào www.8052.com để tìm các phép tính chia này.
                        Thực ra những cái mình viết là trả lời câu hỏi của bạn thôi. Thực tế nếu mình làm với cảm biến loại LM35 thì mình sẽ gắn biến trở vào chân VREF để khi đọc về đúng giá trị cần hiển thị, khỏi cần nhân chia làm gì cho phức tạp.
                        Chúc bạn thành công.
                        Công ty TNHH Tự Động Hóa Đạt Lân
                        32/36, Ông Ích Khiêm, F14, Q11
                        ĐT: 08.3974 7308 - 0937.197.001
                        email:
                        Webite:

                        Comment


                        • #13
                          à vậy là bạn có được số hạng rùi à,vậy bạn cần hiển thị là 49,92 trong đó 49 chứa trong a và 92 chứa trong b.Bạn không cần lo về hex,dec và binary vì cái này bạn viết sao nó hiểu zay thui.Giờ bạn có số đọc sau kết quả nhân chia là 4992 với a là 49 và b là 92.Bạn dùng chuơng trình sau của mình nó sẽ chuyển số bạn đang có sang 2 số dạng bcd với số hàng chục chứa trong 52h và số hàng đơn vị chứa trong 53h,giá trị cần đổi bạn đưa vào biến tam2.Có 2 số đó thì bạn chỉ việc cộng thêm 48 rùi đưa ra lcd thui,còn dấu "," thì bạn tra mã ascii của nó rùi hiển thị vậy là xong.Chúc bạn thành công.
                          tam2 equ 54h
                          chuyensangbcd:
                          tam equ 51h
                          tam1 equ 50h
                          mov tam,tam2
                          mov a,tam
                          mov b,#10
                          div ab
                          mov 52h,a
                          mov b,#10
                          mul ab
                          mov tam1,a
                          mov a,tam
                          clr c
                          subb a,tam1
                          mov 53h,a
                          ret

                          Comment


                          • #14
                            cảm ơn mọi người hii! bạn trimen: khi mình thực hiện phép nhân thì A chứa byte thấp, B chứa Byte cao ở dạng HEX mà bạn vậy khi mà mình lấy A đưa vào biến tam2 trong code của bạn thì sẽ hiển thị ko đúng bạn ah!
                            L1:
                            MOV A,HANG1
                            MOV COT,#7
                            LCALL GOTOXY
                            ; MOV A,DATA_ADC
                            LCALL READ_ADC
                            MOV B,#39
                            MUL AB
                            MOV TAM2,A
                            CALL CHUYENSANGBCD
                            MOV A,KQ2
                            LCALL WRITENUM2
                            MOV A,KQ1
                            LCALL WRITENUM2
                            ; MOV NUM_L,A
                            ; MOV NUM_H,B
                            ; LCALL CHIA16BIT
                            ; LCALL WRITEHEX
                            JMP L1
                            chuyensangbcd:
                            mov tam,tam2
                            mov a,tam
                            mov b,#10
                            div ab
                            mov KQ1,a
                            mov b,#10
                            mul ab
                            mov tam1,a
                            mov a,tam
                            clr c
                            subb a,tam1
                            mov KQ2,a
                            ret

                            Comment


                            • #15
                              ;================================================= ==========
                              DISPLAY_TEMP:
                              MOV A,HANG1
                              MOV COT,#7
                              LCALL GOTOXY
                              ; MOV A,DATA_ADC
                              LCALL READ_ADC
                              MOV B,#39
                              MUL AB
                              MOV NUM_L,A
                              MOV NUM_H,B
                              LCALL CHIA16BIT
                              LCALL WRITENUM2
                              RET

                              ;================================================= ==========
                              CHIA16BIT:
                              MOV B,#08H ; Load counter 8dec
                              MOV A,DEN ; Load Acc with Divisor (Denominator)
                              CLR C ; Clear Carry
                              SUBB A,NUM_H ; If NUM_H greater than DEN,
                              JC EXIT ; Exit, result won't fit in 8bit reg
                              CLR C ; Clear Carry

                              DIVIDE:
                              MOV A,NUM_L ; Load Acc with NUM_L
                              RLC A ; x 2
                              MOV NUM_L,A ; Save new value back NUM_L
                              MOV A,NUM_H ; Load Acc with NUM_H
                              RLC A ; x 2
                              MOV NUM_H,A ; Save new value back NUM_H
                              JC SUBTRACT ; Jump Carry
                              MOV A,DEN ; Load Acc with DEN
                              SUBB A,NUM_H ; Compare if DEN > NUM_H
                              JNC NEXT ; NUM_H < than DEN
                              CLR C ; Clear Carry

                              SUBTRACT:
                              MOV A,NUM_H ; Load Acc with NUM_H
                              SUBB A,DEN ; Subtract DEN from NUM_H
                              MOV NUM_H,A ; Save NUM_H back
                              SETB C ; Set Carry (Divide one time)

                              NEXT:
                              DJNZ B,DIVIDE ; Decrease pointer
                              MOV A,NUM_L ; Load Acc with NUM_L (quotient with C)
                              RLC A ; Shift out Carry
                              MOV Q,A ; Get the quotient

                              EXIT: RET
                              mình dúng đoạn code chia số 16bit cho số 8bit của anh thelam trên 4um thì hiển thị kết quả đúng ok. nhưng đó chỉ là trên mô phỏng. nhưng khi lắp vào mạch thực thì chỉ hiển thị mỗi số 99 rồi ko có hiện tượng j nữa hic hicc??? ko biết là lỗi j đây??
                              mạch mô phỏng đã ok!

                              nhưng thực tế thì chỉ hiển thị mỗi số 99 độ C (số 63 đó là mã HEX 63H --> DEC là 99) mình ko tiện nạp lại hii


                              Comment

                              Về tác giả

                              Collapse

                              mr.ngoc Tìm hiểu thêm về mr.ngoc

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

                              Collapse

                              Đang tải...
                              X