1. Trang chủ
  2. » Tất cả

142-VXL-Thi-Đáp án

6 3 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 478,33 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hoàn tất các lệnh hợp ngữ có nhiệm vụ sau.. Cho lệnh gọi chương trình con AJMP LAP chứa trong bộ nhớ chương trình bắt đầu từ địa chỉ B7FFH... Viết chương trình hợp ngữ hoặc C không dùng

Trang 1

ĐÁP ÁN ĐỀ THI VI XỬ LÝ HK 2 (2014-2015)

Ngày thi: 12/06/2015 Thời gian làm bài: 110 phút

Đề thi có 6 trang + 2 trang phụ lục

Sinh viên làm bài trên đề và KHÔNG được sử dụng tài liệu

HỌ TÊN: ……… MSSV: ……… ……

CÁC CÂU HỎI ÁP DỤNG TRÊN VI ĐIỀU KHIỂN 8051

Câu 1: (2 điểm) Cho mạch giải mã địa chỉ bộ nhớ sử dụng IC 74138 như hình vẽ

a Xác định địa chỉ của các ngõ ra decoder và tín hiệu chọn chip CS0 cho bộ nhớ ROM: (1đ)

Địa chỉ của CS0: 9800H - A7FFH

b Vẽ thêm trên mạch 2 tín hiệu chọn chip CS1 và CS2 với yêu cầu:

- CS1: chọn chip RAM có dung lượng 8KB bắt đầu từ địa chỉ đầu của Y0

- CS2: chọn I/O có 256 địa chỉ và có địa chỉ tiếp theo CS1

Xác định địa chỉ của 2 tín hiệu chọn chip đó (giải thích) (1đ)

Mạch giải mã 74138 phân vùng 2KB

CS1 là vùng 8KB nên ghép 4 vùng: Y0, Y1, Y2, Y3 (hình vẽ): 8000H – 9FFFH

CS2 là vùng 256B, lấy vùng tiếp theo là Y4 với A 10 = A 9 = A 8 = 0: A000H – A0FFH (hình vẽ)

A 15 A 14 A 13 A 12 A 11 A 10 A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 Vuøng ñòa chæ (HEX)

1 0 0 0 0 X X X X X X X X X X X /Y0: 8000H – 87FFH

1 0 0 0 1 X X X X X X X X X X X /Y1: 8800H – 8FFFH

1 0 0 1 0 X X X X X X X X X X X /Y2: 9000H – 97FFH

1 0 0 1 1 X X X X X X X X X X X /Y3: 9800H – 9FFFH

1 0 1 0 0 X X X X X X X X X X X /Y4: A000H – A7FFH

1 0 1 0 1 X X X X X X X X X X X /Y5: A800H – AFFFH

1 0 1 1 0 X X X X X X X X X X X /Y6: B000H – B7FFH

1 0 1 1 1 X X X X X X X X X X X /Y7: B800H – BFFFH

Duyệt của BM Điện tử GV ra đề: NGUYỄN TRỌNG LUẬT

C

A (LSB) Y0

Y1 Y2 Y3 Y4 Y5 Y6 Y7 G2B

G2A G1

B

A15 A14

A13 A12 A11

G2B

0

CS0

CS1

CS2

A10 A9 A8

Trang 2

Câu 2: (2 điểm)

a Viết các lệnh hợp ngữ để chọn bank thanh ghi 2 và cất nội dung thanh ghi A và R6 vào vùng

stack:

SETB RS1 (PSW.4) PUSH ACC

CLR RS0 (PSW.3) PUSH 16H (R6 của Bank 2)

b Hoàn tất các lệnh hợp ngữ có nhiệm vụ sau Thanh ghi A có giá trị nhị phân là gì sau khi thực

hiện? *Làm cho cờ OV=1: *Làm cho cờ P=1:

MOV A, # 01001100B MOV A, # 01110001B ADD A, # 01000000B ANL A, # 11111110B

Thanh ghi A: A = 10001100B A = 01110000B (0.5đ)

(số dương cộng số dương thành số âm) (xóa hoặc thêm 1 bit 1)

c Cho lệnh gọi chương trình con AJMP LAP chứa trong bộ nhớ chương trình bắt đầu từ địa chỉ

B7FFH Xác định địa chỉ trang và phạm vi địa chỉ hợp lệ của nhãn LAP (Giải thích)

PC lệnh kế = B7FFH + 2 (lệnh 2 byte) = B801H = 1011 1000 0000 0001 B

Địa chỉ trang là 5 bit cao của PC: 10111 : trang 23 (0.5đ)

Phạm vi hợp lệ là trang 2KB này: 1011 1XXX XXXX XXXX : B800H BFFFH

d Lệnh JZ XOA có mã máy là 60H và 9EH và chứa trong bộ nhớ chương trình từ địa chỉ 6D20H Xác định địa chỉ của nhãn XOA (Giải thích)

PC lệnh kế = 6D20H + 2 (lệnh 2 byte) = 6D22H

Lệnh nhảy có độ dời 9EH (số âm)

Câu 3: (1 điểm) Viết đoạn chương trình hợp ngữ theo lưu đồ sau:

lap

N

R7 = 0

Quay trái A

Tăng R7 lên 1

MSB(A) = 1 Y

thoat

MOV R7, #0 ; 1MC LAP: JB ACC.7, THOAT ; 2MC

(0.5đ)

Trang 3

Với A = 26, hãy tính số chu kỳ máy (MC) để đoạn chương trình trên nhảy đến nhãn thoat

A = 26 = 0001 1010 B, chương trình quay trái thanh ghi A cho đến khi MSB(A) = 1 thì nhảy đến nhãn THOAT Như vậy, vòng lặp thực hiện 3 lần và lần thứ 4 chỉ thực hiện lệnh JB rồi nhảy Vậy số chu kỳ máy: 1 + 3 (2 + 1 + 1 + 2) + 2 = 21MC (0.5đ)

Câu 4: (1 điểm)

Viết chương trình hợp ngữ tìm giá trị y (kết quả cất vào thanh ghi B) bằng 2 cách: có dùng lệnh MUL và không dùng MUL (dùng bảng tham chiếu) Giá trị y cần tính là y = x 2

-2x + 3, với giá trị x chứa trong thanh ghi A có giá trị từ 0 đến 9

*Dùng lệnh MUL: (0.5đ) * Dùng bảng tham chiếu: (0.5đ)

MOV R7, A y(0) = 3, y(1) = 2, y(2) = 3, y(3) = 6

MOV R6, A ; R6 = 2x y(7) = 38, y(8) = 51, y(9) = 66

MOV A, R7

ADD A, #3 ; A = x 2 + 3 MOV B, A

SUBB A, R6 ; A = x 2 - 2x + 3 BANG: DB 3, 2, 3, 6, 11

Câu 5: (1 điểm)

Mạch 8051 có 2 công tắc SW ở P1.1 và P1.0 Viết chương trình hợp ngữ hoặc C (không dùng ngắt) kiểm tra các SW cứ sau mỗi 1 phút để làm thay đổi các ngõ ra của Port 2 theo quy luật như bảng sau (cho sẵn chương trình con tạo trễ 1 giây DELAY_1s)

0 0 Quay phải 1 bit

0 1 Quay trái 1 bit

1 0 Lấy đảo các bit

1 1 Hoán đổi 4 bit cao và 4 bit thấp

Trang 4

1 phút = 60 giây (1đ)

MOV A, P2

CJNE R6, #0, SS_1 Cách khác: kiểm tra từng bit P1.1 và P1.0

Câu 6: (1 điểm)

Viết chương trình hợp ngữ hoặc C mô phỏng hoạt động chế độ thanh ghi dịch (phát dữ liệu)

của Port nối tiếp Với chân P1.7 là ngõ ra Data, và chân P1.6 là xung Clock Chương trình có nhiệm vụ lấy nội dung ô nhớ RAM nội có địa chỉ 20H phát nối tiếp ra ngõ Data, với tốc độ baud là

1000bps và tần số thạch anh XTAL = 6MHz

Để mô phỏng chế độ thanh ghi dịch (phát), thực hiện vòng lặp 8 lần gồm các bước:

- Cho từng bit (trọng số thấp trước) phát ra ngõ Data (P1.7)

- Tạo xung cạnh lên cho ngõ ra clock (P1.6)

- Tạo trễ với thời gian = 1/ fbaud = 1/1000bps = 1ms = 1000us = 2 250 2us

MOV P1.7, C ; rồi xuất data SJMP $

CLR P1.6 ; tạo xung clock (thay lệnh RRC A bằng MOV C, ACC.0

SETB P1.6 ; cạnh lên RR A )

Data

Clock

1 Tốc độ baud

Trang 5

Câu 7: (1,5 điểm)

a Viết chương trình con SOSANH, có nhiệm vụ so sánh 2 số nhị phân (mỗi số 16 bit) Số thứ nhất

là nội dung của cặp thanh ghi R7_R6 và số thứ 2 là nội dung của cặp thanh ghi R5_R4 Chương trình tìm giá trị lớn nhất của 2 số trên và cất vào cặp thanh ghi R3_R2; nếu 2 số bằng nhau thì xóa cặp thanh ghi R3_R2 (Các thanh ghi R7, R5, R3 là byte cao của các số 16 bit) (0,75 điểm)

CJNE A, 04H, KHAC MOV R3, #0

MOV R2, #0 SJMP KTHUC

MOV R3, 07H MOV R2, 06H SJMP KTHUC

b Cho port nối tiếp hoạt động ở chế độ UART 8 bit, tốc độ baud 19200, tần số thạch anh 11.059MHz Viết chương trình hợp ngữ nhận từ port nối tiếp 2 byte liên tiếp là số nhị phân 16 bit (byte đầu là 8 bit thấp) Sử dụng chương trình con SOSANH để so sánh số vừa nhận được với số nhị phân 16 bit nhập từ Port 1 và Port 0 (Port 1 là 8 bit cao) Kết quả được phát trở lại ra port nối

tiếp (byte trọng số thấp phát trước) (0,75 điểm)

JNB RI, $

CLR RI

MOV R7, SBUF ; byte cao

Trang 6

Câu 8: (1,5 điểm)

Viết chương trình hợp ngữ sử dụng ngắt timer để tạo sóng vuông ở ngõ ra P1.0 có tần số thay đổi luân phiên là 200Hz và 1KHz cứ sau mỗi 0,5 giây Biết rằng tần số thạch anh XTAL = 12MHz Sử dụng 2 ngắt Timer:

- Ngắt timer0: cứ mỗi 0,5 giây sẽ làm thay đổi biến trạng thái: cờ F0

- Ngắt timer1: tạo sóng vuông cho P1.0, với giá trị nạp phụ thuộc vào F0

F0 = 0: tạo xung f1= 200Hz => chu kỳ= 1/200Hz = 5ms => giá trị nạp là -2500

F0 = 1: tạo xung f2= 1KHz => chu kỳ = 1/1KHz = 1ms => giá trị nạp là -500

ORG 0000H ISRT0: CLR TR0

ORG 001BH THOAT: MOV TH0, #HIGH(-50000)

MOV R7, # 10 ; 0.5s = 10 50000us RETI

MOV TH0, #HIGH(-50000) ISRT1: CLR TR1

CLR F0 ; tạo xung 200Hz MOV TH1, #HIGH(-2500)

SETB TR1 NAP: MOV TH1, #HIGH(-500)

RETI END

Các cách viết khác:

- Chương trình chính liên tục tạo trễ 0.5s để làm bù bit trạng thái F0 Dùng 1 ngắt timer

để tạo xung theo F0

- Dùng ngắt timer 0.5s để bù bit F0 Chương trình chính tạo xung theo F0

- Dùng 2 ngắt timer để tạo 2 xung khác nhau Chương trình chính tạo trễ 0.5s để cho phép 1 ngắt và cấm ngắt còn lại; sau đó tạo trễ 0.5s để làm ngược lại (cách này không cần biến trạng thái F0) HẾT

Ngày đăng: 24/12/2018, 11:34

🧩 Sản phẩm bạn có thể quan tâm

w