Microsoft Word vxl bt ch3 Unicode doc BT VXL Ch 3 – trang 1 ĐHBK Tp HCM–BMĐT GVPT Hồ Trung Mỹ Bài tập Vi Xử Lý – Chương 3 Bài tập trong chương này được chia làm 7 phần Tóm tắt phần cứng (3 1+3 2), Tập[.]
ĐHBK Tp HCM–BMĐT GVPT: Hồ Trung Mỹ Bài tập Vi Xử Lý – Chương Bài tập chương chia làm phần: Tóm tắt phần cứng (3.1+3.2), Tập lệnh (3.3+3.4), Timer (3.5), Cổng nối tiếp (3.6), Ngắt (3.7), Assembler (3.8) tổng hợp Phần – Tóm tắt phần cứng 1.1 Kể tên nhà sản xuất khác (ngồi Intel) có chế tạo MCU 8051? 1.2 Ta sử dụng lệnh để đặt LSB byte địa 25H lên 1? 1.3 Hãy viết lệnh dùng để OR bit có địa 00H 01H, kết cất vào bit có địa 02H? 1.4 Sau thực thi lệnh sau bit có giá trị 1? MOV R0, #26H MOV @R0, #7AH 1.5 Hãy tìm lệnh byte có hiệu ứng lệnh byte sau: MOV 0E0H, #55H 1.6 Hãy viết lệnh để cất giá trị 0ABH vào RAM ngồi địa 9A00H 1.7 Có ghi chức đặc biệt định nghĩa 8051, 8052? 1.8 Sau reset hệ thống, giá trị SP 8051 bao nhiêu? 1.9 Ta sử dụng lệnh để khởi tạo trị cho SP 8031 để tạo stack 64 byte đỉnh RAM nội? 1.10 Một chương trình sử dụng ghi R0-R7 mở rộng Hãy minh họa làm cách chương trình chuyển sang sử dụng ghi R bank vào chương trình trả lại bank ghi cũ kết thúc chương trình đó? 1.11 MCU 80C31BH–1 hoạt động với thạch anh 16MHz nối vào ngõ vào XTAL1 XTAL2 Nếu khơng có sử dụng lệnh MOVX, tần số tín hiệu ALE bao nhiêu? 1.12 8051 sử dụng với thạch anh 4MHz, chu kỳ máy bao nhiêu? 1.13 Chu kỳ nhiệm vụ ALE bao nhiêu? Giả sử phần mềm khơng truy cập RAM ngồi (chú ý chu kỳ nhiệm vụ = chu kỳ bổn phận = chu kỳ làm việc = duty cycle = thời gian ON / chu kỳ tín hiệu) 1.14 Ta biết 8051 bị reset chân RST giữ mức cao tối thiểu chu kỳ máy (chú ý với đặc tính DC 8051 mức cao RST tối thiểu 2.5V) a) Nếu 8051 hoạt động với thạch anh 8MHz, khoảng thời gian tối thiểu giữ cho RST mức cao để reset hệ thống bao nhiêu? b) Hình 2-15a cho thấy mạch RC dùng để reset tay Trong ấn nút reset RST=5V hệ thống giữ trạng thái reset Như sau nút reset nhả 8051 giữ trạng thái reset bao lâu? 1.15 Chân cổng P1.7 (chân 8) lái tải Schottky cơng suất thấp (LS)? 1.16 Liệt kê tín hiệu điều khiển bus 8051 để chọn EPROM RAM 1.17 Địa bit MSB byte địa 25H vùng liệu nội 8051 bao nhiêu? 1.18 Hãy liệt kê lệnh dùng để đặt LSB ghi tích lũy lên mà khơng ảnh hưởng bit khác? 1.19 Giả sử lệnh sau vừa thực thi: MOV A, #55H Giá trị bit P PSW bao nhiêu? 1.20 Hãy viết lệnh dùng để chép nội dung R7 vào ô nhớ 100H RAM 1.21 Giả sử ta dùng bank 0, ghi giá trị RAM nội 8051 sau thực thi đoạn mã sau: MOV R4, #32H MOV R0, #12H MOV R7, #3FH MOV R5, #55H 1.22 Sau cấp điện cho VXL, cho biết cách chọn bank lệnh 1.23 Giả sử lệnh thứ thực thi sau reset hệ thống gọi chương trình Nội dung PC cất địa RAM nội trước rẽ nhánh chương trình? 1.24 Sự khác biệt chế độ nghỉ (idle) chế độ tắt nguồn? 1.25 Lệnh dùng để đưa 8051 vào chế độ tắt nguồn? 1.26 Tất ghi R0–R7 rộng bit? Phần lớn ghi 8051 rộng bit? Kể tên ghi 16 bit 8051 1.27 Bit P PSW sau thực thi lệnh sau: BT-VXL-Ch – trang a) CLR C b) MOV A, #0CH c) MOV A, #0ABH 1.28 Những địa bit sau có giá trị sau thực thi (các) lệnh: a) MOV 26H, #26H b) SETB P1.1 c) MOV P3, #0CH d) MOV A, #13H e) MOV 30H, #55H f) MOV R0, #26H XRL 30H, #0AAH MOV @R0, #7AH 1.29 Sau thực thi lệnh bank ghi chọn? a) MOV PSW, #0C8H b) MOV PSW, #50H c) MOV PSW, #10H 1.30 Hãy minh họa làm cách giao tiếp RAM tĩnh (mỗi RAM 32KB) với 8051 để chúng chiếm tồn vùng liệu ngồi 64K 1.31 Với hình 3.15 sách, giả sử RAM ngồi có dung lượng 211x8, chân P2.0, P2.1, P2.2 nối vào chân A8, A9, A10 tương ứng RAM Hãy cho biết: a) với cách nối RAM chia làm trang? b) muốn truy cập đến byte thứ (thứ tự kể từ 0) trang làm cách nào? c) địa thật byte bao nhiêu? d) viết đoạn chương trình để gán trị 56H vào địa 548H 1.32 Với hệ thống dùng 8051, thiết kế mạch giải mã địa cho trường hợp sau: (giả sử tín hiệu chọn chip tích cực thấp [/CS]) Trường hợp Trường hợp Tầm địa Thiết bị Địa bắt đầu Kích thước Thiết bị 0000H–3FFFH RAM 0000H 8Kx8 ROM 8000H–9FFFH ROM 4000H 16 K x RAM E000H–FFFFH I/O (8255 PIA) 8000H 16 K x RAM FF00H 256 x I/O (8255 PIA) Phần – Tập lệnh 2.1 Hãy cho biết cách định địa lệnh sau a) MOV R1, A c) MOV A, #12H e) MOV R6, #28H g) MOVX A, @DPTR i) LJMP 0548H b) MOV A, @R1 d) MOV A, 12H f) SJMP LOOP h) ACALL SUB1 j) PUSH B 2.2 Mã máy dạng hex lệnh sau gì? INC DPTR 2.3 Mã máy dạng hex lệnh sau gì? DEC R6 2.4 Lệnh biểu diễn mã máy 5DH? 2.5 Lệnh biểu diễn mã máy FFH? 2.6 Liệt kê tất lệnh byte 8051 có mã máy tận 5H 2.7 Hãy minh họa cách ta chuyển nội dung địa nội 50H vào ghi tích lũy A với định địa gián tiếp? 2.8 Mã lệnh không định nghĩa 8051? 2.9 Để nạp vào R4 giá 65H có cần dấu “#” lệnh: MOV R4, #65H không? 2.10 Ta xét lệnh sau: MOV 50H, #0FFH a) Mã lệnh lệnh bao nhiêu? b) Lệnh dài byte? c) Giải thích byte lệnh d) MCU phải cần chu kỳ máy để thực lệnh này? e) Nếu 8051 hoạt động với thạch anh 16 MHz, MCU phải thực thi xong lệnh này? 2.11 Offset tương đối lệnh sau bao nhiêu? SJMP AHEAD lệnh ô nhớ 0400H 0401H, nhãn AHEAD biểu diễn lệnh địa 041FH 2.12 Offset tương đối lệnh sau bao nhiêu? SJMP BACK lệnh ô nhớ A050H A051H, nhãn BACK biểu diễn lệnh địa 9FE0H 2.13 Giả sử lệnh AJMP AHEAD nhớ chương trình địa 2FF0H 2FF1H, nhãn AHEAD tương ứng với lệnh địa 2F96H Những byte mã máy (dạng số hex) lệnh gì? BT-VXL-Ch – trang 2.14 Tại chỗ chương trình, ta muốn chương trình rẽ nhánh đến nhãn EXIT ghi A mã ASCII “carriage return” Thì ta phải sử dụng (những) lệnh gì? 2.15 Lệnh SJMP BACK nhớ chương trình địa 0100H 0101H, nhãn BACK tương ứng với lệnh địa 00AEH Những byte mã máy (dạng số hex) lệnh gì? 2.16 Lệnh sau thực ? SETB 0D7H Có cách tốt thực tác vụ này? Tại sao? 2.17 Sự khác biệt lệnh sau gì? INC A INC ACC 2.18 Hãy viết byte mã máy cho lệnh sau LJMP ONWARD nhãn ONWARD biểu diễn lệnh địa 0A0F6H 2.19 Giả sử ghi tích lũy A chứa 5AH Nội dung ghi A sau thực thi lệnh: XRL A, #0FFH 2.20 Giả sử PSW chứa 0C0H ghi A chứa 50H trước thực thi lệnh RLC A Nội dung ghi A sau thực thi lệnh bao nhiêu? 2.21 Hãy viết (các) lệnh tương đương để thực hiện: a) Xóa nội dung ghi A b) Lấy bù giá trị ghi A cất lại vào A 2.22 Hãy viết lệnh thực hiện: a) Chia ngun nợi dung A cho 16 (giả sử A < 256) b) Nhân nguyên nội dung A cho (giả sử A khối nhớ; ô nhớ 40H chứa số byte có trị 0, ô nhớ 41H chứa số byte có trị < 0, nhớ 42H chứa số byte có trị > Ô nhớ 43H chứa địa đầu khối nhớ, ô nhớ 44H chứa số byte khối (chiều dài khối) Thí dụ: (43H)=45H, (44H)=06, (45H)=68H, (46H)=F2H, (47H)=87H, (48H)=00H, (49H)=59H, (50H)=2AH sau chạy đoạn chương trình (41H)=1, (42H)=2, (43H)=3 2.66 Tính bù số 16 bit có địa đầu R6 (byte cao địa thấp) kết cất vào nhớ với địa đầu R7 Thí dụ: (R6)=40H, (R7)=42H, (40H)=45H, (41H)=2AH kết (42H)=BAH, (43H)=D6H Hãy trình bày giải pháp có 2.67 Viết chương trình tìm phần tử nhỏ khối liệu Chiều dài khối liệu ô nhớ 41H địa bắt đầu khối ô nhớ 42H Chứa phần tử nhỏ nhớ 40H, giả sử khối liệu chứa số nhị phân khơng dấu Làm lại với tìm phần tử lớn 2.68 Viết chương trình SORT thứ số khối liệu Chiều dài khối liệu ô nhớ 41H địa bắt đầu khối ô nhớ 42H Kết lưu vào vùng nhớ khối liệu ban đầu (HD: dùng phương pháp bubble sort, xem sách cấu trúc liệu giải thuật) 2.69 Viết chương trình nhân số nguyên bit có dấu, dùng bù để biểu diễn cho số âm Kết số nguyên 16 bit có dấu để ghi R6 (byte cao) R7 (byte thấp) BT-VXL-Ch – trang 2.70 Viết chương trình trừ số ngun 16 bit có dấu X (được cất R6 R7, byte cao R6) với số nguyên 16 bit có dấu Y (được cất R4 R5, byte cao R4), dùng biểu diễn bù cho số âm 2.71 Viết chương trình SOSANH nhận tham số bit so sánh chúng với Kết đặt ghi ACC Nếu gọi tham số X Y kết cất ghi ACC là: -1 X < Y; X = Y; X > Y 2.72 Viết chương trình tính tổng số bit byte cho trước ghi A Làm lại với tính tổng số bit Hãy viết chương trình cho kết tổng số bit tổng số bit ghi A 2.73 Viết chương trình tính trung bình cộng dãy trị số byte khơng dấu với số đầu có địa R6, chiều dài dãy số R7 Kết cất vào R5 2.74 Hãy mô tả stack, SP nội dung ghi bị ảnh hưởng đoạn chương trìnhsau Giả sử ban đầu (SP)=07H MOV R2, #55H MOV R5, #0CCH MOV R1, #0ADH PUSH PUSH PUSH POP POP POP 2.75 Viết chương trình xóa ACC cộng 5H vào ACC 10 lần cách dùng vòng lặp 2.76 Có 2KB RAM liệu gắn vào 8051 (bắt đầu địa 8000H) Viết chương trình (bắt đầu từ 2030H): a) Điền toàn RAM 2K với trị 55H; b) kiểm tra lại giá trị ô nhớ có 55H khơng? Nếu có sai cho P1.1=1 cho biết ô nhớ bị sai (cất vào R7) 2.77 Viết chương trình ATOH đổi byte ASCII sang số hex tương ứng (0–9 A–F; tương ứng ASCII 30H–39H 41H–46H) Nếu byte ASCII khơng thuộc 30H–39H hay 41H–46H đặt cờ C lên Aùp dụng chương trình ATOH để đổi byte ASCII liên tiếp RAM nội 8051 (thí dụ byte cao 40H byte thấp 41H) thành mã hex byte ô nhớ RAM nội 8051 (thí dụ 42H) Thí dụ: (40H)=36H (41H)=42H kết (42H)=6BH 2.78 Viết chương trình cài đặt logic cho hàm sau theo cách: lệnh xử lý logic với biến Boole, lệnh rẽ nhánh theo điều kiện với bit Giả sử biến X, Y, Z, V, W F tương ứng với chân P0.0 đến P0.5 a) F = (X(Y+Z)) Z (V+W) b) F = (XYZ)’ + Z + V + W c) F = X’Y+ Y’Z+ Z’V’W d) F = (X’+Y’)(Z+V)(X+W’) e) F = ((XY + X’Z )’⊕ V)’ 2.79 Viết chương trình copy 16 byte nhớ mã (1000H–100FH) đến RAM nội từ 30H–3FH 2.80 Viết chương trình copy 16 byte nhớ liệu (1000H–100FH) đến RAM nội từ 30H–3FH 2.81 Viết chương trình đổi số BCD ký số thành mã (LED) đoạn Số BCD đọc từ cổng P0 kết xuất P1 P2 (P1 ứng với ký số hàng chục, P2 ứng hàng đơn vị) Dạng kết nối phần cứng cho P1 P2 tương tự hình E.2.81 BT-VXL-Ch – trang 10 Hình E.2.81 BT-VXL-Ch – trang 11 Phần – Timer Trong phần Timer này, ta giả sử 8051 sử dụng với thạch anh 12MHz tập không cho biết tần số thạch anh 3.1 Viết chương trình 8051 tạo sóng vng P1.5 có tần số 100KHz (Hướng dẫn: Khơng sử dụng timer) 3.2 Hiệu ứng lệnh sau ? a) SETB 8EH b) MOV TMOD, #11010101B 3.3 Hãy cho biết cần nạp trị cho TMOD để a) Timer chạy chế độ 2, Timer chạy chế độ b) Timer chạy chế độ 0, Timer chạy chế độ 3.4 Có cách để dừng Timer chạy? 3.5 Xét chương trình lệnh thí dụ tạo dạng xung (thí dụ đầu phần 3.5.8) Tần số chu kỳ nhiệm vụ dạng sóng tạo chân P1.0 8051 hoạt động với thạch anh 16MHz? 3.6 Hãy tính thời gian trì hỗn chương trình DELAY sau với tần số thạch anh là: a) 12 MHz b) 11.0592 MHz DELAY: MOV R3,#250 ; MC (1 chu kỳ máy) HERE: NOP ; MC NOP ; MC NOP ; MC NOP ; MC DJNZ R3,HERE ; MC RET ; MC 3.7 Viết lại giải thí dụ giao tiếp buzzer (thí dụ cuối phần 3.5.8) để bao gồm chế độ “restart” (bắt đầu lại) Nếu chuyển tiếp sang xảy buzzer phát tiếng kêu, bắt đầu lại vịng định để tiếp tục cho buzzer kêu giây kế, xem minh họa hình E.3.7 Hình E.3.7 3.8 Viết chương trình 8051 tạo sóng vng P1.2 có tần số 12KHz theo cách: a) dùng Timer 0; b) không dùng timer 3.9 Viết chương trình 8051 dùng timer để tăng nội dung ô nhớ TIME (trong RAM nội) thêm sau 20 ms 3.10 Viết chương trình MOTGIAY theo cách: a) dùng Timer 0; b) không dùng timer Aùp dụng chương trình để tạo dạng sóng vng tuần hồn có chu kỳ 10 s, 20 s 30 s tương ứng với chân P1.0, P1.1 P1.2 3.11 Viết chương trình 8051 dùng timer: a) để tạo xung vng 500Hz có chu kỳ nhiệm vụ 70% chân P1.0 b) Tương tự a) chu kỳ nhiệm vụ 40% xung tồn 10s 3.12 Thiết kế ứng dụng “cửa xoay” (turnstile) dùng Timer để phát lúc có người thứ 10 000 vào khu vực hội chợ Giả sử (a) cảm biến cửa xoay nối vào T1 tạo xung có người vào làm xoay cửa, (b) đèn nối vào chân P1.7 (chú ý thực tế có thêm mạch giao tiếp từ P1.7 với đèn) sáng P1.7=1 tắt P1.7=0 Như 8051 đếm số “sự kiện” T1 làm sáng đèn P1.7 người thứ 10 000 vào khu vực hội chợ (xem hình E.3.12) BT-VXL-Ch – trang 12 Hình E.3.12 3.13 Chuẩn điều hưởng (hay cịn gọi cộng hưởng) quốc tế cho thiết bị âm nhạc “A D trung” (La Đô trung) tần số 440 Hz Viết chương trình 8051 để tạo tần số điều hưởng phát tone 440 Hz loa nối P1.1 (xem hình E.3.13) Do việc làm tròn giá trị đặt TL1/TH1, có sai số nhỏ tần số Tần số xác phần trăm sai số bao nhiêu? Muốn có xác 440 Hz với chương trình bạn viết giá trị thạch anh bao nhiêu? Hình E.3.13 3.14 Viết chương trình 8051 để tạo tin hiệu 500 Hz P1.0 dùng timer Dạng sóng có chu kỳ nhiệm vụ 30% 3.15 Mạch hình E.3.15 cung cấp tín hiệu xác 60 Hz (với điều kiện áp AC có tần số ổn định) vào T0 cách lấy từ thứ cấp biến áp Khởi động Timer cho lấy xung nhịp từ T0 tràn lần/giây Ở lần tràn, cập nhật giá trị thời gian ngày chứa nhớ nội 8051 vị trí 50H (giờ), 51H (phút), 52H (giây) Hình E.3.15 Phần – Cổng nối tiếp (Serial Port) 4.1 Hãy tìm giá trị TH1 (dạng thập phân hex) để đặt tốc độ baud cho trường hợp sau SMOD=1: a) 9600 baud; b) 4800 baud Giả sử XTAL=11.0592 MHz 4.2 Tìm tốc độ baud TH1=–2, SMOD = XTAL =11.0592MHz 4.3 Giả sử cổng nối tiếp 8051 nối vào cổng COM máy vi tính, PC ta sử dụng chương trình terminal.exe để gửi nhận liệu nối tiếp P1 P2 8051 nối vào LED cơng tắc tương ứng Viết chương trình 8051 để: a) gửi đến máy vi tính thơng điệp “We Are Ready!”; b) nhận liệu gửi từ máy vi tính xuất LED gắn P1; c) lấy BT-VXL-Ch – trang 13 liệu công tắc nối vào P2 gửi nối tiếp liệu đến máy vi tính Chương trình thực a) lần, phần b) c) liên tục Sử dụng tốc độ baud 4800 4.4 Giả sử XTAL=11.0592 MHz với chương trình sau, cho biết: a) chương trình làm gì, b) tính tần số sử dụng timer1 để đặ tốc độ baud, c) tìm tốc độ baud việc chuyển liệu MOV A, PCON SETB ACC.7 MOV PCON, A MOV TMOD, #20H MOV TH1, -3 MOV SCON, #50H SETB TR1 MOV A, # “B” LOOP: CLR TI MOV SBUF, A JNB TI, $ SJMP LOOP 4.5 Sử dụng cổng nối tiếp làm cổng hiển thị: Cho mạch hình E.4.5 Hình E.4.5 Mạch nối bên với cổng nối tiếp 8051 Với lệnh: MOV SBUF, A Dữ liệu nhị phân từ ACC truyền bên bit thấp qua chân RXD cổng nối tiếp sau thực thi lệnh Khi kết thúc truyền bit SCON.1 tự động đặt lên IC 74LS164 hình ghi dịch bit vào nối tiếp song song (SIPO) Dữ liệu nhị phân bit vào nối tiếp xuất song song Các IC 74LS164 mắc để giá trị ban đầu hiển thị dịch từ phải sang trái có thêm giá trị LED đoạn loại anode chung, đưa mức thấp vào làm sáng đoạn (thí dụ: đoạn a sáng Q1 74LS164 0) Theo nguyên tắc ta cho ký tự hiển thị ngõ tương ứng 74LS164 mức thấp Thí dụ để ký tự “2” cần làm sáng đoạn a, b, g, e d, ngõ tương ứng Q7, Q6, Q3, Q1 Q0 phải đặt mức thấp ngõ Q5, Q4 Q2 giữ mức cao Do ta cần gửi byte 34H đệm liệu nối tiếp Dữ liệu 34H gọi mã ký tự ký tự “2” Bảng mã ký tự cho ký tự từ “0” đến “F” sau: Ký tự D7 D6 D5 D4 D3 D2 D1 D0 BT-VXL-Ch – trang 14 Mã ký tự A B C D E F b 0 0 1 0 0 1 1 g 1 0 0 0 0 0 c dp e 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 1 f 1 0 0 0 0 a 0 0 0 0 1 0 d 0 0 1 0 0 50H 5FH 34H 1CH 1BH 98H 90H 5DH 10H 19H 11H 92H F0H 16H B0H B1H Chú ý: o để làm cho tất đoạn sáng ta ấn nút SW o để làm cho tất đoạn tắt ta dùng lệnh MOV SBUF, #FF Hãy viết lệnh để: a) Hiển thị ký tự “0”, “1”, “2”, “3”, “4” từ phải sang trái Có nhận xét kết hiển thị? b) Hiển thị ký tự “A” bảng hiển thị? Các vấn đề sau (4.6 đến 4.14) chương trình tiêu biểu để giao tiếp với thiết bị đầu cuối (terminal) thiết bị nối tiếp khác với máy vi tính Giả sử cổng nối tiếp khởi động mode UART bit tốc độ baud cung cấp Timer 4.6 Viết chương trình OUTSTR gửi chuỗi ký tự ASCII kết thúc ký tự NULL đến thiết bị nối tiếp nối với cổng nối tiếp 8051 Giả sữ chuỗi mã ASCII nhớ mã bên ngồi chương trình gọi đặt địa chuỗi DPTR trước gọi OUTSTR Chuỗi ký tự kết thúc NULL chuỗi byte ASCII kết thúc với byte 00H 4.7 Viết chương trình INLINE nhập dòng mã ASCII từ thiết bị nối với cổng nối toếp 8051 đặt vào nhớ liệu nội bắt đầu 50H Giả sử dòng kết thúc CR (carriage return) Đặt mã CR vào đệm dòng với mã khác kết thúc đệm byte NULL (00H) 4.8 Viết chương trình gửi liên tục mẫu tự từ a tới z đến thiết bị gắn vào cổng nối tiếp, dùng chương trình OUTCHR (có sẵn ) 4.9 Giả sử cho trước chương trình OUTCHR, viết chương trình gửi liên tục ASCII hiển thị (các mã từ 20H đến 7EH) đến thiết bị gắn vào cổng nối tiếp 8051 4.10 Sửa đổi lại lời giải tập để treo cho xuất tiếp lại hình dùng mã XOFF XON nhận từ bàn phím Tất mã khác bị bỏ qua (chú ý: XOFF = CONTROL-S = 13H XON=CONTROL-Q=11H) 4.11 Giả sử cho trước chương trình INCHAR OUTCHR, viết chương trình nhập ký tự từ bàn phím và hiển thị chúng lại hình, đổi ký tự chữ in thường sang chữ in hoa 4.12 Giả sử cho trước chương trình INCHAR OUTCHR, viết chương trình nhập ký tự từ thiết bị gắn cổng nối tiếp 8051 hiển thị chúng lại với dấu chấm (“.”) thay cho ký tự điều khiển (có mã ASCII 00H đến 1FH, 7FH) 4.13 Giả sử cho trước chương trình OUTCHR, viết chương trình xóa hình VDT gắn cổng nối tiếp 8051 gửi tên bạn đến VDT 10 lần 10 dòng Chức BT-VXL-Ch – trang 15 xóa VDT thực cách truyền CONTROL-Z với nhiều terminal chuỗi ký tự [2J terminal có hỗ trợ ANSI (American National Standards Institute) Sử dụng phương pháp giải 4.14 Hình 3.32 sách minh họa kỹ thuật mở rộng khả xuất 8051 Giả sử với cấu vậy, viết chương trình khởi động cổng nối tiếp với chế độ ghi dịch ánh xạ nội dung ô nhớ nội 20H ngõ phụ, giây thực 10 lần Phần – Ngắt (Interrupt) 5.1 Cho biết nhiệm vụ bit SMOD 8051? Hãy nêu bước để thiết lập Timer dùng ngắt để trì hỗn (làm trễ) khoảng thời gian định? 5.2 Hãy viết lệnh để: a) cho phép ngắt nối tiếp, ngắt timer ngắt phần cứng bên 1; b) cấm ngắt timer 0; c) cấm tất ngắt lệnh 5.3 Sau thực thi đoạn chương trình sau: MOV IE, #99H MOV IP, #10H a) Các ngắt cho phép? b) Ngắt có ưu tiên cao nhất? 5.4 Thứ tự phục vụ ngắt nhứ tất ngắt cho phép xảy đồng thời? 5.5 Trong hệ dùng 8051 cho phép ngắt /INT0, /INT1 Timer cấm tất ngắt khác Nếu ngắt /INT1 tích cực tạo sóng vuông 500 Hz chân P1.0 (dùng ngắt Timer 1) Sóng vng chấm dứt /INT0 tích cực Viết đoạn chương trình khởi tạo trị cho ngắt đợi ngắt chương trình chương trình ISR 5.6 Viết chương trình lấy liên tục liệu bit từ P0 gửi đến P1 đồng thời tạo sóng vng có chu kỳ 200 µs chân P2.1 (sử dụng Timer để tạo sóng vng) 5.7 Giả sử chân /INT1 nối vào cơng tắc bình thường mức cao, chân xuống mức thấp làm sáng đèn LED Đèn LED nối vào chân P1.3 bình thường tắt, có mức thấp /INT1 sáng /INT1 mức thấp 5.8 Giả sử chân /INT1 nối vào tạo xung, viết chương trình nhận biết có cạnh xuống xung đặt bit P1.3 lên làm cho đèn LED gắn P1.3 sáng (vẽ mạch cứng) Nghĩa LED sáng (ON) tắt (OFF) với tốc độ xung đưa vào chân /INT1 5.9 Viết chương trình 8051 lấy liệu từ P1 gửi đến P2 liên tục, liệu đến từ cổng nối tiếp gửi đến P0 Giả sử tốc độ baud 9600 5.10 Tạo sóng vng kHz chân P1.7 dùng ngắt 5.11 Tạo xung vuông kHz với chu kỳ nhiệm vụ 30% chân P1.6 dùng ngắt 5.12 a) Viết chương trình phục vụ ngắt cho timer để tạo xung vng 500Hz có chu kỳ nhiệm vụ 70% chân P1.0 b) Tương tự a) chu kỳ nhiệm vụ 40% xung tồn 10s 5.13 Hãy ghép chương trình “tạo sóng vng ngắt timer” (trang 218) với chương trình “Xuất ký tự ngắt” (trang 221) thành chương trình 5.14 Hãy viết lại chương trình “Xuất ký tự ngắt” (trang 221) cho gửi ký tự/1 giây (hướng dẫn: sử dụng timer xuất ký tự ISR timer) Phần – Assembler 6.1 Hãy viết lại lệnh sau với dạng liệu tức thời nhị phân: a) MOV A, #255 c) MOV A, #1AH b) MOV A, #11Q d) MOV A, #’A’ 6.2 Có sai lệnh sau: ORL 80H, #F0H 6.3 Hãy tìm ký hiệu bị đặt tên sai: ?byte.bit @GOOD_bye 1ST_FLAG MY_PROGRAM 6.4 Hãy viết lệnh tương đương lệnh sau với liệu tức thời trị số hex: a) MOV DPTR, # ‘0’ EQ 48 c) MOV DPTR, #HIGH ‘AB’ b) MOV DPTR, # –1 d) MOV DPTR, #NOT (275 MOD 256) BT-VXL-Ch – trang 16 6.5 Sự khác biệt DB DW? 6.6 Hãy ghi giá trị ô nhớ đoạn sau: ORG 0FH DW SHL DB 65535 DW ‘0’ 6.7 Viết định nghĩa macro dùng để điền số liệu vào 1khối nhớ liệu Truyền địa bắt đầu, chiều dài, số liệu cho tham số macro 6.8 Viết định nghĩa cho macro sau: JGE – nhảy đến LABEL ghi tích lũy có trị >= VALUE JLT – nhảy đến LABEL ghi tích lũy có trị < VALUE JLE – nhảy đến LABEL ghi tích lũy có trị