You are on page 1of 76

TRƯỜNG ĐẠI HỌC BÁCH KHOA

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH




BÁO CÁO THÍ NGHIỆM VI XỬ LÝ


LỚP: DT03 – HK213

Thực hiện bởi:

STT HỌ VÀ TÊN MSSV

1 Lại Nguyễn Duy 2010999

2 Nguyễn Xuân Hoàng Tuấn 2012351

3 Hoàng Tuấn Kiệt 2010363

TP.HỒ CHÍ MINH, NĂM 2022


BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED

MỤC TIÊU
➢ Nắm được cách sử dụng kit thí nghiệm, phần mềm lập trình.
➢ Nắm được cách lập trình giao tiếp IO port.
➢ Nắm được cách lập trình tạo thời gian trễ dùng các lệnh.

CHUẨN BỊ
➢ Đọc và làm bài thí nghiệm 0 tại nhà.
➢ Đọc bài chuẩn bị thí nghiệm 1 tại nhà.
➢ Chuẩn bị cho thí nghiệm 1: Viết chương trình và mô phỏng trên Proteus tất cả các bài trong thí
nghiệm 1 dựa trên bài chuẩn bị 1 (Prelab_1) và thí nghiệm 0.
➢ Nộp tất cả các kết quả (bài thí nghiệm 0 và bài chuẩn bị thí nghiệm 1) cho GVHD trước khi vào
lớp.
Sinh viên không thực hiện hoặc nộp thiếu nếu không có lí do chính đáng sẽ không được tham gia thí
nghiệm và bị đánh vắng buổi đó. Mọi hình thức gian lận, sao chép sẽ bị xử lý chính đáng.

Department of Electronics Page | 1


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
THÍ NGHIỆM 1
Mục tiêu: Nắm được cách thức điều khiển trực tiếp ngoại vi thông qua các port I/O của 8051.

Yêu cầu: Viết chương trình thực hiện việc đọc liên tục trạng thái của nút nhấn được nối đến P1.0
và hiển thị ra led được nối tại chân P3.0 (bit thứ 0 của led thanh BL202).

ORG 2000H

LOOP: MOV C,P1.0

MOV P3.0,C

SJMP LOOP

END

Kiểm tra:

➢ Biên dịch và thực thi chương trình để kiểm tra kết quả thực hiện.

Department of Electronics Page | 2


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED

Department of Electronics Page | 3


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Câu hỏi:

➢ Thử giải thích tại sao có đến 2 led cùng bị tác động khi nhấn hoặc thả nút?

Khi nhấn nút, led nối với chân P1.0 và led nối với chân P3.0 đều sáng; khi thả nút thì đều tắt. Vì
được tác động do lệnh: MOV C,P1.0; MOV P3.0,C

➢ Tổng kết xem các bit nào của 2 port có thể được dùng trong thí nghiệm trên và giải thích tại
sao?

Ta có thể sử dụng các bit từ P1.0 đến P1.7 và tương tự với Port 3. Nhưng không nên sử dụng Port
3 vì các chân Port 3 được sử dụng với các chức năng đặc biệt sau:

Department of Electronics Page | 4


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED

THÍ NGHIỆM 2
Mục tiêu: Nắm được cách viết chương trình con để tạo trễ

Yêu cầu:

➢ Viết chương trình con Delay1s.


➢ Dùng chương trình con đã viết để chớp/tắt LED đơn gắn vào P1.0 sau mỗi khoảng thời
gian 1s.
➢ Thay đổi chương trình con để tần số chớp tắt bây giờ là 1KHz.
• Chương trình con:
Delay1s:
MOV R5,#8
LP1: MOV R6,#250
LP2: MOV R7,#250
DJNZ R7,$
DJNZ R6,LP2
DJNZ R5,LP1
RET

• Chương trình chớp/tắt LED đơn gắn vào P1.0 sau mỗi khoảng thời gian 1s:
ORG 2000H
LOOP: CPL P1.0
ACALL Delay1s
SJMP LOOP
Delay1s:
MOV R5,#8
LP1: MOV R6,#250
LP2: MOV R7,#250
DJNZ R7,$
DJNZ R6,LP2

Department of Electronics Page | 5


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
DJNZ R5,LP1
RET
END

• Thay đổi chương trình con để tần số chớp tắt bây giờ là 1KHz.
ORG 2000H
LOOP: CPL P1.0
ACALL Delay1ms
SJMP LOOP
DELAY1ms:
LP: MOV R5, #2
MOV R6, #250
DJNZ R6, $
DJNZ R5, LP
RET

END
Kiểm tra:

➢ Biên dịch, thực thi và kiểm tra chương trình bằng cách quan sát LED đơn.

thời gian chớp tắt 1s.mp4 tần số chớp tắt 1KHz.mp4


Câu hỏi:

➢ Thời gian 1s được tạo ra như thế nào? Tính toán chính xác dựa trên chương trình đã viết.
1s = 2*MC*(Giá trị nạp), 1 MC là 1𝜇(𝑠) => Giá trị cần nạp là 500000
Giới hạn của 1 thanh ghi là 8 bit, chỉ lưu được giá trị tối đa là 255 nên ta phải chia nhỏ:
500000=250*250*8 => Chọn R5=8; R6=250; R7=250.

➢ Sai số nhỏ nhất có thể đạt được so với yêu cầu là bao nhiêu?
Công thức tính chính xác Time delay với 3 vòng lặp như sau:
Time delay = 2*k*m*n +(3*m+3)*k+3 (MC) với k, m, n lần lượt là 8, 250, 250
→ Time delay = 1.006027(s). Sai số xấp xỉ 0.006207(s).

Department of Electronics Page | 5


Microprocessor Laboratory
➢ Khi tần số chớp tắt là 1Khz, cho biết hiện tượng trên LED?
LED sẽ chớp tắt gần như liên tục (chu kì là 1Khz hay mỗi 500𝜇(𝑠)).

➢ Sinh viên thay đổi chương trình con như thế nào để được tần số chớp tắt là 1KHz?
Với tần số chớp tắt là 1Khz => Chu kì sẽ là 1000 𝜇(𝑠)(500 𝜇(𝑠) tín hiệu ở mức cao và 500 𝜇(𝑠) )
tín hiệu ở mức thấp. Do đó, thời gian trễ Time delay = 500 𝜇(𝑠) với công thức ở trên thì ta tính
được giá trị cần nạp là 250.

Department of Electronics Page | 6


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
THÍ NGHIỆM 3
Mục tiêu: Nắm được cách viết chương trình con để tạo trễ

Yêu cầu: Viết chương trình tạo 2 xung vuông 0.5Hz (chu kỳ nhiệm vụ 50%) và 1Hz (chu kỳ
nhiệm vụ là 30%) lần lượt trên chân P1.0 và P1.1.
ORG 2000H
LOOP: CPL P1.0
CPL P1.1
ACALL DELAY300ms
CPL P1.1
ACALL DELAY700ms
SJMP LOOP
DELAY300ms:
MOV R5, #3
LP1: MOV R6, #200
LP2: MOV R7, #250
DJNZ R7, $
DJNZ R6, LP2
DJNZ R5, LP1
RET
DELAY700ms:
MOV R5, #7
LP3: MOV R6, #200
LP4: MOV R7, #250
DJNZ R7, $
DJNZ R6, LP4
DJNZ R5, LP3
RET
END

Department of Electronics Page | 6


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Kiểm tra:

➢ Biên dịch, thực thi và kiểm tra chương trình bằng cách sử dụng oscilloscope để kiểm tra.

chương trình tạo 2 xung vuông 0.5Hz và 1Hz.mp4


Câu hỏi:

➢ Vẽ giản đồ của 2 xung? Các chương trình con viết với thời gian trễ là bao nhiêu?

Các chương trình con viết với thời gian trễ lần lượt là 0.3s và 0.7s.

➢ Tại mỗi thời gian tạo trễ, các chân P1.0 và P1.1 xuất tín hiệu như thế nào?

Tại 0.3s đầu, ta đảo bit chân P1.1, 0.7s sau ta tiếp tục đảo bị chân P1.1 vậy ta đã tạo được xung
1Hz với chu kì nhiệm vụ là 30%. Sau đó đồng thời đảo bit chân P1.0, do đó ta có được xung 0.5Hz
với chu kì nhiệm vụ là 50% tại chân P1.0.

➢ Để tạo các xung thỏa yêu cầu bài toán, các vòng trễ được viết như thế nào?
Vòng trễ được viết như sau:

Department of Electronics Page | 7


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
LOOP:
ACALL DELAY300ms
CPL P1.1
ACALL DELAY700ms
CPL P1.1
CPL P1.0
SJMP LOOP

Department of Electronics Page | 8


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
THÍ NGHIỆM 4
Mục tiêu: Nắm được cách hiển thị bar LED và tạo hiệu ứng

Yêu cầu: 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 Delay1s đã viết ở trên.
ORG 2000H
LOOP: MOV A,#7FH
MOV R1,#8
PHASE:
MOV P1,A
RL A
ACALL Delay1s
DJNZ R1,PHASE
SJMP LOOP
Delay1s:

MOV R5,#8
LP1: MOV R6,#250
LP2: MOV R7,#250
DJNZ R7,$
DJNZ R6,LP2
DJNZ R5,LP1
RET
END

Kiểm tra:

➢ Biên dịch, thực thi và kiểm tra chương trình bằng cách quan sát hiệu ứng trên bar led.

thí nghiệm 4.mp4

Department of Electronics Page | 9


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED

Câu hỏi:

➢ Led ngoài cùng bên trái kết nối đến MSB (most significant bit) hay LSB (less significant bit)
của port 1?
LED ngoài cùng bên trái kết nối đến MSB của port 1.

Department of Electronics Page | 12


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
THÍ NGHIỆM 5
Mục tiêu: Nắm được cách thức giao tiếp với ngoại vi LED 7 đoạn

Yêu cầu:

➢ Viết chương trình con DisplayLed hiển thị lên LED 7 đoạn số 0 giá trị chứa trong thanh ghi
R0
DisplayLED:
MOV DPTR, #0000H
MOV A,R0
MOVX @DPTR,A
RET

➢ Viết chương trình chính hiển thị số 9 lên LED 7 đoạn số 0 bằng cách cho R0 bằng 9 và gọi
chương trình con DisplayLed.

ORG 2000H
MOV R0,#11101001B
CALL DisplayLED
LOOP:
SJMP LOOP
DisplayLED:
MOV DPTR, #0000H
MOV A,R0
MOVX @DPTR,A
RET
END
Kiểm tra:

➢ Biên dịch, thực thi và kiểm tra chương trình

Department of Electronics Page | 13


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED

Department of Electronics Page | 14


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
THÍ NGHIỆM 6
Mục tiêu: Kết hợp được các chương trình con: chương trình con tạo trễ và chương trình con hiển
thị LED 7 đoạn.

Yêu cầu: 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 sử dụng 2 chương trình con ở Thí nghiệm 2 và Thí nghiệm 5.

ORG 2000H
START:
MOV R0,#0E0H
LOOP:
ACALL DisplayLED
ACALL DELAY1S
INC R0
CJNE R0,#0EAH,LOOP
AJMP START
DisplayLED:
MOV DPTR, #0000H
MOV A,R0
MOVX @DPTR,A
RET
DELAY1S:
MOV R5, #8
LP1: MOV R6, #250
LP2: MOV R7, #250
DJNZ R7, $
DJNZ R6, LP2
DJNZ R5, LP1
RET
END

Department of Electronics Page | 15


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Hướng Dẫn:

Trong chương trình chính, đầu tiên cho thanh ghi R0 bằng 0. Sau đó vào vòng lặp gọi chương trình
con DisplayLed đã viết ở phần trước, tạo trễ 1s, tăng R0 lên 1 và lặp lại quá trình. Nếu R0 lớn hơn
9 thì cho R0 bằng 0 trở lại.

Kiểm tra:

➢ Biên dịch, thực thi và kiểm tra chương trình.

thí nghiệm 6.mp4

Câu hỏi:

➢ Vẽ lưu đồ giải thuật của chương trình.

Department of Electronics Page | 16


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
THÍ NGHIỆM 7
Mục tiêu: Nắm được cách thức dùng chương trình con và giao tiếp LED 7 đoạn.

Yêu cầu:

Viết chương trình con DisplayLED xuất giá trị chứa trong thanh ghi R0 lên LED 7 đoạn có số thứ
tự chứa trong thanh ghi R1. Trong đó:

R0 nằm trong tầm từ 0-9 và R1 trong tầm từ 0-3.

Sau đó dùng chương trình con này viết chương trình chính xuất giá trị 1 lên LED 7 đoạn số 3.

Hướng dẫn:

Để hiển thị lên 1 LED 7 đoạn ta phải ghi ra ngoại vi ở vùng nhớ 0000H-1FFFH một byte, với 4 bit
thấp chứa giá trị của giá trị cần hiển thị và 4 bit cao được dùng để chọn LED. Trong 4 bit cao, bit
nào bằng 0 thì LED 7 đoạn tương ứng sẽ được bật.

Đoạn chương trình sau tính toán để xuất ra điều khiển LED dựa vào R0, R1

MOV B, R1
MOV A, #11110111B
SHIFTLOOP:
RL A
DJNZ B, SHIFTLOOP
ANL A, #0F0H
PUSH ACC
MOV A, R0
ANL A, #0FH
MOV R0, A
POP ACC
ORL A, R0

Department of Electronics Page | 17


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED

Bài làm:

ORG 2000H
LOOP:
MOV R0,#3
MOV R1,#3
ACALL DISPLAYLED
SJMP LOOP
DISPLAYLED:
INC R1
MOV B,R1
MOV A,#11110111B
SHIFTLOOP:
RL A
DJNZ B,SHIFTLOOP
ANL A,#0F0H
ADD A,R0
MOV DPTR,#0000H
MOVX @DPTR,A
RET
END

Department of Electronics Page | 13


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
➢ Biên dịch, thực thi và kiểm tra chương trình

Department of Electronics Page | 14


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Câu hỏi:

➢ Viết lại chương trình trên bằng phương pháp sử dụng bảng tra (Lookup table).
ORG 2000H
LOOP: MOV R0,#3
MOV R1,#2
MOV DPTR,#BANG
MOV A,R1
MOVC A,@A+DPTR
ADD A,R0
MOV DPTR,#0000H
MOVX @DPTR,A
SJMP LOOP
BANG: DB 0E0H,0D0H,0B0H,70H
END

Department of Electronics Page | 15


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED

THÍ NGHIỆM 8
Mục tiêu:

➢ Nắm được phương pháp quét LED 7 đoạn.

Yêu cầu:

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.

Giảm thời gian trễ xuống còn 100 ms. Quan sát hiện tượng.

Tính toán thời gian trễ sao cho không còn thấy LED nhấp nháy và áp dụng vào chương trình

Giảm thời gian trễ xuống bằng 0 (không sử dụng hàm delay). Quan sát hiện tượng.

Kiểm tra:

➢ Biên dịch, thực thi và kiểm tra chương trình

ORG 2000H
RESET: MOV R0,#1
MOV R1,#0
LOOP:
ACALL DISPLAYLED
ACALL DELAY100MS
INC R0
INC R1
CJNE R0,#5,LOOP
SJMP RESET
DISPLAYLED:
INC R1
MOV B,R1
DEC R1
Department of Electronics Page | 17
Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
MOV A,#11110111B
SHIFTLOOP:
RL A
DJNZ B,SHIFTLOOP
ANL A,#0F0H
ADD A,R0
MOV DPTR,#0000H
MOVX @DPTR,A
RET
DELAY100MS:
MOV R6,#200
LP1: MOV R7,#250
DJNZ R7,$
DJNZ R6,LP1
RET
END

thí nghiệm 8.mp4

Câu hỏi:

➢ Thời gian trễ để không còn thấy LED nhấp nháy là bao nhiêu theo lý thuyết? Giải thích cách
tính.

Department of Electronics Page | 18


Microprocessor Laboratory
BÀI THÍ NGHIỆM 1
LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Để không thấy LED nhấp nháy => Độ trễ = 0s. Tuy nhiên vẫn có khoảng thời gian trễ để thực
hiện giữa 2 câu lệnh ACALL DISPLAYLED và CJNE R0,#5,LOOP. Đó là khoảng thời gian để
thực hiện các câu lệnh: INC R1; MOV B,R1; DEC R1 ; MOV A,#11110111B… INC R0; INC
R1. Tức 19 Machine Cycle, với mỗi 1 MC là 1𝜇(𝑠). Vậy thời gian trễ thực tế là 19 ∗ 1𝜇(𝑠) =
19𝜇(𝑠).
➢ Khi giảm rất nhỏ thời gian trễ, hiện tượng xảy ra là gì? Giải thích
Độ trễ quá nhỏ nên khoảng thời gian thực hiện giữa các câu lệnh rất ngắn và LED sẽ hiển thị liên
tục các giá trị 1, 2, 3 và 4 với tần số rất lớn bằng mắt thường ta không thể quan sát độ trễ nhỏ
như thế. Vậy nên, ta nhìn thấy các giá trị 1, 2, 3 và 4 gần như cố định.

Department of Electronics Page | 19


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER

MỤC TIÊU
➢ Nắm được cách sử dụng kit thí nghiệm, phần mềm lập trình.

➢ Nắm được cách giao tiếp LCD và ADC.

➢ Nắm được cách lập trình timer.

CHUẨN BỊ
➢ Đọc bài chuẩn bị thí nghiệm 2 tại nhà.
➢ Chuẩn bị cho thí nghiệm 2: Viết chương trình và mô phỏng trên Proteus tất cả các bài trong thí
nghiệm 2 dựa trên bài chuẩn bị 2 và thí nghiệm 0.
➢ Nộp tất cả các kết quả (bài chuẩn bị thí nghiệm 2) cho GVHD trước khi vào lớp.
Sinh viên không thực hiện hoặc nộp thiếu nếu không có lí do chính đáng sẽ không được tham gia thí
nghiệm và bị đánh vắng buổi đó.

Department of Electronics Page | 1


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
THÍ NGHIỆM 1
Mục tiêu: Nắm được cách thức xuất giá trị lên LCD.

Yêu cầu:

➢ Download chương trình mẫu LCD.A51 trên trang web bộ môn điện tử hoặc trong folder thí
nghiệm của sinh viên.

➢ Biên dịch và chạy thử chương trình.

➢ Sửa chương trình để hiển thị tên sinh viên lên hàng đầu
LCD_E BIT P3.4
LCD_RS BIT P3.5
LCDADDR EQU 6000H
ORG 0000H
MAIN:
MOV @R0, 30H
MOV DPTR, #LCDADDR
ACALL CLEAR
ACALL INIT_LCD
ACALL DISPLAYSTRING
SJMP $
INIT_LCD:
MOV A, #38H
ACALL WRITECOM
MOV A, #0EH
ACALL WRITECOM
MOV A, #06H
ACALL WRITECOM
RET
CLEAR:
MOV A, #01H
Department of Electronics Page | 2
Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
ACALL WRITECOM
RET
WRITECOM:
MOV DPTR, #LCDADDR
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
WRITETEXT:
MOV DPTR, #LCDADDR
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
DISPLAYSTRING:
MOV A,#0
LOOP:
MOV DPTR, #MESSAGE
MOV R0,A
MOVC A,@A+DPTR
JZ EXIT
ACALL WRITETEXT
MOV A,R0
INC A
DJNZ B, LOOP

Department of Electronics Page | 3


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
EXIT:
RET
WAIT_LCD:
MOV R6,#10
DL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6,DL1
RET
MESSAGE:
DB "LAI NGUYEN DUY!",0
END

Kiểm tra:
➢ Kiểm tra kết quả thực hiện của chương trình.

Department of Electronics Page | 4


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER

Câu hỏi:

➢ Giải thích ý nghĩa của các chương trình con trên project mẫu.
- CLEAR: XÓA MÀN HÌNH LCD
- INIT_LCD: KHỞI ĐỘNG MÀN HÌNH LCD
- DISPLAYSTRING : XUẤT CHUỖI KÝ TỰ BẰNG CÁCH TRA BẢNG
- WRITECOM: GHI LỆNH RA MÀN HÌNH LCD
- WRITETEXT: GHI DỮ LIỆU (KÍ TỰ) RA MÀ HÌNH LCD
- EXIT: THOÁT KHỎI CHƯƠNG TRÌNH
- MESSAGE: BẢNG ĐỊNH NGHĨA ĐỊA CHỈ KÍ TỰ
- WAIT_LCD: TẠO TRỄ CHO LCD

➢ Trình bày lưu đồ giải thuật giao tiếp LCD.

Department of Electronics Page | 5


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER

Department of Electronics Page | 5


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
THÍ NGHIỆM 2
Mục tiêu: Nắm được giao tiếp cơ bản của LCD.

Yêu cầu:

➢ Viết thêm chương trình con CLRSCREEN để xóa màn hình LCD.

➢ Viết thêm chương trình con GOTOXY để di chuyển con trỏ của LCD đến hàng x, cột y, với X
chứa trong R0 và Y chứa trong R1.

➢ Sửa chương trình ở thí nghiệm 1 để hiển thị thêm số nhóm ở hàng thứ 2.
LCD_E BIT P3.3
LCD_RS BIT P3.5
LCDADDR EQU 6000H
ORG 2000H
MAIN:
MOV @R0, 30H
MOV DPTR, #LCDADDR
ACALL CLEAR
ACALL INIT_LCD
CLR F0
ACALL DISPLAYSTRING
SETB F0
ACALL DISPLAYSTRING
SJMP $
INIT_LCD:
MOV A, #38H
ACALL WRITECOM
MOV A, #0DH
ACALL WRITECOM
MOV A, #06H
ACALL WRITECOM

Department of Electronics Page | 9


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
RET
CLEAR:
MOV A, #01H
ACALL WRITECOM
RET
WRITECOM:
MOV DPTR, #LCDADDR
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
WRITETEXT:
MOV DPTR, #LCDADDR
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
WAIT_LCD:
MOV R6,#20
DL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6,DL1
RET
DISPLAYSTRING:
ACALL COUNT

Department of Electronics Page |


10
Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
ACALL GOTOXY
MOV A,#0
LOOP:
JB F0,CONT1
MOV DPTR,#TEN
JMP OUTPUT1
CONT1:
MOV DPTR,#NHOM
OUTPUT1:
MOV R0,A
MOVC A,@A+DPTR
JZ EXIT
ACALL WRITETEXT
MOV A,R0
INC A
SJMP LOOP
EXIT:
RET
GOTOXY:
MOV A,#80H
JB F0,CONT2
ADD A,#0
JMP OUTPUT2
CONT2:
ADD A,#40H
OUTPUT2:
ADD A,R1
ACALL WRITECOM
RET
COUNT:

Department of Electronics Page |


11
Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MOV R1,#0
JB F0,CONT3
MOV DPTR,#TEN
JMP OUTPUT3
CONT3:
MOV DPTR,#NHOM
OUTPUT3:
MOV A,#0
LOOP1:
MOV R0,A
MOVC A,@A+DPTR
JZ EXIT1
INC R1
MOV A,R0
INC A
JMP LOOP1
EXIT1:
MOV A,#16
MOV B,#2
SUBB A,R1
DIV AB
MOV R1,A
RET
TEN: DB ‘LAI NGUYEN DUY’,0
NHOM: DB 'NHOM DT03',0
END

Department of Electronics Page |


12
Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
Kiểm tra:

➢ Kiểm tra kết quả chương trình.

Câu hỏi:

➢ Cho biết mã lệnh dùng để xóa màn hình, dịch con trỏ đến vị trí thứ 1 của hàng 1 và vị trí thứ 1
của hàng 2 của LCD?
- Mã lệnh xóa màn hình là : 01H
- Dịch con trỏ đến vị trí thứ 1 dòng 1 là: 80H
- Dịch con trỏ đến vị trí thứ 1 dòng 2 là : 0C0H
➢ Thực hiện canh giữa hàng 2 của LCD. Cho biết cách làm?
- Ta lấy (16 – độ dài chuỗi kí tự)/2 lấy phần nguyên
Đưa con trỏ vào vị trí 1 của dòng 2 bằng cách gán A = 0C0H sau đó lấy A cộng với giá trị đã tính
phần nguyên ở trên, ta được một chuỗi ký tự có vị trí ở giữa màn hình LCD.

Department of Electronics Page | 15


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
THÍ NGHIỆM 3
Mục tiêu: Nắm được cách thức giao tiếp ADC.

Yêu cầu:

➢ Viết chương trình con READADC thực hiện đọc giá trị của kênh 0 và trả về giá trị trong R0.

➢ Viết chương trình hiển thị giá trị của kênh 0 của ADC lên LCD dùng chương trình con
READADC đã viết.

LCD_E BIT P3.3

LCD_RS BIT P3.5

LCDADDR EQU 6000H

ADCADDR EQU 4000H

ORG 0

MAIN:

CALL READADC

PUSH 0

MOV DPTR, #LCDADDR

CALL CLEAR

CALL INIT_LCD

CALL DISPLAYSTRING

XUONGDONG:

MOV A,#0C0H

CALL WRITECOM

POP ACC

CALL CONVERTTOBCD

Department of Electronics Page | 16


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MOV A,R3

CALL WRITETEXT

MOV A,R2

CALL WRITETEXT

MOV A,R1

CALL WRITETEXT

SJMP $

READADC:

MOV DPTR,#ADCADDR

MOV A,#0

MOVX @DPTR,A

CALL WAIT_LCD

MOVX A,@DPTR

MOV R0,A

MOV P1,A

RET

INIT_LCD:

MOV A, #38H

ACALL WRITECOM

MOV A, #0DH

ACALL WRITECOM

MOV A, #06H

ACALL WRITECOM
Department of Electronics Page | 17
Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
RET

CLEAR:

MOV A, #01H

ACALL WRITECOM

RET

WRITECOM:

MOV DPTR, #LCDADDR

SETB LCD_E

CLR LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALL WAIT_LCD

RET

WRITETEXT:

MOV DPTR, #LCDADDR

SETB LCD_E

SETB LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALL WAIT_LCD

RET

WAIT_LCD:

MOV R6,#20
Department of Electronics Page | 18
Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
DL1:

MOV R7, #250

DJNZ R7, $

DJNZ R6,DL1

RET

DISPLAYSTRING:

MOV A,#0

LOOP:

MOV DPTR, #MESSAGE

MOV R0,A

MOVC A,@A+DPTR

JZ EXIT

ACALL WRITETEXT

MOV A,R0

INC A

SJMP LOOP

EXIT:

RET

CONVERTTOBCD:

MOV B,#100

DIV AB

MOV R3,A

MOV A,B
Department of Electronics Page | 19
Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MOV B,#10

DIV AB

MOV R2,A

MOV A,B

MOV R1,A

MOV A,R3

ADD A,#30H

MOV R3,A

MOV A,R2

ADD A,#30H

MOV R2,A

MOV A,R1

ADD A,#30H

MOV R1,A

RET

MESSAGE: DB "Gia tri kenh 0: ",0

END

Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình.

Department of Electronics Page | 20


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER

Câu hỏi:

➢ Giá trị này có phải giá trị thực của điện áp đặt vào kênh 0 hay không?
- Giá trị này không phải là giá trị thực của điện áp đặt vào kênh 0.

➢ Để hiển thị giá trị thực tế của mức điện áp đặt vào kênh 0 ta phải làm như thế nào?
- Ta có công thức tính Vin = (5*A)/256, với A là giá trị hiện thị trên LCD của thí nghiệm
trên.

Department of Electronics Page | 21


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
THÍ NGHIỆM 4
Mục tiêu: Nắm được cách thức giao tiếp ADC và chuyển giá trị đọc được sang điện áp.

Yêu cầu:

➢ Viết chương trình con CALADC tính toán giá trị điện áp thực tế đặt vào kênh 0 ADC từ giá
trị đo được của ADC

➢ Chương trình có giá trị vào chứa trong R0 (là kết quả của chương trình con READADC)

➢ Giá trị trả về chứa trong R0 và R1, R0 chứa giá trị nguyên và R1 chứa giá trị thập phân.

➢ Hiển thị giá trị đo được lên LCD theo cấu trúc: "Voltage: x.xx V" với x.xx là giá trị điện áp đo
được, với hai số sau dấu chấm.
ORG 2000H
RS BIT P3.5
E BIT P3.3
LCD EQU 6000H
ADC EQU 4000H
MAIN:
CALL LCD_INT
CALL READADC
CALL CALADC
MOV A, R1
ADD A, #30H
CALL WR_CHR
MOV A, #'.'
CALL WR_CHR
MOV A, R2
ADD A, #30H
CALL WR_CHR
MOV A, R3
ADD A, #30H
CALL WR_CHR
Department of Electronics Page | 19
Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
CALL DL1
JMP MAIN
CALADC:
MOV B, #5
MUL AB ;BA
MOV R1, B
MOV B, #10
MUL AB
MOV R2, B
MOV B, #10
MUL AB
MOV R3, B
RET
READADC:
MOV DPTR, #ADC
MOV A, #0
MOVX @DPTR, A
CALL WAIT_LCD
MOVX A, @DPTR
MOV R0, A
MOV P1, A
RET
LCD_INT:
MOV A, #38H
CALL WR_CMD
MOV A, #01H
CALL WR_CMD
MOV A, #0CH
CALL WR_CMD
MOV A, #06H

Department of Electronics Page | 20


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
CALL WR_CMD
RET
WR_CMD:
CALL WAIT_LCD
MOV DPTR, #LCD
CLR RS
MOVX @DPTR, A
SETB E
CLR E
RET
WR_CHR:
CALL WAIT_LCD
MOV DPTR, #LCD
SETB RS
MOVX @DPTR, A
SETB E
CLR E
RET
WAIT_LCD:
MOV R7, #4
DL1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, DL1
RET
END

Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình, so sánh giá trị hiển thị với giá trị đo được
dùng VOM

Department of Electronics Page | 21


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER

Department of Electronics Page | 22


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
THÍ NGHIỆM 5
Mục tiêu: Nắm được cách thức sử dụng Timer mode 1.

Yêu cầu:

➢ 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 ở mode 1.

ORG 2000H
MOV TMOD, #01H
AGAIN:
MOV R7, #10
LOOP:
MOV TH0, #HIGH(-50000)
MOV TL0, #LOW(-50000)
SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
DJNZ R7, LOOP
CPL P1.0
JMP AGAIN
END

Kiểm tra:

➢ Biên dịch, thực thi và kiểm tra chương trình.

LAB2 TN5.mp4
Câu hỏi:

➢ Để tạo sóng 1 Hz, ta có thể sử dụng timer ở mode 2 được không? Nếu được, trình bày đoạn
chương trình tạo sóng 1 Hz sử dụng timer ở mode 2.

Department of Electronics Page | 20


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
- Có thể sử dụng timer ở mode 2, nhưng phải lặp bằng phần mềm 1785 lần:
ORG 2000H
MOV TMOD, #02H
LP1: MOV R7,#7
LP3: MOV R6,#255
LP2: MOV TL0,#LOW(-255)
MOV TH0,#HIGH(-65535)
SETB TR0
JNB TF0,$
CLR TF0
DJNZ R6, LP2
DJNZ R7, LP3
CPL P1.0
SJMP LP1
END

➢ Trong chương trình của sinh viên, khi sử dụng mode 1, sóng vuông 1 Hz có bị sai số không? Để
hạn chế sai số ta phải nạp các giá trị vào timer như thế nào?

- Dạng sóng ở mode 1 bị sai số do phần mềm do phải tốn chu kì máy để thực thi, để hạn
chế ta phải nạp vào timer ước lớn nhất mà timer có thể có của giá trị thời gian cần tạo trễ
(50000).

Department of Electronics Page | 21


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
THÍ NGHIỆM 6
Mục tiêu: Nắm được cách thức sử dụng Timer mode 2.

Yêu cầu:

➢ 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
MOV TMOD, #02H
MOV TH0, #-250
MOV TL0, TH0
SETB TR0
AGAIN:
MOV R7, #10
AGAIN1:
MOV R6, #200
LOOP:
JNB TF0, $
CLR TF0
DJNZ R6, LOOP
DJNZ R7, AGAIN1
CPL P1.0
JMP AGAIN
END

Kiểm tra:

➢ Biên dịch, thực thi và kiểm tra chương trình.

LAB2 TN6.mp4
Câu hỏi:

➢ Ở chế độ 2, độ trễ gây ra do các câu lệnh đảo giá trị bit có gây sai số cho dạng sóng ngõ ra
không? Vì sao?

Department of Electronics Page | 22


Microprocessor Laboratory
BÀI THÍ NGHIỆM 2
LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
- Có sai số vì phải sử dụng thêm các câu lệnh lặp và do độ trễ gây ra do các câu lệnh đảo
bit ở mode 2 tốn 1 chu kì máy

Department of Electronics Page | 23


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT

MỤC TIÊU
➢ Nắm được cách sử dụng kit thí nghiệm, phần mềm lập trình.

➢ Nắm được cách giao tiếp serial port.

➢ Nắm được cách lập trình ngắt (interrupt).

CHUẨN BỊ
➢ Đọc bài chuẩn bị thí nghiệm 3 tại nhà.
➢ Chuẩn bị cho thí nghiệm 3: Viết chương trình và mô phỏng trên Proteus tất cả các bài trong thí
nghiệm 3 dựa trên bài chuẩn bị 3 và thí nghiệm 0.
➢ Nộp tất cả các kết quả (bài chuẩn bị thí nghiệm 3) cho GVHD trước khi vào lớp.
Sinh viên không thực hiện hoặc nộp thiếu nếu không có lí do chính đáng sẽ không được tham gia thí
nghiệm và bị đánh vắng buổi đó.

Department of Electronics Page | 1


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
THÍ NGHIỆM 1
Mục tiêu: Nắm được cách thức điều khiển serial port.

Yêu cầu:

➢ 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 SCON, #52H
MOV TMOD, #20H
ORL PCON, #80H
MOV TH1, #-3
MOV TL1, TH1
SETB TR1
MOV DPTR, #TAB
LOOP:
CLR A
MOVC A, @A+DPTR
CALL PHAT
INC DPTR
CJNE A, #0, LOOP
JMP $
PHAT:
JNB TI, $
CLR TI
MOV SBUF, A
RET
TAB:
DB "Hello world!!!", 0
END

Department of Electronics Page | 8


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình.

Câu hỏi:

➢ Trong chương trình khởi tạo serial port, ta có thể sử dụng tốc độ baud khác giá trị 19200bps
được không? Tại sao?

Không được. Các giá trị khác làm cho hiển thị trên LCD sai, không ra đúng chữ “Hello world!!! ”

Department of Electronics Page | 9


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
THÍ NGHIỆM 2
Mục tiêu: Nắm được cách thức điều khiển serial port.

Yêu cầu:

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 chương trình Hercules
(bằng cách gõ các ký tự trên bàn phím khi đang ở trong chương trình Hercules). Kí tự nhận được
sẽ hiển thị lên LCD tại vị trí cột 0 hàng 0 và đồng thời phát trở lại serial port.

LCDADDR EQU 6000H

LCD_E BIT P3.3

LCD_RS BIT P3.5

ORG 2000

MOV SCON, #52H

MOV TMOD, #20H

ORL PCON, #80H

MOV TH1, #-3

MOV TL1, TH1

SETB TR1

CALL INIT_LCD

LOOP:

MOV A, #80H

CALL WRITECOM

CALL THU

CALL WRITETEXT

CALL PHAT

JMP LOOP

PHAT:

Department of Electronics Page |


10
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
JNB TI, $

CLR TI

MOV SBUF, A

RET

THU:

JNB RI, $

CLR RI

MOV A, SBUF

RET

INIT_LCD:

MOV A, #80H

ACALL WRITECOM

MOV A, #38H

ACALL WRITECOM

MOV A, #0CH

ACALL WRITECOM

MOV A, #01H

ACALL WRITECOM

RET

WRITECOM:

MOV DPTR, #LCDADDR

SETB LCD_E

CLR LCD_RS

MOVX @DPTR, A

CLR LCD_E

Department of Electronics Page |


11
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
ACALL WAIT_LCD

RET

WRITETEXT:

MOV DPTR, #LCDADDR

SETB LCD_E

SETB LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALL WAIT_LCD

RET

WAIT_LCD:

MOV R6,#10

DL1:

MOV R7, #250

DJNZ R7, $

DJNZ R6,DL1

RET

END

Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình.

Department of Electronics Page |


12
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT

Department of Electronics Page |


13
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
THÍ NGHIỆM 3
Mục tiêu: Nắm được cách thức điều khiển serial port.

Yêu cầu:

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 cương trình Hercules
(bằng cách gõ các ký tự trên bàn phím khi đang ở trong chương trình Hercules) và hiển thị lên
LCD theo nguyên tắc 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.

Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình.


LCDADDR EQU 6000H
LCD_E BIT P3.3
LCD_RS BIT P3.5
ORG 2000H
MOV SCON, #52H
MOV TMOD, #20H
ORL PCON, #80H
MOV TH1, #-3
MOV TL1, TH1
SETB TR1
CALL INIT_LCD
LOOP:
CALL THU
CJNE A, #13, NEXT
MOV A, #0C0H
CALL WRITECOM

Department of Electronics Page |


14
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
MOV R0, #1
MOV R1, #0
JMP LOOP
NEXT:
CJNE A, #60H, NEXT1
;ESC
CALL INIT_LCD
JMP LOOP
NEXT1:
CJNE A, #08H, NEXT2
;BACK SPACE
DEC R1
CALL GOTOXY
MOV A, #' '
CALL WRITETEXT
DEC R1
CALL GOTOXY
INC R1
CALL GOTOXY
JMP LOOP
NEXT2:
CALL IS_CHAR
JNB F0, LOOP
CALL WRITETEXT
INC R1
JMP LOOP
PHAT:
JNB TI, $
CLR TI
MOV SBUF, A
RET
Department of Electronics Page |
15
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
THU:
JNB RI, $
CLR RI
MOV A, SBUF
RET
IS_CHAR:
CLR F0
CJNE A, #'A', $+3
JC EXIT
CJNE A, #'Z'+1, $+3
JC DONE
CJNE A, #'a', $+3
JC EXIT
CJNE A, #'z'+1, $+3
JC DONE
DONE:
SETB F0
EXIT:
RET
INIT_LCD:
MOV A, #80H
CALL WRITECOM
MOV A, #38H
CALL WRITECOM
MOV A, #0EH
CALL WRITECOM
MOV A, #01H
CALL WRITECOM
MOV A, #06H
CALL WRITECOM
MOV R0, #0
Department of Electronics Page |
16
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
MOV R1, #0
RET
WRITECOM:
MOV DPTR, #LCDADDR
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
CALL WAIT_LCD
RET
WRITETEXT:
MOV DPTR, #LCDADDR
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
CALL WAIT_LCD
RET
GOTOXY:
PUSH ACC
MOV A, #80H
CJNE R0, #0, NXT
JMP DONE
NXT:
ADD A, #40H
NXT1:
ADD A, R1
CALL WRITECOM
POP ACC
RET
WAIT_LCD:
Department of Electronics Page |
17
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
MOV R6,#10
DL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6,DL1
RET
END

LAB3 TN3.mkv

Department of Electronics Page |


18
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
THÍ NGHIỆM 4
Mục tiêu: Nắm được cách sử dụng ngắt serial port.

Yêu cầu:

Viết chương trình làm song song 2 công việc sau:

- Nhận 1 byte từ máy tính và xuất ngược lại (echo) lên màn hình Hercules.

- Bật LED gắn vào P1.1 khi SW 317 (gắn vào P1.0) được nhấn, và tắt LED khi phím được nhả.

Hướng dẫn:

➢ Sử dụng ngắt serial port, nếu ngắt lả ngắt thu (cờ RI bằng 1) thì xóa RI, đọc SBUF và ghi
trở lại vào SBUF. Nếu TI bằng 1 thì xóa TI.

➢ Tác vụ đọc Switch và hiển thị LED được viết trong chương trình chính.
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP ISR_SERIAL
MAIN:
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
MOV SCON,#01010010B
MOV PCON,#80H
MOV IE,#10010000B
CHECK:
JB P1.0,TAT
CLR P1.1
SJMP CHECK
TAT:
SETB P1.1
SJMP CHECK

Department of Electronics Page | 9


Microprocessor Laboratory
ISR_SERIAL:
JNB RI,NEXT
CLR RI
MOV A,SBUF
MOV SBUF,A
SJMP OUT
NEXT:
CLR TI
OUT:
RETI
END

Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình.

lab3 tn4.mkv

Department of Electronics Page |


10
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
THÍ NGHIỆM 5
Mục tiêu: Nắm được cách sử dụng ngắt timer.

Yêu cầu:

Viết chương trình hiển thị lên 4 LED 7 đoạn một số có 4 chữ số, 4 ký số này chứa trong các ô nhớ
20H, 21H, 22H và 23H. Ô nhớ 20H chứa số hàng nghìn.

Hướng dẫn:

➢ Ở Lab 1 ta đã viết chương trình con DisplayLED hiển thị giá trị chứa trong R0, với số thứ
tự LED chứa trong R1. Đồng thời, ta đã nắm được cách quét LED bằng cách cho 4 LED
lần lượt sáng sau mỗi khoảng thời gian trễ.

➢ Ở thí nghiệm này, các LED 7 đoạn được quét sử dụng ngắt timer. Để đạt được tần số quét
25 Hz, mỗi LED sẽ được sáng trong thời gian 10 ms.

➢ Các bước tiến hành:

- Cấu hình timer 0 ở chế độ 1, thời gian tràn là 10 ms.

- Cho phép ngắt timer 0, và cho timer chạy.

- Sử dụng thanh ghi R1 để xác định LED nào cần được bật. Ban đầu R1 bằng 0, R1 tăng
lên 1 sau mỗi lần bật LED để chuyển sang LED tiếp theo. Khi R1 bằng 3, R3 sẽ quay lại bằng 0.

- Chương trình con DisplayLED chứa giá trị hiển thị trong R0. Giá trị này là 1 trong các
byte ô nhớ 20H, 21H, 22H và 23H, tương ứng giá trị R1 (0-3).
- Khi timer tràn, trong chương trình phục vụ ngắt ta cấu hình lại timer, hiển thị giá trị led
7 đoạn tương ứng, và cập nhật giá trị R1 để chỉ đến LED tiếp theo.

(Lưu đồ giải thuật được thể hiện trong trang kế)

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP ISR_T0
ORG 0030H

Department of Electronics Page | 10


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
MAIN:
MOV 20H,#1
MOV 21H,#2
MOV 22H,#3
MOV 23H,#4
MOV TMOD,#01H
SETB TF0
MOV R7,#0
MOV IE,#82H
SJMP $
ISR_T0:
CJNE R7,#0,NEXT1
MOV R1,23H
SJMP TT
NEXT1:
CJNE R7,#1,NEXT2
MOV R1,22H
SJMP TT
NEXT2:
CJNE R7,#2,NEXT3
MOV R1,21H
SJMP TT
NEXT3:
MOV R1,20H
TT:
LCALL DISPLAYLED
INC R7
CJNE R7,#4,RUN
MOV R7,#0
RUN:
CLR TR0
Department of Electronics Page | 11
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
MOV TH0,#HIGH(-9216)
MOV TL0,#LOW(-9216)
SETB TR0
RETI
DISPLAYLED:
MOV A,R7
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ADD A,R1
MOV DPTR,#0000H
MOVX @DPTR,A
RET
TABLE:
DB 0E0H,0D0H,0B0H,070H
END

Department of Electronics Page | 12


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình.

Department of Electronics Page | 11


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT

START

Dừng timer, xóa cờ ngắt, đặt lại giá trị timer, cho
phép timer chạy

Dừng timer, xóa cờ ngắt, đặt lại giá trị timer, cho
phép timer chạy

Lấy giá trị hiển thị LED vào R0


Hiển thị ra LED tương ứng

END

Department of Electronics Page | 12


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
THÍ NGHIỆM 6
Mục tiêu: Vận dụng ngắt timer để lập trình.

Yêu cầu: Viết chương trình đếm số lần nhấn phím SW317, hiển thị lên 4 LED 7 đoạn

Hướng dẫn:

➢ Kiểm tra nút nhấn, khi nút nhấn được nhấn, giá trị được cập nhật vào các ô nhớ 20H, 21H,
22H và 23H. Ô nhớ 20H chứa số hàng nghìn. Việc đếm số lần nhấn phím được thực hiện
trong chương trình chính.

➢ LED 7 đoạn được quét như ở thí nghiệm 2 dùng ngắt timer.

Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình.


ORG 0000H
LJMP MAIN
ORG 000BH
LJMP ISR_T0
ORG 0030H
MAIN:
MOV TMOD,#01H
SETB TF0
MOV R7,#0
MOV IE,#82H
MOV 23H,#0
MOV 22H,#0
MOV 21H,#0
MOV 20H,#0
LAP:
JB P1.0,TIEP
INC 23H
MOV R2,23H

Department of Electronics Page | 13


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
CJNE R2,#10,TIEP
MOV 23H,#0
INC 22H
MOV R2,22H
CJNE R2,#10,TIEP
MOV 23H,#0
MOV 22H,#0
INC 21H
MOV R2,21H
CJNE R2,#10,TIEP
MOV 23H,#0
MOV 22H,#0
MOV 21H,#0
INC 20H
TIEP:
MOV R5,#4
LP2:MOV R4,#200
LP1:MOV R6,#250
DJNZ R6,$
DJNZ R4,LP1
DJNZ R5,LP2
SJMP LAP
ISR_T0:
CJNE R7,#0,NEXT1
MOV R1,23H
SJMP TT
NEXT1:
CJNE R7,#1,NEXT2
MOV R1,22H
SJMP TT
NEXT2:
Department of Electronics Page | 14
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
CJNE R7,#2,NEXT3
MOV R1,21H
SJMP TT
NEXT3:
MOV R1,20H
TT:
LCALL DISPLAYLED
INC R7
CJNE R7,#4,RUN
MOV R7,#0
RUN:
CLR TR0
MOV TH0,#HIGH(-9216)
MOV TL0,#LOW(-9216)
SETB TR0
RETI
DISPLAYLED:
MOV A,R7
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ADD A,R1
MOV DPTR,#0000H
MOVX @DPTR,A
RET
TABLE:
DB 0E0H,0D0H,0B0H,070H
END

Department of Electronics Page | 15


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT

lab3 tn6.mkv

Department of Electronics Page | 15


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
THÍ NGHIỆM 7
Mục tiêu: Vận dụng ngắt timer để lập trình.

Yêu cầu:

Viết chương trình thực hiện đồng hồ bấm giây, hiển thị lên LED 7 đoạn. Hai LED 3 và 2 thể hiện
số giây, 2 LED 1 và 0 thể hiện phần trăm của giây.

- Khi SW310 nhấn, đồng hồ reset về 0.

- Khi SW 311 nhấn, đồng hồ bắt đầu chạy.

- Khi SW 312 nhấn, đồng hồ dừng lại.

Hướng dẫn:

➢ LED 7 đoạn được quét như ở thí nghiệm 2 dùng ngắt timer.

➢ Khi đồng hồ chạy, các giá trị thời gian được cập nhật dùng ngắt timer 0. Giá trị được cập
nhật vào các ô nhớ 20H, 21H, 22H và 23H.

➢ Việc kiểm tra nhấn các phím SW310, SW311, SW312 được xử lý trong chương trình chính.

Kiểm tra:

➢ Biên dịch và kiểm tra hoạt động của chương trình.


ORG 0000H
LJMP MAIN
ORG 000BH
LJMP ISR_T0
ORG 0030H
MAIN:
MOV TMOD,#01H
SETB TF0
MOV R7,#0
MOV IE,#82H
RE:
MOV 23H,#0

Department of Electronics Page | 19


Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
MOV 22H,#0
MOV 21H,#0
MOV 20H,#0
START:
JNB P1.2,RE
JB P1.0,START
LAP:
JNB P1.2,RE
JB P1.1,LA
SJMP START
LA:
INC 23H
MOV R2,23H
CJNE R2,#10,TIEP
MOV 23H,#0
INC 22H
MOV R2,22H
CJNE R2,#10,TIEP
MOV 23H,#0
MOV 22H,#0
INC 21H
MOV R2,21H
CJNE R2,#10,TIEP
MOV 23H,#0
MOV 22H,#0
MOV 21H,#0
INC 20H
TIEP:
MOV R5,#20
L:MOV R4,#250
DJNZ R4,$
Department of Electronics Page | 20
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
DJNZ R5,L
SJMP LAP
ISR_T0:
CJNE R7,#0,NEXT1
MOV R1,23H
SJMP TT
NEXT1:
CJNE R7,#1,NEXT2
MOV R1,22H
SJMP TT
NEXT2:
CJNE R7,#2,NEXT3
MOV R1,21H
SJMP TT
NEXT3:
MOV R1,20H
TT:
LCALL DISPLAYLED
INC R7
CJNE R7,#4,RUN
MOV R7,#0
RUN:
CLR TR0
MOV TH0,#HIGH(-9216)
MOV TL0,#LOW(-9216)
SETB TR0
RETI
DISPLAYLED:
MOV A,R7
MOV DPTR,#TABLE
MOVC A,@A+DPTR
Department of Electronics Page | 21
Microprocessor Laboratory
BÀI THÍ NGHIỆM 3
LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
ADD A,R1
MOV DPTR,#0000H
MOVX @DPTR,A
RET
TABLE: DB 0E0H,0D0H,0B0H,070H
END

lab3 tn7.mkv

Department of Electronics Page | 22


Microprocessor Laboratory

You might also like