TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH BÁO CÁO THỰC HÀNH Bộ môn Vi Xử Lý Giảng viên hướng dẫn Trịnh Vũ Đăng Nguyên L P Ớ DT01 HK 213 NGÀY N P Ộ Thành viên Họ và[.]
Trang 2Thí nghiệm 1 1
Thí nghiệm 2 2
Thí nghiệm 3 4
Thí nghiệm 4 6
Thí nghiệm 5 7
Thí nghiệm 6 8
Thí nghiệm 7 9
Thí nghiệm 8 11
BÀI THÍ NGHIỆM 2 14
Thí nghiệm 1 14
Thí nghiệm 2 17
Thí nghiệm 3 20
Thí nghiệm 4 24
Thí nghiệm 5 29
Thí nghiệm 6 31
BÀI THÍ NGHIỆM 3 32
Thí nghiệm 1 32
Thí nghiệm 2 33
Thí nghiệm 3 36
Thí nghiệm 4 40
Thí nghiệm 5 41
Thí nghiệm 6 45
Thí nghiệm 7 48
Department of Electronics Page | 0
Microprocessor Laboratory
Trang 3LẬ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).
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
- Kết quả thực hiện: Khi nhấn Switch nối với P1.0, đèn của Port 1.0 và 3.0 đều sáng
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?
- Giải thích: Khi nhấn Switch nối với Port 1.0 thì Cathode của LED nối với P1.0được nối Ground, trong khi đó Anode được nối với VCC nên LED sáng LED nốivới P3.0 sáng là do chương trình trên đã được nạp vào vi xử lý
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ảithích tại sao?
Các bit từ 0 đến 7 của 2 port có thể được dùng vì đây là các cổng nhập xuất nhập 8 bit tính từ bit 0 đến 7
Department of Electronics Page | 1
Microprocessor Laboratory
Trang 4LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
MOV R5, #8
L1: MOV R6, #250
L2: MOV R7, #250
DJNZ R7, $ DJNZ R6, L2
Department of Electronics Page | 4
Microprocessor Laboratory
Trang 5LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Sai số nhỏ nhất có thể đạt được so với yêu cầu là bao nhiêu?
Khi tần số chớp tắt là 1Khz, cho biết hiện tượng trên LED?
- LED chớp nháy rất nhanh và hầu như không thể nhận biết hiện tượng chớp nháy
Sinh viên thay đổi chương trình con như thế nào để được tần số chớp tắt là 1KHz?
- Tần số chớp tắt fled = 1 KHz => Tled = 1/1000 = 10-3 s
Tạo chương trình tạo trễ 10-3/2=0.0005s
Department of Electronics Page | 3
Microprocessor Laboratory
Trang 6LẬ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
SETB P1.1
ACALL DelayP1-1muccao CLR P1.1
ACALL DelayP1-1mucthap
SJMP LOOP2END
DelayP1-0: MOV R5, #11
L1: MOV R6, #200
L2: MOV R7, #209
DJNZ R7, $ DJNZ R6, L2 DJNZ R5, L1
Trang 7LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
DJNZ R6, L2 DJNZ R5, L1
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?
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ạ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?
- Xung 0.5 Hz có chu kỳ là 2 s; nhiệm vụ 50% nên thời gian xung ở mức 1 = thờigian ở mức 0 = 1 s Sử dụng 1 lệnh DJNZ mất 2MCs = 2 * 12/11.0592=2.17 µs =>
Lặp lại 106/2.17=460830 lần = 209*200*11
- Xung 1 Hz có chu kỳ là 1 s; nhiệm vụ 30% nên thời gian xung ở mức 1 = 0.3s =>
Lặp 138250 lần = thời gian xung ở mức 0 = 0.7s => Lặp 322580 lần = 254*255*5
Department of Electronics Page | 5
Microprocessor Laboratory
Trang 8LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
RR A SJMP LAPDelay1sIns:
MOV R5, #8
L1: MOV R6, #250
L2: MOV R7, #250
DJNZ R7, $ DJNZ R6, L2 DJNZ R5, L1
Trang 9LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
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
Main:
MOV R0, #9
LCALL DislayLedDislayLed:
Trang 10LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
MOVX @DPTR, A
RET
END
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
DislayLed:
MOV A, #0E0H
ADD A, R0 MOV DPTR, #000H
Trang 11LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
LOOP1: MOV R6, #250
LOOP2: MOV R5, #250
DJNZ R5, $ DJNZ R6, LOOP2 DJNZ R7, LOOP1 END
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
Department of Electronics Page | 9
Microprocessor Laboratory
Trang 12LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
DisplayLED:
MOV B, R1 ;Đưa nội dung trong R1 vào B
INC B ;Tăng giá trị B lên 1
MOV A, #11110111B ;bit số 3 bằng 0, bốn bit cao bằng 1
PUSH ACC ;Cất Acc vào StackPointer
MOV A, R0 ;Đưa nội dung R0 vào A
ANL A, #0FH ;Giữ lại 4 bit thấp của A
MOV R0, A ;Đua nội dung của A vào R0
POP ACC ;Lấy lại A từ StackPointer
ORL A, R0 ;Cộng A với R0, rồi lưu vào A
ADD A,R0 MOV DPTR, #0000H
Trang 13LẬ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ươngtrì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
INC R0 CJNE R1,#4,LOOP SJMP MAIN
DisplayLED:
MOV DPTR,#TABLE MOV A,R1
Department of Electronics Page | 11
Microprocessor Laboratory
Trang 14LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
MOVC A,@A+DPTR
ADD A,R0 MOVX @DPTR, A
Department of Electronics Page | 12
Microprocessor Laboratory
T
Trang 15LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED
Ta thấy, khoảng cách giữa 2 lần LED X sáng/tắt là 4T Mà theo lý thuyết, nếu số lần LEDsáng tắt lớn hơn 24 lần trong 1 giây thì mắt người coi như LED sáng liên tục Suy ra, thờigian trễ lớn nhất cần tìm là: 1s=24*4T T= 10 416 µs= 9600 MCs
Khi giảm rất nhỏ thời gian trễ, hiện tượng xảy ra là gì? Giải thích
- Hiện tượng: Không thấy LED 7 đoạn sáng
- Giải thích: Tần số chớp tắt quá nhanh, mắt người không nhìn được
Department of Electronics Page | 13
Microprocessor Laboratory
Trang 16LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
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
SJMP $INIT_LCD:
MOV A, #38H
ACALL WRITECOM MOV A, #0EH
ACALL WRITECOM MOV A, #06H
Trang 17LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
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
Trang 18LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
+ Chương trình con DISPLAYSTRING: Chọn ký tự cần hiển thị + Chương trình con WRITETEXT: Xuất ra LCD
Trình bày lưu đồ giải thuật giao tiếp LCD
Department of Electronics Page | 16
Microprocessor Laboratory
Trang 19LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
BACK:
ADD A, R1 ACALL WRITECOM RET
HANG2:
MOV A, #0C0HSJMP BACK
Sửa chương trình ở thí nghiệm 1 để hiển thị thêm số nhóm ở hàng thứ 2
Department of Electronics Page | 17
Microprocessor Laboratory
Trang 20LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
ACALL INIT_LCD
ACALL DISPLAYSTRING
MOV R0,#2ACALL GOTOXY
MOV A,#16ACALL LOOP
SJMP $INIT_LCD:
MOV A, #38HACALL WRITECOM
MOV A, #0EHACALL WRITECOM
MOV A, #06HACALL WRITECOM
RET
CLEAR:
MOV A, #01HACALL WRITECOM
RET
WRITECOM:
MOV DPTR, #LCDADDRSETB LCD_E
Trang 21LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
RET
DISPLAYSTRING:
MOV A,#0 LOOP:
MOV DPTR, #MESSAGEMOV R0,A
DJNZ R6,DL1
RET
GOTOXY:
CJNE R0,#1,HANG2 MOV A,#80H
BACK:
ADD A,R1 ACALL WRITECOM RET
HANG2:
MOV A,#0C0HSJMP BACK
MESSAGE:
DB "TRAN_LE_KHUONG",0,"NHOM5",0 END
Department of Electronics Page | 19
Microprocessor Laboratory
Trang 22LẬ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?
Thực hiện canh giữa hàng 2 của LCD Cho biết cách làm?
Trang 23LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
ADD A, #30H
ACALL WRITETEXT MOV A, R1
ADD A, #30H
ACALL WRITETEXT MOV A, R0
ADD A, #30H
ACALL WRITETEXT
SJMP MAIN1INIT_LCD:
MOV A, #38H; 8bit 2dong 5x7
ACALL WRITECOM MOV A, #0CH; onLCD Cursor_mod
ACALL WRITECOM MOV A, #06H ; cho hien thi them cac ky tu sau;
ACALL WRITECOM MOV A, #0C0H
Trang 24LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
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
READADC:
MOV DPTR, #4000H
MOVX @DPTR, A ACALL DELAY_ADC MOVX A, @DPTR
Trang 25LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MOV A, R0 MOV B, #10
DIV AB MOV R0, B MOV B, #10
DIV AB MOV R1, B MOV B, #10
DIV AB MOV R2, B
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 trị thực điện áp đặt vào kênh 0 Vì ADC0809 sử dụng 8 bit,
từ 0 255 để hiển thị giá trị áp từ 0 5V
Để 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 phải thực hiện phép toán: (Giá trị hiển thị*5)/255 = Giá trị hiển thị / 51
Department of Electronics Page | 253
Microprocessor Laboratory
Trang 26LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
DIV AB MOV R0, A MOV A, #5
MUL AB MOV B, #51
DIV AB MOV R1, A MOV A, #5
MUL AB MOV B, #51
DIV AB MOV R2, A MOV A, #5
MUL AB MOV B, #51
DIV AB CJNE A, #5, khackhac:
JC NEXT INC R2NEXT:
MOV A, R1 MOV B, #10
Department of Electronics Page | 264
Microprocessor Laboratory
Trang 27LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MUL AB ADD A, R2 MOV B, #2
MUL AB MOV R1, A
MOV R1, #0
ACALL GOTOXY MOV R2, #0
RETURN:
MOV A, R2 ACALL DISPLAYSTRING2 INC R2
CJNE R2, #8, RETURN
Department of Electronics Page | 275
Microprocessor Laboratory
Trang 28LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MOV R0, #1
MOV R1, #12
ACALL GOTOXY MOV A, #19
ACALL DISPLAYSTRING2MAIN1:
MOV R0, #1
MOV R1, #8
ACALL GOTOXY ACALL READADC ACALL CALADC MOV A, R0 ADD A, #9
ACALL DISPLAYSTRING2 MOV A, #8
ACALL DISPLAYSTRING2 MOV A, R1
MOV B, #10
DIV AB ADD A, #9
ACALL DISPLAYSTRING2 MOV A, B
ADD A, #9
ACALL DISPLAYSTRING2
SJMP MAIN1INIT_LCD:
MOV A, #38H; 8bit 2dong 5x7
ACALL WRITECOM MOV A, #0CH; onLCD Cursor_mod
ACALL WRITECOM MOV A, #06H ; cho hien thi them cac ky tu sau;
ACALL WRITECOM MOV A, #0C0H
ACALL WRITECOM
Department of Electronics Page | 286
Microprocessor Laboratory
Trang 29LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
RET
WRITETEXT:
MOV DPTR, #LCDADDR
SETB LCD_E SETB LCD_RS MOVX @DPTR, A CLR LCD_E ACALL WAIT_LCD
RET
MESSAGE: DB "Voltage 0123456789V"
Department of Electronics Page | 297
Microprocessor Laboratory
Trang 30LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
READADC:
MOV DPTR, #4000H
MOV A, #00H
MOVX @DPTR, A ACALL DELAY_ADC MOVX A, @DPTR
MOV A, R0 MOV B, #51
DIV AB MOV R0, A MOV A, #5
MUL AB MOV B, #51
DIV AB MOV R1, A MOV A, #5
MUL AB
Department of Electronics Page | 308
Microprocessor Laboratory
Trang 31LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MOV B, #51
DIV AB MOV R2, A MOV A, #5
MUL AB MOV B, #51
DIV AB CJNE A, #5, khackhac:
JC NEXT INC R2NEXT:
MOV A, R1 MOV B, #10
MUL AB ADD A, R2 MOV B, #2
MUL AB MOV R1, A
Trang 32LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
MOV TH0, #HIGH(-65535) SETB TR0
JNB TF0, $ CLR TF0 DJNZ R7, LOOP2 CPL P1.0
SJMP LOOP1 END
JNB TF0, $ CLR TF0 DJNZ R6 , LOOP2 DJNZ R7 ,LOOP3 CPL P1
Department of Electronics Page | 30
Microprocessor Laboratory
Trang 33LẬP TRÌNH GIAO TIẾP LCD, ADC VÀ TIMER
SJMP LOOP1 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 đã bị sai số Vì sai số gây ra là bởi thời gian thực hiện các câu lệnh
phần mềm, tức là tốn thêm xx chu kỳ máy, nên ta không sử dụng công thức tínhgiá trị nạp cho timer được
JNB TF0, $ CLR TF0 DJNZ R6, LOOP2 DJNZ R7, LOOP3 CPL P1.0
SJMP LOOP1 END
Department of Electronics Page | 31
Microprocessor Laboratory
Trang 34LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
MOV R3,50
X: JB P1.0, LOOP ; CHONG RUNG PHIM
DJNZ R3, X ACALL STRING ACALL DELAY1S SJMP LOOPPHAT:
JNB TI, $ CLR TI
MOV SBUF, A
Department of Electronics Page | 32
Microprocessor Laboratory
Trang 35LẬP TRÌNH GIAO TIẾP SERIAL PORT VÀ INTERRUPT
MOVC A, @A+DPTR
JZ KT ACALL PHAT
INC R0 AJMP LAPDELAY1S:
MOV R7, #8
L1: MOV R6, #250
L2: MOV R5, #250
DJNZ R5, $ DJNZ R6, L2 DJNZ R7, L1 RET
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 SRP
Department of Electronics Page | 33
Microprocessor Laboratory