Mình đang làm btl thiết kế mạch đo khoảng cách sử dụng module SR-04 và hiển thị trên 1 màn LCD
Tuy nhiên mình được chỗ bán mạch đưa code cho thì lại không chạy được trên emu8086 ạ
Mọi người check giúp mình xem code này có sai ở đâu và sửa như nào ạ? Và nếu không thì dùng compiler nào để chạy code và nạp code vào chip ạ?
(Mình cũng mù mịt về assem lắm ạ)
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