ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ o0o BÁO CÁO BÀI TẬP LỚN VI XỬ LÍ GVHD Trịnh Vũ Đăng Nguyên Lớp DT01 Nhóm 01 Nhóm sinh viên thực hiện STT MSS.
Trang 1ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINHTRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬBỘ MÔN ĐIỆN TỬ -o0o -
BÁO CÁO BÀI TẬP LỚN
VI XỬ LÍ GVHD: Trịnh Vũ Đăng Nguyên
Nhóm sinh viên thực hiện:
1 1913370 Võ Hồ Hồng Hiếu hieu.vo266@hcmut.edu.vn2 1912224 Ngô Quốc Toàn toan.ngovodanhloi@hcmut.edu.vn3 1912191 Nguyễn Thị Hoài Thy thy.nguyenbkhcmcmh@hcmut.edu.vn
TP.HCM, tháng 12 năm 2021
Trang 2Bảng phân công nhiệm vụ
1.1 => 1.3, 2.1 => 2.7,
4.1 => 4.4
2.12 => 2.163.1 => 3.45.2 => 5.531912191Nguyễn Thị Hoài Thy
2.8 => 2.112.17 => 2.21
4.4 => 4.75.1
Trang 31 CẤU TRÚC PHẦN CỨNG - GIẢI MÃ ĐỊA CHỈ
1.1 Sử dụng 1 vi mạch 74138 và các cổng cần thiết để thiết kế mạch giải mã địa chỉ tạo ra các tín hiệu chọn chip tương ứng các vùng địa chỉ sau:
Tín hiệu chọn
chip Vùng địa chỉ Đặc tính truyxuất
0000H 3FFFH
4000H 7FFFH
6000H 7FFFH
-WR
Trang 41.2 Sử dụng 1 vi mạch 74138 và các cổng cần thiết để thiết kế mạch giải mã địa chỉ tạo ra các tín hiệu chọn chip tương ứng các vùng địa chỉ sau:
1.3 Chỉ dùng một vi mạch 74138 (không dùng thêm cổng), thiết kế mạch giải mã địa chỉ tạo ra một tín hiệu chọn chip /CS tương ứng tầm địa chỉ F000H-F3FFH.
Tín hiệu chọn
chip Vùng địa chỉ Đặc tính truyxuất
9800H 9BFFH
9800H 9BFFH
-RD, WR
9C00H 9DFFH
-RD, WR
9E00H 9EFFH
-RD, WR
Trang 52 SỬ DỤNG TẬP LỆNH
Truy xuất RAM nội
2.1Viết CT ghi 40H vào ô nhớ 30H của RAM nội theo 2 cách (định địa chỉ ô nhớ trực tiếp và định địa chỉ ô nhớ gián tiếp).
- Định địa chỉ ô nhớ trực tiếp:ORG 2000HMOV 30H, #40HEND
- Định địa chỉ ô nhớ gián tiếp:ORG 2000H
MOV A, #40HMOV 30H, AEND
2.2Viết CT đọc ô nhớ 33H của RAM nội vào thanh ghi A theo 2 cách (định địa chỉ ô nhớ trực tiếp và định địa chỉ ô nhớ gián tiếp).
- Định địa chỉ ô nhớ trực tiếp:
ORG 2000HMOV A, 33HEND
- Định địa chỉ ô nhớ gián tiếp:ORG 2000H
MOV R1,33HMOV A, R1END
2.3 Viết CT chuyển dữ liệu ô nhớ 34H của RAM nội vào ô nhớ 35H củaRAM nội theo 2 cách (định địa chỉ ô nhớ trực tiếp và định địa chỉ ô nhớ gián tiếp).
- Định địa chỉ ô nhớ trực tiếp:ORG 2000HMOV 35H, 34HEND
- Định địa chỉ ô nhớ gián tiếp:
Trang 6ORG 2000HMOV A, 34HMOV 35H, AEND
Truy xuất RAM ngoài
2.4 Viết CT ghi 40H vào ô nhớ 0030H của RAM ngoài
ORG 2000H
MOV DPTR, #0030HMOVX @DPTR, #40HEND
2.5 Viết CT đọc ô nhớ 0032H của RAM ngoài vào thanh ghi A.
ORG 2000H
MOV DPTR, #0032HMOVX A, @DPTREND
2.6 Viết CT chuyển dữ liệu ô nhớ 0034H của RAM ngoài vào ô nhớ 0035H của RAM ngoài.
ORG 2000H
MOV DPTR, #0034HMOVX A, @DPTRMOV DPTR, #0035HMOVX @DPTR, AEND
Truy xuất Port
2.7 Viết CT xuất 0FH ra Port 1:
ORG 2000HMOV R1, #0FHMOV P1, R1END
2.8 Viết CT xuất 0 (mức logic thấp) ra chân P1.1
ORG 0000HCLR P1.1END
Truy xuất RAM nội, RAM ngoài và Port
2.9 Viết CT chuyển dữ liệu ô nhớ 40H (RAM nội) đến ô nhớ 2000H (RAM ngoài) Làm theo 2 cách (định địa chỉ ô nhớ trực tiếp và định địa chỉ ô nhớ gián tiếp).
Trang 7- Định địa chỉ trực tiếp:ORG 0000H
MOV A,40H
MOV DPTR,#2000HMOVX @DPTR,AEND
- Định địa chỉ gián tiếp:ORG 0000H
MOV R0,#40HMOV DPTR,#2000HMOV A,@R0
MOVX @DPTR,AEND
2.10 Viết CT chuyển dữ liệu ô nhớ 2001H (RAM ngoài) vào ô nhớ 41H (RAM nội) Làm theo 2 cách (định địa chỉ ô nhớ trực tiếp và định địa chỉ ô nhớ gián tiếp).
• Định địa chỉ trực tiếp: ORG 0000H
MOV DPTR,#2001HMOV A,#41H
MOVX A,@DPTREND
• Định địa chỉ gián tiếp:ORG 0000H
MOV DPTR,#2001HMOV R0,#41HMOVX A,@DPTRMOV @R0,AEND
2.11Viết CT lấy ô nhớ 2003H (RAM ngoài) xuất ra Port 1.
Trang 8ORG 0000H
MOV DPTR,#2003HMOVX A,@DPTRMOV P1,A
END
Sử dụng vòng lặp
2.12Viết CT xóa 20 ô nhớ RAM nội có địa chỉ bắt đầu là 30H.
ORG 0000HMOV R1, #30HLAP: MOV R7, #20DMOV @R1, #0
INC R1
DJNZ R7, LAPEND
2.13 Giả sử Port 1 được nối đến một thiết bị phát dữ liệu (ví dụ như 8 nútnhấn) Hãy viết CT nhận liên tiếp 10 byte dữ liệu từ thiết bị phát này vàghi vào 10 ô nhớ (RAM nội) liên tiếp bắt đầu từ ô nhớ 50H.
ORG 0000HMOV R1, #50HLAP: MOV R7, #10DMOV A, P1
MOV @R1, AINC R1
DJNZ R7, LAPEND
Trang 9LOOP1:
MOV R6, #250 LOOP2:
MOV R5, #250 LOOP3:
DJNZ R5,LOOP3 DJNZ R6,LOOP2 DJNZ R7,LOOP1 RET
b 24 MHz
DELAY1S:MOV R7, #16 LOOP1:
MOV R6, #250 LOOP2:
MOV R5, #250 LOOP3:
DJNZ R5,LOOP3 DJNZ R6,LOOP2 DJNZ R7,LOOP1 RET
Tạo xung
2.15Viết CT tạo chuỗi xung vuông có f = 100 KHz tại chân P1.1 (Xtal 12 MHz).
ORG 0000HLAP:
CPL P1.1 NOP
NOPSJMP LAPEND
2.16Viết CT tạo chuỗi xung vuông có f = 10 Hz và có chu kỳ làm việc D =
Trang 1025% tại chân P1.5 (Xtal 12 MHz).
ORG 0000HLAP:
SETB P1.5ACALL DELAYCLR P1.5
ACALL DELAYACALL DELAYACALL DELAYACALL LAPDELAY:MOV R7, #50 LOOP1:
MOV R6, #250 LOOP2:
DJNZ R6,LOOP2DJNZ R7,LOOP1RET
Các phép toán
2.17 Cho một chuỗi số 8 bit không dấu trong RAM nội gồm 10 số bắt đầutừ ô nhớ 30H Hãy viết CT con cộng chuỗi số này và ghi kết quả vào ônhớ 2EH:2FH (ô nhớ 2EH chứa byte cao của kết quả và ô nhớ 2FH chứabyte thấp của kết quả).
CTCON: MOV R0,#30H MOV R2,#10 CLR A
MOV 2EH,#0000H CLR C
PLUS: ADD A,@R0
Trang 11JNC SKIP INC 2EHSKIP: INC R0DJNZ R2,PLUSMOV 2FH,ARET
2.18 (Ví dụ: byte cao của số 16 bit đầu tiên được cất tại ô nhớ 30H và bytethấp của số 16 bit đầu tiên được cất tại ô nhớ 31H) Hãy viết CT con cộngchuỗi số này và cất kết quả vào ô nhớ 2EH:2FH.
CTCON:MOV R0,#30HMOV R1,#31HMOV R2,#10CLR AMOV 2EH,AMAIN:ADD A,@R1XCH A,2EHADDC A,@R0XCH A,2EHINC R0INC R0INC R1INC R1
DJNZ R2,MAINMOV 2FH,ARET
2.19 Cho hai số 8 bit, số thứ 1 chứa trong (30H), số thứ 2 chứa trong(31H) Viết CT con so sánh hai số này Nếu số thứ 1 lớn hơn hoặc bằng sốthứ 2 thì set cờ F0, nếu ngược lại thì xóa cờ F0.
Trang 12CTCON:MOV A,30HCLR F0
CJNE A,31H, CHECKCHECK: JC SKIPSETB F0
SKIP: RET
2.20 Cho hai số 16 bit, số thứ 1 chứa trong (30H):(31H), số thứ 2 chứatrong (32H):(33H) Viết CT con so sánh hai số này Nếu số thứ 1 lớn hơnhoặc bằng số thứ 2 thì set cờ F0, nếu ngược lại thì xóa cờ F0.
CTCON: MOV A,32HCLR C
SUBB A,30HJNC NEXT1CLR F0
NEXT1: JZ NEXT2SETB F0
NEXT2: MOV A,31HCLR F0
CJNE A,33H, CHECKCHECK: JC SKIPSETB F0
SKIP: RET RET
Sử dụng lệnh nhảy có điều kiện
2.21 Cho một chuỗi dữ liệu dưới dạng số có dấu trong RAM ngoài, dài 100byte, bắt đầu từ địa chỉ 0100H Viết CT lần lượt xuất các dữ liệu trong
Trang 13chuỗi ra Port 1 nếu là số dương (xem số 0 là dương) và xuất ra Port 2 nếulà số âm.
ORG 0000H
MOV DPTR,#0100HMOV R2,#100
LOOP: MOVX A,@DPTRJNB ACC.7,DUONGMOV P2,A
SJMP NEXTDUONG: MOV P1,ANEXT: INC DPTR
DJNZ R2,LOOPEND
LAP: JNB TF0, LAPCLR TR0
CLR TF0RET
3.2 Viết CT con mang tên DELAY10 có nhiệm vụ tạo trễ 10ms dùng Timer.(Xtal 12MHz).
Trang 14MOV TMOD, #01H
MOV TH0, #HIGH(-10000)MOV TL0, #LOW(-10000)SETB TR0
LAP: JNB TF0, LAPCLR TR0
CLR TF0RET
3.3 Viết CT dùng Timer tạo 2 sóng vuông có cùng f= 1KHz tại P1.6 và P1.7 Biết rằng sóng vuông tại P1.7 chậm pha hơn sóng vuông tại P1.6 100(s (Xtal 12MHz).
ORG 0000H
MOV TMOD, #01HLAP:
MOV TH0, #HIGH(-500)MOV TL0, #LOW(-500)SETB TR0
ACALL DELAY100CPL P1.7
LAP1: JNB TF0, LAP1CLR TR0
CLR TF0CPL P1.6SJMP LAPDELAY100:
MOV R6, #50LOOP1:
DJNZ R6, LOOP1
Trang 153.4 Viết CT dùng Timer điều khiển đèn giao thông tại một giao lộ Cho biết rằng:
ĐènBit điều
Xanh 1P1.025sVàng 1P1.13sĐỏ 1P1.2
Xanh 2P1.333sVàng 2P1.43sĐỏ 2P1.5
Đèn sáng khi bit điều khiển bằng 0.
ORG 0000HMOV TMOD,11HCLR P1.2
CLR P1.5SETB P1.1SETB P1.0SETB P1.4SETB P1.3
MOV TH0, #HIGH(-100)MOV TL0, #LOW(-100)SETB TR0
MOV TH1, #HIGH(-100)MOV TL1, #LOW(-100)SETB TR1
MOV R7,#0MOV R6,#0
Trang 16MOV R5,#0MOV R4,#0MOV R3,#0MOV R2,#0
KTRA1: JNB TF0,KTRA2CLR TR0
CLR TF0
DJNZ R6, LAP2DJNZ R7, LAP1LJMP XANH1
KTRA2: JNB TF1,KTRA1CLR TR1
CLR TF1
DJNZ R4, LAP4DJNZ R5, LAP3LJMP XANH2
XANH1: CPL P1.0
JB P1.0, VANG1DO1:
CPL P1.2MOV R7, #2LAP1:
MOV R6, #250LAP2:
MOV TH0, #HIGH(-50000)MOV TL0, #LOW(-50000)SETB TR0
LJMP KTRA1
Trang 17XANH2: CPL P1.3
JB P1.3,VANG2DO2:
CPL P1.5MOV R5, #3LAP3:
MOV R4, #220LAP4:
MOV TH1, #HIGH(-50000)MOV TL1, #LOW(-50000)SETB TR1
LJMP KTRA2
VANG1:CLR TR0MOV R3, #60LAP5:
MOV TH0, #HIGH(-50000)MOV TL0, #LOW(-50000)SETB TR0
KTRA3: JNB TF0,KTRA3CLR TR0
CLR TF0
DJNZ R3, LAP5LJMP DO1
VANG2:
Trang 18CLR TR0MOV R2, #60LAP6:
MOV TH1, #HIGH(-50000)MOV TL1, #LOW(-50000)SETB TR1
KTRA4: JNB TF1,KTRA4CLR TR1
CLR TF1
DJNZ R2, LAP6LJMP DO2
4 SERIAL PORT
4.1 Viết CT đọc 1 chuỗi data chứa trong RAM nội từ địa chỉ 30H đến 50Hvà xuất ra 1 thiết bị (ví dụ như màn hình tinh thể lỏng LCD) được nối vớiport nối tiếp của 8051 (chế độ UART 8 bit, 2400 baud) Cho Xtal 11,059MHz.
ORG 0000H
MOV TMOD, #00100000BMOV SCON, #01010010BMOV TH1, #-12
SETB TR1MOV R1, #30HLap:
MOV A, @R1JNB TI, $CLR TI
MOV SBUF, AINC R0
CJNE R0, #51H, Lap
Trang 194.2 Viết CT nhận 1 chuỗi data từ 1 thiết bị ngoài (ví dụ như máy đọc mãvạch) nối với 8051 qua port nối tiếp (chế độ UART 8 bit, 4800 baud) và ghidata vào RAM nội từ địa chỉ 40H Biết rằng chuỗi data gồm 20 byte vàXtal 11,059MHz.
ORG 0000H
MOV TMOD, #00100000BMOV SCON, #01010010BMOV TH1, #-6
SETB TR1MOV R0, #40HMOV R1, #20HLap:
JNB RI, $CLR RI
MOV A, SUBFMOV @R0, AINC R0
DJNZ R1, LapEND
4.3 Viết CT lấy 1 chuỗi data chứa trong RAM ngoài bắt đầu từ địa chỉ2000H và xuất ra 1 thiết bị được nối với port nối tiếp của 8051 (chế độUART 8 bit, 1200 baud) Chuỗi kết thúc bởi ký tự EOT (có mã ASCII là04H) và ký tự này cũng được xuất ra (Xtal 11,059 MHz).
ORG 0000H
MOV TMOD, #20HMOV SCON, #52HMOV TH1, #-24SETB TR1
MOV DPTR, #2000HSJMP KTR
MOV A, R0JNB TI,$CLR TI
MOV SBUF, AINC DPTRKTR:
Trang 20MOV R0, @DPTRCJNE R0, #05H, LOOPEND
4.4 Làm lại bài 3.3 nhưng không xuất ký tự EOT.
ORG 0000H
MOV TMOD, #20HMOV SCON, #52HMOV TH1, #-24SETB TR1
MOV DPTR, #2000HSJMP KTR
MOV A, R0JNB TI,$CLR TI
MOV SBUF, AINC DPTRKTR:
MOV R0, @DPTRCJNE R0, #04H, LOOPEND
4.5 Viết CT nhận 1 chuỗi data từ 1 thiết bị ngoài nối với 8051 qua port nốitiếp (chế độ UART 8 bit, 9600 baud) và ghi data vào RAM ngoài bắt đầutừ địa chỉ 4000H Chuỗi data bắt đầu bằng ký tự STX (02H) và kết thúcbằng ký tự ETX (03H) Không ghi 2 ký tự này vào RAM Cho Xtal11,059MHz.
ORG 0000H
MOV DPTR, #4000HMOV SCON, #52H MOV TMOD, #20HMOV TH1, #-3SETB TR1
LOOP: JNB RI, $ CLR RI
MOV A, SBUF
Trang 21CJNE A, #02H, NEXT1 SJMP NEXT3
NEXT1: CJNE A, #03H, NEXT2SJMP EXIT
NEXT2: MOV @DPTR, ANEXT3: INC DPTR
SJMP LOOPEXIT: NOPEND
4.6 Viết CT con mang tên XUAT có nhiệm vụ lấy 1 chuỗi data chứa trongRAM ngoài xuất ra port nối tiếp ở chế độ UART 9 bit Bit thứ 9 là bitparity chẵn Chuỗi data kết thúc bằng ký tự null (00H) CT gọi CT conXUAT sẽ đặt địa chỉ bắt đầu của chuỗi vào DPTR trước khi gọi CT conXUAT Giả sử port nối tiếp đã được khởi động.
XUAT:MOV C,P MOV TB8,C
MOVX A,@DPTR MOV SBUF,A JNB TI,$ CLR TI INC DPTR
CJNE A,#0H,XUAT RET
4.7 Viết CT con mang tên NHAP có nhiệm vụ nhập 1 chuỗi data gồm 30byte từ port nối tiếp ở chế độ UART 9 bit, bit thứ 9 là bit parity lẻ Nếudata nhận được không bị lỗi thì ghi vào 1 vùng nhớ của RAM nội, nếu bịlỗi thì không ghi CT gọi CT con NHAP sẽ đặt địa chỉ đầu của vùng nhớvào thanh ghi R0 trước khi gọi CT con NHAP Giả sử port nối tiếp đãđược khởi động.
5 INTERRUPT
Trang 225.1 Viết CT lấy 1 chuỗi data chứa trong Ram ngoài bắt đầu từ địa chỉ6200H đến địa chỉ 62FFH và xuất ra Port1, mỗi lần xuất cách nhau 50ms.Sử dụng ngắt Timer Xtal 12MHz.
ORG 0000HLJMP STARTORG 000BH
LJMP ISR_TIMER0ORG 0030H
START: MOV TMOD, #02HMOV TH0, #-50000
SETB TR0SETB EASETB ET0SJMP $
MOV DPTR, #6200H MOVX A,@DPTRMOV P1,A
INC DPTRRETIEND
5.2 Viết CT nhập data từ thiết bị ngoài kết nối với 8051 qua Port1, mỗi lầnnhập cách nhau 5s, data nhập về được ghi vào vùng Ram nội bắt đầu từđịa chỉ 50H đến địa chỉ 5FH Biết rằng sau khi ghi vào ô nhớ cuối cùng thìtrở lại ghi vào ô nhớ đầu Sử dụng ngắt Timer Xtal 12MHz.
ORG 0000HLJMP MAINORG 000BHLJMP NGATORG 0030H
Trang 23MOV R1,#4FHMOV TMOD, #01HSETB EA
SETB ET0LAI: SETB TF0SJMP LAI
NGAT:LAP: INC R1MOV A,P1MOV @R1,P1ACALL DELAY5CJNE R1,#5FH,LAPMOV R1,#4FHRETI
DELAY5:MOV R2, #100LAP1:
MOV TH0, #HIGH(-50000)MOV TL0, #LOW(-50000)SETB TR0
KTRA: JNB TF0,KTRACLR TR0
CLR TF0
DJNZ R2, LAP1RET
END
Trang 245.3 Viết CT phát liên tục chuỗi số từ 0 đến 9 ra port nối tiếp theo chế độUART 8 bit, 2400 baud Sử dụng ngắt serial Xtal 12MHz.
ORG 0000HLJMP MAINORG 0023HLJMP NGATORG 0030HMAIN:MOV R1,#0
MOV SCON, #42HMOV TMOD,#20HMOV TH1,#-12MOV TL1,TH1SETB TR1SETB EASETB ESSJMP $
LAP: MOV A, R1MOV SBUF,AINC R1
CLR TI
CJNE A,#0AH, LAPMOV R1, #0
5.4 Viết CT chờ nhận data từ 1 thiết bị ngoài gởi đến 8051 qua port nốitiếp (chế độ UART 8 bit, 19200 baud) Nếu nhận được ký tự STX (02H) thìbật sáng LED, nếu nhận được ký tự ETX (03H) thì tắt LED, biết rằng
Trang 25LED được điều khiển bằng ngõ P1.3 (LED sáng khi bit điều khiển bằng1) Sử dụng ngắt serial Xtal 11,059MHz.
ORG 0000HLJMP MAINORG 0023HLJMP NGATORG 0030HMAIN:
MOV SCON, #52HORL PCON, #80HMOV TMOD,#20HMOV TH1,#-3MOV TL1,TH1SETB TR1SETB EASETB ESSJMP $
JBC TI, THOATJBC RI, THUJMP THOATTHU:
MOV A, SBUFMOV R1,ACLR C
SUBB A,#02HCJNE A,#0H,KTRASETB P1.3
JMP THOAT
Trang 26KTRA: MOV A,R1CLR C
SUBB A,#03H
CJNE A,#0H,THOATCLR P1.3
THOAT: RETIEND
5.5 Viết CT đếm số xung đưa vào chân /INT1 (P3.3) và điều khiển relaythông qua chân P3.0 (relay đóng khi P3.0 bằng 1), cất số đếm vào ô nhớ40H của Ram nội, nếu số đếm chưa đến 100 thì đóng relay, nếu số đếm đạt100 thì ngắt relay.
ORG 0000HLJMP MAINORG 0013HLJMP NGATORG 0030HMAIN:
MOV R7,#101SETB EA
LAP: SETB EX1SETB IT1
SJMP LAP
DJNZ R7, DONGCLR P3.0
SJMP THOATDONG: SETB P3.0THOAT:
MOV 02H,07H
Trang 27MOV A,#100SUBB A,02HMOV 40H, ACLR EX1RETIEND