Professional Documents
Culture Documents
Prelab Vi X Li Bai 1 HCMUT
Prelab Vi X Li Bai 1 HCMUT
ORG 2000H
CONT:
CPL P1.0
ACALL DELAY05S
SJMP CONT
DJNZ R5, $
RET
END
Viết chương trình tạo hiệu ứng quay LED: các LED đơn trên BARLED1 sáng
lần lượt từ trái sang phải sau thời gian 1s và lặp lại. Sử dụng chương trình con
1s đã viết ở trên.
ORG 2000H
MOV A,#01111111B
CONT:
ACALL DELAY1S
JMP CONT
DJNZ R5, $
RET
END
Viết chương trình hiển thị lên LED 7 đoạn số 0 các con số từ 0 đến 9 sau các
khoảng thời gian 1s
ORG 2000H
MAIN:
MOV R0,#00H
LOOP:
CALL LED0
CALL DELAY1S
INC R0
CJNE R0,#0AH,LOOP
JMP MAIN
LED0:
MOV A,R0
ORL A,#0E0H
MOV DPTR,#0000H
MOVX @DPTR,A
RET
DELAY1S:
DELAY:
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R7,DELAY
RET
END
Viết chương trình hiển thị số 1 lên LED7 đoạn 0, sau đó 1s hiển thị số 2 lên LED 7
đoạn 1, sau đó 1s hiển thị số 3 lên LED 7 đoạn 2, sau đó 1s hiển thị số 4 lên LED 7
đoạn 3. Quá trình này lặp đi lặp lại. Việc hiển thị này sử dụng chương trình con
DisplayLED đã viết ở trên.
ORG 2000H
MAIN:
MOV R0,#00H
LOOP:
CALL LED0
CALL DELAY1S
INC R0
CALL LED1
CALL DELAY1S
INC R0
CALL LED2
CALL DELAY1S
INC R0
CALL LED3
CALL DELAY1S
CJNE R0,#04H,MAIN
LED0:
MOV A,R0
ORL A,#0E0H
MOV DPTR,#0000H
MOVX @DPTR,A
RET
LED1:
MOV A,R0
ORL A,#0D0H
MOV DPTR,#0000H
MOVX @DPTR,A
RET
LED2:
MOV A,R0
ORL A,#0B0H
MOV DPTR,#0000H
MOVX @DPTR,A
RET
LED3:
MOV A,R0
ORL A,#70H
MOV DPTR,#0000H
MOVX @DPTR,A
RET
DELAY1S:
DELAY:
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R7,DELAY
RET
ORG 2000H
MAIN1:
MOV A, #10
MAIN:
SETB TR0
CLR TF0
CLR TR0
DEC A
CJNE A,#0,MAIN
CPL P1.0
SJMP MAIN1
END
Viết chương trình tạo sóng vuông 1 Hz trên chân P1.0 sử dụng timer 0 ở chế độ 2
ORG 2000H
MAIN:
SETB TR0
MAIN1:
MOV DPTR, #0
CLR TF0
INC DPTR
MOV A,DPH
MOV A,DHL
CPL P1.0
SJMP MAIN1
END
Viết chương trình phát chuỗi ký tự “Hello, world” lên máy tính thông qua
HyperTerminal với tốc độ baud 19200 bps mỗi khi SW 310 (gắn vào P1.0) được
nhấn
ORG 2000H
MOV TMOD,#21H
MOV TH1,#-3
SETB TR1
MOV SCON,#52H
LAP:
MOV R7,#0
MOV DPTR,#TABLE
TTUC:
JB P1.0,$
ACALL DL100MS
JNB P1.0,$
MOV A,R7
INC R7
MOVC A,@A+DPTR
JZ LAP
ACALL XUAT
SJMP TTUC
;---------------------------------------------------------------
XUAT:
JNB TI,$
CLR TI
MOV SBUF,A
RET
;---------------------------------------------------------------
DL100MS:
MOV R4,#2
LAP1:
MOV TMOD,#01H
MOV TL0,#LOW(-50000)
MOV TH0,#HIGH(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R4,LAP1
RET
;-------------------------------
TABLE: DB "HELLO,WORLD",0
END
Viết chương trình nhận các ký tự từ máy tính gửi đến EME-MC8 thông qua
HyperTerminal (bằng cách gõ các ký tự trên bàn phím khi đang ở trong chương
trình HyperTerminal) và hiển thị lên LCD như sau:
Nếu ký tự là chữ thì hiển thị lên LCD; Enter thì xuống hàng; ESC thì xóa màn hình
LCD; Backspace thì xóa ký tự bên trái dấu nháy.
ORG 2000H
RS BIT P3.5
EN BIT P3.4
MOV TMOD,#21H
MOV TH1,#-3
MOV SCON,#52H
CLR F0
LCALL KHOIDONGLCD
MAIN:
LCALL INCHAR
LCALL KTRACHAR
LCALL KTRAENTER
LCALL KTRAESC
LCALL KTRABACK
SJMP MAIN
;-----------------------------------------------------------------------------------------------
KTRABACK:
CJNE A,#08H,OUT1
LCALL XOAKYTU
OUT1:
RET
;--------------------------------------------------
XOAKYTU:
DEC R1
JB F0,H1
MOV R0,#00H
SJMP GOTO
GOTO:
LCALL GOTOXY
MOV A,#0FEH
LCALL XUAT1KYTU
DEC R1
LCALL GOTOXY
RET
;-----------------------------------------------------------------------------------------------
KTRAENTER:
LCALL CHUYENHANG
OUT2:
RET
;---------------------------------------------------------------------------
CHUYENHANG:
CPL F0
JB F0,HANG1
LCALL KHOIDONGLCD
MOV R1,#0
SJMP OUT4
HANG1:
MOV R0,#01
MOV R1,#00
LCALL GOTOXY
OUT4:
RET
;-----------------------------------------------------------------------------------------------
KTRAESC:
LCALL CLRLCD
OUT3:
RET
;------------------------------------------------
CLRLCD:
MOV A,#01H
LCALL NHAPLENH
MOV R1,#0
RET
;-----------------------------------------------------------------------------------------------
KTRACHAR:
CJNE A,#29H,$+3 ; chỉ nhận ký tự mã ASCII trong khoảng hiển thị được
(30H là số 0)
JC THOAT
CJNE A,#7FH,$+3 ; chỉ nhận ký tự mã ASCII trong khoảng hiển thị được
JNC THOAT
CLR C
LCALL XUAT1KYTU
THOAT:
RET
;-----------------------------------------------------------------------------------
JNB RI,$
CLR RI
MOV A,SBUF
RET
;-------------------------------------------------------------------------------
NHAPLENH:
MOV DPTR,#8000H
CLR EN
SETB EN
CLR RS
MOVX @DPTR,A
CLR EN
LCALL DL5MS
RET
;-------------------------
XUAT1KYTU:
MOV DPTR,#8000H
CLR EN
SETB EN
SETB RS
MOVX @DPTR,A
CLR EN
LCALL DL5MS
INC R1
RET
;----------------------------
DL5MS:
MOV TL1,#LOW(-5000)
MOV TH1,#HIGH(-5000)
SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
RET
;----------------------------
KHOIDONGLCD:
MOV A,#01H
LCALL NHAPLENH
MOV A,#0EH
LCALL NHAPLENH
MOV A,#02H
LCALL NHAPLENH
MOV A,#06H
LCALL NHAPLENH
MOV A,#38H
LCALL NHAPLENH
RET
;-------------------------------------
GOTOXY:
PUSH ACC
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ORL A,R1
LCALL NHAPLENH
POP ACC
TABLE: DB 80H,0C0H
RET
END
INC 21H
MOV A,21H
CJNE A,#0BAH,DEM1
MOV 21H,#0B0H
INC 20H
MOV A,20H
CJNE A,#7AH,DEM1
; tràn thì trả về trị ban đầu 0000
MOV 20H,#70H
MOV 21H,#0B0H
MOV 22H,#0D0H
MOV 23H,#0E0H
DEM1:
NOP
LJMP KTHUC ;nhảy về nhản KTHUC để thực hiện tiếp chương trình
;------------------------------------------------------------------------------------
; chương trình quét led
HLED:
LL:
MOV A,@R1
ADD A,R0
MOV DPTR, #0000H
MOVX @DPTR, A
MOV R4,#1
NHAY: MOV R3,#1
DJNZ R3,$
DJNZ R4,NHAY
INC R1
CJNE R1,#24H,LL
RET
;------------------------------------------------------------------------
DELAY:
MOV R6,#200
TTRE:
MOV R7,#250
DJNZ R7,$
DJNZ R6,TTRE
RET
END