Đề thi vi xử lý có hướng dẫn giải
Trang 1ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2 Đáp án của kiểm tra tại lớp đợt 1
1 Viết các “từ điều khiển” (control word) (hình 1.14 trong sách VXL) để thực hiện
các phép toán sau:
a) R5 4R1 – 2(R2 AND R4)
b) R3 R1/2 + (bù 1 của R2)/4
BG
Có nhiều cách giải loại bài này:
Cách 1: Không biến đổi biểu thức
R3 R2 AND R4 R3 = R2 And R4 010 100 011 01000
R3 R3 + R3 R3 = 2(R2 And R4) 011 011 011 00010
R5 R5 - R3 R5 = 4R1 - 2(R2 And R4) 101 011 101 00101
R3 SHR R1 R5=R1/2 (dịch phải=chia 2) 001 000 011 10000
R4 COM R2 R4 = bù 1 của R2 010 000 100 01110
R4 SHR R4 R4 = (bù 1 của R2)/2 100 000 100 10000
R4 SHR R4 R4 = (bù 1 của R2)/4 100 000 100 10000
R3 R3 + R4 R3 = R1/2 + (bù 1 của R2)/4 011 100 011 00010
Cách 2: Biến đổi các biểu thức
a) R5 4R1 – 2(R2 AND R4) = 2(2R1 – (R2 AND R4))
b) R3 R1/2 + (bù 1 của R2)/4 = (R1 + (bù 1 của R2)/2)/2
Ta có các từ điều khiển sau: (chỉ cần 4 từ điều khiển cho a) hoặc b))
R3 R2 AND R4 R3 = R2 And R4 010 100 011 01000
R5 R5 - R3 R5 = 2R1 - (R2 And R4) 101 011 101 00101
R5 R5 + R5 R5 = 4R1 - 2(R2 And R4) 101 101 101 00010
R4 COM R2 R4 = bù 1 của R2 010 000 100 01110
R4 SHR R4 R4 = (bù 1 của R2)/2 100 000 100 10000
R3 R1 + R4 R3 = R1 + (bù 1 của R2)/2 001 100 011 00010
R3 SHR R3 R3 = R1/2 + (bù 1 của R2)/4 011 000 011 10000
Trang 2
2 Hãy cho biết dung lượng bộ nhớ lớn nhất (tính theo byte và word) mà CPU có thể
quản lý được nếu nó có:
a) Số đường địa chỉ là 16 và số đường dữ liệu là 8
b) Số đường địa chỉ là 20 và số đường dữ liệu là 16
BG
Số đường
địa chỉ Số đường dữ liệu Dung lượng bộ nhớ lớn nhất mà CPU có thể quản lý
16 8 2 16 x 8 bits = 2 16 bytes =2 6 x2 10 bytes = 64 KB = 32K words
20 16 2 20 x 16 bits = 2 20 words = 1 M words = 2 MB
3 Hãy cho biết giá trị của các cờ trong thanh ghi trạng thái sau khi CPU 8 bit thực thi
lệnh sau (giả sử ban đầu tất cả các cờ có trị là 0 trước khi thực thi lệnh)
a) Cộng 2 số 8 bit: +126 với +15
b) Cộng 2 số 8 bit: E7H với 09H
c) Trừ 2 số 8 bit: +104 với –12
Chú ý: Trình bày các phép tính theo dạng số nhị phân
BG.
a) Cộng 2 số 8 bit: +126 với +15
b) Cộng 2 số 8 bit: E7H với 09H
c) Trừ 2 số 8 bit: +104 với –12
4 Viết mã để tính biểu thức F = A * ( B + C) + D trên các CPU có lệnh 2, 1, và 0 địa
chỉ Không sắp xếp lại biểu thức và khi tính toán không làm thay đổi các biến A, B, C,
và D
BG
CPU có lệnh 2 địa chỉ CPU có lệnh 1 địa chỉ CPU có lệnh 0 địa chỉ
MOV R2, B
ADD R2, C
MOV R1, A
MUL R1, R2
ADD R1, D
MOV F, R1
LOAD B ADD C STORE T LOAD A MUL T ADD D STORE F
PUSH A PUSH B PUSH C ADD MUL PUSH D ADD POP F
+
+
–
Trang 3ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2
Đáp án của Kiểm tra tại lớp đợt 2 Thời gian làm bài: 30 phút (Cho mở TL)
1 (2 đ) Vẽ dạng sóng của truyền dữ liệu nối tiếp bất đồng bộ khi truyền 1 byte 4BH với LSB
được truyền đi trước cho các trường hợp sau: (nếu biết tốc độ truyền là 2400 bps)
a) Dữ liệu 7 bit, không có parity và 1 bit stop
b) Dữ liệu 8 bit, có parity lẻ và 1 bit stop
BG
4BH = 0100 10112
Tốc độ baud = 2400 bps => Thời gian cho 1 bit T = 1/2400 = 0.417 ms
a) Dữ liệu 7 bit, không có parity và 1 bit stop:
b) Dữ liệu 8 bit, có parity lẻ và 1 bit stop:
2 (3 đ) Thiết kế ROM 3K x 8 từ các chip ROM 1K x 4
BG
Trang 43 (5 đ) Hãy tìm dải địa chỉ của tất cả các tín hiệu /CS trong mạch sau:
BG
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Chọn CS Dải địa chỉ
\CS6 9000-97FF
\CS9 luôn luôn là 1 (vì ngõ ra của giải mã 139 có tối đa 1 ngõ ra là 0)
=> không có dải địa chỉ cho \CS9
Trang 5ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2 – Đáp án của Kiểm tra tại lớp đợt 3
Thời gian làm bài: 30 phút (Cho mở TL)
1 (2 đ) Hãy cho biết cách định địa chỉ của mỗi toán hạng với mỗi lệnh sau:
LOOP: ADC A, (HL)
BG
Lệnh Toán hạng 1 Cách định địa chỉ Toán hạng 2
LD B, 3 Thanh ghi Tức thời
LD A, 0A5H Thanh ghi Tức thời
LD HL, 0C028H Thanh ghi Tức thời mở rộng
INC HL Thanh ghi DJNZ LOOP Tương đối
2 (6 đ) Hãy viết vài lệnh Z80 để thực hiện các công việc sau: ( PORT1 EQU 07H)
a) B 39H và D 92H; L B và (PORT1) D
b) B 47H và C F2H chỉ dùng 1 lệnh; (2080H) C và (PORT1) B Hãy ghi mã máy cho
đoạn chương trình này và giả sử chúng bắt đầu từ địa chỉ 2000H
c) D A và HL 2080H ; (2080H) D
d) D A7H và BC 2055H ; (BC) D
e) Biết (2040H) = 98H và (2070H) = F7H Viết các lệnh để hoán đổi nội dung của 2 ô nhớ này và
viết mã máy cho đoạn đó
BG
a) B 39H và D 92H; L B và (PORT1) D
LD B,39H
LD D,92H
LD L,B
LD A,D OUT (PORT1),A
b) B 47H và C F2H chỉ dùng 1 lệnh; (2080H) C và (PORT1) B
Org 2000H
LD BC,57F2H
LD A,C
LD (2080H),A
LD A,B OUT (PORT1),A
01 F2 57
79
32 80 20
78 D3 07
c) D A và HL 2080H ; (2080H) D
LD D,A
LD HL,2080H
LD (HL),D
d) D A7H và BC 2055H ; (BC) D
LD D,0A7H
LD BC,2055H
LD A,D
LD (BC),A
Trang 6e) Biết (2040H) = 98H và (2070H) = F7H Viết các lệnh để hoán đổi nội dung của 2 ô nhớ này
LD A,(2040H)
LD B,A
LD A,(2070H)
LD (2040H),A
LD A,B
LD (2070H),A
3A 10 20
47 3A 70 20
32 40 20
78
32 70 20
3 (2 đ) Cho trước đoạn chương trình sau:
LD SP, 1200H
Hãy vẽ stack với địa chỉ bộ nhớ và nội dung của stack Sau khi Z80 thực thi đoạn chương trình trên,
BG
Trang 7
ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2
Đáp án của Kiểm tra tại lớp đợt 4
Thời gian làm bài: 30 phút (Cho mở TL)
1 (4 đ) Hãy viết vài lệnh 8051 để thực hiện các công việc sau:
a) Nạp giá trị 1234H vào DPTR bằng 2 cách (nạp thanh ghi 16 bit và nạp thanh ghi 8 bit)
b) Nạp trị số 45H vào thanh ghi R0 bằng 2 cách
c) Chép nội dung của thanh ghi R2 vào R6 (giả sử ở bank 1) bằng các cách với lệnh PUSH, MOV (4 cách)
BG
a) MOV DPTR,#1234H (*) MOV DPH,#12H
MOV DPL,#34H b) MOV R0,#45H (*) MOV 0,#45H
c) PUSH 10
POP 14 MOV A,R2 MOV R6,A MOV 14,R2 MOV R6,10 MOV 14,10 (*) Chú ý:
Cách có “*” là cách hiệu quả nhất!
2 (2 đ)
a) Sau đoạn chương trình này, cho biết các địa chỉ bit nào (trong byte được cập nhật) trong vùng nhớ nội 20H đến 2FH có nội dung là 1:
MOV 27h, #48h MOV R0, #29h MOV @R0, 27h b) Cho biết mã máy sau thực hiện tác vụ gì?
BG
a)
(27H)= 48H = 0100 1000H Các địa chỉ bit (hex) có nội dung là 1: 3E và 3B (29H)= 48H = 0100 1000H Các địa chỉ bit (hex) có nội dung là 1: 4E và 4B b) Mã lệnh 75H tương ứng với lệnh 3 byte:
MOV direct, #data
Như vậy 75H 8AH E7H tương ứng với lệnh: MOV 8AH, #0E7H
3 (2 đ) Cho biết các cách định địa chỉ của các toán hạng trong các lệnh sau:
ANL C, ACC.1 ADD A, #55 MOV @R1, A MOV P1, 50H
BG
Lệnh toán hạng 1 Cách định địa chỉ của toán hạng 2 ANL C, ACC.1 Hiểu ngầm Trực tiếp (bit) ADD A, #55 Hiểu ngầm Tức thời
MOV @R1,A Gián tiếp Hiểu ngầm MOV P1,50H Trực tiếp Trực tiếp
Trang 84 (2 đ) Offset tương đối của lệnh sau là bao nhiêu?
a) SJMP AHEAD
nếu lệnh này đang ở ô nhớ 0480H và nhãn AHEAD biểu diễn lệnh ở địa chỉ 043AH
b) SJMP BACK
nếu lệnh này đang ở ô nhớ A078H và nhãn BACK biểu diễn lệnh ở địa chỉ 9EA8H
BG
Địa chỉ lệnh kế = Địa chỉ lệnh hiện tại + chiều dài lệnh
Hiệu số: FFB8H (-72) FE2EH (-466 < -128)
Trang 9ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2
Đáp án của Kiểm tra tại lớp đợt 5
Thời gian làm bài: 30 phút (Cho mở TL)
1) (1 đ) Trước khi thực thi mỗi lệnh sau thì PSW=5FH và A=19H, sau khi thực thi thì PSW và A=?
a) RLC A
b) RRC A
BG
Cho trước PSW = 5FH = 0101 1111B và A = 19H = 0001 1001B trước khi thực thi lệnh
a) RLC A
A = 0011 0010B = 32H PSW = 0101 1111B = 5FH
b) RRC A
A = 0000 1100B = 0CH PSW = 1101 1110B = DEH
2) (3 đ) Viết đoạn chương trình 8051 thực hiện công việc sau:
Nếu A < B thì R2 R1 + R0
Nếu A = B thì R2 R1 – R0
Nếu A > B thì R2 A + B
BG
CJNE A, B, ANEB AEQB: ; Case: A = B
MOV A, R1 SUBB A, R0 ; A R1 – R0 – C = R1 – R0
ANEB: ; Case: A B
ALTB: ; Case: A < B
MOV A, R1 ADD A, R0 ; A R1 + R0
AGTB: ; Case: A > B
ADD A, B ; A A + B Continue: MOV R2, A
3) (2 đ) Viết chương trình cài đặt mạch tổ hợp sau: (không biến đổi biểu thức Boole)
BG
Trang 10X EQU P1.7
ORL C, Y ; C = X or Y CPL C ; C = X nor y ANL C,/Z ; C = (X nor Y) and not(Z) CPL C ; C = (X nor Y) nand not(Z)
4) (4 đ) Viết chương trình con AND8b thực hiện AND 8 bit của thanh ghi A và kết quả đặt trong cờ C bằng các
cách sau:
a) dùng các lệnh ANL C, bit và
b) dùng lệnh CJNE
BG
AND8b:
MOV C, ACC.0
ANL C, ACC.1
ANL C, ACC.2
ANL C, ACC.3
ANL C, ACC.4
ANL C, ACC.5
ANL C, ACC.6
ANL C, ACC.7
RET
AND8b:
MOV R0,#8 SETB C L1:
ANL C, ACC.0
RR A
DJNZ R0, L1 RET
AND8b:
CJNE A,#0FFH,KQZ SETB C
RET KQZ:
CLR C RET
Trang 11ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2
Đáp án của Kiểm tra tại lớp đợt 6
Thời gian làm bài: 30 phút (Cho mở TL)
1 (4 đ) Viết chương trình tạo sóng vuông 12 KHz với chu kỳ nhiệm vụ 50% ở chân P1.0
Giả sử 8051 dùng XTAL = 12 MHz
a Tạo trễ bằng phần mềm
b Tạo trễ bằng Timer0
BG
XTAL = 12 MHz 1 MC = 12/XTAL = 1 s
T = 1/(12KHz) = 83.33 s TON = TOFF 41 s
a) Tạo trễ bằng phần mềm b) Tạo trễ bằng Timer0
Loop: CPL P1.0 ; 1 MC
NOP ; 1 MC MOV R0,#18 ; 1 MC
DJNZ R0, $ ; 2 x 18 MC SJMP Loop ; 2 MC
MOV TMOD,#2 MOV TH0,#–41 SETB TR0 Loop: JNB TF0, $
CLR TF0 CPL P1.0 SJMP Loop
2 (2 đ) Một thiết kế dùng Timer0 của 8051 để đếm số khách hàng vào tham quan hội chợ,
nếu số khách hàng vào đạt đến 10000 thì ngõ ra P1.0 sẽ là 1 Ngõ vào T0 nhận được 1 xung vuông từ mạch cảm biến khi có 1 khách hàng đi vào Viết mã cho đoạn CT này
BG
SETB P3.4 ; P3.4 (= T0) is input pin CLR P1.0
MOV TMOD,#00000101B ; Timer 0, Mode 1 of Counter 0
MOV TH0,#HIGH(–10000) SETB TR0
JNB TF0, $
SETB P1.0 SJMP $
3 (2 đ) Tìm thời gian trễ của chương trình con Delay Giả sử 8051 đang dùng XTAL = 8
MHz
DELAY: MOV R7, #5 ; 1 MC
L1: MOV R6, #00H ; 1 MC
L2: MOV R5, #00H ; 1 MC
DJNZ R5, L3 ; 2 MC
DJNZ R6, L2 ; 2 MC
DJNZ R7, L1 ; 2 MC
Trang 12BG
XTAL = 8 MHz 1 MC = 12/(8 MHz) = 1.5 s
Dựa trên số MC của các lệnh, ta tính được thời gian trễ T_Delay của CT con Delay này là:
T_Delay = 1 +(1+( 1+(1+1+2)x 256 + 2)x 256 + 2) x 5 + 2 = 1314578 MC
= 1314578 x 1.5 s = 1971867 s 1.972 ms
4 (2 đ) Cho trước đoạn chương trình sau (giả sử XTAL =12 MHz)
MOV TMOD,#1
Tính thời gian TON và TOFF của dạng sóng tại P1.1 và tìm chu kỳ nhiệm vụ của nó
BG
Giá trị nạp cho Timer 0 lúc P1.1 bằng 1 tương ứng với –T ON :
T ON = bù 2 của FD44H = 028CH = 700 T ON = 700 MC = 700 s
Giá trị nạp cho Timer 0 lúc P1.1 bằng 0 tương ứng với –T OFF :
T OFF = bù 2 của FE0CH = 01F4H = 500 T OFF = 500 MC = 500 s
Như vậy chu kỳ nhiệm vụ là
T ON /(T ON + T OFF ) = 700/(700+500)= 58.33%