GIẢI NGÂN HÀNG ĐỀ THI KỸ THUẬT VI XỬ LÝ
Ngành đào tạo : Điện – Điện tử
Phan Văn Hiện - Email: – Date: 12/12/2017
Câu hỏi loại 1 điểm
Câu 1.1: Kể tên 3 loại bus thường thấy trong một hệ vi xử lý? Nêu tóm tắt chức
năng của từng loại bus này ?
Trả lời :
3 loại bus thường thấy trong một hệ vi xử lí :
-
Address bus : Truyền địa chỉ tham chiếu tới các khu vực bộ nhớ và chỉ ra dữ
liệu được lưu giữ ở đâu trong không gian bộ nhớ
-
Data bus : Là các kênh truyền tải thông tin theo hai chiều giữa CPU và bộ nhớ
hoặc các thiết bị ngoại vi vào ra
-
Control bus : Phục vụ truyền tải các thông tin dữ liệu để điều khiển hoạt động
của hệ thống
Câu 1.2:
a) Họ vi xử lý ARM7 thuộc kiến trúc nào?
b) Phần lớn các vi xử lý ARM7 thực hiện các tập lệnh nào?
Trả lời:
a) Dòng ARM7 dựa trên kiến trúc Von Neumann sử dụng chung vùng nhớ để chứa dữ
liệu và chương trình, do đó dùng chung bus cho việc truy xuất dữ liệu và chương trình
b) Phần lớn các vi xử lí ARM7 thực hiện tập lệnh RISC
Câu 1.3:
a) Các bộ vi xử lý ARM thuộc kiến trúc CISC hay RISC?
b) Bộ vi xử lý ARM có tổng cộng bao nhiêu thanh ghi, mỗi thanh ghi có chiều dài
bao nhiêu bit?
Trả lời :
a) Các bộ kiến trúc ARM thuộc kiến trúc RISC
b) Bộ vi xử lý ARM có tổng cộng 37 thanh ghi, trong đó có 30 thanh ghi đa dụng, 6
thanh ghi trạng thái và 1 thanh ghi bộ đếm chương trình. Tất cả các thanh ghi đều có độ
dài 32 bit.
Câu 1.4:
Trong các chế độ hoạt động cơ bản của bộ vi xử lý ARM, các chế độ nào là chế độ
ưu tiên (Privileged mode), chế độ nào là chế độ không ưu tiên (Unprivileged mode),
các chế độ nào là chế độ ngoại lệ (Exception mode), các chế độ nào không phải là
chế độ ngoại lệ?
Trả lời :
Trong 7 chế độ của vi xử lý ARM, chế độ User là chế độ khơng ưu tiên, cịn lại 6 chế
độ đều là chế độ ưu tiên. Có hai chế độ User và System khơng phải là chế độ ngoại lệ,
cịn lại 5 chế độ đều là chế độ ngoại lệ.
Câu 1.5:
a) Trong bộ vi xử lý ARM, chế độ người dùng (User mode) có bao nhiêu thanh
ghi? Kể tên các thanh ghi dùng trong chế độ này?
b) Mỗi chế độ hoạt động cơ bản của bộ vi xử lý ARM đều có một tập con các thanh
ghi riêng có thể truy cập (đúng hay sai)?
Trả lời :
a) Trong chế độ User có tất cả 18 thanh ghi, trong đó có 16 thanh ghi da dụng (R0-R15)
và 2 thanh ghi hiển thị trạng thái. Trong 16 thanh ghi đa dụng thì có 3 thanh ghi R13R15 là các thanh ghi chức năng đặc biệt
-
R13: Dùng là con trỏ ngăn xếp
-
R14: Dùng làm thanh ghi kết nối chứa địa chỉ của chương trình khi chạy một
hàm con
-
R15: Thanh ghi bộ đếm chương trình
-
Thanh ghi trạng thái chương trình (CPSR) : Chứa thơng tin về trạng thái của
VXL ở thời điểm hiện tại
-
Thanh ghi lưu trữ trạng thái chương trình (SPSR) : Lưu trữ thông tin trạng thái
VXL trước khi VXL chuyển sang chế độ khác
b) Đúng
Câu 1.6:
a) Chế độ hệ thống (System mode) và chế độ người dùng (User mode) của bộ vi xử
lý ARM sử dụng cùng tập thanh ghi (đúng hay sai)?
b) Trong thanh ghi trạng thái chương trình của bộ vi xử lý ARM, bit I=1 có ý nghĩa
gì, bit F=1 có ý nghĩa gì?
Trả lời :
a) Đúng. Chỉ khác nhau là chế độ System cho phép thay đổi giá trị của CPSR
b) I = 1 : Cấm ngắt thường IRQ. F = 1 : Cấm ngắt nhanh FIQ
Câu 1.7:
Trong thanh ghi trạng thái chương trình của bộ vi xử lý ARM, các bit từ 31-28 có
chức năng gì? Các bít từ 7-0 có chức năng gì?
Trả lời :
Các bit từ 31-28 là các bit cờ trạng thái. 4 bit này bao gồm N, Z, C, V.
-
N = 1 khi kết quả phép tính trên ALU âm
-
Z = 1 khi kết quả phép tính trên ALU = 0
-
C = 1 khi kết quả phép tính trên ALU có nhớ
-
V = 1 khi kết quả phép tính trên ALU xảy ra hiện tượng tràn
Bit 7 và bit 6 là 2 bit ngắt của ARM.
-
I = 1 : Cấm ngắt thường IRQ
-
I = 0 : Cấm ngắt nhanh FIQ
Bit 5 là bit T biểu diễn trạng thái tập lệnh của ARM
-
T = 1: VXL hoạt động ở chế độ Thumb 16bit
-
T = 0: VXL hoạt động ở chế độ ARM 32bit
-
Các bit từ 4-0 biểu diễn chế độ hoạt động của ARM
Câu 1.8:
Việc xử lý ngoại lệ (Exception) trong vi xử lý ARM được điều khiển thông qua
việc sử dụng một vùng bộ nhớ gọi là bảng Vector. Hãy vẽ bảng vector này cùng
với các địa chỉ?
Trả lời :
Ngoại lệ
Chế độ hoạt động
Địa chỉ vector
Reset (Khởi động lại)
Supervisor (Giám sát)
0x00000000
Undefined instruction(Lệnh bị sai)
Undefined (Không xác
định)
0x00000004
Softwave Interrupt (Ngắt mềm)
Supervisor
0x00000008
Prefetch Abort (Không nạp được do
lệnh sai địa chỉ)
Abort
0x0000000C
Data Abort (Không nạp được do dữ
liệu sai địa chỉ)
Abort
0x00000010
Interrupt
Interrupt
0x00000018
Fast Interrupt
Fast Interrupt
0x0000001C
Câu 1.9:
a) Trong vi xử lý ARM, tại sao các truy cập bộ nhớ bắt buộc phải căn chỉnh (align)
kích thước truy cập một cách phù hợp?
b) Ngoại lệ (Exception) nào được sử dụng để phát hiện các truy cập dữ liệu không
được căn chỉnh bất hợp lệ?
Trả lời :
a) Vì ARM cho phép đánh địa chỉ các ơ nhớ theo kích thước 4 byte, 8 byte, 16 byte, 32
byte. Do vậy cần phải căn chỉnh kích thước để có thể truy cập ơ nhớ một cách chính xác
b) Alignment exceptions
Câu 1.10:
Endian có ý nghĩa gì? Bộ vi xử lý ARM7 hỗ trợ các loại hệ thống nhớ Endian nào?
Mô tả sự khác nhau của các loại này? Chế độ mặc định của vi xử lý ARM7 là loại
Endian nào?
Trả lời :
Endian là một thuật ngữ dùng để chỉ thứ tự ghi các byte của một từ vào ô nhớ. Có 2 loại
Endian là Big-endian và Little endian. Trong hệ thống nhớ Big-endian các byte có trọng
số lớn nhất được ghi vào các ơ nhớ có địa chỉ thấp nhất. Trong hệ thống Little-endian,
byte có trọng số nhỏ nhất được ghi và ơ nhớ có địa chỉ thấp nhất.
ARM7 hỗ trợ cả 2 loại hệ thống nhớ Endian. Chế độ mặc định của ARM7 là Littleendian
Câu 1.11:
a) Trong bộ vi xử lý ARM, các thanh ghi nào nằm trong nhóm “thấp” (Low group),
các thanh ghi nào nằm trong nhóm “cao” (High group) trong tập lệnh Thumb?
b) Trong bộ vi xử lý ARM, tất cả các lệnh Thumb buộc phải căn chỉnh (align) theo
biên giới (boundary) nào?
Trả lời :
a) Nhóm thấp : R0-R7
Nhóm cao : SP, LR, PC
b) 32bit hoặc 16bit
Câu 1.12:
a) Khi có reset lõi ARM ở chế độ (mode) và trạng thái (state) nào?
b) Trong thanh ghi trạng thái chương trình, nếu bit T=1 thì lõi ARM hoạt động ở
chế độ nào?
Trả lời :
a) Khi reset lõi ARM ở chế độ User và các cờ trạng thái đều bằng 0
b) Chế độ Thumb 16bit
Câu 1.13:
Nêu các đặc điểm của tập lệnh Thumb?
Trả lời :
Về chức năng tập lệnh Thumb giống như một tập con của tập lệnh ARM. Tất cả các
lệnh Thumb đều có độ dài 16 bit và đều được căn chỉnh theo định dạng haftword-aligned
trong bộ nhớ. Do vậy bit có trọng số thấp nhất của địa chỉ lệnh ln có giá trị 0. Một số
lệnh sử dụng bit có trọng số thấp nhất để xác định chế độ làm việc là ARM hay Thumb.
Tất cả các lệnh xử lí dữ liệu của Thumb đều thao tác trên các thanh ghi 32 bit. Ngồi ra
thì các lệnh này cũng xử lí các địa chỉ 32 bit để truy cập dữ liệu
Giống như ARM, tập lệnh Thumb có một số khả năng sau:
-
Thực hiện lệnh theo điều kiện đặt ra;
-
Truy cập thanh ghi;
-
Truy cập bộ dịch
Câu 1.14:
Thumb là tập lệnh bao nhiêu bit? Nêu 2 ưu điểm chính của tập lệnh Thumb so với
tập lệnh ARM?
Trả lời :
Các lệnh Thumb có chiều dài 16 bit
Ưu điểm của Thumb so với ARM:
-
Do mã lệnh ngắn hơn nên tiết kiệm được dung lượng bộ nhớ dành cho chương
trình
-
Hiệu suất cao hơn ARM do ít sai sót trong q trình nạp lệnh vào bộ đệm lệnh
Câu 1.15:
Nêu các đặc điểm của tập lệnh ARM?
Trả lời :
Tất cả các lệnh ARM đều có chiều dài 32 bit. Các lệnh được căn chỉnh 32 bit nên hai
bit có trọng số thấp nhất của mã lệnh ln bằng 0. Tuy nhiên, một số lệnh sử dụng bit
thấp nhất này để chuyển chế độ từ ARM sang Thumb hoặc ngược lại.
Các lệnh của ARM có thể chia thành các nhóm theo chức năng như sau:
-
Lệnh rẽ nhánh
-
Lệnh xử lý dữ liệu
-
Lệnh nạp dữ liệu từ ô nhớ vào thanh ghi đơn và ngược lại
-
Lệnh nạp dữ liệu từ các ô nhớ vào các thanh ghi và ngược lại
-
Lệnh truy cập thanh ghi trạng thái
-
Lệnh đồng xử lý
Tập lệnh ARM có một số khả năng sau:
-
Thực hiện lệnh theo điều kiện đặt ra
-
Truy cập thanh ghi
-
Truy cập bộ dịch.
Câu 1.16:
Để chuyển giữa trạng thái ARM và Thumb ta cần phải sử dụng lệnh nào? Viết cú
pháp của lệnh khi muốn chuyển trạng thái của vi xử lý từ ARM sang Thumb và
ngược lại?
Trả lời :
Để chuyển đổi trạng thái giữa ARM và Thumb ta sử dụng lệnh BX
Cú pháp
BX <điều kiện> Ri
-
Nếu LSB của Ri = 0 thì sẽ chuyển ARM sang Thumb
-
Nếu LSB của Ri = 1 thì sẽ chuyển Thumb sang ARM
Câu 1.17:
a) Nêu ưu điểm chính của tập lệnh ARM so với tập lệnh Thumb?
b) Lệnh MOVNES R1,R4,ASL #3 thực hiện cái gì?
Trả lời :
a) - Tập lệnh ARM truy cập được nhiều thanh ghi hơn
- Tập lệnh ARM hỗ trợ lệnh nhiều địa chỉ so với chỉ 2 địa chỉ của tập lệnh Thumb
b) Dịch trái số học thanh ghi R4 sau đó chuyển vào thanh ghi R1 trong trường hợp giá
trị R4 sau khi dịch khơng bằng R1. Kết quả có tác động đến cờ.
Câu 1.18:
Nêu các giai đoạn (stage) trong đường ống (pipeline) của họ ARM7? Giải thích
chức năng của mỗi giai đoạn?
Trả lời :
ARM7 có 3 giai đoạn là:
1. FETCH – Nạp lệnh từ bộ nhớ
2. DECODE – Giải mã lệnh
3. EXECUTE – Thự hiện lệnh
Câu 1.19:
Mô tả sơ lược cấu trúc của vi điều khiển 8051? Vẽ sơ lược sơ đồ chân của 8051.
Trả lời :
Câu 1.20:
Mô tả tổ chức bộ nhớ của vi điều khiển 8051?
Trả lời :
Các vi điều khiển thuộc họ 8051 đều tổ chức thành 2 không gian : Bộ nhớ chương trình
và bộ nhớ dữ liệu.
-
Bộ nhớ chương trình (ROM, EPROM) là bộ nhớ chỉ đọc, có thể mở rộng tối đa
64Kbyte
-
Bộ nhớ dữ liệu (RAM) tồn tại độc lập so với bộ nhớ chương trình. Họ vi điều
khiển 8051 có bộ nhớ dữ liệu tích hợp trên chip nhỏ nhất là 128byte và có thể
mở rộng với bộ nhớ dữ liệu ngoài lên tới 64kByte
Câu 1.21:
Vi điều khiển 8051 hỗ trợ các chế độ đánh địa chỉ nào? Cho ví dụ ứng với mỗi kiểu
đó.
Trả lời :
8051 hỗ trợ 5 chế độ đánh địa chỉ:
Chế độ tức thì
MOV A, #69H
;Nạp giá trị 69H cho thanh ghi A
MOV R4, #96
;Nạp giá trị 96 cho thanh ghi R4
MOV DPTR, #6969H ;Nạp giá trị 6969H cho con trỏ dữ liệu DPTR
Chế độ đánh địa chỉ theo thanh ghi
MOV A, R0
; Sao chép nội dung thanh ghi R0 vào thanh ghi A
MOV R2, A
; Sao chép nội dung thanh ghi A vào thanh ghi R0
Chế độ đánh địa chỉ trực tiếp
MOV R0, 69H
; Lưu nội dung của ơ nhớ có địa chỉ 69H vào thanh ghi R0
MOV 69H, R0
; Lưu nội dung của thanh ghi R0 vào ơ nhớ có địa chỉ 69H
Chế độ đánh địa chỉ gián tiếp qua thanh ghi
MOV A, @R0
; Chuyển nội dung ơ nhớ có địa chỉ là giá trị của R0 vào A
MOV @R0, A
; Chuyển nội dung của A vào ơ nhớ có địa chỉ là giá trị R0
Chế độ đánh địa chỉ số
MOVC A, @A+DPTR ; Nạp giá trị trong con trỏ dữ liệu DPTR được trỏ bởi A vào A
Câu 1.22:
Viết chương trình cho vi điều khiển 8051 để sao chép giá trị 20H vào ngăn nhớ
RAM tại địa chỉ 30H đến 34H bằng cách sử dụng chế độ đánh địa chỉ trực tiếp.
Trả lời:
ORG 00H
MAIN:
MOV A, #20H
; Nạp cho thanh ghi A giá trị 20H
MOV 30H, A
; Lưu giá trị thanh ghi A vào ơ nhớ có địa chỉ 30H
MOV 31H, A
; Lưu giá trị thanh ghi A vào ơ nhớ có địa chỉ 31H
MOV 32H, A
; Lưu giá trị thanh ghi A vào ơ nhớ có địa chỉ 32H
MOV 33H, A
; Lưu giá trị thanh ghi A vào ơ nhớ có địa chỉ 33H
MOV 34H, A
; Lưu giá trị thanh ghi A vào ơ nhớ có địa chỉ 34H
END
Câu 1.23:
Viết chương trình cho vi điều khiển 8051 để sao chép giá trị 20H vào ngăn nhớ
RAM tại địa chỉ 30H đến 32H bằng cách sử dụng chế độ đánh địa chỉ gián tiếp
thanh ghi.
Trả lời :
ORG 00H
MAIN:
MOV A, #20H
; Nạp cho thanh ghi A giá trị 20H
MOV R0, #30H
; Nạp cho thanh ghi R0 giá trị 30H
MOV R1, #31H
; Nạp cho thanh ghi R1 giá trị 31H
MOV R2, #32H
; Nạp cho thanh ghi R2 giá trị 32H
MOV @R0, A
; Lưu giá trị thanh ghi A vào ô nhớ được trỏ bởi R0
MOV @R1, A
; Lưu giá trị thanh ghi A vào ô nhớ được trỏ bởi R1
MOV @R2, A
; Lưu giá trị thanh ghi A vào ô nhớ được trỏ bởi R2
END
Câu 1.24:
Viết chương trình cho vi điều khiển 8051 để sao chép giá trị 20H vào ngăn nhớ
RAM tại địa chỉ 30H đến 36H bằng cách sử dụng vòng lặp và chế độ đánh địa chỉ
gián tiếp thanh ghi.
Trả lời :
ORG 00H
MAIN:
LOOP:
MOV A, #20H
; Nạp cho thanh ghi A giá trị 20H
MOV R0, #30H
; Nạp cho thanh ghi R0 giá trị 30H
MOV @R0, A
; Lưu giá trị thanh ghi A vào ô nhớ được trỏ bởi R0
INC R0
; Tăng giá trị thanh ghi R0 thêm 1
CJNE R0, #37H, LOOP
; So sánh và nhảy đến LOOP nếu R0 khác
#37H
END
Câu 1.25:
Viết đoạn chương trình cho vi điều khiển 8051 để tạo chuỗi xung vuông với độ đầy
xung 50% trên bit 2 của cổng 1. Giả sử đã có hàm tạo trễ là DELAY.
Trả lời :
Độ đầy xung 50% => Time cao = time thấp
ORG 00H
MAIN:
DELAY:
CPL P1.2
; Đảo trạng thái trên P1.2
CALL DELAY
; Gọi hàm DELAY
SJMP MAIN
; Trở lại MAIN
…………….
; Hàm có sẵn
RET
END
Câu 1.26:
Viết đoạn chương trình cho vi điều khiển 8051 để tạo chuỗi xung vuông với độ đầy
xung 75% trên bit 0 của cổng 1. Giả sử đã có hàm tạo trễ là DELAY
Trả lời :
Độ đầy xung 75% => Time cao = 3 time thấp
ORG 00H
MAIN:
SETB P1.0
; P1.0 = 1
CALL DELAY
; Gọi hàm DELAY
CALL DELAY
; Gọi hàm DELAY
CALL DELAY
; Gọi hàm DELAY
CLEAR P1.0
; P1.0 = 0
CALL DELAY
; Gọi hàm DELAY
DELAY:
SJMP MAIN
; Trở lại MAIN
…………….
; Hàm có sẵn
RET
END
Câu 1.27:
Mơ tả thanh ghi TMOD của vi điều khiển 8051 và chức năng các bit của thanh
ghi?
Trả lời :
MSB
GATE
LSB
C/T
M1
M0
GATE
Timer 1
C/T
M1
M0
Timer 0
-
TMOD là thanh ghi 8bit để thiết lập các chế độ của bộ định thời. 4 bit cao sử dụng
cho Timer 1, 4 bit thấp sử dụng cho Timer 0
-
GATE : Sử dụng để chọn chế độ khởi động bộ định thời bằng phần cứng hoặc phần
mềm
-
C/T : Sử dụng để chọn chế độ Timer/Counter
-
M1, M0 : Để chọn chế độ của bộ định thời
Câu 1.28:
Mô tả thanh ghi TCON của vi điều khiển 8051 và chức năng các bit của thanh ghi?
Trả lời :
MSB
TF1
LSB
TR1
TF0
TR0
IE1
IT1
IE0
-
TCON là thanh ghi 8 bit dùng để điều khiển các bộ định thời và ngắt ngoài
-
TFx: Cờ tràn Timer x
-
TRx : Khởi động Timer x
-
IEx : Cờ ngắt ngồi x
-
ITx : Cho phép ngắt ngồi x
IT0
Câu 1.29:
Trình bày các bước lập trình ở chế độ Mode 1 cho bộ đếm trong vi điều khiển
8051?
Trả lời :
B1 : Nạp giá trị cho thanh ghi TMOD giá trị 1H hoặc 10H để chọn chế độ 1
B2 : Nạp giá trị cho thanh ghi TH và thanh ghi TL tương ứng
B3 : Khởi động bộ định thời tương ứng
B4 : Duy trì kiểm tra cờ tràn TF. Nếu cờ được bật lên cao thì thốt khỏi vịng lặp
B5 : Dừng bộ định thời
B6 : Xóa cờ TF
B7 : Quay trở lại bước 2
Câu 1.30:
Trình bày các bước lập trình ở chế độ Mode 2 cho bộ đếm trong vi điều khiển
8051?
Trả lời :
B1 : Nạp cho thanh ghi TMOD giá trị 2H hoặc 20H để chọn chế độ 2
B2 : Nạp giá trị cho thanh ghi TH
B3 : Khởi động bộ định thời
B4 : Duy trì kiểm tra cờ TF. Nếu cờ tràn được bật lên cao thì thốt khỏi vịng lặp
B5 : Xóa cờ TF
B6 : Quay trở lại B4
Câu 1.31:
Với tần số XTAL của vi điều khiển 8051 là 11.0592MHz, hãy tìm giá trị TH1 cần
thiết để có tốc độ baud sau :
a.
9600
b. 4800
c. 2400
Trả lời :
1
11.0592
𝐹𝑡ℎạ𝑐ℎ𝑎𝑛ℎ =
= 0.9216 (𝑀𝐻𝑧)
12
12
1
0.9216
𝐹𝑢𝑎𝑟𝑡 =
𝐹𝑚á𝑦 =
= 0.0288 (𝑀𝐻𝑧)
32
32
=>Tuart = 34.7 (us)
𝐹𝑚á𝑦 =
Ta có :
𝑇𝑖𝑚𝑒 𝑐ầ𝑛 𝑡ạ𝑜
𝑇𝑢𝑎𝑟𝑡
hoặc Giá trị nạp = 256 – (Fthạch_anh / 12 / 32 / baud)
10
104.17
𝑇𝑖𝑚𝑒 𝑐ầ𝑛 𝑡ạ𝑜 =
= 104.17 (𝑢𝑠) => 𝐺𝑖á 𝑡𝑟ị 𝑛ạ𝑝 = 256 −
= 253
9600
34.7
=> Giá trị nạp cho TH1 = 253 = 0FDH
𝐺𝑖á 𝑡𝑟ị 𝑛ạ𝑝 = 256 −
b) TH1 = 250 = 0FAH
c) TH1 = 244 = 0F4H
Câu 1.32:
Trình bày các bước lập trình vi điều khiển 8051 để truyền dữ liệu nối tiếp ?
Trả lời :
B1: Nạp cho thanh ghi TMOD giá trị 2H hoặc 20H để chọn chế độ 2
B2: Nạp giá trị cho thanh ghi TH1 giá trị tương ứng để cài đặt tốc độ baud
B3: Nạp giá trị 50H cho thanh ghi SCON để cài đặt chế độ 1
B4: Khởi động bộ định thời Timer1
B5: Xóa cờ TI
B6: Chuyển byte kí tự cần truyền vào thanh ghi SBUF
B7: Kiểm tra việc truyền dữ liệu hồn tất bằng cách duy trì kiểm tra cờ TI. Nếu cờ TI
bật lên 1 tức là việc chuyển dữ liệu hồn tất
B8: Quay trở lại bước 5
Câu 1.33:
Trình bày các bước lập trình vi điều khiển 8051 để nhận dữ liệu nối tiếp ?
Trả lời :
B1: Nạp cho thanh ghi TMOD giá trị 2H hoặc 20H để chọn chế độ 2
B2: Nạp giá trị cho thanh ghi TH1 giá trị tương ứng để cài đặt tốc độ baud
B3: Nạp giá trị 50H cho thanh ghi SCON để cài đặt chế độ 1
B4: Khởi động bộ định thời Timer1
B5: Xóa cờ RI
B6: Kiểm tra xem việc nhận dữ liệu thành công chưa bằng cách kiểm tra cờ RI. Nếu cờ
RI bật lên 1 thì đã nhận thành cơng dữ liệu
B7: Dữ liệu nằm trong thanh ghi SBUF chính là dữ liệu nhận được
B8: Quay trở lại B5
Câu 1.34:
Trình bày các loại ngắt của vi điều khiển 8051 và các cờ ngắt tương tứng?
Trả lời :
Loại ngắt
Cờ ngắt
Ngắt Reset
RESET
Ngắt ngoài 0
IE0
Ngắt Timer 0
TF0
Ngắt ngồi 1
IE1
Ngắt Timer 1
TF1
Ngắt truyền thơng nối tiếp
TI và RI
Câu 1.35:
Mô tả thanh ghi cho phép ngắt IE trong vi điều khiển 8051 và chức năng các bit
của thanh ghi?
Trả lời:
Thanh ghi IE là thanh ghi 8 bit cho phép cài đặt cho phép hoặc cấm ngắt
Bit
Tên
Địa chỉ
Chức năng
7
EA
AFH
Cho phép/Cấm hoạt động của thanh ghi
6
-
AEH
Chưa sử dụng
5
ET2
ADH
Cho phép ngắt Timer 2
4
ES
ACH
Cho phép ngắt truyền thông nối tiếp
3
ET1
ABH
Cho phép ngắt Timer 1
2
EX1
AAH
Cho phép ngắt ngoài 1
1
ET0
A9H
Cho phép ngắt Timer 0
0
EX0
A8H
Cho phép ngắt ngồi 0
Câu 1.36:
Tìm giá trị của thanh ghi IE của vi điều khiển 8051 trong các trường hợp sau đây
:
a. Cho phép ngắt cổng nối tiếp, ngắt Timer1 và ngắt phần cứng ngoài 0.
b. Cho phép ngắt cổng nối tiếp, ngắt Timer2 và ngắt phần cứng ngoài 1.
c. Cho phép ngắt Time0 và ngắt phần cứng ngoài 0.
d. Cấm tất cả các loại ngắt.
Trả lời :
a) IE = 10011001 = 99H
b) IE = 10110100 = B4H
c) IE = 10000011 = 0x83
Câu hỏi loại 2 điểm
Câu 2.1:
Vẽ sơ đồ khối tổng quát của một hệ vi xử lý? Nêu tóm tắt chức năng của các khối
chính trong sơ đồ?
Trả lời :
Hệ vi xử lí bao gồm :
-
CPU : Có nhiệm vụ tính tốn và điều khiển
-
Bộ nhớ (ROM, RAM) : Lưu trữ dữ liệu và lệnh cho CPU xử lí
-
Thiết bị vào : Tiếp nhận dữ liệu
-
Thiết bị ra : Xuất tín hiệu ra ngồi
Câu 2.2:
a. Nêu sự khác nhau giữa bộ vi xử lý CISC và RISC? Cho ví dụ minh họa?
b. Trong vi xử lý ARM, các thanh ghi nào dùng để lưu bộ đếm chương trình (PC)
và thanh ghi kết nối (Link Register)? Thanh ghi r13 thường được dùng để lưu cái
gì?
Trả lời :
a)
RISC
CISC
-
Tập lệnh được đơn giản hóa. Thời gian thực hiện các câu lệnh là như nhau
Tập lệnh phức tạp, mỗi lệnh có thể sử
dụng cho nhiều chức năng
-
Kích thước bán dẫn nhỏ, cần ít Transistor
Kích thước bán dẫn lớn, cần nhiều
transistor
-
Thời gian phát triển sản phẩm ngắn, cấu hình mạnh
-
Mỗi câu lệnh phục vụ một mục đích
hẹp, tốc độ xử lí nhanh nhưng kém
thân thiện
Các câu lệnh có tốc độ xử lí chậm
nhưng thân thiện
Ví dụ:
CISC: MULT 2:3, 5:2
RISC: MOV A, 2:3
MOV B, 5:2
MULT A, B
b)
Lưu bộ đếm chương trình
R15
Thanh ghi kết nối
R14
Con trỏ ngăn xếp
R13
Câu 2.3:
Bộ vi xử lý ARM có bao nhiêu chế độ hoạt động cơ bản? Kể tên và mơ tả tóm tắt
mỗi chế độ? Chế độ nào truy cập vào ít thanh ghi nhất (nêu số liệu để so sánh)?
Trả lời:
Bộ xử lí ARM có 7 chế độ cơ bản :
Chế độ User
VXL chạy các chương trình và các ứng dụng 17 thanh ghi
thơng thường
Chế độ System
VXL có thể truy cập và đọc, ghi tồn bộ 17 thanh ghi
thành ghi CPRS
Chế độ Supervisor
Khi hệ thống khởi động hoặc khi có chương 18 thanh ghi
trình ngắt mềm
Chế độ Abort
Khi VXL không thể truy cập bộ nhớ
Chế độ Undefined
Khi VXL gặp một lệnh không xác định hoặc 18 thanh ghi
không được hỗ trợ
Chế độ IRQ và FIQ
VXL chạy ở chế độ ngắt
18 thanh ghi
18 thanh ghi
Câu 2.4:
a. Khi có một ngoại lệ (Exception) xảy ra, lõi ARM thực thi các cơng việc gì?
b. Để trở về sau khi thực thi xong một ngoại lệ (Exception), bộ xử lý ngoại lệ cần
thực thi các công việc gì?
Trả lời :
a) Khi có một ngoại lệ xảy ra thì ARM sẽ thực hiện:
-
Lưu địa chỉ tiếp theo ngay sau lệnh gọi ngoại lệ trong chương trình chính vào
thanh ghi LR
-
Copy nội dung CPSR vào thanh ghi SPSR tương ứng với mỗi chế độ
-
Đặt 5 bit chế độ của CPSR tương ứng với chế độ ngoại lệ
-
Đặt bit T=0 để thiết lập trạng thái ARM state
-
Đặt bit 7 và bit 6 trong CPSR. Điều này sẽ cấm các ngắt thường và ngắt nhanh
-
Lưu địa chỉ vector ngoại lệ vào thanh ghi PC để thực thi chương trình ngoại lệ
b) Để trở về sau khi thực hiện xong một ngoại lệ bộ xử lí sẽ thực hiện:
-
Copy giá trị thanh ghi LR vào thanh ghi PC
-
Lấy lại giá trị thanh ghi trạng thái CPSR từ SPSR
-
Xóa các cờ cấm ngắt nếu chúng được lập khi chuyển qua trạng thái xử lí ngoại
lệ
Câu 2.5:
Mơ tả hoạt động của các lệnh sau trong vi xử lý ARM:
B <Nhãn>
BL <Chương trình con>
BX <thanh ghi>
Trả lời :
-
B <nhãn> : Rẽ nhánh không điều kiện đến nhãn
-
BL <Chương trình con> : Rẽ nhánh đến chương trình con. Khi kết thúc chương
trình con sẽ quay trở lại địa chỉ lưu trong thanh ghi LR.
-
BX <thanhghi> : Rẽ nhánh gián tiếp đến địa chỉ chứa trong <thanh ghi> và chọn
tập lệnh Thumb hoặc ARM dựa vào bit LSB của <thanh ghi>
Câu 2.6:
a. Các thành phần của lõi vi xử lý ARM7? Vẽ hình minh họa.
b. Nêu các đặc điểm của họ ARM7TDMI? Ý nghĩa của các từ viết tắt T, D, M, I
trong ký hiệu?
Trả lời :
a)
Cấu trúc của ARM7:
-
Register bank: 2 cổng đọc, 1 cổng ghi
-
Barrel shifter: Dịch hoặc quay toán hạng
-
ALU: Khối tính tốn
-
Address register và Incrementer: Thanh ghi địa chỉ và bộ tăng
-
Các thanh ghi dữ liệu: Lưu trữ dữ liệu nhận từ bộ nhớ hoặc gửi từ bộ nhớ
-
Intruction decode and control: Khối giải mã và điều khiển
b) Các đặc điểm của họ ARM7TDMI và ý nghĩa của T,D,M,I:
-
3 tác vụ trong dòng chảy lệnh : Đọc, giải mã, thực hiện
-
Kiến trúc Von Neuman
-
T : Thumb – Hỗ trợ tập lệnh Thumb
-
D : Debugger – Hỗ trợ gỡ lỗi
-
M : Multiplier – Hỗ trợ nhân 64bit
-
I : ICE - Hỗ trợ gỡ lỗi trên JTAG
Câu 2.7:
a. Kể tên các nhóm tín hiệu chính trong lõi ARM7TDMI?
b. Tại sao kỹ thuật đường ống (pipeline) lại được sử dụng trong các họ vi xử lý?
Họ ARM7 sử dụng pipeline mấy giai đoạn (stage)? Bộ đếm chương trình (PC) trỏ
tới lệnh đang được tìm kiếm hay lệnh đang được thực thi?
Trả lời :
a) Các nhóm tín hiệu chính trong ARM7 là:
-
MCLK
-
nWAIT
-
nRESET
-
nM[0:4]
-
Các chân tín hiệu ngắt : nIRQ và nFIQ
-
Các chân điều khiển bus : ALE và DEE
-
Chân cấp nguồn : VDD, VSS
-
Giao diện với bộ nhớ : A[31:0], D[31:0], nENOUT, mMREQ, SEQ, nRW
-
Giao diện quản lí bộ nhớ : ABORT
-
Giao diện đồng xử lí : nCPI, CPA, CPB
b) - Kỹ thuật đường ống Pipeline được sử dụng trong các họ vi xử lí vì nó giúp tăng
tốc độ xử lí cho phép thực hiện các lệnh một cách đồng thời thay vì tuần tự.
ARM7 sử dụng pipeline 3 giai đoạn:
+ FETCH : Đọc lệnh
+ DECODE : Giải mã
+ EXECUTE : Thực thi
-
Bộ đếm chương trình PC trỏ tới lệnh kế tiếp đang được tìm kiếm
Câu 2.8:
a. Một lệnh số học đơn giản (VD: lệnh ADD) có thể được thực hiện trong mấy chu
kỳ (cycle)?
b. Các loại dữ liệu nào có thể được đánh địa chỉ trong bộ nhớ?
c. Nêu các ưu điểm của việc thực thi lệnh có điều kiện? Mơ tả việc thực thi lệnh
ADDNES r1, r0, r2?
Trả lời:
a) Một lệnh ADD có thể được thực hiện trong 3 chu kì (Fetch, Decode, Execute)
b) Các loại dữ liệu có thể đánh địa chỉ trong ơ nhớ:
+ 8 bit có dấu và khơng dấu
+ 16 bit có dấu và khơng dấu
+ 32 bit có dấu và khơng dấu
Với các dữ liệu ngắn hơn các bit sẽ thay thế bằng bit “0”
c) Việc thực thi lệnh có điều kiện giúp giải quyết các yêu cầu bài toán dễ dàng hơn.
Lệnh ADDNES R1, R0, R2
ADD : Cộng giá trị R0 và R2, kết quả lưu trong R1
NE: Điều kiện cộng là R0 khác R2
S : Cho phép N,Z,C,V thay đổi để phản ánh kết quả
Câu 2.9:
Cho R1 = 0x8234 5678, hãy mô tả hoạt động của các lệnh sau và xác định kết quả
sau khi mỗi lệnh được thực thi:
Trả lời :
MOV R0, R1, LSL #2 ;Dịch trái logic R1 2 lần, kết quả lưu vào R0; R0 = 0x08D159E0
MOV R2, R1, ASR #1 ;Dịch phải số học R1 1 lần, kết quả lưu vào R2; R2 =
0xC11A2B3C
MOV R3, R1, LSR #3 ;Dịch phải logic R1 3 lần, kết quả lưu vào R3; R3 = 0x10468ACF
MOV R4, R1, ROR #2 ;Quay phải R1 2 lần, kết quả lưu vào R4; R4 = 0x208D159E
Câu 2.10:
Mô tả hoạt động của từng lệnh trong đoạn chương trình sau đây, nêu chức năng
của chương trình?
Trả lời:
LOOP
MOV R5, #10
; Nạp R5 = 10
MOV R4, #0
; Nạp R4 = 0
LDR R0, [R6], #4
; Nạp R0 = mem[R6] sau đó R6 = R6+4;
LDR R1, [R7], #4
; Nạp R1 = mem[R7] sau đó R7 = R7+4;
MLA R4, R0, R1, R4 ; R4 = (R0*R1)+R4
SUBS R5, R5, #1
; R5 = R5-1 có ảnh hưởng NZCV
BNE LOOP
; Nhảy đến LOOP nếu Z = 0
Chức năng:
Tính giá trị biểu thức (R4 = mem[R6]*mem[R7] + R4) 10 lần với giá trị ban đầu:
R4 = 0;
Sau mỗi vịng lặp thì :
R6 = R6+4; R7 = R7+4; R4 = mem[R6]*mem[R7] + R4;
Câu 2.11:
Cho một chương trình như sau:
a. Mô tả hoạt động của từng lệnh trong chương trình (giữa Main và END)
b. Nêu chức năng của chương trình và xác định kết quả sau khi thực hiện chương
trình?
Trả lời :
TTL
Vidu1
AREA
Program,CODE,READONLY
ENTRY
Main
LDR
R1, Value
; Nạp giá trị tại nhãn Value vào R1
MVN
R1, R1
; Đảo bit R1; R1 = ~R1
STR
R1, Result
; Lưu R1 vào Result
SWI
&11
; Dừng chương trình
Value
DCD
&B231
; Mảng 32bit
Result
DCD
0
; Mảng kết quả
END
b) Chức năng:
Lấy giá trị B231 lưu trong Value nạp vào R1. Tiến hành đảo ngược các bit của R1 rồi
lưu kết quả vào Result
Kết quả: Result = FFFF4DCE
Câu 2.12:
a. Sử dụng các lệnh hợp ngữ ARM để viết lại đoạn mã nguồn C dưới đây:
if(r0==0)
r1 = r1 – 1;
else
r2 = r2 + 1;
b) Các lệnh xử lý dữ liệu thường được chia thành các nhóm nào? Mỗi nhóm cho
2 ví dụ minh họa?
Trả lời :
AREA
Program,CODE,READONLY
ENTRY
Main
CMP
R0, #0
; So sánh R0 với 0
ADDNE R2, #1
; Nếu không bằng R2 = R2+1
SUBEQ
; Nếu bằng R1 = R1-1
R1, #1
END
b) Các lệnh xử lí dữ liệu thường được chia thành các nhóm:
Nhóm lệnh di chuyển dữ liệu : MOV, MVN
Nhóm lệnh số học : ADD, SUB
Nhóm lệnh so sánh : CMP, CMN
Nhóm lệnh nhãn : MLA, MLU
Câu 2.13:
Trong 8051, giả sử cổng P0 được nối tới một cảm biến nhiệt độ. Hãy viết chương
trình hợp ngữ đọc và so sánh với mức nhiệt độ chuẩn là 100oC. Kết quả so sánh
được xử lý như sau:
Nếu T = 100 thì A = 100
Nếu T < 100 thì R1 = T
Nếu T > 100 thì R2 = T
Trả lời:
ORG
00H
MOV
A, P0
; Lấy giá trị của P0 vào A
CJNE
A, #100, KHAC
; Nhảy đến KHAC nếu A khác 100
MOV
A, #100
; Nếu bằng thì gán A = 100
SJMP
EXIT
; Nhảy đến EXIT
JC
NHOHON
; Nhảy đến nhỏ hơn nếu C = 1
MOV
R2, A
; Nếu lớn hơn thì R2 = T
SJMP
EXIT
NHOHON: MOV
R1, A
MAIN:
KHAC:
EXIT:
; Nêí nhỏ hơn thì R1 = T
END
Giải thích : Lệnh CJNE op1, op2, label sẽ so sánh op1 và op2; Nếu op1 khác op2 thì sẽ
nhảy đến nhãn label. Lúc này sẽ xảy ra 2 trường hợp:
Nếu op1
Nếu op1>op2 thì cờ CY = 0
Câu 2.14:
Viết chương trình hợp ngữ lấy 10 byte trong RAM nội của 8051 có địa chỉ bắt đầu
là 30H và ghi ra RAM ngoài ở địa chỉ bắt đầu là 2000H.
Trả lời:
MAIN:
LOOP:
ORG
00H
MOV
R0, #30H
; A = #30H
MOV
DPTR, #2000H
; DPTR = #2000H
MOV
R1, #10H
; R1 = #10H
MOV
A, @R0
; A = [R0]
MOVX @DPTR, A
; Ghi vào RAM ngoài giá trị A tại ô nhớ trỏ
bởi DPTR
INC
R0
; R0 = R0+1
INC
DPTR
; DPTR = DPTR+1
DJNZ
R1, LOOP
; Giảm R1 đi 1 và nhảy đến LOOP nếu R1
khác 0
END
Câu 2.15:
Viết chương trình hợp ngữ cho vi điều khiển 8051 điều kiển 1 LED đơn tại chân
P2.0 nhấp nháy với tần số 1000Hz, thời gian nghỉ bằng thời gian sáng, sử dụng bộ
định thời Timer0 ở chế độ 1 (không dùng ngắt). Biết tần số của thạch anh được sử
dụng là 12MHz
Trả lời:
Fmáy = 1/12 Ft = 1 MHz => Tmáy = 1us
F = 1000Hz => T = 1000 us => Thời gian cần tạo trễ Tcần = 500us
Vậy cần 500us/1us = 500 chu kì máy
Vậy giá trị cần nạp cho TH và TL là : 65536 – 500 = 65036 = FE0C
TH = 0FEH
TL = 0CH
ORG
00H
MAIN:
MOV
TMOD, #1H
; Timer0 chế độ 1
LOOP:
MOV
TL0, #0CH
; Nạp TL0
MOV
TH0, #0FEH
; Nạp TH0
SETB
TR0
; Khởi động bộ định thời
JNB
TF0, $
; Lặp nếu TF0 = 0
CLR
TR0
; Dừng bộ định thời
CLR
TF0
; Xóa cờ TF
CPL
P2.0
; P2.0 = ~P2.0
SJMP
LOOP
; Quay trở lại LOOP
END
Câu 2.16:
Viết chương trình hợp ngữ cho vi điều khiển 8051 tạo xung vuông trên chân P2.1
bằng bộ định thời Timer1 ở chế độ 1 (khơng dùng ngắt). Xung có tần số 4000Hz
và độ rộng xung bằng 50% chu kỳ của xung. Biết tần số của thạch anh được sử
dụng là 12MHz.
Trả lời :
Fmáy = 1/12 Ft = 1 MHz => Tmáy = 1us
F = 4000Hz => T = 250 us => Thời gian cần tạo trễ Tcần = 125 us
Vậy cần 125us/1us = 125 chu kì máy
Vậy giá trị cần nạp cho TH và TL là : 65536 – 125 = 65411 = FF83
TH = 0FFH
TL = 83H
ORG
00H
MAIN:
MOV
TMOD, #10H
; Timer1 chế độ 1
LOOP:
MOV
TL1, #0FFH
; Nạp TL1
MOV
TH1, #83H
; Nạp TH1
SETB
TR1
; Khởi động bộ định thời
JNB
TF1, $
; Lặp nếu TF1 = 0
CLR
TR1
; Dừng bộ định thời
CLR
TF1
; Xóa cờ TF
CPL
P2.1
; P2.1 = ~P1.0
SJMP
LOOP
; Quay trở lại LOOP
END
Câu 2.17:
Giả sử xung đồng hồ ngoài được cấp tới chân P3.4 của vi điều khiển 8051. Màn
hình hiển thị được nối với 8051 tại cổng P2 để đếm số xung. Hãy viết chương trình
hợp ngữ cho bộ đếm Timer0 ở chế độ 2 để đếm các xung và hiển thị trạng thái của
số đếm TL0 trên cổng P2.
Trả lời:
ORG
00H
MOV
TMOD, #6H
; Timer0 chế độ 2, C/T=1
MOV
TL0, #0H
; Nạp TL0 giá trị ban đầu
LOOP1:
SETB
TR0
; Khởi động Timer0
LOOP2:
MOV
A, TL0
; Chuyển giá trị từ TL0 vào A
MOV
P2, A
; Hiển thị giá trị
JNB
TF0, LOOP2
; Lặp lại khi cờ chưa tràn
CLR
TR0
; Dừng bộ định thời
CLR
TF0
; Xóa cờ TF
MOV
TL0, #0H
; Nạp lại TL0
SJMP
LOOP1
; Chạy lại Timer0
MAIN:
END