LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED ➢ Nắm đ Nắm được ược cách sử dụngcách sử dụng kit thíkit thí nghiệm, phầnnghiệm, phần mềm lậpmềm lập trình.trình.. BÀI THÍ NGHIỆM 1 Department of
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
ĐẠI HỌC QUỐC GIA TP ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH HỒ CHÍ MINH
Trang 2LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
➢ Nắm đ Nắm được ược cách sử dụngcách sử dụng kit thíkit thí nghiệm, phầnnghiệm, phần mềm lậpmềm lập trình.trình
➢ Nắm đ Nắm đượcược cáchcách lậplập trình giaotrình giao tiếptiếp IO port.IO port
➢ Nắm Nắm đượcđược cáchcách lậplập trình trình tạotạo thờithời gian gian trễtrễ dùng các dùng các lệnh.lệnh.
➢ ĐọcĐọc và làm bài thí và làm bài thí nghiệmnghiệm 0 0 tạitại nhà. nhà
➢ ĐọcĐọc bài bài chuẩnchuẩn bị bị thí thí nghiệmnghiệm 1 1 tạitại nhà. nhà
➢ ChuẩnChuẩn bị bị cho thí cho thí nghiệmnghiệm 1: 1: ViếtViết chươngchương trình và mô trình và mô phỏn phỏngg trên trên ProteusProteus tấttất cả các bài trong thínghiệm 1dựadựa trên bài trên bài chuẩn bịchuẩn bị 1 (Prelab_1) và thí 1 (Prelab_1) và thí nghiệmnghiệm 0. 0
➢ Nộp Nộp tất cảtất cả các các kết quảkết quả (bài thí (bài thí nghiệmnghiệm 0 và bài 0 và bài chuẩnchuẩn bị bị thí thí nghiệmnghiệm 1) cho GVHD 1) cho GVHD trướctrước khi vào 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.
Trang 3BÀI THÍ NGHIỆM 1
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 2
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. 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.0và
và hiển thị rahiển thị ra ledled được nối tại chân P3.0được nối tại chân P3.0 (bit(bit thứ 0 củathứ 0 của led thanhBL202)
Kiểm tra:
➢ Biên dịch và thực thi chương trình để kiểm tra kết quả thựcBiên dịch và thực thi chương trình để kiểm tra kết quả thực hiện.hiện.
ORG 2000HLOOP: MOV
LOOP: MOV C,P1.0C,P1.0
MOV P3.0,CSJMP LOOPEND
Trang 4LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Trang 5BÀI THÍ NGHIỆM 1
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 4
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ả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? 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
được tác động do lệnh: MOV C,P1.0; MOV P3.0,C
➢ Tổng kết xem cácTổng kết xem các bit bit nào của 2 portnào của 2 port cócó thể được dùng trong thí nghiệm trên và giải thích tạithể đượ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
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
33 vì các chân Port 3 được sử dụng với các chức năng đặc biệt sauvì các chân Port 3 được sử dụng với các chức năng đặc biệt sau::
Trang 6LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Page | 5
Delay1s:
MOV R5,#8LP1:
LP1: MOV MOV R6,#250R6,#250LP2:
LP2: MOV MOV R7,#250R7,#250
DJNZ R7,$
DJNZ R6,LP2DJNZ R5,LP1RET
ORG 2000HLOOP: CPL P1.0
ACALL Delay1sSJMP LOOPDelay1s:
MOV R5,#8LP1:
LP1: MOV MOV R6,#250R6,#250LP2:
➢ Viết chương trìnhViết chương trình con Delay1s.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ờigian 1s
➢ ThayThay đổi chương trình con để tần số chớp tắt bây giờđổi chương trình con để tần số chớp tắt bây giờ là 1KHz.là 1KHz
• Chương trìnhChương trình con: con:
• Chương trình chớp/tắt LED đơn gắn vào P1.0 sau mỗi khoảng thời gianChương trình chớp/tắt LED đơn gắn vào P1.0 sau mỗi khoảng thời gian 1s: 1s:
Trang 7Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 5
ORG 2000HLOOP: CPL P1.0
ACALL Delay1msSJMP LOOP
DELAY1ms:
LP: MOV MOV R5, R5, #2#2
MOV R6, #250DJNZ R6, $DJNZ R5, LPRET
END
DJNZ R5,LP1RET
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 1s = 2*MC*(Giá tr ịị n nạạ p), 1 MC là 1 p), 1 MC là 1 (( )) => Giá=> Giá trị cần nạptrị cần nạp là 500000là 500000Giớ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ỏ:
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ọn500000=250*250*8 => Chọn R5=8; R6=250; R7=250.R5=8; R6=250; R7=250
➢ Sai số nhỏ nhất có thể đạt được so Sai số nhỏ nhất có thể đạt được so với yêu cầuvới yêu cầu là bao nhiê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ưCông thức tính chính xác Time delay với 3 vòng lặp như sau: 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, 250Time 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 = Time delay = 1.006027(s) Sai số xấp xỉ 0.006207(s).1.006027(s) Sai số xấp xỉ 0.006207(s).
Trang 8Page | 6
LED sLED sẽẽ ch chớ ớ p t p tắắt gt gần như liên tụần như liên tục (chu kì là 1Khz hay mc (chu kì là 1Khz hay mỗỗi 500i 500 (( )))
➢ Sinh viên thaySinh viên thay đổi chương trình con như thế nào để được tần số chớp tắtđổi chương trình con như thế nào để được tần số chớp tắt là 1KHz?là 1KHz?
Trang 9BÀI THÍ NGHIỆM 1
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 6
Mục tiêu: Nắm được cách viết chương trình con để tạo trễ 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 2Viết chương trình tạo 2 xungxung vuông 0.5Hz (chu kỳ nhiệm vụvuông 0.5Hz (chu kỳ nhiệm vụ 50%) và50%) và 1Hz (chu kỳ1Hz (chu kỳnhiệm vụ là 30%)30%) lần lượt trên chân P1.0lần lượt trên chân P1.0 và P1.1
ORG 2000HLOOP: CPL CPL P1.0P1.0
CPL P1.1ACALL DELAY300msCPL P1.1
ACALL DELAY700msSJMP LOOP
DELAY300ms:
MOV R5, #3LP1: MOV MOV R6, R6, #200#200LP2: MOV MOV R7, R7, #250#250
DJNZ R7, $DJNZ R6, LP2DJNZ R5, LP1RET
DELAY700ms:
MOV R5, #7LP3: MOV MOV R6, R6, #200#200LP4: MOV MOV R7, R7, #250#250
DJNZ R7, $DJNZ R6, LP4DJNZ R5, LP3RET
END
Trang 10LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Kiểm tra:
➢ Biên dịch, thực thiBiên dịch, thực thi vàvà kiểm tra chương trình bằng cách sử dụng oscilloscope để kiểmkiểm tra chương trình bằng cách sử dụng oscilloscope để kiểm tra. 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ễ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?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
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.0Tại mỗi thời gian tạo trễ, các chân P1.0 vàvà P1.1 xuất tín hiệu như thếP1.1 xuất tín hiệu như thế nào? 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 xung1Hz 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.5Hzvới chu kì nhiệm vụ là 50% tại chân P1.0
với chu kì nhiệm vụ là 50% tại chân P1.0.
➢ Để tạo cácĐể tạo các xungxung thỏa yêu cầu bài toán, các vòng trễ được viết như thế nào?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ưVòng trễ được viết như sau: sau:
Trang 11BÀI THÍ NGHIỆM 1
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 8
LOOP:
ACALL DELAY300ms CPL P1.1
ACALL DELAY700ms CPL P1.1
CPL P1.0 SJMP LOOP
Trang 12LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
MOV R1,#8 PHASE:
MOV P1,A
RL A ACALL Delay1s DJNZ R1,PHASE SJMP LOOP Delay1s:
MOV R5,#8 LP1:
LP1: MOV MOV R6,#25 R6,#2500 LP2:
LP2: MOV MOV R7,#25 R7,#2500
DJNZ R7,$
DJNZ R6,LP2 DJNZ R5,LP1 RET
END
Trang 13Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Trang 14LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
MOVX @DPTR,ARET
ORG 2000HMOV R0,#11101001BCALL DisplayLEDLOOP:
SJMP LOOPDisplayLED:
MOV DPTR, #0000HMOV A,R0
MOVX @DPTR,ARET
END
Trang 15Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 14
Trang 16LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
MOV R0,#0E0HLOOP:
ACALL DisplayLEDACALL DELAY1SINC R0
CJNE R0,#0EAH,LOOPAJMP START
DisplayLED:
MOV MOV DPTR, DPTR, #0000H#0000HMOV A,R0
MOVX @DPTR,ARET
DELAY1S:MOV R5, #8LP1:
LP1: MOV MOV R6, R6, #250#250LP2:
LP2: MOV MOV R7, R7, #250#250
DJNZ R7, $DJNZ R6, LP2DJNZ R5, LP1RET
END
Trang 17Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
con DisplayLed đã viết ở đã viết ở phần phần trước,trước, tạotạo trễtrễ 1s, 1s, tăngtăng R0 lên 1 và R0 lên 1 và lặp lạilặp lại quá trình. quá trình. Nếu Nếu R0 lớnR0 lớn hơnhơn
➢ Vẽ lưu đồ giải thuật của chươngVẽ lưu đồ giải thuật của chương trình. trình
Trang 18LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Mục tiêu: Nắm được cách thức dùng chương trình con Nắm được cách thức dùng chương trình con vàvà giao tiếp LED 7 đoạn.giao tiếp LED 7 đoạn.
Yêu cầu:
ViếtViết chươngchương trình con DisplayLED trình con DisplayLED xuất giáxuất giá trịtrị chứachứa trong trong thanh ghi thanh ghi R0 lên LED R0 lên LED 77 đoạnđoạn có có sốsố thứthứ
tự chứa trong thanh ghi R1 Trong
tự chứa trong thanh ghi R1 Trong đó:đó:
R0 nằm trong tầm từ 0R0 nằm trong tầm từ 0 9 và R1 trong tầm từ9 và R1 trong tầm từ 0-3.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.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:
nào bằng 0 thì LED 7 đoạn tương ứng sẽ được bật. 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Đ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, R1MOV A, #11110111BSHIFTLOOP:
RL ADJNZ B, SHIFTLOOPANL A, #0F0H
PUSH ACCMOV A, R0ANL A, #0FHMOV R0, APOP ACCORL A, R0
Trang 19Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
DISPLAYLED:
INC R1MOV B,R1MOV A,#11110111BSHIFTLOOP:
RL ADJNZ B,SHIFTLOOPANL A,#0F0H
ADD A,R0MOV DPTR,#0000HMOVX @DPTR,ARET
END
Trang 20LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
➢ Biên dịch, thực thiBiên dịch, thực thi vàvà kiểm tra chươngkiểm tra chương trình trình
Trang 21Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
MOVC A,@A+DPTRADD A,R0
MOV DPTR,#0000HMOVX @DPTR,ASJMP LOOP
BANG: DB 0E0H,0D0H,0B0H,70H
ENDCâ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 (LookupViết lại chương trình trên bằng phương pháp sử dụng bảng tra (Lookup table). table)
Trang 22LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
1s hiển thị số 3 lên LED 7 đoạn 2, sau đó 1s hiển thị số 4 lênlên LED 7 đoạn 3 Quá trình này lặp điLED 7 đoạn 3 Quá trình này lặp đilặp lại Việc hiển thị này sử dụng chương trình con DisplayLED đã viết ở
lặp lại Việc hiển thị này sử dụng chương trình con DisplayLED đã viết ở trên. trên
Giảm thời gian trễ xuống còn 100 ms Quan sát hiện tượng
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ìnhGiả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 thiBiên dịch, thực thi vàvà kiểm tra chươngkiểm tra chương trình trình
ORG 2000HRESET: MOV MOV R0,#1R0,#1
MOV R1,#0LOOP:
ACALL DISPLAYLEDACALL DELAY100MSINC R0
INC R1CJNE R0,#5,LOOPSJMP RESETDISPLAYLED:
INC R1MOV B,R1DEC R1
Trang 23BÀI THÍ NGHIỆM 1
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 18
MOV A,#11110111BSHIFTLOOP:
RL A
DJNZ B,SHIFTLOOPANL A,#0F0H
ADD A,R0MOV DPTR,#0000HMOVX @DPTR,ARET
DELAY100MS:
MOV R6,#200LP1:
LP1: MOV MOV R7,#250R7,#250
DJNZ R7,$
DJNZ R6,LP1RET
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ýlà bao nhiêu theo lý thuyết? Giải thích cáchthuyết? Giải thích cách tính
Trang 24LẬ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ựchiệ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; INCthự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, vCycle, vớ ớ i mi mỗỗi 1 MC là 1i 1 MC là 1(() V) Vậậy thy thờ ờ i gian tr i gian tr ễễ th thựực tc tếế là 19 là 19 ∗ 1(()) ==
19(())
➢ Khi giảm rất nhỏ thời gian trễ, hiện tượng xảy raKhi giảm rất nhỏ thời gian trễ, hiện tượng xảy ra làlà gì? Giảigì? Giải thích 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
Độ 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àvà LED sẽ hiển thị liênLED sẽ hiển thị liêntục các
tục các giágiá trị 1, 2, 3trị 1, 2, 3 vàvà 4 với tần số rất lớn bằng mắt thường4 với tần số rất lớn bằng mắt thường tata không thể quan sát độ trễ nhỏkhông thể quan sát độ trễ nhỏnhư thế Vậy nên,
như thế Vậy nên, ta nhìnta nhìn thấy các giá trị 1, 2, 3thấy các giá trị 1, 2, 3 vàvà 4 gần như cố4 gần như cố định.định.
Trang 25BÀI THÍ NGHIỆM 2
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 1
➢ Nắm đ Nắm được ược cách sử dụngcách sử dụng kit thíkit thí nghiệm, phầnnghiệm, phần mềm lậpmềm lập trình.trình
➢ Nắm được cách giao tiếp LCD và ADC.
➢ Nắm được cách lập trình Nắm được cách lập trình timer. timer
➢ ĐọcĐọc bài bài chuẩnchuẩn bị bị thí thí nghiệmnghiệm 2 2 tạitại nhà. nhà
➢ ChuẩnChuẩn bị bị cho thí cho thí nghiệmnghiệm 2: 2: ViếtViết chươngchương trình và mô trình và mô phỏn phỏngg trên Proteus trên Proteus tấttất cả các bài trong thínghiệm 2dựadựa trên bài trên bài chuẩn bịchuẩn bị 2 và thí 2 và thí nghiệmnghiệm 0. 0
➢ Nộp Nộp tấttất cảcả các các kếtkết quảquả (bài (bài chuẩnchuẩn bị bị thí thí nghiệmnghiệm 2) cho GVHD 2) cho GVHD trướctrước khi vào khi vào lớp.lớp.
Sinh viên không thực hiện hoặc nộp thiếu nếukhông có lí do chính đáng sẽ không được tham gia thí
nghiệm và bị đánh vắng buổi đó.
Trang 26LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
nghiệm của sinh viên. viên
➢ Biên dịch và chạy thử chươngBiên dịch và chạy thử chương trình. trình
➢ Sửa chương trình để hiển thị tên sinh viênSửa chương trình để hiển thị tên sinh viên lên hànglên hàng đầuđầu
LCDADDR LCDADDR EQU EQU 6000H6000H
ORG 0000HMAIN:
MOV MOV @R0, @R0, 30H30HMOV
MOV DPTR, DPTR, #LCDADDR#LCDADDRACALL CLEAR
ACALL INIT_LCDACALL DISPLAYSTRINGSJMP $
INIT_LCD:
MOV MOV A, A, #38H#38HACALL WRITECOMMOV
MOV A, A, #0EH#0EHACALL WRITECOMMOV
MOV A, A, #06H#06HACALL WRITECOMRET
CLEAR:
MOV MOV A, A, #01H#01H
Trang 27BÀI THÍ NGHIỆM 2
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 3
ACALL WRITECOMRET
WRITETEXT:
MOV MOV DPTR, DPTR, #LCDADDR#LCDADDRSETB LCD_E
SETB LCD_RSMOVX @DPTR, ACLR LCD_E
ACALL WAIT_LCDRET
DISPLAYSTRING:
MOV A,#0LOOP:
MOV MOV DPTR, DPTR, #MESSAGE#MESSAGEMOV R0,A
MOVC A,@A+DPTR
JZ EXITACALL WRITETEXTMOV A,R0
INC ADJNZ DJNZ B, B, LOOPLOOP
Trang 28LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
EXIT:
RETWAIT_LCD:
MOV R6,#10DL1:
MOV MOV R7, R7, #250#250DJNZ
DJNZ R7, R7, $$
DJNZ R6,DL1RET
Trang 29BÀI THÍ NGHIỆM 2
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
WRITECOM: GHI LỆNH RAWRITECOM: GHI LỆNH RA MÀN HÌNH LCDMÀN HÌNH LCD
- WRITETEXT: GHI DỮ LIỆU (KÍ TỰ) RA WRITETEXT: GHI DỮ LIỆU (KÍ TỰ) RA MÀ HÌNHMÀ HÌNH LCD LCD
- EXIT: THOÁT KHỎI CHƯƠNGEXIT: THOÁT KHỎI CHƯƠNG TRÌNH TRÌNH
- MESSAGE:MESSAGE: BẢNG ĐỊNH NGHĨA ĐỊA CHỈBẢNG ĐỊNH NGHĨA ĐỊA CHỈ KÍKÍ TỰ TỰ
- WAIT_LCD: TẠO TRỄWAIT_LCD: TẠO TRỄ CHO LCDCHO LCD
➢ Trình bày lưu đồ giải thuậtTrình bày lưu đồ giải thuật giaogiao tiếptiếp LCD. LCD
Trang 30LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
Trang 31Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
➢ Viết thêm chương trình con CLRSCREEN để xóaViết thêm chương trình con CLRSCREEN để xóa màn hình LCD.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àngViết thêm chương trình con GOTOXY để di chuyển con trỏ của LCD đến hàng x,x, cộtcột y,y, với Xvới Xchứa trong R0
chứa trong R0 vàvà Y chứa trongY chứa trong R1. R1
➢ Sửa chương trình ở thí nghiệm 1 để hiển thị thêm số nhóm ở hàng thứSửa chương trình ở thí nghiệm 1 để hiển thị thêm số nhóm ở hàng thứ 2.2
LCD_E BIT P3.3LCD_RS BIT P3.5LCDADDR EQU 6000HORG 2000H
MAIN:
MOV MOV @R0, @R0, 30H30HMOV
MOV DPTR, DPTR, #LCDADDR#LCDADDRACALL CLEAR
ACALL INIT_LCDCLR F0
ACALL DISPLAYSTRINGSETB F0
ACALL DISPLAYSTRINGSJMP $
INIT_LCD:
MOV A, #38HACALL WRITECOMMOV A, #0DH
ACALL WRITECOMMOV A, #06H
ACALL WRITECOM
Trang 32LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
RETCLEAR:
MOV A, #01HACALL WRITECOMRET
WRITECOM:
MOV DPTR, #LCDADDRSETB LCD_E
CLR LCD_RSMOVX @DPTR, ACLR LCD_E
ACALL WAIT_LCDRET
WRITETEXT:
MOV DPTR, #LCDADDRSETB LCD_E
SETB LCD_RSMOVX @DPTR, ACLR LCD_E
ACALL WAIT_LCDRET
WAIT_LCD:
MOV R6,#20DL1:
MOV R7, #250DJNZ R7, $DJNZ R6,DL1RET
DISPLAYSTRING:
ACALL COUNT
Trang 33Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page |
ACALL GOTOXYMOV A,#0
LOOP:
JB F0,CONT1MOV DPTR,#TENJMP OUTPUT1CONT1:
MOV DPTR,#NHOMOUTPUT1:
MOV R0,AMOVC A,@A+DPTR
JZ EXITACALL WRITETEXTMOV A,R0
INC ASJMP LOOPEXIT:
RETGOTOXY:
MOV A,#80H
JB F0,CONT2ADD A,#0JMP OUTPUT2CONT2:
ADD A,#40HOUTPUT2:
ADD A,R1ACALL WRITECOMRET
COUNT:
Trang 34LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MOV R1,#0
JB F0,CONT3MOV DPTR,#TENJMP OUTPUT3CONT3:
MOV DPTR,#NHOMOUTPUT3:
MOV A,#0LOOP1:
MOV R0,AMOVC A,@A+DPTR
JZ EXIT1INC R1MOV A,R0INC AJMP LOOP1EXIT1:
MOV A,#16MOV B,#2SUBB A,R1DIV ABMOV R1,ARET
TEN: DBTEN: DB ‘‘LAI NGUYEN DUYLAI NGUYEN DUY’’,0,0 NHOM: DB 'NHOM DT03',0END
Trang 35BÀI THÍ NGHIỆM 2
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
➢ Thực hiện canh giữa hànThực hiện canh giữa hàng 2 của LCD Cho biếtg 2 của LCD Cho biết cách làm?cách làm?
- TaTa lấylấy (16(16 – – độ dài chuỗi kí tự)/2 lấy phầnđộ dài chuỗi kí tự)/2 lấy phần nguyê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,
phần nguyên ở trên, tata được một chuỗi ký tự có vị trí ở giữađược một chuỗi ký tự có vị trí ở giữa màn hình LCD.màn hình LCD.
Trang 36LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
Mục tiêu: Nắm được cách thức giao tiếp Nắm được cách thức giao tiếp ADC.ADC
Yêu cầu:
➢ Viết chương trình con READADC thực hiện đọc giá trị của kênh 0Viết chương trình con READADC thực hiện đọc giá trị của kênh 0 vàvà trả về giá trị trong R0.trả về giá trị trong R0.
➢ Viết chương trình hiển thị giá trị của kênh 0 của ADCViết chương trình hiển thị giá trị của kênh 0 của ADC lênlên LCD dùng chương trình conLCD dùng chương trình conREADADC đã viết
READADC đã viết.
LCD_E BIT P3.3LCD_RS BIT P3.5LCDADDR EQU 6000H
ADCADDR EQU 4000HORG 0
MAIN:
CALL READADCPUSH 0
MOV DPTR, #LCDADDRCALL CLEAR
CALL INIT_LCDCALL DISPLAYSTRINGXUONGDONG:
MOV A,#0C0HCALL WRITECOMPOP ACC
CALL CONVERTTOBCD
Trang 37BÀI THÍ NGHIỆM 2
Department of Electronics
Microprocessor Microprocessor Laboratory Laboratory
Page | 17
MOV A,R3CALL WRITETEXT
MOV A,R2CALL WRITETEXTMOV A,R1
CALL WRITETEXTSJMP $
READADC:
MOV DPTR,#ADCADDRMOV A,#0
MOVX @DPTR,ACALL WAIT_LCDMOVX A,@DPTRMOV R0,A
MOV P1,A
RETINIT_LCD:
MOV A, #38HACALL WRITECOMMOV A, #0DH
ACALL WRITECOMMOV A, #06H
ACALL WRITECOM
Trang 38LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
RETCLEAR:
MOV A, #01HACALL WRITECOMRET
WRITECOM:
MOV DPTR, #LCDADDRSETB LCD_E
CLR LCD_RSMOVX @DPTR, ACLR LCD_E
ACALL WAIT_LCDRET
WRITETEXT:
MOV DPTR, #LCDADDR
SETB LCD_ESETB LCD_RSMOVX @DPTR, ACLR LCD_E
ACALL WAIT_LCDRET
WAIT_LCD:
MOV R6,#20