Thí nghiệm thực hành môn Vi xử lý

BÀI 3: THÍ NGHIỆM HIỂN THỊ DÙNG LCD

THÍ NGHIỆM 1: Viết chương trình hiển thị chuỗi “ Hello” lên LCD

 ORG 2000H

EN BIT P3.4

RS BIT P3.5

MAIN: MOV DPTR, #8000H

ACALL LCD_INIT

MOV A,#'H'

ACALL WRITE_CHAR

MOV A,#'e'

ACALL WRITE_CHAR

MOV A,#'l'

ACALL WRITE_CHAR

MOV A,#'l'

ACALL WRITE_CHAR

MOV A,#'o'

ACALL WRITE_CHAR

SJMP $

LCD_INIT: MOV A,#38H

CALL WRITE_CMD

MOV A,#0EH

CALL WRITE_CMD

MOV A,#06H

CALL WRITE_CMD

RET

WAIT_LCD: MOV R7, #100

DL: MOV R6, #250

DJNZ R6, $

DJNZ R7, DL

RET

WRITE_CHAR: ACALL WAIT_LCD

SETB RS

MOVX @DPTR, A

SETB EN

CLR EN

RET

WRITE_CMD: ACALL WAIT_LCD

CLR RS

MOVX @DPTR, A

SETB EN

CLR EN

RET

END

 

doc26 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: yen2110 | Lượt xem: 473 | Lượt tải: 0download
Tóm tắt nội dung Thí nghiệm thực hành môn Vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ACALL LCD_INIT
LAP:	
ACALL RECEIVE
	CJNE A,#13,TT	; kiểm tra phím nhấn Enter
MOV A,#0C0H
ACALL WRITE_CMD
SJMP THOAT
TT:	CJNE A,#27,TT1	; kiểm tra phím nhấn ESC
MOV A,#01H
ACALL WRITE_CMD
SJMP THOAT
TT1:	
CJNE A,#30H,SO	; bắt đầu kiểm tra phím nhấn là số
SO:	JC THOAT
CJNE A,#3AH,CHU	; kết thúc kiểm tra phím nhấn là số
CHU:	JC LED
CJNE A,#41H,KHAC	; bắt đầu kiểm tra phím nhấn là chữ hoa
KHAC:	JC THOAT
CJNE A,#5BH,HOA	; kết thúc kiểm tra phím nhấn là chữ hoa
HOA:	JC NHO
CJNE A,#61H,KHAC1	; bắt đầu kiểm tra phím nhấn là chữ thường
KHAC1:	JC THOAT
CJNE A,#7BH,THUONG ; kết thúc kiểm tra phím nhần là chữ thường
THUONG:	JC NHO
SJMP THOAT
NHO:	MOV DPTR,#8000H
INC R1
CJNE R1,#17,XUONG 	 ; kiểm tra nếu hiển thị hết hàng đầu tiên thì xuông hàng trong màn hình LCD
XUONG:	JC XUATLCD
PUSH ACC
MOV A,#0C0H
ACALL WRITE_CMD
POP ACC
MOV R1,#0
XUATLCD:	ACALL WRITE_cHAR
SJMP THOAT
LED: 	MOV DPTR,#0000H
ANL A,#0FH
ORL A,#0E0H
MOVX @DPTR,A
THOAT:	MOV DPTR,#8000H
ACALL SEND
SJMP LAP
LCD_INIT:
MOV A, #38H
ACALL WRITE_CMD
MOV A, #0EH
ACALL WRITE_CMD
MOV A, #06H
ACALL WRITE_CMD
MOV A, #01H
ACALL WRITE_CMD
RET
WAIT_LCD: 	MOV R7,#100
LOOP: 	MOV R6, #250
DJNZ R6,$
DJNZ R7, LOOP
RET
WRITE_CHAR:
ACALL WAIT_LCD
SETB RS
MOVX @DPTR,A
SETB EN
CLR EN
RET
WRITE_CMD: 
ACALL WAIT_LCD
CLR RS
MOVX @DPTR,A
SETB EN
CLR EN
RET
RECEIVE:	JNB RI,RECEIVE
MOV A, SBUF
CLR RI
RET
SEND:	JNB TI,SEND
MOV SBUF,A
CLR TI
RET
END
BÀI 5: THÍ NGHIỆM ĐIỀU KHIỂN ADC
THÍ NGHIỆM 1: Viết chương trình đọc điện áp của biến trở trên kênh 0 và hiển thị ra led 7 đoạn
	ORG 2000H
LAP:	MOV R1,#255
	MOV DPTR,#4000H
	MOV A,#0
	MOVX @DPTR,A
	ACALL DELAY_100US
	MOVX A,@DPTR
	LAP1:	PUSH ACC
	MOV DPTR,#0000H
	MOV B,#10
	DIV AB
	MOV R7,B
	MOV B,#10
	DIV AB
	ORL A,#0B0H
	MOVX @DPTR,A	
	ACALL DELAY_1MS
	MOV A,B
	ORL A,#0D0H
	MOVX @DPTR,A
	ACALL DELAY_1MS
	MOV A,R7
	ORL A,#0E0H
	MOVX @DPTR,A
	ACALL DELAY_1MS
	POP ACC
	DJNZ R1,LAP1	; tạo thời gian delay
	SJMP LAP
DELAY_100US:	MOV R6,#200
	DJNZ R6,$
	RET
DELAY_1MS:	MOV R6,#5
LOOP:	MOV R5,#100
	DJNZ R5,$
	DJNZ R6,LOOP
	RET
	END
THÍ NGHIỆM 2: Viết chương trình đọc điện áp của biến trở trên kênh 0 và hiển thị ra LCD
	ORG 2000H
	RS BIT P3.5
	EN BIT P3.4
	MOV DPTR,#8000H
	ACALL LCD_INIT
LAP:	MOV DPTR,#4000H
	MOV A,#0
	MOVX @DPTR,A
	ACALL DELAY_100US
	MOVX A,@DPTR
MOV DPTR,#8000H
	PUSH ACC
	MOV A, #80H
	ACALL WRITE_CMD
	POP ACC
	MOV B,#10
	DIV AB
	MOV R0,B
	MOV B,#10
	DIV AB
	ORL A,#30H
	ACALL WRITE_CHAR
	MOV A,B
	ORL A,#30H
	ACALL WRITE_CHAR
	MOV A,R0
	ORL A,#30H
	ACALL WRITE_CHAR
	SJMP LAP
LCD_INIT:	MOV A, #38H
	ACALL WRITE_CMD
	MOV A, #0CH
	ACALL WRITE_CMD
	MOV A, #04H
	ACALL WRITE_CMD
	MOV A, #01H
	ACALL WRITE_CMD
	RET
WAIT_LCD: 	MOV R7,#100
LOOP: 	MOV R6, #250
	DJNZ R6,$
	DJNZ R7, LOOP
	RET
WRITE_CHAR:	SETB RS
	MOVX @DPTR,A
	SETB EN
	CLR EN
	ACALL WAIT_LCD	
	RET
WRITE_CMD: 	CLR RS
	MOVX @DPTR,A
	SETB EN
	CLR EN
	ACALL WAIT_LCD
	RET
DELAY_100US:	MOV R6,#200
	DJNZ R6,$
	RET
	END
BÀI TẬP THÊM : Viết chương trình đọc điện áp thực của kênh 0 và hiển thị lên LCD
	ORG 2000H
	RS BIT P3.5
	EN BIT P3.4
	MOV DPTR,#8000H
	ACALL LCD_INIT
LAP:	MOV DPTR,#4000H
	MOV A,#0
	MOVX @DPTR,A
	ACALL DELAY_100US
	MOVX A,@DPTR
	MOV DPTR,#8000H
	ACALL CHIA
	MOV A, #80H
	ACALL WRITE_CMD
	SJMP LAP
LCD_INIT:	MOV A, #38H
	ACALL WRITE_CMD 
	MOV A, #0CH
	ACALL WRITE_CMD
	MOV A, #04H
	ACALL WRITE_CMD
	MOV A, #01H
	ACALL WRITE_CMD
	RET
WAIT_LCD: 	MOV R7,#100
LOOP: 	MOV R6, #250
	DJNZ R6,$
	DJNZ R7, LOOP
	RET
WRITE_CHAR:	SETB RS
	MOVX @DPTR,A
	SETB EN
	CLR EN
	ACALL WAIT_LCD	
	RET
WRITE_CMD: 	CLR RS
	MOVX @DPTR,A
	SETB EN
	CLR EN
	ACALL WAIT_LCD
	RET
DELAY_100US:	MOV R6,#200
	DJNZ R6,$
	RET
CHIA:	PUSH ACC
	PUSH B
	MOV B,#51
	DIV AB
	ORL A,#30H
	ACALL WRITE_CHAR
	MOV A,#0A5H
	ACALL WRITE_CHAR
	MOV A,B
	MOV B,#5
	DIV AB
	ORL A,#30H
	ACALL WRITE_CHAR
	POP B
	POP ACC
	RET
END
BÀI 6: THÍ NGHIỆM HIỂN THỊ DÙNG LED MA TRẬN
THÍ NGHIỆM 1: Viết chương trình hiển thị ký tự chữ A lên led ma trận
ORG 2000H
LOOP:	MOV R1,#8
	MOV A,#00000001B
	MOV DPTR,#CHARA
LAP:	ACALL HT_COT
 	PUSH ACC
 	CLR A
	MOVC A,@A+DPTR
	ACALL HT_HANG
 	INC DPTR
	POP ACC
	RL A
	DJNZ R1, LAP
	SJMP LOOP
CHARA: DB	03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H, 0FFH, 0FFH
HT_COT:	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0C000H
 	MOVX @DPTR,A
 	POP DPL
 	POP DPH
 	RET
HT_HANG:	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0A000H
 	MOVX @DPTR,A
 	ACALL DELAY_1ms
 	POP DPL
 	POP DPH
 	RET
DELAY_1ms:	
MOV R7,#5
DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	END
THÍ NGHIỆM 2: Viết chương trình con hiển thị nội dung 8 ô nhớ từ 30H đến 37H. Dùng chương trình con để hiển thị chữ A, B
	HT_ONHO:	
	MOV R1,#8
	MOV A,#00000001B
	MOV R0,#30H
 	LAP:	ACALL HT_COT
 	PUSH ACC
 	CLR A
	MOV A,@R0
	ACALL HT_HANG
 	INC R0
	POP ACC
	RL A
	DJNZ R1, LAP
	RET
 	HT_COT:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0C000H
 	MOVX @DPTR,A
 	POP DPL
 	POP DPH
 	RET
 	HT_HANG:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0A000H
 	MOVX @DPTR,A
 	ACALL DELAY_1ms
 	POP DPL
 	POP DPH
 	RET
 	DELAY_1ms:
	MOV R7,#5
 	DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	Dùng chương trình con trên hiển thị chữ A
	ORG 2000H
	MOV 30H,#03H
	MOV 31H,#0EDH
	MOV 32H,#0EEH
	MOV 33H,#0EEH
	MOV 34H,#0EDH
	MOV 35H,#03H
	MOV 36H,#0FFH
	MOV 37H,#0FFH
	LOOP:	ACALL HT_ONHO
	SJMP LOOP
	HT_ONHO:	
	MOV R1,#8
	MOV A,#00000001B
	MOV R0,#30H
 	LAP:	ACALL HT_COT
 	PUSH ACC
 	CLR A
	MOV A,@R0
	ACALL HT_HANG
 	INC R0
	POP ACC
	RL A
	DJNZ R1, LAP
	RET
 	HT_COT:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0C000H
 	MOVX @DPTR,A
 	POP DPL
 	POP DPH
 	RET
 	HT_HANG:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0A000H
 	MOVX @DPTR,A
 	ACALL DELAY_1ms
 	POP DPL
 	POP DPH
 	RET
 	DELAY_1ms:
	MOV R7,#5
 	DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	END
	Dùng chương trình con trên hiển thị chữ B
	ORG 2000H
	MOV 30H,#00H
	MOV 31H,#76H
	MOV 32H,#76H
	MOV 33H,#76H
	MOV 34H,#89H
	MOV 35H,#0FFH
	MOV 36H,#0FFH
	MOV 37H,#0FFH
	LOOP:	ACALL HT_ONHO
	SJMP LOOP
	HT_ONHO:	
	MOV R1,#8
	MOV A,#00000001B
	MOV R0,#30H
 	LAP:	ACALL HT_COT
 	PUSH ACC
 	CLR A
	MOV A,@R0
	ACALL HT_HANG
 	INC R0
	POP ACC
	RL A
	DJNZ R1, LAP
	RET
 	HT_COT:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0C000H
 	MOVX @DPTR,A
 	POP DPL
 	POP DPH
 	RET
 	HT_HANG:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,# 0A000H
 	MOVX @DPTR,A
 	ACALL DELAY_1ms
 	POP DPL
 	POP DPH
 	RET
 	DELAY_1ms:
	MOV R7,#5
 	DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	END
BÀI TẬP THÊM : Cho hiển thị và chạy chữ A B C trên led ma trận
	ORG 2000H
 	TT:	MOV R4,#10
	MOV R0,#0
 	MOV DPTR,#CHAR
 	MOV R5,#32
LOOP1:	MOV R2,DPH
 	MOV R3,DPL
LOOP:	MOV DPH,R2
 	MOV DPL,R3
 	MOV R1,#8
	MOV A,#00000001B
	LAP:	ACALL HT_COT
 	PUSH ACC
 	CLR A
	MOVC A,@A+DPTR
	ACALL HT_HANG
 	INC DPTR
	POP ACC
	RL A
	DJNZ R1, LAP
 	DJNZ R4,LOOP
 	MOV R4,#10
 	INC R0
 	MOV A,R0
 	MOV DPTR,#CHAR
 	ADD A,DPL
 	MOV DPL,A
	DJNZ R5,LOOP1
 	SJMP TT
CHAR: 	DB 	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H, 0FFH, 0FFH,00H, 76H, 76H, 76H, 89H, 0FFH, 0FFH,0FFH,81H,7EH,7EH,7EH,0BDH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH,0FFH
HT_COT:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,#0C000H
 	MOVX @DPTR,A
 	POP DPL
 	POP DPH
 	RET
HT_HANG:
 	PUSH DPH
 	PUSH DPL
 	MOV DPTR,#0A000H
 	MOVX @DPTR,A
 	ACALL DELAY_1ms
 	POP DPL
 	POP DPH
 	RET
DELAY_1ms:
	MOV R7,#5
DL:	MOV R6,#100
	DJNZ R6,$
	DJNZ R7,DL
 	RET
	END
BÀI 7: THÍ NGHIỆM VỚI ĐỘNG CƠ DC
THÍ NGHIỆM 1: Viết chương trình cho phép động cơ chạy theo chiều thuận trong vòng 2s , nghỉ 2s,chạy theo chiều ngược 2s, nghỉ 2s và lặp lại
	ORG 2000H
 	CLR A
 	MOV TMOD,#10H
 	MOV DPTR,#0E000H
 	LAP:	ACALL CHIEUTHUAN
 	ACALL DELAY_2S
 	ACALL NGHI
 	ACALL DELAY_2S
 	ACALL CHIEUNGHICH
 	ACALL DELAY_2S
 	ACALL NGHI
 	ACALL DELAY_2S
 	SJMP LAP
 	CHIEUTHUAN:
 	SETB ACC.0
 	CLR ACC.1
 	MOVX @DPTR,A
 	RET
 	NGHI:
 	CLR ACC.0
 	CLR ACC.1
	MOVX @DPTR,A
	RET
 	CHIEUNGHICH:
 	CLR ACC.0
 	SETB ACC.1
 	MOVX @DPTR,A
	RET
 	DELAY_2S:
 	MOV R7,#40
 	LOOP:	MOV TL1,#LOW(-50000)
 	MOV TH1,#HIGH(-50000)
 	SETB TR1
 	JNB TF1,$
 	CLR TF1
	CLR TR1
 	DJNZ R7, LOOP
 	RET
 	END
THÍ NGHIỆM 2: Viết chương trình điều khiển động cơ với phương pháp PWM, trong đó thời gian bật của xung là 50% chu kỳ
ORG 2000H
 	LJMP MAIN
 	ORG 200BH
 	LJMP ISR_T0
 	ORG 201BH
 	LJMP ISR_T1
 MAIN:
 	MOV TMOD,#11H
 	CLR A
 	SETB TF0
 	MOV IE,#82H
 	MOV DPTR,#0E000H
LAP: 	MOVX @DPTR,A
 	SJMP LAP
ISR_T0:
 	SETB ACC.0
 	CLR TR0
 	MOV TL0,#LOW(-1000)
 	MOV TH0,#HIGH(-1000)
 	SETB TR0
 	CLR TR1
 	MOV TL1,#LOW(-500)
 	MOV TH1,#HIGH(-500)
 	SETB TR1
 	SETB ET1
 	RETI
ISR_T1:
 	CLR TR1
 	CLR ACC.0
 	CLR ET1
 	RETI
 	END
THÍ NGHIỆM 3: Viết chương trình điều khiển động cơ với phương pháp PWM, trong đó thời gian “bật” của xung lần lượt là 20%, 50%, và 80% chu kỳ. Mỗi độ rộng xung cách nhau 5s. Quy trình được lặp lại liên tục
ORG 2000H
 	LJMP MAIN
 	ORG 200BH
 	LJMP ISR_T0
 	ORG 201BH
 	LJMP ISR_T1
 MAIN:
 	MOV TMOD,#11H
 	MOV R7,#50
 	MOV R6,#100
 	MOV R5,#0
 	CLR A
 	SETB TF0
 	MOV IE,#82H
 	MOV DPTR,#0E000H
LAP: 	MOVX @DPTR,A
 	SJMP LAP
ISR_T0:
 	SETB ACC.0
 	CLR TR0
 	MOV TL0,#LOW(-1000)
 	MOV TH0,#HIGH(-1000)
 	SETB TR0
 	DJNZ R6,TT
 	MOV R6,#100
 	DJNZ R7,TT
 	MOV R7,#50
 	MOV R6,#100
 	INC R5
TT:	CJNE R5,#0,KHAC20
 	CLR TR1
 	MOV TL1,#LOW(-200)
 	MOV TH1,#HIGH(-200)
 	SETB TR1
 	SJMP EXIT
KHAC20: 	CJNE R5,#1,KHAC50
 	CLR TR1
 	MOV TL1,#LOW(-500)
 	MOV TH1,#HIGH(-500)
 	SETB TR1
 	SJMP EXIT
 KHAC50:	CJNE R5,#2,KHAC80
 	CLR TR1
 	MOV TL1,#LOW(-800)
 	MOV TH1,#HIGH(-800)
 	SETB TR1
 	SJMP EXIT
KHAC80:	MOV R5,#0
 	SJMP TT
 EXIT:	SETB ET1
 	RETI
ISR_T1:	
 	CLR TR1
 	CLR ACC.0
 	CLR ET1
 	RETI
 	END
THÍ NGHIỆM 4: BÍ

File đính kèm:

  • docthi_nghiem_thuc_hanh_mon_vi_xu_ly.doc