Tải bản đầy đủ (.pdf) (39 trang)

Giải ngân hàng kỹ thuật vi xử lý

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1013.93 KB, 39 trang )

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 op1Nế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


×