Đề thi vi xử lý có đáp án 1

9 2.9K 70
Đề thi vi xử lý có đáp án 1

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

Thông tin tài liệu

Đề thi vi xử lý có đáp án 1

VXL_Thi HK_AY1213-S2_trang 1/9 ĐHQG TPHCM–ĐH Bách Khoa Khoa Đ-ĐT–BM Điện Tử Điểm Đề thi HK 2 – NH:2012-2013 Môn: Vi xử – Mã MH: 402030 Ngày thi: 29/05/2013 – Thời gian làm bài: 110 phút Đề 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Đ, PC, Laptop, iPad và PC Tablet) Chữ ký giám thị Họ và tên SV: __________________________ MSSV: ____________ Nhóm: ______ Bộ môn Điện Tử duyệt GV ra đề Hồ Trung Mỹ Chú ý: Xem phụ lục để biết các cách giải khác nếu 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): 5800H – 5FFFH  Vùng địa chỉ của SRAM thứ hai (U2): 7000H – 77FFH b) (0.5đ) Viết các lệnh 8051 để chép 10 byte bắt đầu từ địa chỉ đầu của SRAM thứ nhất (U1) vào RAM nội của 8051 bắt đầu từ địa chỉ 30H: MOV DPTR,#5800H MOV R0,#30H MOV R1.#10 Loop: MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR DJNZ R1,Loop SJMP $ Cách 2: dùng CJNE MOV DPTR,#5800H MOV R0,#30H Loop: MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR CJNE R0,#3AH,Loop SJMP $ VXL_Thi HK_AY1213-S2_trang 2/9 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 D2 80 SETB P0.0 0002 75 90 FF MOV P 1,#0FFH Trực tiếp (byte) Tức thời 0005 E5 90 LL: MOV A,P1 0007 60 04 J Z Nxt 0009 30 80 01 J NB P0.0,Nxt Trực tiếp (bit) Tương đối 000C F4 CPL A 000D F5 A0 Nxt: MOV P2,A 000F 80 F4 SJMP LL 0011 END Câu 3: (1 đ) a) (0.5 đ) Viết chương trình con hợp ngữ 8051 tên là MAX_XY để thực hiện hàm max(X,Y) (nếu X  Y thì kết quả X; nếu ngược lại, kết quả là Y) với X và Y là các số nguyên 8 bit không dấu, X là thanh ghi A, Y là số trong RAM nội địa chỉ trong thanh ghi R0 và kết quả đặt trở lại vào A. Nếu chương trình con này dùng các thanh ghi khác A và R0 thì phải bảo lưu giá trị của nó sau khi ra khỏi chương trình con. b) (0.5 đ) Viết đoạn chương trình hợp ngữ 8051 dùng chương trình con MAX_XY để tìm cực đại của 16 số nguyên 8 bit không dấu ở trong RAM nội địa chỉ đầu là 30H và kết quả được cất vào ô nhớ ở RAM nội địa chỉ 40H. Đầu đoạn chương trình này ta phải gán trị SP để cho stack thể cất dữ liệu vào stack từ địa chỉ 60H. Bài giải. a) b) Cách 2 : dùng CJNE MAX _ XY: MOV SP,#5FH MOV SP,#5FH PUSH B MOV R0,#30H MOV R0,#30H MOV B,@R0 MOV R1,#16 MOV A,@R0 CJNE A,B,Nxt MOV A,@R0 L oop: Nxt: JC LT Loop: ACALL MAX _ XY SJMP Fin ACALL MAX _ XY INC R0 LT: MOV A,B INC R0 CJNE R0,#40H,Loop Fin: POP B DJNZ R1,Loop MOV @R0,A RET MOV @R0,A SJMP $ S JMP $ Câu 4: (1 đ) Xét 1 mạch 8051 với các công tắc: SW1 được nối với P1.0, SW2 được nối với P1.1. SW3 được nối với P1.2, SW4 được nối với P1.3 và P1.7 được nối với điện trở 300 nối tiếp LED nối lên +5V. Hãy viết chương trình hợp ngữ cho mạch này. Qui luật hoạt động của mạch như sau: P1.1 P1.0 Phép toán P1.1 P1.0 Phép toán Chú thích 0 0 F = NOT(X) 1 0 F = X OR Y F = P1.7 X = P1.2 và Y = P1.3 0 1 F = X AND Y 1 1 F = X XOR Y Bài giải. ORG 0 MOV C,X SJMP Fin TT EQU 20H C JNE A,#0,CP1 E Q3: JNB Y, Fin X EQU TT.2 CPL C CPL C Y EQU TT.3 S JMP Fin F in: MOV F,C F EQU P1.7 CP1: CJNE A,#1,CP2 SJMP Loop MOV P1,#0FH ANL C,Y END Loop: MOV A,P1 S JMP Fin MOV TT,A CP2: CJNE A,#2,EQ3 ANL A,#03H O RL C, Y VXL_Thi HK_AY1213-S2_trang 3/9 Câu 5: (1 đ) Giả sử trước khi thực thi chương trình này, nội dung của 1 số ô nhớ trong RAM nội: (30H) = 46H, (31H) = 85H, (32H) = 97H Lệnh 8051 Lần lặp 1 Lần lặp 2 Lần lặp 3 MOV R0,#30H MOV R1,#3 MOV R2,#0 Loop: MO V A,@R0 A = 4 6 H A = 8 5 H A = 9 7 H JNB ACC.7,Next INC R2 R 2 = 0 0 H R 2 = 0 1 H R2 = 0 2 H Next: INC R0 R 0 = 3 1 H R 0 = 3 2 H R0 = 3 3 H DJNZ R1,Loop MOV @R0,2 SJMP $ a) (0.5 đ) Hãy điền vào các giá trị của A, R2, và R0 cứ sau thực thi lệnh cùng hàng trong bàng trên. Khi thực thi đến lệnh “SJMP $” thì nội dung của ô nhớ sau trị số là: (33H) = 02H b) (0.5 đ) Ý nghĩa của đoạn chương trình trên là: Đếm các số âm trong N số đầu tiên (N trong R1) của mảng địa chỉ đầu trong RO và cất kết quả vào phần tử N+1 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ạnh xuống thì giá trị hiển thị của LED được tăng thêm 1. Chuỗi số hiển thị ở LED 7 đoạn tương tự như bộ đếm lên khi các cạnh xuống liên tục ở P1.0: 0, 1, 2, 3, . . . , 9, 0, 1, 2, . . . 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) ; đ ị n h ngh ĩ a hi ể n th ị b) BCD2LED7S: O RG 1 0 0H C ount EQU P1.0 PUSH ACC LED7S: ; hgfedcba MOV P1,#01H MOV DPTR,#LED7S DB 11000000B; 0 CLR A MOVC A,@A+DPTR DB 11111001B; 1 Loop: MOV P0,A DB 10100100B; 2 ACALL BCD2LED7S POP ACC DB 10110000B; 3 JNB Count,$; đợi =1 RET DB 10011001B; 4 JB Count,$; đợi =0 DB 10010010B; 5 INC A DB 10000010B; 6 CJNE A,#10,Loop DB 11111000B; 7 CLR A DB 10000000B; 8 SJMP Loop DB 10010000B; 9 VXL_Thi HK_AY1213-S2_trang 4/9 Câu 7: (1.5 đ) Xét 8051 với XTAL = 12 MHz và cho trước chương trình con Delay sau: Chương trình con Delay Số MC Delay: MOV R1,#250 1 L1: MOV R0,#250 1 L2: NOP 1 NOP 1 DJNZ R0, L2 2 DJNZ R1, L1 2 R ET 2 a) (0.5 đ) Hãy ghi số chu kỳ máy (MC) cho mỗi lệnh trong bảng trên và từ đó suy ra thời gian trễ của chương trình con này. Nếu muốn làm trễ 150 ms thì ta phải nạp cho R1 giá trị là bao nhiêu? b) (0.5 đ) Hãy viết lại chương trình con làm trễ 150 ms dùng Timer 0 (không dùng ngắt Timer). c) (0.5 đ) Hãy viết lại chương trình con làm trễ 150 ms dùng ngắt Timer 0. Bài giải. a) 1 MC = 12/(12MHz) = 1 s Thời gian trễ T được tính như sau: T = 1 + (1 + (1 + 1 + 2) x 250 + 2) x 250 + 2 MC = 250753 s  250 ms Để c ó T = 150 ms thì phải nạp giá trị cho R1 là 150. b) CT con làm trễ 150 ms hỏi vòng cờ TF0: c) CT con làm trễ 150 ms dùng ngắt Timer 0: Delay _ 150ms: D elay _ 150ms: MOV TMOD,#1 MOV TMOD,#1 MOV R2,#3 MOV R2,#4 Loop: C LR F0 MOV TL0,#LOW(–50000) SETB EA SETB ET0 MOV TH0,#LOW(–50000) S ETB TF0 SETB TR0 J NB F0,$ JNB TF0 R ET CLR TR0 DJNZ R2,Loop T 0 _ ISR: RET D JNZ R2,Skip C LR TR0 S ETB F0 C LR ET0 R ET I S kip: CLR TR0 MOV TL0,#LOW(–50000) MOV TH0,#LOW(–50000) S ETB TR0 R ET I C hú ý: t ạ i đ ị a ch ỉ 0BH O RG 0 BH L JMP T 0 _ ISR Câu 8: (1 đ) Xét 1 hệ thống gồm 2 vi xử 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 nhiệm vụ đọc liên tục 1 số BCD nén 2 ký số từ cổng P1 (giả sử ngõ vào ở P1 luôn được cung cấp số BCD nén 2 ký số hợp lệ) và gửi nối tiếp số này đến M2, M2 nhiệm vụ nhận nối tiếp liên tục số này và tính tổng bình phương của mỗi k ý số BCD và xuất ra P2. Thí dụ như nếu ở ngõ vào P1 của M1 giá trị 25H (biểu diễn BCD nén của số 25) thì ngõ ra P2 của M2 ta sẽ thấy số 29 (vì 2 2 + 5 2 = 4 + 25 = 29).Cả 2 VXL đều sử dụng cổng nối tiếp tốc độ baud là 9600 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. VXL_Thi HK_AY1213-S2_trang 5/9 Thi VXL_AY1213 – 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ận1 byte nối tiếp và tra bảng tính A 2 ORG 0 ORG 0 SP_TRANSMIT: ; Khởi động Timer 1 để ; Khởi động Timer 1 để JNB TI, $ ; tốc độ baud 9600 ; tốc độ baud 9600 CLR TI MOV TMOD,#20H MOV TMOD,#20H MOV SBUF, A MOV TH1,#–3 MOV TH1,#–3 RET SETB TR1 SETB TR1 ; Đặt cấu hình chỉ phát ; Đặt cấu hình chỉ thu Chú ý: MOV SCON,#01000010B MOV SCON,#01010000B Nếu ban đầu cho TI=0 MOV P1,#0FFH L2: thì CTC này là: L1: ACALL SP_RECEIVE MOV SBUF, A MOV A,P1 MOV B, A JNB TI, $ ACALL SP_TRANSMIT ANL A,#0FH CLR TI SJMP L1 ACALL A_SQUARE RET MOV R1,A MOV A, B SP_RECEIVE: SWAP A JNB RI, $ ANL A,#0FH CLR RI ACALL A_SQUARE MOV A, SBUF ADD A,R1 RET MOV P2,A SJMP L2 A_SQUARE: MOV DPTR,#TBL MOVC A,@A+DPTR RET TBL: DB 0, 1, 4, 9, 16 DB 25,36,49,64,81 Câu 9: (1 đ) Viết chương trình hợp ngữ 8051 (XTAL=12MHz) để tạo xung vuông (có T ON = T OFF ) ở ngõ ra P1.5 như sau:  Sau khi reset thì ngõ ra P1.5 xung xuông với chu kỳ T = 50 ms.  Nếu cạnh xuống ở chân ngắt ngoài 0 (/INT0) thì từ đó ngõ ra P1.5 xung với chu kỳ T = 50 ms.  Nếu cạnh xuống ở chân ngắt ngoài 1 (/INT1) thì từ đó ngõ ra P1.5 xung với chu kỳ T = 100 ms. 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 Loop: JB F0,Load_1 LJMP Main Load_0: MOV TH0,#HIGH(–25000) EX0_ISR: CLR F0 MOV TL0,#LOW(–25000) RETI SJMP Continue ORG 0013H Load_1: MOV TH0,#HIGH(–50000) EX1_ISR: SETB F0 MOV TL0,#LOW(–50000) RETI Continue: Main: SETB TR0 SETB P3.2 ; /INT0 JNB TF0,$ SETB P3.3 ; /INT1 CLR TR0 MOV TMOD,#1 CLR TF0 MOV IE,#85H CPL P1.5 SETB IT0 SJMP Loop SETB IT1 END VXL_Thi HK_AY1213-S2_trang 6/9 Câu 10: (1 đ) Viết chương trình hợp ngữ hoặc C (chỉ chọn một) cho 8051 để làm sáng các LED đơn được nối với cổng P1 (hình tròn đen tương ứng LED sáng và ngõ ra của 8051 ở mức 0 làm LED sáng). Nếu ngõ vào P0.0 = 0 thì sáng theo qui luật ở mẫu 1 (TD: trước hết tất cả các LED tắt trong 150 ms, kế tiếp chỉ các LED ở P1.3 và P1.4 sáng trong 150 ms, , cuối cùng chỉ các LED ở P1.7 và P1.0 sáng trong 150 ms, và lặp lại) , và nếu ngõ vào P0.0 = 1 thì sáng theo qui luật ở mẫu 2. Các LED ở P1.7 . . . P1.0 Thời điểm (ms)        . . . Các LED ở P1.7 . . . P1.0 Thời điểm (ms)        . . . Mẫu 1 Mẫu 2 Giả sử cho trước chương trình con Delay_150ms (làm trễ 150 ms). Bài giải. Chương trình hợp ngữ Chương trình C (Keil C) ORG 0 SETB P0.0 MOV DPTR,#STATE_TBL MOV R0,#0 ; PTR cho mẩu 1 MOV R1,#0 ; PTR cho mẩu 2 ; R0 và R1 chỉ trạng thái mấy Loop: JB P0.0, Pattern_2 Pattern_1: MOV A,R0 MOVC A,@A+DPTR MOV P1,A ACALL Delay_150ms INC R0 CJNE R0,#6,Loop MOV R0,#0 SJMP LOOP Pattern_2: MOV A,R1 ADD A,#6 MOVC A,@A+DPTR MOV P1,A ACALL Delay_150ms INC R1 CJNE R1,#6,Loop MOV R1,#0 SJMP LOOP STATE_TBL: DB 0FFH,0E7H,0C3H,99H,3CH,7EH DB 0FFH,7EH,3CH,99H,0C3H,0E7H END #include <reg51.h> #define STATES 6 sbit control = P0^0; void Delay_150ms(); // cho trước CTC làm trễ 150 ms void main() { char pattern[2][STATES]= {{0xFF, 0xE7, 0xC3, 0x99, 0x3C, 0x7E}, {0xFF, 0x7E, 0x3C, 0x99, 0xC3, 0xE7}}; char index[2]={–1,–1}; char select; char i; control = 1; // Input pin while(1) { select =(control != 1)? 0:1; index[select]=(index[select]+1)%STATES; P1 = pattern[select][index[select]]; Delay_150ms(); } // End of while } // End of Main Kết thúc bài thi HK 150 0 300 450 600 750 900 150 0 300 450 600 750 900 VXL_Thi HK_AY1213-S2_trang 7/9 Phụ lục Câu 4: Cách 2 : dùng JMP @A+DPTR ORG 0 TT EQU 20H X EQU TT.2 Y EQU TT.3 F EQU P1.7 MOV P1,#0FH MOV DPTR,#JMP_TABLE Loop: MOV A,P1 MOV TT,A MOV C,X ANL A,#03H RL A JMP @A+DPTR JMP_TABLE: AJMP Case0 AJMP Case1 AJMP Case2 AJMP Case3 C ase0: CPL C SJMP Fin Case1: ANL C,Y SJMP Fin Case2: ORL C,Y SJMP Fin Case3: JNB Y, Fin CPL C Fin: MOV F,C SJMP Loop END Cách 3: kiểm tra từng bit vào dùng JB và JNB ORG 0 TT EQU 20H B0 EQU TT.0 ; chứa P1.0 B1 EQU TT.1 ; chứa P1.1 X EQU TT.2 Y EQU TT.3 F EQU P1.7 MOV P1,#0FH MOV DPTR,#JMP_TABLE Loop: MOV A,P1 MOV TT,A MOV C,X JB B1,Case_1_B0 Case_0_B0: ; P1.1 = 0 JNB B0,Case0 SJMP Case1 Case_1_B0: ; P1.1 = 1 JNB B0,Case2 SJMP Case3 Case0: CPL C SJMP Fin Case1: ANL C,Y SJMP Fin Case2: ORL C,Y SJMP Fin Case3: JNB Y, Fin CPL C Fin: MOV F,C SJMP Loop END VXL_Thi HK_AY1213-S2_trang 8/9 Câu 10: Chương trình hợp ngữ Cách 2: dùng 2 bảng ORG 0 SETB P0.0 MOV R0,#0 ;Pointer cho mẩu 1 MOV R1,#0 ;Pointer cho mẩu 2 ; R0 và R1 chỉ trạng thái mấy Loop: JB P0.0, Pattern_2 Pattern_1: MOV A,R0 MOV DPTR,#STATE_TBL1 MOVC A,@A+DPTR MOV P1,A ACALL Delay_150ms INC R0 CJNE R0,#6,Loop MOV R0,#0 SJMP LOOP Pattern_2: MOV A,R1 MOV DPTR,#STATE_TBL2 MOVC A,@A+DPTR MOV P1,A ACALL Delay_150ms INC R1 CJNE R1,#6,Loop MOV R1,#0 SJMP LOOP STATE_TBL1: DB 0FFH,0E7H,0C3H,99H,3CH,7EH STATE_TBL2: DB 0FFH,7EH,3CH,99H,0C3H,0E7H END Cách 3: xuất hết mẫu rồi mới kiểm tra P0.0 ORG 0 SETB P0.0 MOV R0,#0 ;Pointer cho mẩu 1 hoặc 2 Loop: JB P0.0, Pattern_2 Pattern_1: MOV A,R0 MOV DPTR,#STATE_TBL1 MOVC A,@A+DPTR MOV P1,A ACALL Delay_150ms INC R0 CJNE R0,#6,Pattern_1 MOV R0,#0 SJMP LOOP Pattern_2: MOV A,R0 MOV DPTR,#STATE_TBL2 MOVC A,@A+DPTR MOV P1,A ACALL Delay_150ms INC R0 CJNE R0,#6,Pattern_2 MOV R0,#0 SJMP LOOP STATE_TBL1: DB 0FFH,0E7H,0C3H,99H,3CH,7EH STATE_TBL2: DB 0FFH,7EH,3CH,99H,0C3H,0E7H END VXL_Thi HK_AY1213-S2_trang 9/9 Câu 10: Chương trình C (Keil C) Cách 2: dùng 2 bảng #include <reg51.h> #define STATES 6 sbit control = P0^0; void Delay_150ms(); // cho trước CTC làm trễ 150 ms void main() { char pattern_1[STATES]= {{0xFF, 0xE7, 0xC3, 0x99, 0x3C, 0x7E}}; char pattern_2[STATES]= {{0xFF, 0x7E, 0x3C, 0x99, 0xC3, 0xE7}}; char index_1, index_2; char select; control = 1; // Input pin index_1 =0; index_2 = 0; while(1) { select =(control != 1)? 0:1; if (select == 0) { P1 = pattern_1[index_1]; index_1 = (index_1 + 1)%STATES; } else { P1 = pattern_2[index_2]; index_2 = (index_2 + 1)%STATES; } Delay_150ms(); } // End of while } // End of Main Cách 3 : xuất hết mẫu rồi mới kiểm tra P0.0 #include <reg51.h> #define STATES 6 sbit control = P0^0; void Delay_150ms(); // cho trước CTC làm trễ 150 ms void main() { char pattern_1[STATES]= {{0xFF, 0xE7, 0xC3, 0x99, 0x3C, 0x7E}}; char pattern_2[STATES]= {{0xFF, 0x7E, 0x3C, 0x99, 0xC3, 0xE7}}; char index_1, index_2, select, i; control = 1; // Input pin index_1 =0; index_2 = 0; while(1) { select =(control != 1)? 0:1; if (select == 0) { for (i = 0; i < STATES; i++) { P1 = pattern_1[index_1]; index_1 = (index_1 + 1)%STATES; Delay_150ms(); } } else { for (i = 0; i < STATES; i++) { P1 = pattern_2[index_2]; index_2 = (index_2 + 1)%STATES; } } } // End of while } // End of Main . POP ACC DB 10 110 000B; 3 JNB Count,$; đợi =1 RET DB 10 011 001B; 4 JB Count,$; đợi =0 DB 10 010 010 B; 5 INC A DB 10 000 010 B; 6 CJNE A, #10 ,Loop DB 11 111 000B; 7 CLR A DB 10 000000B;. th ị b) BCD2LED7S: O RG 1 0 0H C ount EQU P1.0 PUSH ACC LED7S: ; hgfedcba MOV P1,#01H MOV DPTR,#LED7S DB 11 000000B; 0 CLR A MOVC A,@A+DPTR DB 11 111 001B; 1 Loop: MOV P0,A DB 10 10 010 0B; 2 ACALL. VXL _Thi HK_AY1 213 -S2_trang 1/ 9 ĐHQG TPHCM–ĐH Bách Khoa Khoa Đ-ĐT–BM Điện Tử Điểm Đề thi HK 2 – NH:2 012 -2 013 Môn: Vi xử lý – Mã MH: 402030 Ngày thi: 29/05/2 013 – Thời gian làm bài: 11 0

Ngày đăng: 03/04/2014, 22:49

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan