BÀI THÍ NGHIỆM 1:LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN 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ác
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN- ĐIỆN TỬ
Giáo viên hướng dẫn: Trần Văn Hoàng
Thành viên nhóm:
1 Nguyễn Huy Khiêm 1710138
2 Huỳnh Minh Khôi 1710149
3 Huỳnh Quốc Kiệt 1710156
Trang 2BÀI THÍ NGHIỆM 1:
LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN
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 chương 1, chương 2 và chương 6 của tài liệu hướng dẫn
Viết chương trình và mô phỏng các bài thí nghiệm
LÝ THUYẾT VỀ PHÍM NHẤN VÀ LED:
1 Cấu tạo phần cứng của phím đơn và led:
Trang 32 Tín hiệu của phím nhấn và Led:
- Đối với phim nhấn đơn trên Kit thí nghiệm được thiết kế theo cấu hình chế độ
pull-up Nên khi nhấn phím thì chân port sẽ đọc giá trị 0 Ngược lại chân port đọc giá trị 1
- Đối với Led muốn Led sang thì phải cho port tín hiệu 0 do thiết kế phần cứng của
4 Trả lời câu hỏi:
- 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?
Trả lời: Khi nhấn hoặc thả nút (nút ứng với P1.0) thì do cấu cấu tạo phần cứng
của Kit thí nghiệm nên ta có Led tương ứng được nói chung port với nút (P1.0) sẽ
bị tác động đồng thời do chịu tác động của phần mềm mà ta đã nạp vào 8051 nênLed được nói vào port quy định trong chương trình (P3.0) cũng sẽ bị tác động.Chính vì vậy chúng ta sẽ thấy có 2 Led bị tác động khi nhấn hoặc thả nút
- 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?
Trả lời: Các bit của 2 port đều sử dụng được trừ 2 bit P3.6 và P3.7 Vì 2 bit P3.6
và P3.7 được sử dụng để làm tín hiệu điều khiển cho chế độ 3 bus mà kit thínghiệm sử dụng cụ thể là P3.6=nWR, P3.7= nRD nên các LED nói vào 2 bit nàycủa port 3 không sử dụng được
II THÍ NGHIỆM 2:
1 Mục tiêu:
- Nắm được cách tạo trễ dùng vòng lặp lệnh
2 Yêu cầu:
- Viết chương trình tạo xung vuông 1 Hz, chu kỳ nhiệm vụ 50% trên P1.0
3 Code của chương trình:
ORG 2000H
Trang 44 Trả lời câu hỏi:
- Để tạo xung 1 Hz, các vòng trễ 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.
Trả lời: Dùng cách câu lệnh DJNZ để tạo các vòng lặp tạo trễ cho chương trình.
Dựa trên thạch anh có tần số 11.0592 MHz thì chu kỳ máy MC=1,0851 µs
Chương trình trên do chu kỳ làm việc là 50% tức ½ chu kỳ sẽ ở mức 1, ½ còn lạicủa chu kỳ sẽ là mức 0 Trong 1 chu kỳ làm việc 0.5s xung ở mức 1, 0.5s xung ởmức 0 Vì vậy ta cần dùng chương trình tạo trễ trong thời gian 0.5s Thời gianchính xác mà chương trình DELAY05S trên là:
(((255.2+1+2).224+1+2).4+2+1).MC=0,4988s
Sai số của chương trình DELAY05S: |0,4988−0,50,5 |.100 %=0,24 %
- Sai số nhỏ nhất có thể đạt được so với yêu cầu là bao nhiêu?
Trả lời: Sai số nhỏ nhất có thể đạt được là: 0%
III THÍ NGHIỆM 3:
1 Mục tiêu:
- Nắm được cách viết chương trình con để tạo trễ
2 Yêu cầu:
- Viết chương trình con Delay1sIns và dùng chương trình con này để chớp/tắt LED
đơn gắn vào P1.0 sau mỗi khoảng thời gian 1s
3 Code chương trình:
a Chương trình con Delay1sIns
Trang 54 Trả lời câu hỏi:
- Thời gian 1s được tạo ra như thế nào?
Trả lời: Thời gian 1s được tạo ra bằng 3 vòng lặp DJNZ long ghép vào nhau Dựa
vào chu kỳ máy của từng lệnh ta tính được số vòng lặp cần thiết cho lệnh DJNZ,tạo được độ trễ 1s Đối với chường trình Display1sIns này thì thời gian delay tínhnhư sau: (((250.2+1+2).229+1+2).8+2+1).MC=0,99992s MC là chu kỳ máy(1MC= 1,0851 µs) Sai số cùa chương trình trên: %sai số= 0,00836%
IV THÍ NGHIỆM 4:
Trang 61 Mục tiêu:
- Nắm được cách hiển thị LED và tạo hiệu ứng
2 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 1s đã viết ở trên
4 Trả lời 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?
Trả lời: Led ngoài cùng bên trái được nối đến MSB của port.
Trang 7 Đọc chương 2 và chương 4 của tài liệu hướng dẫn
Viết chương trình và mô phỏng các bài thí nghiệm
LÝ THUYẾT CƠ BẢN:
1 LED 7 đoạn :
Cấu tạo của led 7 đoạn gồm 8 led đơn được nối chung cực anode (dạng led anodechung) hoặc nối chung cực cathode (dạng led cathode chung) Các đoạn led đơnnày được đặt tên là a, b, c, d, e, f, g và dấu chấm dp Để hiển thị một giá trị lên led
7 đoạn, cần cấp điện áp lên chân chung và các tín hiệu điều khiển đoạn tương tựnhư điều khiển các led đơn
Trang 8- 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 DisplayLed0
Trang 93 Code của chương trình:
ORG 2000H
MOV R0, #9ACALL DISPLAYLED0SJMP KT
DISPLAYLED0:
MOV A, R0ADD A, #0E0HMOV DPTR, #0000HMOVX @DPTR, ARET
KT:
NOPEND
- 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
3 Code của chương trình:
Trang 10- Viết chương trình con DisplayLED xuất giá trị trong thanh ghi R0 lên LED 7 đoạn
có số thứ tự ghi trong thanh ghi R1
- Xuất giá trị 1 lên LED số 3
3 Code chương trình VÀ GIẢI THÍCH Ý NGHĨA
MOV B, R1 ; chuyển giá trị trong R1 sang B
MOV A, #11110111B ; chuyển giá trị 11110111B sang A
LOOP:
DJNZ B, LOOP ; thực hiện B lần vòng lặp LOOP
ANL A, #11110000B ; AND A với 11110000B để giữ lại 4 bit cao của APUSH ACC ; lưu giá trị của A vào Stack
MOV A, R0 ; chuyển giá trị từ R0 sang A
ANL A, #00001111B ; AND A với 100001111B để giữa lại 4 bit thấp
MOV R0, A ; chuyển giá trị trong A sang R0
POP ACC ; đưa giá trị A lưu trong Stack quay lại vào A
ORL A, R0 ; OR A với R0 để 4 bit thấp là data; 4 bit cao là điều
Trang 11;khiển LEDMOV DPTR, #0000H
MOVX @DPTR, A
RET
4 Trả lời câu hỏi:
- Giải thích ý nghĩa các lệnh của đoạn chương trình trong hướng dẫn
- Trả lời: Ý nghĩa chi tiết các câu lệnh được giải thích trên phần code.
Trang 13b Code thời gian delay 100MS:
- Thay chương trình con DELAY1S ở code trên bằng chương trình con sau:
DELAY100MS:
MOV R6, #183 LOOP2:
MOV R5, #255 LOOP3:
DJNZ R5, LOOP3 DJNZ R6, LOOP2 RET
c Thời gian tính toán để không nhấp nháy 10MS
4 Trả lời 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
- Trả lời: Thời gian trễ để không còn thấy LED nhấp nháy theo lý thuyết là:
1/4T >24 ( số lần chớp trong 1s của Led lớn hơn 24 lần )
T<10.4 MS.
- Khi giảm rất nhỏ thời gian trễ, hiện tượng xảy ra là gì? Giải thích
- Trả lời: Khi giảm thời gian trễ rất nhỏ thì mắt ta sẽ thấy các LED hiển thị cùng
1 lúc và không có hiện tượng giật LED Giải thích là do chu kì sáng tắt củaLED rất nhỏ do thời gian delay nhỏ nên mắt người không còn cảm giác về sợsáng tắt liên tục của LED
Trang 14MỤC TIÊU:
Nắm được cách điều khiển LCD
Nắm được cách giao tiếp ADC
Nắm được cách chuyển giá trị đọc được thành giá trị thực tế
CHUẨN BỊ:
Đọc chương 5 và chương 9 của tài liệu hướng dẫn
Viết chương trình và mô phỏng các bài thí nghiệm
LÝ THUYẾT VỀ LCD VÀ ADC:
1 Lý thuyết về LCD:
a Các chân của LCD và chức năng:
b Thiết kế phần cứng của LCD:
BÀI THÍ NGHIỆM 3:
GIAO TIẾP LCD VÀ ADC
Trang 161 Mục tiêu:
- Nắm được cách thức xuất giá trị lên LCD
2 Yêu cầu:
- Download chương trình mẫu LCD.A51 trên trang web bộ môn điện tử
- Biên dịch và chayjthurw chương trình,
- Sủa chương trình để hiển thị tên sinh viên lên hàng đầu
Trang 194 Trả lời câu hỏi:
- Giải thích ý nghĩa và cách sử dụng các chương trình con trên project mẫu
- Trả lời: Ý nghĩa và cách sử dụng các chương trình con của project mẫu:
- Chương trình con INIT_LCD có nhiệm vụ khởi động module LCD
- Chương trình con CLEAR có nhiệm vụ xóa tất cả các ký tự đang hiển thị của LCD
- Chương trình con WRITECOM có nhiệm vụ ghi 1 byte lệnh đến LCD
- Chương trình con WRITETEXT có nhiệm vụ ghi 1 byte dữ liệu hiển thị đến LCD
- Chương trình con DISPLAYSTRING để dễ dàng hơn trong việc lấy các
ký tự và xuất ra LCD bằng phương pháp tra bảng
- Chương trình con WAIT_LCD tạo thời gian trễ để LCD có thể hoàn thành thao tác hiện thời trước khi bắt đầu 1 thao tác khác
II THÍ NGHIỆM 2:
1 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ỏ 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
2 Code chương trình:
Trang 20a Code chương trình con CLRSCREEN:
Trang 22MOV R6,#10DL1:
MOV R7, #250DJNZ R7, $DJNZ R6,DL1RET
GOTOXY:
PUSH ACCMOV A, R0MOV DPTR, #TBMOVC A, @A+DPTRADD A, R1
LCALL WRITECOMPOP ACC
TB: DB 80H, 0C0HRET
Trang 23- 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
Trang 25DELAY_LCD:
; -MOV R6,#10DL1:
MOV R7, #250DJNZ R7, $DJNZ R6,DL1RET
GOTOXY:
; -PUSH ACCMOV A, R2MOV DPTR, #TBMOVC A,@A+DPTRADD A, R3
LCALL WRITE_COMPOP ACC
RET
DELAY:
; -PUSH 06HPUSH 07HMOV R5,#8DL3:
MOV R6,#250DL2:
MOV R7, #250DJNZ R7, $DJNZ R6,DL2DJNZ R5, DL3POP 06HPOP 07HRET
TB:
; -DB 80H, 0C0HEND
3 Trả lời 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?
Trang 26- Trả lời: Giá trị này không phải 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
BANG0_1:
MOV 31H, AMOV A, 32HMOV B, #10MUL ABMOV 33H, BMOV B, #51
Trang 31MỤC TIÊU:
Nắm được cách giao tiếp timer để tạo trễ và tạo baudrate
Nắm được cách giao tiếp port nối tiếp
CHUẨN BỊ:
Đọc chương 3 và chương 7 của tài liệu hướng dẫn
Viết chương trình và mô phỏng các bài thí nghiệm
LÝ THUYẾT VỀ TIMER VÀ SERIAL PORT:
có thể hoạt động ở chế độ 8-bit hoặc 16-bit Tùy theo số xung đếm cần nhiều hay
ít mà có thể cấu hình Timer ở chế độ tương ứng
2 Lý thuyết về Serial port:
a Khung truyền nối tiếp bất đồng bộ:
Thuật ngữ tốc độ baud dùng để chỉ tốc độ truyền dữ liệu nối tiếp được truyền Tốc độ baud được định nghĩa 1/(thời gian giữa những chuyển tiếp tín hiệu)
b Thiết kế phần cứng:
BÀI THÍ NGHIỆM 4:
LẬP TRÌNH GIAO TIẾP TIMER VÀ SERIAL PORT
Trang 32Hai tín hiệu dùng cho giao tiếp là TXD và RXD trên Port 3 của 8051 Như vậy,người lập trình cần bật ON hai switch này (của SW_CC4) để có thể dùng cổng nối tiếp:
ACALL DELAY005SDJNZ R7, MAIN_LOOP_1SJMP MAIN_LOOP
DELAY005S:
MOV TMOD, #01HMOV TH0, #HIGH(-46080)MOV TL0, #LOW(-46080)
Trang 33SETB TR0JNB TF0, $CLR TF0RETEND
4 Trả lời câu hỏi:
- Để tạo sóng 1 Hz, ta có thể sử dụng timer ở chế độ 2 được không?
- Trả lời: Để tạo sóng 1 Hz, ta có thể sử dụng timer chế độ 2 được.
- Dạng sóng 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?
- Trả lời: Dạng sóng có sai số Để hạn chế sai số ta nạp các giá trị vào timer như
Trang 34SJMP LOOP
END
4 Trả lời 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?
- Trả lời: Ở chế độ 2, độ trễ gây ra do các câu lệnh đảo giá trị bit không gây sai
số cho dạng sóng ngõ ra Vì ở chế độ 2, giá trị được tự động nạp lại khi tràn nên không cần phải dừng lại để nạp lại giá trị, do đó dạng sóng chỉ bị dịch đi
do các độ trễ chứ không gây ra sai số cho dạng sóng
3 Code chương trình:
ORG 2000H
;SET SMOD LEN 1MOV A, PCONSETB ACC.7MOV PCON, A
;SET SERIAL PORT MODE 1MOV SCON, #01010010B
;SET TOC DO BAUD THONG QUA TIMER 1MOV TMOD, #20H
MOV TH1, #(-3)SETB TR1MAIN_LOOP1:
MOV R7, #0MOV DPTR, #TABLEMAIN_LOOP2:
JB P1.0, $ACALL DELAYJNB P1.0, $MOV A, R7INC R7MOVC A, @A+DPTR
JZ MAIN_LOOP1
Trang 35ACALL SENDSJMP MAIN_LOOP2SEND:
JNB TI, $CLR TIMOV SBUF, ARET
; -DELAY:
MOV R6, #183LOOP2:
MOV R5, #255LOOP3:
DJNZ R5, LOOP3DJNZ R6, LOOP2RET
TABLE: DB "HELLO,WORLD ",0END
MOV TH1, #-3SETB TR1
; -; -CT
Trang 37ACALL DELAYRET
WRITE_DATA:
; SETB RSSETB ENMOV DPTR, #8000HMOVX @DPTR, ACLR EN
ACALL DELAYRET
GOTOXY:
; PUSH ACCMOV A, R0MOV DPTR, #TBMOVC A, @A+DPTRADD A, R1
LCALL WRITE_COMPOP ACC
RET
; -; -CT CON DELAY:
DELAY -MOV R6, #183LOOP2:
MOV R5, #255LOOP3:
DJNZ R5, LOOP3DJNZ R6, LOOP2RET
TB:
; -DB 80H, 0C0H
END
1 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 quaHyperTerminal (bằng cách gõ các ký tự trên bàn phím khi đang ở trongchương trình HyperTerminal) và hiển thị lên LCD như sau:
Trang 38Nếu ký tự là chữ thì hiển thị lên LCD; Enter thì xuống hàng; ESC thì xóa mànhình LCD; Backspace thì xóa ký tự bên trái dấu nháy.
Trang 42 Đọc chương 8 của tài liệu hướng dẫn
Viết chương trình và mô phỏng các bài thí nghiệm
Trang 43Để cho phép ngắt, người lập trình phải cho phép bit tương ứng trong thanh ghi IE
Người lập trình cũng có thể chọn mức ưu tiên cho ngắt thông qua thanh ghi IP
Trang 44- 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 terminal
- 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ả
3 Code của chương trình:
ORG 2000HLJMP MAINORG 2023HLJMP SPISRORG 2030H
MAIN:
MOV A, PCONSETB ACC.7MOV PCON, AMOV TMOD, #20HMOV SCON, #01010000BMOV TH1, #-3
SETB EASETB ESSETB TR1MAIN_LOOP:
JNB P1.0, DUOCNHANSETB P1.1
SJMP MAIN_LOOPDUOCNHAN:
CLR P1.1SJMP MAIN_LOOPSPISR:
JB RI, NHANCLR TISJMP DONENHAN:
CLR RI
Trang 45MOV A, SBUFMOV SBUF, ADONE:
RETIEND
Trang 54BÁO CÁO PHẦN BÀI TẬP THÊM
P3.2 Sáng từ trái qua phải (Từ trọng số cao đến thấp)
P3.3 Sáng từ 2 LED ở giữa rồi lần lượt sáng cặp LED tương ứng
kế đến cặp LED ngoài cùng sángP3.4 Sáng từ phải qua trái (Từ trọng số thấp đến cao)
P3.5 Sáng từ 2 LED ngoài cùng, rồi lần lượt sáng cặp LED tương
ứng kế tiếp đến 2 LED ở giữa sáng
Trang 56; -; CHUONG TRINH CON KIEM TRA
II BÀI THÍ NGHIỆM 2:
HIỂN THỊ LED 7 ĐOẠN
Trang 57MOV R7,#1 ;1 DUNG; 0 CHAY
MOV A,#0 ;PERCENT SECOND
Trang 59; -TABLE:
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H
END
III BÀI THÍ NGHIỆM 3:
GIAO TIẾP LCD VÀ ADC
Trang 63IV BÀI THÍ NGHIỆM 4:
LẬP TRÌNH GIAO TIẾP TIMER VÀ SERIAL PORT
ĐỀ:
Viết chường trình thực hiện đồng hồ bằng LED 7 đoạn hoặc LCD hiển thị phút và giây
Sử dụng Serial Port để điều chỉnh thời gian của đồng hồi Cụ thể:
Trang 68Viết chương trình thực hiện các nhiệm vụ sau:
- Thực hiện đồng hồ hiển thị phút giây trên LCD
- Chỉnh thời gian bằng Serial Port (Dùng ngắt Serial port)
- Đồng thời trên LCD hiển thị giá trị đọc được trực tiếp từ kênh 0 (Thực hiện trong chương trình chính)
Cụ thể trong chương trình: nhập P sau đó nhập tiếp 2 số để quy định phút, 2 số tiếp theoquy định giây, sau đó đồng hồ LED sẽ tự động cập nhật giá trị