Giúp chuyển code ASM 8051 sang C

Anh chị em giúp em cách chuyển code asm này sang C để em compile trong KeilC với ạ. Em cảm ơn

RS EQU P2.6               ; dinh nghia RS la P2.7
RW EQU P2.5               ; dinh nghia RW la P2.6
E  EQU P2.7               ; dinh nghia E la P2.5
ORG 00H                   ; origin
      MOV DPTR,#LUT       ; di chuyen dia chi bat dau LUT vao DPTR
      CLR P3.0            ; xoa P3.0(output)
      SETB P3.1           ; set p3.1(input)
      MOV TMOD,#00100001B ; sets Timer1 la Mode2 timer va Timer0 la Mode1 timer
 MAIN:ACALL DINT          ; goi ham DINT
      ACALL TEXT1         ; goi ham TEXT1
      MOV TL1,#200D       ; gan TL1 = 200
      MOV TH1,#200D       ; gan TH1 = 200
      MOV A,#00000000B    ; gan A
      SETB P3.0           ; sets P3.0(trigger)
      ACALL DELAY1        ; goi ham DELAY1 (1uS)
      CLR P3.0            ; xoa P3.0
      HERE: JNB P3.1,HERE ; lap lai o day cho den khi chan echo nhan duoc giu lieu
 BACK:SETB TR1            ; bat dau Timer1
HERE1:JNB TF1,HERE1       ; lap lai o day cho den khi Timer1 tran
      CLR TR1             ; dung Timer1
      CLR TF1             ; xoa co Timer 1
      INC A               ; Tang A
      JB P3.1,BACK        ; Nhay den ham BACK neu echo van con
      MOV R7,A            ; luu gia tri A -> R7
      ACALL SPLIT         ; goi ham SPLIT
      ACALL LINE2         ; goi ham LINE2 : dua con tro xuong dong 2
      ACALL TEXT3         ; goi ham TEXT2
      ACALL LEVEL         ; goi ham LEVEL
      ACALL TEXT2         ; goi ham TEXT2
      ACALL DELAY2        ; goi ham DELAY2(1S)
      SJMP MAIN           ; Quay lai ham MAIN

DELAY1: MOV R6,#2D        ; Gan gia tri tai R6 bang 2D
LABEL1: DJNZ R6,LABEL1    ; R6 --, va lap den khi R6 = 0
        RET               ; Quay lai ham chinh

DELAY2:MOV R0,#15D        ; R0 = 15
BACK1: MOV TH0,#00000000B ; TH0 = 00000000B 
       MOV TL0,#00000000B ; TL0 = 00000000B 
       SETB TR0           ; Bat dau dem Timer0
HERE2: JNB TF0,HERE2      ; Lap den khi tran timer 0
       CLR TR0            ; dung Timer0
       CLR TF0            ; Xoa co tran timer 0
       DJNZ R0,BACK1      ; Lap lai 15 lan de delay 1s
       RET                ; Quay lai ham chinh

TEXT1: MOV A,#"K" ; Ham nay in ra chu 'KTVXL PTIT'
       ACALL DISPLAY
       MOV A,#"T"
       ACALL DISPLAY
       MOV A,#"V"
       ACALL DISPLAY
       MOV A,#"X"
       ACALL DISPLAY
       MOV A,#"L"
       ACALL DISPLAY
       MOV A,#" "
       ACALL DISPLAY
       MOV A,#"P"
       ACALL DISPLAY
       MOV A,#"T"
       ACALL DISPLAY
       MOV A,#"I"
       ACALL DISPLAY
       MOV A,#"T"
       ACALL DISPLAY
       RET
    RET                   ; Quay lai ham chinh

 TEXT2:  MOV A,#'c'       ; Ham nay in ra chu 'cm'
    ACALL DISPLAY
    MOV A,#'m'
    ACALL DISPLAY
    RET

 TEXT3:MOV A,#"D" ; Ham nay in ra chu 'Distances : '
       ACALL DISPLAY
       MOV A,#"i"
       ACALL DISPLAY
       MOV A,#"s"
       ACALL DISPLAY
       MOV A,#"t"
       ACALL DISPLAY
       MOV A,#"a"
       ACALL DISPLAY
       MOV A,#"n"
       ACALL DISPLAY
       MOV A,#"c"
       ACALL DISPLAY
       MOV A,#"e"
       ACALL DISPLAY
       MOV A,#":"
       ACALL DISPLAY
       MOV A,#" "
       RET                ; Quay lai ham chinh

                          ; ham split muc dich de tach gia tri ra thanh cac chu so 
                          ; Vd 321 -> R3 = 1, R2 = 2, R1 = 3 
SPLIT:MOV B,#10D          ; gan B = 10
      DIV AB              ; chia A cho B, phan du duoc luu trong B
      MOV R3,B            ; Gan R3 = ket qua phep chia
      MOV B,#10D          ; gan B = 10
      DIV AB              ; lap lai tuong tu
      MOV R2,B            ; ...
      MOV R1,A            ; ...
      RET                 ; Quay lai ham chinh

LEVEL:MOV A,R1            ; Gan gia tri A = gia tri cua R1 (So thu nhat)
      ACALL ASCII         ; Ep kieu sang char
      ACALL DISPLAY       ; goi ham hien thi ra
      MOV A,R2            ; Gan gia tri A = gia tri cua R2 (So so thu 2)
      ACALL ASCII         ; Ep kieu sang char
      ACALL DISPLAY       ; goi ham hien thi ra
      MOV A,R3            ; Gan gia tri A = gia tri cua R3 (So so thu 3)
      ACALL ASCII         ; Ep kieu sang char
      ACALL DISPLAY       ; goi ham hien thi ra
      RET                 ; Quay lai ham chinh

 DINT:MOV A,#0CH          ; bat hien thi lcd,con tro tat
    ACALL CMD             
    MOV A,#01H            ; xoa man hinh
    ACALL CMD             
    MOV A,#06H            ; tang con tro
    ACALL CMD             
    MOV A,#80H            ; di chuyen con tro den dau dong 1
    ACALL CMD             
    MOV A,#3CH            ; bat dong 2
    ACALL CMD             
    RET                   ; Quay lai ham chinh

LINE2:MOV A,#0C0H         ; Nhay xuong dong 2 vi tri 0
    ACALL CMD             
    RET                   ; Quay lai ham chinh

CMD: MOV P0,A             ; di chuyen du lieu den Port 0
    CLR RS                ; Xoa chan RS
    CLR RW                ; Xoa chan RW
    SETB E                ; set chan Enable
    CLR E                 ; Xoa chan Enable
    ACALL DELAY           ; goi ham delay
    RET                   ; Quay lai ham chinh

DISPLAY:MOV P0,A          ; di chuyen du lieu den Port 0
    SETB RS               ; set chan RS
    CLR RW                ; Xoa chan RW cua LCD
    SETB E                ; set chan Enable cua LCD
    CLR E                 ; xoa chan Enable cua LCD
    ACALL DELAY           ; goi ham delay
    RET                   ; Quay lai ham chinh

DELAY: CLR E              ; xoa chan E cua LCD
    CLR RS                ; xoa chan RS cua LCD
    SETB RW               ; sets RW pin cua LCD
    MOV P0,#0FFH          ; sets P0 la input
    SETB E                ; sets E pin cua LCD
    MOV A,P0              ; gan P0 = A
    JB ACC.7,DELAY        ; Lap lai DELAY neu ACC.7 == 1
    CLR E                 ; xoa E pin cua LCD
    CLR RW                ; xoa RW pin cua LCD
    RET                   ; Quay lai ham chinh

ASCII: MOVC A,@A+DPTR     ; Ghi de gia tri trong A thanh ki tu ascii
       RET                ; Quay lai ham chinh

LUT: DB  48D              ; ascii cua "0"
     DB  49D              ; ascii cua "1"
     DB  50D              ; ascii cua "2"
     DB  51D              ; ascii cua "3"
     DB  52D              ; ascii cua "4"
     DB  53D              ; ascii cua "5"
     DB  54D              ; ascii cua "6"
     DB  55D              ; ascii cua "7"
     DB  56D              ; ascii cua "8"
     DB  57D              ; ascii cua "9"

    END                   ; Ket thuc chuong trinh
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?