Đề thi học kì 2 môn Vi xử lý - Năm học 2013-2014 (Có đáp án)

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:
pdf 8 trang thamphan 28/12/2022 1080
Bạn đang xem tài liệu "Đề thi học kì 2 môn Vi xử lý - Năm học 2013-2014 (Có đáp án)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfde_thi_hoc_ki_2_mon_vi_xu_ly_nam_hoc_2013_2014_co_dap_an.pdf

Nội dung text: Đề thi học kì 2 môn Vi xử lý - Năm học 2013-2014 (Có đáp án)

  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 Chữ ký giám thị 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) Họ và tên SV: ___ MSSV: ___ Nhóm: ___ Bộ môn Điện Tử duyệt GV ra đề 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 Cách 2: dùng CJNE MOV R1.#10 MOV DPL,#0 Loop: MOV DPH,#0A0H MOV R0,#11 MOVX A,@DPTR Loop: MOV DPH,#0A0H MOV DPH,#0B8H MOVX A,@DPTR MOVX @DPTR,A MOV DPH,#0B8H INC DPL MOVX @DPTR,A DJNZ R1,Loop INC DPL SJMP $ CJNE R0,#11,Loop SJMP $ VXL_Thi HK_AY1314-S2_trang 1/8
  2. 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 MOV R1,#0 ; xóa thanh ghi R1 Loop: MOV A,P1 ; A  P1 JNZ SW1 ; Nếu A khác zero thì nhảy đến nhãn SW1 MOV R1,A ; R1  A 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 INC R1 ; R1  R1 + 1 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 DEC R1 ; R1  R1 – 1 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. a) ; định nghĩa hiển thị b) BCD2LED7S: ORG 100H Count EQU P1.0 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 RET DB 10011001B; 4 JB Count,$;đợi =0 DB 10010010B; 5 ADD A,#2; = 2 lần INC A DB 10000010B; 6 CJNE A,#11,Loop DB 11111000B; 7 MOV A,#1 DB 10000000B; 8 SJMP Loop DB 10010000B; 9 VXL_Thi HK_AY1314-S2_trang 3/8
  3. Thi VXL_AY1314 – Họ và tên SV: ___ MSSV: ___ Nhóm: ___ Bài giải. Các chương trình con gửi/nhận Chương trình 8051 ở M1 Chương trình 8051 ở M2 1 byte nối tiếp ORG 0 ORG 0 SP_TRANSMIT: ; Khởi động Timer 1 để ; Khởi động Timer 1 để JNB TI, $ ; có tốc độ baud 2400 ; có tốc độ baud 2400 CLR TI MOV TMOD,#20H MOV TMOD,#20H MOV SBUF, A MOV TH1,#–12 MOV TH1,#–12 RET SETB TR1 SETB TR1 ; Đặt cấu hình chỉ phát ; Đặt cấu hình chỉ thu MOV SCON,#01000010B MOV SCON,#01010000B MOV R0,#50H MOV R1,#5 MOV R1,#5 M2_Loop: M1_Loop: ACALL SP_RECEIVE MOV A,@R0 MOV B, A ACALL SP_TRANSMIT ANL A,#0FH INC R0 ORL A,#30H DJNZ R1,M1_Loop MOV P1,A SP_RECEIVE: SJMP $ MOV A, B JNB RI, $ ; Có thể dùng CJNE SWAP A CLR RI ; MOV R0,#50H ANL A,#0FH MOV A, SBUF ; M1_Loop: ORL A,#30H RET ; MOV A,@R0 MOV P0,A ; ACALL SP_TRANSMIT SJMP L2 ; INC R0 DJNZ R1,M2_Loop ; 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. ORG 0 EX0_ISR: INC R1 LJMP Main CJNE R1,#10,$+3 LJMP EX0_ISR JNC Reset_1 ORG 0013H RETI LJMP EX1_ISR Reset_1: MOV R1,#0 Main: MOV R1,#0 RETI SETB P3.2 ; /INT0 EX1_ISR: INC R1 SETB P3.3 ; /INT1 INC R1 SETB IT0 CJNE R1,#10,$+3 SETB IT1 JNC Reset_2 MOV IE,#85H RETI Loop: MOV P1,R1 Reset_2: MOV A,R1 ; ADD #,–10 tương đương với ADD A,#–10 ; CLR C MOV R1,A ; SUBB A,#10 RETI END VXL_Thi HK_AY1314-S2_trang 5/8
  4. Phụ lục – Cách các giải khác Câu 1: Cách 3: Cách 4: MOV R1,#10 MOV R0,#10 MOV R2,#0A0H MOV R1,#0A0H MOV R3,#0B8H MOV R2,#0 Loop: MOV DPH,R2 MOV R3,#0B8H MOVX A,@DPTR MOV R4,#0 ; = MOV R4,2 MOV DPH,R3 Loop: MOV DPH,R1 MOVX @DPTR,A MOV DPL,R1 INC DPL MOVX A,@DPTR DJNZ R1,Loop INC DPTR SJMP $ 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 Is_Lower_Case: MOV R0,#30H ; kiem tra xem neu A thuoc 'a' den 'z' thi co C = 1 MOV DPTR,#String PUSH ACC ; hoac MOV B, A Loop: CLR A ADD A,# -'a' ; = ADD A,#9FH MOVC A,@A+DPTR JB ACC.7,Outside JZ Finish ADD A,# -('z'-'a')-1 ; = ADD A,#0E6H ACALL Is_Lower_case JNB ACC.7,Outside JNC Skip SETB C ADD A,# 'A'-'a' ; = ADD A,#0E0H SJMP LC_Fin Skip: MOV @R0,A Outside: INC R0 CLR C INC DPTR LC_Fin: SJMP Loop POP ACC ; hoac MOV A, B MOV @R0,A RET ; Finish: SJMP $ org 100H String: DB "ABcdE!",0 END Câu 4: Cách 2: Cách 3: W EQU B.0 ; Dùng byte có địa chỉ bit để xử lý X EQU B.1 ; TD: B, 20H-2FH Y EQU B.2 W EQU B.0 Z EQU B.3 X EQU B.1 F EQU P1.7 Y EQU B.2 MOV P1,#0FH Z EQU B.3 Loop: MOV B,P1 F EQU P1.7 MOV C,X MOV P1,#0FH ORL C,/W Loop: ANL C,Y MOV B, P1 CPL C JNB Y, Feq1 MOV F0,C JNB W, FeqZ MOV C,Z JNB X, Feq1 JB Y,Skip FeqZ: MOV C,Z CPL C MOV F,C Skip: ORL C,F0 SJMP Loop MOV F,C Feq1: SETB F SJMP Loop SJMP Loop END END VXL_Thi HK_AY1314-S2_trang 7/8