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?