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

132-VXL-Thi-Đáp án

8 1 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 8
Dung lượng 328,36 KB

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

Nội dung

Nội dung của thanh ghi A không bị thay đổi sau khi gọi chương trình con này.. b 0.5 đ Viết chương trình làm việc theo yêu cầu trên dùng thanh ghi A chứa số đếm và dùng chương trình con B

Trang 1

ĐHQG TPHCM–ĐH Bách Khoa

Khoa Đ-ĐT–BM Điện Tử

GV soạn đáp án: Hồ Trung Mỹ

Điểm Đáp án của Đề thi HK 2 – NH:2013-2014

Môn: Vi xử lý – Mã MH: 402030 Ngày thi: 02/06/2014 – Thời gian làm bài: 110 phút

Đề có 8 trang (có 2 trang tóm tắt) và SV làm trực tiếp trên đề

Tổng số câu là 10, tổng số điểm là 11, và SV chỉ cần làm đạt 10

(SV KHÔNG được dùng tài liệu;

SV KHÔNG được dùng ĐTDĐ, Laptop, iPad và PC Tablet)

Chữ ký giám thị

Họ và tên SV: MSSV: Nhóm:

Hồ Trung Mỹ

Xem phụ lục để biết 1 số cách giải khác Câu 1: (1 đ) Cho trước mạch giải mã địa chỉ của hệ thống dùng VXL 8051:

a) (0.5 đ) Xác định vùng địa chỉ của các SRAM:

 Vùng địa chỉ của SRAM thứ nhất (U1): A000H – A7FFH

 Vùng địa chỉ của SRAM thứ hai (U2): B800H – BFFFH

b) (0.5đ) Viết các lệnh 8051 để chép khối dữ liệu 10 byte bắt đầu từ địa chỉ đầu của SRAM thứ nhất (U1)

vào 10 byte đầu tiên của SRAM thứ hai:

MOV DPL,#0 MOV R1.#10 Loop: MOV DPH,#0A0H

MOVX A,@DPTR MOV DPH,#0B8H MOVX @DPTR,A INC DPL DJNZ R1,Loop SJMP $

Cách 2: dùng CJNE

MOV DPL,#0 MOV R0,#11 Loop: MOV DPH,#0A0H

MOVX A,@DPTR MOV DPH,#0B8H MOVX @DPTR,A INC DPL CJNE R0,#11,Loop SJMP $

Trang 2

VXL_Thi HK_AY1314-S2_trang 2/8

Câu 2: (1.5 đ) Điền vào các chỗ trống trong các cột địa chỉ ROM chương trình, mã máy và các cách địa chỉ:

Địa chỉ

ROM (hex) Mã máy (hex) Lệnh 8051

Cách định địa chỉ của toán hạng thứ nhất thứ hai

ORG 0

0000 78 30 MOV R0,#30H

000D D9 F8 Skip: DJNZ R1, Loop

END Câu 3: (1 đ)

a) (0.5 đ) Viết chương trình con hợp ngữ 8051 có tên là Is_LC để kiểm tra xem nội dung thanh ghi A có thuộc

dải ký tự chữ in thường (‘a’ đến ‘z’) thì cờ C = 1, ngược lại thì cờ C = 0 (‘a’ = 61H và ‘z’= 7AH)

b) (0.5 đ) Viết đoạn chương trình hợp ngữ 8051 để đọc 1 chuỗi ký tự được đặt trong bộ nhớ chương trình bắt đầu từ địa chỉ 100H, chuỗi ký tự này được kết thúc bằng ký tự NULL (=0) và cất vào RAM nội của 8051 từ

địa chỉ 30H; mỗi lần đọc 1 ký tự thì dùng chương trình con Is_LC để kiểm tra, nếu cờ C = 1 thì sẽ đổi ký tự

này sang chữ in hoa.(“A’ = 41H và ‘Z’ = 5AH)

TD: Chuỗi là “AbCde!”,0 thì trong RAM nội sẽ chứa “ABCDE!”,0

Bài giải

Câu 4: (1 đ) Xét 1 mạch 8051 để cài đặt (hiện thực) mạch tổ hợp sau: (không rút gọn hàm Boole)

Bài giải

Trang 3

Câu 5: (1 đ) Hãy hoàn tất chương trình hợp ngữ 8051 sau dựa theo các chú thích đi kèm tại mỗi lệnh:

(giả sử cho trước chương trình con OUTPUT sẽ xuất nội dung R1 ra mạch hiển thị)

ORG 200H ; Chương trình bắt đầu từ địa chỉ 200H

MOV SP,#4FH ; nạp trị cho SP để stack bắt đầu cất từ địa chỉ 50H

MOV P1,#3 ; đặt cấu hình để chân P1.0 và P1.1 là chân nhập

JNZ SW1 ; Nếu A khác zero thì nhảy đến nhãn SW1

SJMP Display ; nhảy đến nhãn Display SW1: JB P1.0,SW2 ; nếu P1.0 = 1 thì nhảy đến nhãn SW2

SJMP Display ; nhảy đến nhãn Display SW2: JB P1.1,SW_ALL ; nếu P1.1 = 1 thì nhảy đến nhãn Loop

SJMP Display ; nhảy đến nhãn Display Display: ACALL OUTPUT ; gọi chương trình con OUPUT

Câu 6: (1 đ) Cho trước mạch sau với ngõ ra P0 của 8051 lái LED 7 đoạn loại CA:

Mạch này hoạt động như sau:

P1.0 = Count = khi có cạnh xuống thì giá trị hiển thị của LED được tăng thêm 2 (giá trị đầu 1)

Chuỗi số hiển thị ở LED 7 đoạn tương tự như bộ đếm lên (số lẻ) khi có các cạnh xuống liên tục ở P1.0:

1, 3, 5 , 7, 9, 1, 3, a) (0.5 đ) Viết chương trình con BCD2LED7S hiển thị 1 ký số BCD trong thanh ghi A ra LED 7 đoạn Nội dung của thanh ghi A không bị thay đổi sau khi gọi chương trình con này

b) (0.5 đ) Viết chương trình làm việc theo yêu cầu trên dùng thanh ghi A chứa số đếm và dùng chương trình con BCD2LED7S để hiển thị

Bài giải

PUSH ACC;=MOV R1,A LED7S: ; hgfedcba MOV P1,#01H

MOV DPTR,#LED7S DB 11000000B; 0 MOV A,#1

MOVC A,@A+DPTR DB 11111001B; 1 Loop:

MOV P0,A DB 10100100B; 2 ACALL BCD2LED7S

POP ACC;= MOV A,R1 DB 10110000B; 3 JNB Count,$;đợi =1

DB 10010010B; 5 ADD A,#2; = 2 lần INC A

DB 10000010B; 6 CJNE A,#11,Loop

DB 10010000B; 9

Trang 4

VXL_Thi HK_AY1314-S2_trang 4/8

Câu 7: (1.5 đ) Xét 8051 với XTAL = 12 MHz và ta muốn có sóng tuần hoàn sau tại các chân P1.0 và P1.1:

P1.0 1s P1.1 1.75s

a) (0.75 đ) Hãy viết chương trình tạo dạng sóng trên dùng Timer 0 (không dùng ngắt Timer)

b) (0.75 đ) Hãy viết lại chương trình tạo dạng sóng trên dùng ngắt Timer 0

Bài giải

a) CT hỏi vòng cờ TF0: b) CT dùng ngắt Timer 0:

MOV TH0,#HIGH(–50000) T0_ISR:

RETI Skip: CLR TR0

MOV TL0,#LOW(–50000) MOV TH0,#HIGH(–50000)

SETB TR0 RETI

Câu 8: (1 đ)

Xét 1 hệ thống gồm 2 vi xử lý 8051 M1 và M2 được kết nối theo kiểu modem rỗng (null modem) để truyền nối tiếp với nhau M1 có nhiệm vụ đọc 5 byte trong RAM nội từ địa chỉ 50H (mỗi byte này là 1 số BCD nén có 2 ký số) và gửi nối tiếp các byte này số này đến M2, M2 có nhiệm vụ nhận nối tiếp các byte này, mỗi lần nhận 1 byte thì đổi mỗi ký số BCD ra ký tự ASCII tương ứng(‘0’ = 30H) và xuất số BCD hàng chục ra cổng P1

và BCD hàng đơn vị ra cổng P0 Thí dụ như nếu M1 gửi byte có giá trị 25H (biểu diễn BCD nén của số 25) thì các ngõ ra của M2 khi đó: P1 = ‘2’ = 32H và P0 =’5’= 35H Cả 2 VXL đều sử dụng cổng nối tiếp có tốc độ baud là 2400 và XTAL = 11.059 MHz Chú ý ta không dùng ngắt nối tiếp mà chỉ hỏi vòng RI và TI

Trang 5

Thi VXL_AY1314 – Họ và tên SV: MSSV: Nhóm:

Bài giải

Chương trình 8051 ở M1 Chương trình 8051 ở M2 Các chương trình con gửi/nhận 1 byte nối tiếp

; Khởi động Timer 1 để ; Khởi động Timer 1 để JNB TI, $

; có tốc độ baud 2400 ; có tốc độ baud 2400 CLR TI

; Đặt cấu hình chỉ phát ; Đặt cấu hình chỉ thu

MOV SCON,#01000010B MOV SCON,#01010000B

ACALL SP_TRANSMIT ANL A,#0FH

; ACALL SP_TRANSMIT SJMP L2

; CJNE R0,#55H,M1_Loop SJMP $

Câu 9: (1 đ)

Viết chương trình hợp ngữ 8051 (XTAL=12MHz) dùng các ngắt ngoài như sau::

 Trong chương trình chính thì liên tục xuất nội dung của thanh ghi R1 (gán trị đầu là 0) ra cổng P1

 Nếu có cạnh xuống ở chân ngắt ngoài 0 (/INT0)  R1 = R1 + 1 và nếu lớn 9 thì xóa về 0

 Nếu có cạnh xuống ở chân ngắt ngoài 1 (/INT1)  R1 = R1 + 2 và nếu lớn 9 thì R1 = R1 – 10 Giả sử các xung kích cạnh xuống ở các ngõ /INT0 và /INT1 không bao giờ xảy ra đồng thời

Bài giải

SETB P3.2 ; /INT0 EX1_ISR: INC R1

Loop: MOV P1,R1 Reset_2: MOV A,R1

END

Trang 6

VXL_Thi HK_AY1314-S2_trang 6/8

Câu 10: (1 đ)

Viết chương trình hợp ngữ hoặc C (chỉ chọn một) cho 8051 để thực hiện các phép tính sau theo nội dung đọc

được từ cổng P0 (nếu P0 > 3 thì cổng xuất P3 = 0)

P0 Phép toán

0 P3 = P1 + P2

1 P3 = P1 – P2

2 P3 = max(P1, P2)

3 P3 = bù 2 của P1 Sau khi thực hiện xong phép toán thì đợi 200 ms và tiếp tục đọc lại P0 và thực hiện bảng hoạt động trên.Công

việc này được thực hiện liên tục

Giả sử cho trước chương trình con Delay_200ms (làm trễ 200 ms)

Bài giải

Cách 1: Chương trình hợp ngữ Cách 1: Chương trình C

P3 = y;

Delay_200ms();

} }

Kết thúc bài thi

Trang 7

Phụ lục – Cách các giải khác

Câu 1:

Cách 3:

MOV R1,#10 MOV R2,#0A0H MOV R3,#0B8H Loop: MOV DPH,R2

MOVX A,@DPTR MOV DPH,R3 MOVX @DPTR,A INC DPL DJNZ R1,Loop SJMP $

Cách 4:

MOV R0,#10 MOV R1,#0A0H MOV R2,#0 MOV R3,#0B8H MOV R4,#0 ; = MOV R4,2 Loop: MOV DPH,R1

MOV DPL,R1 MOVX A,@DPTR INC DPTR MOV R1,DPH MOV R2,DPL MOV DPH,R3 MOV DPL,R4 MOVX @DPTR,A INC DPTR MOV R3,DPH MOV R4,DPL DJNZ R0,Loop SJMP $

Câu 3:

Cách 2:

org 0

MOV R0,#30H

MOV DPTR,#String

Loop: CLR A

MOVC A,@A+DPTR

JZ Finish

ACALL Is_Lower_case

JNC Skip

ADD A,# 'A'-'a' ; = ADD A,#0E0H

Skip: MOV @R0,A

INC R0

INC DPTR

SJMP Loop

MOV @R0,A

Finish: SJMP $

Is_Lower_Case:

; kiem tra xem neu A thuoc 'a' den 'z' thi co C = 1

PUSH ACC ; hoac MOV B, A ADD A,# -'a' ; = ADD A,#9FH

JB ACC.7,Outside ADD A,# -('z'-'a')-1 ; = ADD A,#0E6H JNB ACC.7,Outside

SETB C SJMP LC_Fin Outside:

CLR C LC_Fin:

POP ACC ; hoac MOV A, B

RET ; org 100H String: DB "ABcdE!",0 END

Câu 4: Cách 2: Cách 3:

W EQU B.0

X EQU B.1

Y EQU B.2

Z EQU B.3

F EQU P1.7

MOV P1,#0FH Loop: MOV B,P1

MOV C,X ORL C,/W ANL C,Y CPL C MOV F0,C MOV C,Z

JB Y,Skip CPL C Skip: ORL C,F0

MOV F,C SJMP Loop END

; Dùng byte có địa chỉ bit để xử lý

; TD: B, 20H-2FH

W EQU B.0

X EQU B.1

Y EQU B.2

Z EQU B.3

F EQU P1.7

MOV P1,#0FH Loop:

MOV B, P1

JNB Y, Feq1 JNB W, FeqZ JNB X, Feq1 FeqZ: MOV C,Z

MOV F,C SJMP Loop Feq1: SETB F

SJMP Loop END

Trang 8

VXL_Thi HK_AY1314-S2_trang 8/8

Câu 7: Cách 2:

a) CT hỏi vòng cờ TF0: b) CT dùng ngắt Timer 0:

MOV TH0,#HIGH(–50000) T0_ISR:

RETI Skip: CLR TR0

MOV TL0,#LOW(–50000) MOV TH0,#HIGH(–50000)

SETB TR0 RETI

Câu 8: Cách 2: ASM Cách 2: C

ORG 0 P0_eq_0: #include <reg51.h>

MOV A,#0FFH MOV A, R1 void Delay_200ms();

Loop: MOV A, R1 P0 = 0xFF; // P0, P1, và P2

MOV A, P0 CLR C P1 = 0xFF; // là cổng nhập

CJNE A, #4, $+3 MOV A, R1 x = P0; v1 = P1; v2 = P2;

JC Menu_A CJNE A, 02H, $+3 if (x == 0)

Menu_A: SJMP Output y = v1 - v2;

MOV DPTR,#JMPTAB P0_eq_3: if (x == 2)

RL A MOV A, R1 y = v1 > v2? v1:v2;

AJMP P0_eq_2 ACALL Delay_200ms P3 = y;

} // end of while } // end of main

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

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

w