Tài liệu Bài giảng Kỹ thuật vi xử lý: TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA ĐIỆN-ĐIỆN TỬ
BÀI GIẢNG
KỸ THUẬT VI XỬ LÝ
Hưng Yên 2015
(Tài liệu lưu hành nội bộ)
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 1
CHƢƠNG 1: Tổng quan hệ vi xử lý
1.1 Hệ thống số có liên quan đến vi xử lý
Hệ đếm thập phân (Decimal): Hệ đếm thập phân còn gọi là hệ đếm cơ số mƣời và nó
đƣợc biểu diễn bởi 10 con số từ (0,1,2,3,4,5,6,7,8,9 ) những con số này đƣợc sử dụng rất nhiều
trong khoa học kỹ thuật cũng nhƣ trong đời sống hàng ngày, khi biểu diễn số thập phân thì
dứng sau dãy số thƣờng có chữ D.
Ví dụ: Ba nghìn Chín trăm Bảy mƣơi Tám đƣợc biểu diễn nhƣ sau
3978 = 3x10
3
+ 9x10
2
+ 7x10
1
+ 8x10
0
= 3000 + 900 + 70 + 8
Hệ đếm thập lục phân (Hexadecimal): Hệ đếm thập phân còn gọi là hệ đếm cơ số mƣời
sáu và nó đƣợc biểu diễn bởi 16 ký số (0,1,2,3,4,5,6,7,8,9,B,C,D,E,F) những con số này đƣợc
sử dụng rất nhiều trong khoa học kỹ thuật đặc biệt là khoa họ...
124 trang |
Chia sẻ: putihuynh11 | Lượt xem: 530 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Kỹ thuật vi xử lý, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA ĐIỆN-ĐIỆN TỬ
BÀI GIẢNG
KỸ THUẬT VI XỬ LÝ
Hưng Yên 2015
(Tài liệu lưu hành nội bộ)
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 1
CHƢƠNG 1: Tổng quan hệ vi xử lý
1.1 Hệ thống số có liên quan đến vi xử lý
Hệ đếm thập phân (Decimal): Hệ đếm thập phân còn gọi là hệ đếm cơ số mƣời và nó
đƣợc biểu diễn bởi 10 con số từ (0,1,2,3,4,5,6,7,8,9 ) những con số này đƣợc sử dụng rất nhiều
trong khoa học kỹ thuật cũng nhƣ trong đời sống hàng ngày, khi biểu diễn số thập phân thì
dứng sau dãy số thƣờng có chữ D.
Ví dụ: Ba nghìn Chín trăm Bảy mƣơi Tám đƣợc biểu diễn nhƣ sau
3978 = 3x10
3
+ 9x10
2
+ 7x10
1
+ 8x10
0
= 3000 + 900 + 70 + 8
Hệ đếm thập lục phân (Hexadecimal): Hệ đếm thập phân còn gọi là hệ đếm cơ số mƣời
sáu và nó đƣợc biểu diễn bởi 16 ký số (0,1,2,3,4,5,6,7,8,9,B,C,D,E,F) những con số này đƣợc
sử dụng rất nhiều trong khoa học kỹ thuật đặc biệt là khoa học máy tính vì biểu diễn mã Hexa
rất ngắn gọn, khi biểu diễn số thập lục phân thì sau dãy số phải có chữ H.
Ví dụ: 3978h , 12CCh, 1998h, ABCDh, 2008h
Hệ đếm nhị phân (Binary): Hệ đếm nhị phân còn gọi là hệ đếm cơ số hai và nó đƣợc
biểu diễn bởi 2 con số là 0 và 1, trong kỹ thuật điện tử số thì số 0 gọi là mức logic thấp ứng với
điện áp thấp, số 1gọi là mức logic cao tƣơng ứng với điện áp cao nhất. Mỗi ký hiệu 0 hoặc 1
đƣợc gọi là 1 Bit (Binary Digit), khi biểu diễn số nhị phân thì dứng sau dãy số phải có chữ B.
Ví dụ:
1100b ; gọi là 1 nibble
10011001b ; gọi là 1 Byte
1010101111001101b ; gọi là 1 Word
Trong dãy số nhị phân đƣợc biểu diễn thì số nhị phân sát phải gọi là bít LSB còn số nhị phân
sát trái gọi là bít MSB
Ví dụ:
Số nhị phân thƣờng đƣợc biểu diễn ở 2 dạng là số nhị phân có dấu và số nhị phân không dấu,
nếu số nhị phân không dấu sẽ chỉ biểu diễn các số không âm (0)
còn số nhị phân có dấu thì biểu diễn đƣợc cả giá trị âm
Ví dụ : (1101) = 1x23 + 1x22 + 0x21 + 1x20 = 8 + 4 + 0 + 1 = 13
Dải giá trị của các số có dấu 8 bít là [-128, +127 ]
Dải giá trị của các số có dấu 16 bít là [-32768, +32767 ]
Trong khi biểu diễn dãy số nhị phân có dấu thì ngƣời ta sử dụng bít MSB để quy ƣớc cho bít
dấu, với bít 0 cho dãy số nhị phân dƣơng còn bít 1 cho dãy số nhị phân âm.
Hệ đếm BCD (Binary Coded Decimal): Số đếm BCD đƣợc định nghĩa là số thập phân
nhƣng đƣợc biểu diễn dƣới dạng nhị phân 4 bít, nhƣng dãy số nhị phân 4 bít này khi quy sang
hệ thập phân thì giá trị của nó phải 9 .Trong kỹ thuật điện tử nói chung thì mã BCD đƣợc sử
dụng để giải mã hiển thị LED bảy thanh
1010101010101010
MSB LSB
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 2
Ví dụ: (0011), (0100), (0101), (0110), (1001) ; đây gọi là số BCD không nén
Ví dụ: (00110100), (01010110), (01111000) ; đây gọi là số BCD nén
Dƣới đây là bảng các mã BCD
Thập phân BCD Thập phân BCD
0 0000 5 0101
1 0001 6 0110
2 0010 7 0111
3 0011 8 1000
4 0100 9 1001
Ví dụ: Cho số thập phân là 15 , biểu diễn dƣới dạng số BCD là 00010101
Số bù 2: Trong kỹ thuật Vi xử lý để biểu diễn một con số nào đó dƣới dạng dãy số nhị
phân thì ngoài việc biểu diễn số không dấu, số có dấu thì ngƣời ta còn sử dụng cách biểu diễn
số bù 2. Vậy số bù 2 sẽ biểu diễn nhƣ thế nào?
Ví dụ: Hãy biểu diễn dãy số A = 10011001 sang số bù 2 của nó:
- b1: Tìm số bù 1 của A(bằng cách lấy bù tất cả các bit của A): 01100110
- b2: Tìm số bù 2 của A (bằng cách lấy số bù 1 cộng cho 1) : 01100111
đến đây ta nhận thấy rằng số bù 2 của một số nào đó nó chính là số đối của nó và tổng = 0
1.2 Các phép biến đổi giữa các hệ đếm
Phép cộng nhị phân không dấu :
Ví dụ : Cho 2 số nhị phân nhƣ sau A = 10010011 ; B = 00111001 hãy tìm tổng Y
của 2 số nhị phân đã cho
0+0=1
0+1=1
1+0=1
1+1=0;nhớ 1
A=10010011b
B=00111001b
Y=A+B=11001100b
Phép trừ nhị phân:
Ví dụ : Cho 2 số nhị phân nhƣ sau A = 10010011 ; B = 00111001 hãy tìm hiệu Z
của 2 số nhị phân đã cho (Lƣu ý rằng phép trừ có thể thực hiện bằng cách biến thành phép
cộng)
0-0=0
0-1=1;mƣợn 1
1-0=1
1-1=0
A=10010011b
B=00111001b
Z=A -B=01011010b
Phép nhân nhị phân :
Ví dụ : Cho 2 số nhị phân nhƣ sau A = 00100101 ; B = 00000100 hãy tìm tích F
Khi nhân 2 dãy số nhị phân với nhau thì ta đặt phép toán nhân giống nhƣ nhân số thập phân,
kết quả của phép nhân 2 dãy số nhị phân 8 bít sẽ thu đƣợc dãy số nhị phân là 16 bít, nhƣ vậy ta
có F = A*B = 0000000010010100b
Phép chia nhị phân :
Ví dụ : Cho 2 số nhị phân nhƣ sau A = 10010110 ; B = 00000100 hãy tìm thƣơng
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 3
Khi chia 2 dãy số nhị phân với nhau thì ta đặt phép toán chia cũng giống nhƣ khi chia 2 số thập
phân, kết quả của phép chia cũng nhƣ phần dƣ (nếu có) thu đƣợc tƣơng tự nhƣ khi làm phép
chia đối với số thập phân, nhƣ vậy ta có M = A/B = 00100101b dƣ 0010b
Chuyển đổi số thập phân sang nhị phân :
Để chuyển đổi số thập phân sang số nhị phân ngƣời ta thƣờng dùng phƣơng pháp lấy số thập
phân cần chuyển rồi chia 2 liên tiếp đến khi không thể chia đƣợc nữa thì dừng
Ví dụ : Chuyển số thập phân 25 sang số nhị phân không dấu
Chuyển đổi số nhị phân sang thập phân :
Để chuyển đổi số nhị phân sang số thập phân ngƣời ta thƣờng dùng phƣơng pháp lấy tổng của
tích n các số nhị phân cần chuyển nhân với 20 đến 2N-1 hay theo biểu thức tổng quát nhƣ sau: A
= B(N-1)* 2
(N-1)
+ B(N-2)* 2
(N-2)
+ B(N-3)* 2
(N-3)
+ + B(1)* 2
(1)
+ B(0)* 2
(0)
Ví dụ : Chuyển số nhị phân không dấu 01011110b sang số thập phân
A = 0*2
7
+ 1*2
6
+0*2
5
+ 1*2
4
+ 1*2
3
+ 1*2
2
+ 1*2
1
+ 0*2
0
= 94
nhƣ vậy ta có 01011110b = 94
Chuyển đổi số nhị phân sang Hexa :
Ví dụ : Chuyển số nhị phân 1100101011111110 sang số hexa
Trƣớc hếtta chia số nhị phân đã cho thành các nhóm 4-bit tính từ bít có trọng số nhỏ nhất, sau
đó thay thế mỗi nhóm 4-bit bằng ký hiệu hexa tƣơng ứng với nó ta sẽ thu đƣợc kết quả nhƣ
sau:
Chuyển đổi số Hexa sang nhị phân:
Ví dụ : Chuyển số hexa 2F8h và ABBAh sang số nhị phân
Tƣơng tự nhƣ trƣờng hợp trên ta sẽ thay thế mỗi ký hiệu hexa bằng 4-bit nhị phân tƣơng ứng
với nó và ta sẽ thu đƣợc kết quả nhƣ sau:
1100 1010 1111 1110 hay 1100101011111110b = CAFEh
C A F E
2 F 8
0010 1111 1000 hay 2F8h = 001011111000b
A B B A
1010 1011 1011 1010 hay ABBAh = 1010101110111010b
Chia 2 Thƣơng số Dƣ số
25/2 = 12 1 LSB
12/2 = 6 0
6/2 = 3 0
3/2 = 1 1
1/2 = 0 1 MSB
Kết quả thu đƣợc là: 11001 với số dƣ lần thứ nhất là bít có trọng số nhỏ nhất
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 4
Mã ASCII: (American Standard Code for Information Interchange )
Quá trình trao đổi thông tin trong máy tính nói chung cũng nhƣ quá trình xử lý thông tin
của các bộ vi xử lý, tất cả các thông tin đều đƣợc biểu diễn dƣới dạng các số 0 và 1. Mỗi tổ hợp
số 0 hoặc 1 đƣợc gán một ký tự chữ cái, chữ số hoặc một ký tự đặc biệt nào đó. Khi thông tin
đƣợc truyền đi, đƣợc lƣu giữ trong bộ nhớ và hiển thị trên màn hình đều ở dƣới dạng ký tự và
tuân theo một loại mã chuẩn đƣợc sử dụng rất rộng rãi gọi là mã ASCII.
BẢNG MÃ ASSII (American Standard Code for Information Interchange)
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 5
BẢNG MÃ ASSII mở rộng
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 6
1.3 Lịch sử phát triển của các hệ Vi xử lý
Kiến trúc hệ Vi xử lý là một thuật ngữ dùng để chỉ rõ những đặc trƣng của hệ vi xử lý
trong đó bao gồm có cấu trúc phần cứng và tổ chức phần mềm đƣợc cài đặt trong hệ. Một hệ
thống vi xử lý hay gọi ngắn hơn là hệ vi xử lý thƣờng bao gồm các thành phần cơ bản nhƣ:
- Bộ xử lý trung tâm CPU (Central Processing Unit ) là trung tâm đầu não của hệ
- Bộ nhớ tâm bao gồm 2 thành phần là ROM và RAM
- Thiết bị vào/ra dữ liệu
- Các kênh thông tin hay Bus hệ thống
Tất cả các thiết bị có các chức năng nhƣ vậy đều đƣợc gọi là một hệ vi xử lý.Trong thực
tế có rất nhiều hãng chế tạo các bộ vi xử lý cho các máy vi tính nhƣ: IBM, Intel, Cyrix, AMD,
Motorola.... nhƣng thông dụng nhất vẫn là bộ vi xử lý của Intel. Các bộ vi xử lý của Intel đƣợc
phát triển qua các thời kỳ nhƣ sau:
Năm 1971, Intel đƣa ra bộ vi xử lý 4004 với 4 bit dữ liệu, 12 bit địa chỉ; 0,8MHz
Năm 1972, bộ vi xử lý Intel 8080 ra đời với 8bit dữ liệu, 12 bit địa chỉ; tốc độ 0,8 -5MHz
Năm 1978, bộ vi xử lý Intel 8086 ra đời với 16bit dữ liệu, 20 bit địa chỉ; tốc độ 10MHz
Năm 1979, bộ vi xử lý Intel 8088 ra đời nhƣng vẫn tƣơng thích với hệ thống 8086
Năm 1982 bộ vi xử lý 80286 ra đời với 16bit dữ liệu, 20 bit địa chỉ, tốc độ 20MHz
Năm 1985-1988, bộ vi xử lý 80386 ra đời với 32 bit dữ liệu và 32 bit địa
Năm 1989, bộ vi xử lý 80486 ra đời với 32 bit dữ liệu và 32 bit địa chỉ tốc độ 50-60MHz
Năm 1993, bộ vi xử lý Pentium ra đời với 64 bit dữ liệu, tốc độ xử lý 100MHz sau đó là các bộ
vi xử lý Pentium Pro,Pentium II, Pentium III, Celeron, Pentium 4
Hình 1.1 Đƣờng tăng trƣởng số lƣợng transistor trên bộ vi xử lý (dot) của Intel và định luật
Moore (đƣờng trên với chu kỳ 18 tháng, đƣờng dƣới chu kỳ 24 tháng
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 7
1.4 Chức năng của vi xử lý
Vi xử lý dùng các cổng logic giống nhƣ các cổng logic đƣợc sử dụng trong đơn vị xử lý
trung tâm của máy tính số. Do cấu trúc giống nhƣ CPU và đƣợc xây dựng từ các mạch vi điện
tử nên có tên là vi xử lý: microprocessor. Giống nhƣ CPU, microprocessor có các mạch điện tử
cho việc điều khiển dữ liệu và tính toán sự điều khiển của chƣơng trình. Ngoài ra
microprocessor là một đơn vị xử lý dữ liệu.
Công việc xử lý dữ liệu là chức năng chính của vi xử lý. Việc xử lý dữ liệu bao gồm tính
toán và điều khiển dữ liệu. Việc tính toán đƣợc thực hiện bởi các mạch điện logic đƣợc gọi là
đơn vị xử lý logic số học có thể thực hiện các phép toán nhƣ Add, Subtract, And, Or Compare,
Increment, Decrement.
ALU không thể thực hiện một phép toán mà không có dữ liệu , ví dụ ALU cộng 2 dữ liệu
với nhau thì 2 dữ liệu phải đặt đúng vị trí trƣớc khi cộng. ALU không thể thực hiện việc
chuyển dữ liệu từ nơi này đến nơi khác. Để ALU có dữ liệu cho việc xử lý thì ngoài mạch điện
ALU, vi xử lý còn có các mạch điện logic khác để điều khiển dữ liệu. Các mạch điện logic
điều khiển dữ liệu sẽ di chuyển dữ liệu vào đúng vị trí để khối ALU xử lý dữ liệu. Sau khi thực
hiện xong, khối điều khiển sẽ di chuyển dữ liệu đến bất cứ nơi nào mong muốn.
Để xử lý dữ liệu, vi xử lý phải điều khiển các mạch logic , để vi xử lý điều khiển các
mạch logic thì cần phải có chƣơng trình. Chƣơng trình là tập hợp các lệnh để xử lý dữ liệu thực
hiện từng lệnh đã đƣợc lƣu trong bộ nhớ , công việc thực hiện bao gồm các bƣớc nhƣ sau: đón
lệnh từ bộ nhớ, sau đó các mạnh logic điều khiển sẽ giải mã lệnh và sau cùng thì các mạch
logic điều khiển sẽ thực hiện sau khi giải mã.
Do các lệnh lƣu trữ trong bộ nhớ nên có thể thay đổi các lệnh nếu cần. Khi thay đổi các
lệnh của vi xử lý tức là thay đổi cách thức xử lý dữ liệu. Các lệnh lƣu trữ trong bộ nhớ sẽ quyết
định công việc mà vi xử lý sẽ làm.
Tóm tắt: chức năng chính của vi xử lý là xử lý dữ liệu. Để làm đƣợc điều này vi xử lý
phải có các mạch logic cho việc xử lý và điều khiển dữ liệu và các mạch logic điều khiển. Các
mạch logic xử lý sẽ di chuyển dữ liệu từ nơi này đến nơi khác và thực hiện các phép toán trên
dữ liệu, mạch logic điều khiển sẽ quyết định mạch điện nào cho việc xử lý dữ liệu. Vi xử lý
thực hiện một lệnh với trình tự nhƣ sau: đón lệnh từ bộ nhớ , tiếp theo mạch logic điều khiển sẽ
giải mã lệnh để xem lệnh đó yêu cầu vi xử lý thực hiện công việc gì, sau đó vi xử lý sẽ thực
hiện đúng công việc của lệnh đã yêu cầu , quá trình này đƣợc gọi là chu trình đón – và – thực
hiện lệnh
Ngoài chức năng đón và thực hiện lệnh , các mạch logic điều khiển còn điều khiển các
mạch điện giáo tiếp giao tiếp bên ngoài kết nối với vi xử lý. Vi xử lý cần phải có sự trợ giúp
của các mạch điện bên ngoài. Các mạch điện dùng để lƣu trữ lệnh để vi xử lý xử lý đƣợc gọi là
bộ nhớ, các mạch điện giao tiếp để di chuyển dữ liệu từ bên ngoài vào bên trong xử lý và xuất
dữ liệu từ bên trong vi xử lý ra ngoài đƣợc gọi là các thiết bị I/O hay các thiết bị ngoại vi
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 8
1.5 Cấu trúc cơ bản của vi xử lý
1.5.1. Sơ đồ khối tổng quát của hệ Vi xử lý
Sơ đồ khối :
Hình 1.2 Sơ đồ khối tổng quát của hệ VXL
Chức năng các khối :
Bộ xử lý trung tâm CPU (Central Processing Unit ) là trung tâm đầu não của hệ, nó có
chức năng thu thập, xử lý thông tin và điều khiển mọi hoạt động của hệ vi xử lý.
Bộ nhớ trung tâm có nhiệm vụ lƣu trữ thông tin dữ liệu trƣớc khi CPU xử lý
Thiết bị I/O thực hiện việc nhận dữ liệu từ các kênh thông tin từ bên ngoài vào để cho
CPU xử lý và xuất ra các tín hiệu điều khiển hệ thống
Các kênh thông tin hay Bus hệ thống là cầu nối liên kết giữa các khối trong đó thực hiện
3 việc chính là liên kết các Bus địa chỉ, Bus điều khiển và Bus dữ liệu.
1.5.2 Tổ chức các kênh thông tin trong hệ Vi xử lý
Kiến trúc
Harvard
Memory
CPU
Program
Address Bus
Data
Bus
Data
Address Bus
Fetch
Bus
0
0
CPU
Address Bus
Data Bus
Memory
0
Program
Memory
Data
Memory
Kiến trúc
Von Neumann
Hình 1.3 Cấu trúc các kênh thông tin trong hệ VXL
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 9
Trên đây là 2 cách tổ chức bộ nhớ theo kiểu Von Neumann và Harvard. Với kiểu tổ
chức bộ nhớ chƣơng trình và dữ liệu tách biệt cho phép tốc độ truy xuất thông tin nhanh hơn
đáng kể. Các kênh dữ liệu đều là kênh song song và dùng chung cho tất cả các bộ nhớ, tuy
nhiên nó phải đƣợc kiểm soát thông qua các cổng lôgic 3 trạng thái. Cổng này có nhiệm vụ tạo
ra trạng thái đặc biệt khi có những thành phần không đƣợc kích hoạt làm việc, trạng thái đặc
biệt này sẽ cách ly về mặt tín hiệu giữa kênh thông tin với từng thành phần trong hệ mặc dù
chúng vẫn đƣợc kết nối với nhau về mặt vật lý.
1.5.3 Khối xử lý trung tâm (Central Processing Unit)
Bộ vi xử lý là hạt nhân của hệ vi xử lý, nó là thành phần quan trọng nhất kiểm soát tất
cả các hoạt động của hệ và thực hiện các thao tác trên dữ liệu. Hầu hết các CPU đƣợc hình
thành từ các mạch lôgic nhằm thực hiện liên tục 2 thao tác là tìm nạp lệnh từ bộ nhớ để giải mã
và thực thi lệnh. CPU có khả năng hiểu và thực thi các lệnh dựa trên một tập các mã nhị phân
gọi là mã máy trong đó mỗi mã nhằm thực hiện một thao tác nào đó.Tổ hợp các lệnh cho mỗi
loại CPU gọi là tập lệnh và nó thƣờng chia ra thành các nhóm lệnh nhƣ:
- Nhóm lệnh chuyển dữ liệu
- Nhóm lệnh số học
- Nhóm lệnh Lôgic
- Nhóm lệnh rẽ nhánh chƣơng trình
- Nhóm lệnh xử lý bít
Cấu trúc đơn giản của một loại CPU đƣợc minh họa nhƣ sau:
- PC (Program Couter): Bộ đếm trƣơng trình có vai trò nhƣ một con trỏ, trỏ đến ô
nhớ chứa lệnh mà CPU cần truy nhập
Hình 1.4 Cấu trúc chung của một bộ CPU
Control Bus
FLAG
S
ALU CU
AC
C TM P I R
MAR
PC
CPU
Adress Bus
Data Bus
Registe
r
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 10
- IR (Instruction Register):Thanh ghi lệnh IR (Instruction Register) Thanh ghi lệnh
thực hiện chức năng chứa lệnh mà CPU đang thực hiện.
- CU (Control Unit) Đơn vị điều khiển có chức năng giải mã lệnh.
- MAR ( Memory Address Register) Thanh ghi chỉ bộ nhớ thực hiện chức năng chứa
địa chỉ của ô nhớ hiện thời mà CPU đang truy nhập.
- ALU (Arithmetic Logic Unit) đơn vị số học logic, thực hiện các phép tính số học,
logic và các phép xử lý dữ liệu khác.
- ACC (Accumulator) Thanh chứa , chứa toán hạng của một phép tính hoặc kết quả
của phép tính.
- TMP (Temporary) Thanh ghi tạm, chứa toán hạng thứ hai của phép tính.
- FLAGS Thanh ghi cờ chứa thông tin về trạng thái kết quả phép tính sau khi thực
hiện lệnh.
- Address Bus : Bus địa chỉ
- Data Bus : Bus dữ liệu
- Control Bus : Bus điều khiển
1.5.4 Quá trình truy xuất và xử lý thông tin
Việc tìm nạp một lệnh từ Ram hệ thống là một trong những thao tác cơ bản nhất mà
CPU phải thực hiện. Quá trình tìm nạp lệnh đƣợc thực hiện theo trình tự nhƣ sau:
CPU
n PC
opcode IR
RAM
opcode
Read
Clock
Control Bus
Address Bus
Data Bus
n+2
n+1
n
n-1
Hình 1.5: Hoạt động của Bus cho chu kỳ tìm nạp lệnh
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 11
Địa chỉ đang chứa trong PC sẽ đƣợc gửi lên trên bus địa chỉ.
Tín hiệu cho phép đọc lệnh từ bộ nhớ sẽ đƣợc kích hoạt sang trạng thái tích cực
Dữ liệu hay mã lệnh sẽ đƣợc đọc từ bộ nhớ và gửi lên kênh dữ liệu rồi chuyển về thanh
ghi lệnh IR. Tiếp theo đó là nội dung của PC (tức địa chỉ) sẽ đƣợc tăng lên1để trỏ tới địa chỉ kế
tiếp trong bộ nhớ.
Mã lệnh sẽ đƣợc chuyển xuống bộ giải mã và căn cứ theo mã lệnh CPU sẽ triển khai
thực hiện lệnh.Trƣờng hợp toán hạng nằm trong bộ nhớ chƣơng trình ngay sau mã lệnh. CPU
tiếp tục đƣa PC nên bus địa chỉ để trỏ tới toán hạng rồi đƣa ra thanh ghi để thực hiện lệnh.
VD: ADD A,#3EH
Nếu toán hạng nằm ngay trong thanh ghi của CPU, khi đó CPU thực hiện lệnh ngay
VD : ADD A,R1
Toán hạng nằm trong bộ nhớ mà địa chỉ của nó trong 1 thanh ghi của CPU .CPU đƣa
địa chỉ cho thanh ghi địa chỉ (MAR) để đọc dữ liệu và thực hiện lệnh. VD : ADD A,@R0
1.5.5 Tổ chức bộ nhớ của hệ Vi xử lý
Bộ nhớ trung tâm là bộ phận rất quan trọng đối với mỗi hệ VXL, nó là tập hợp các
thanh ghi thông tin với số lƣợng lớn. Chức năng cơ bản của bộ nhớ là để trao đổi và lƣu trữ
thông tin.
a. Bộ nhớ chỉ đọc (Read Only Memory - ROM):
ROM cơ bản:
ROM dùng để lƣu trữ chƣơng trình điều hành (Monitor) của hệ VXL. Chƣơng trình này
sẽ quy định mọi hoạt động của hệ VXL. Bộ VXL sẽ căn cứ vào các lệnh chứa trong chƣơng
trình để điều khiển hệ VXL thực hiện các chức năng, nhiệm vụ đƣợc ấn định trong lệnh. Nói
cách khác, hệ VXL sẽ thực hiện một cách trung thực thuật toán mà ngƣời thiết kế phần mềm đã
xây dựng và cài đặt vào ROM của hệ.
Ngoài ra, ROM trong hệ VXL còn dùng để lƣu trữ các bảng biểu, tham số của hệ thống
mà trong quá trình hoạt động không đƣợc thay đổi nhƣ: bảng địa chỉ cổng giao tiếp, các bảng
tra cứu số liệu, các bộ mã cần sử dụng trong hệ.
ROM cũng đƣợc quản lý theo phƣơng thức ma trận điểm, nó có nhiều chủng loại khác
nhau: ROM, PROM, EPROM, EEPROM,
ROM là bộ nhớ cố định có cấu trúc đơn giản nhất. Nội dung của nó do nhà sản xuất chế
tạo, ngƣời sử dụng không thể thay đổi nội dung này đƣợc nữa.
PROM (Programmable ROM - ROM có khả năng lập trình đƣợc):
Đặc điểm chung: Nội dung của PROM do nhà sản xuất hoặc ngƣời thiết kế hệ VXL nạp
vào nhƣng chỉ đựoc 1 lần. Sau khi nạp xong nội dung này không thể thay đổi đƣợc nữa.
EPROM (Eraseable PROM ROM nạp/xoá đƣợc nhiều lần):
EPROM là bộ nhớ cố định có cấu trúc đặc biệt. Nội dung của nó do nhà sản xuất hay ngƣời
thiết kế hệ VXL nạp vào và có thể nạp/xoá nhiều lần. Ngƣời ta tạo ra 1 bit thông tin trong
EPROM dựa trên nguyên tắc làm việc của Transistor trƣờng có cực cửa cách ly kênh cảm ứng
(MOSFET kênh cảm ứng).
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 12
EEPROM (Electrical EPROM ROM có khả năng lập trình và xoá đƣợc bằng điện).
b. Bộ nhớ W/R còn gọi là bộ nhớ truy cập ngẫu nhiên(Random Acess Memory):
RAM là bộ nhớ có thể ghi và đọc đƣợc, thông tin trên RAM sẽ bị mất khi mất nguồn
cung cấp. Theo phƣơng thức lƣu trữ thông tin, RAM đƣợc chia thành 2 loại cơ bản: RAM tĩnh
và RAM động.
RAM tĩnh: Có thể lƣu trữ thông tin lâu tuỳ ý miễn là đƣợc cung cấp điện năng - tất cả
các loại phần tử nhớ bằng Trigơ đều thuộc loại này.
RAM động: Chỉ lƣu đƣợc thông tin trong 1 khoảng thời gian nhất định. Muốn kéo dài
thời gian này cần có phƣơng thức làm tƣơi lại thông tin trong phần tử nhớ RAM. Phần tử nhớ
của RAM động đơn giản nhất là một linh kiện điện dung - tụ diện. Sử dụng RAM động có
phức tạp nhƣng về cấu trúc nhớ lại đơn giản, tiêu tốn ít năng lƣợng, tăng mật độ bộ nhớ và đôi
khi còn làm tăng cả tốc độ làm việc của bộ nhớ.
Cấu trúc mạch điện của các bộ nhớ RAM rất đa dạng cả về công nghệ chế tạo chúng
(TTL, MOS, ) và các yêu cầu sử dụng chúng nhƣ các yêu cầu về ghép nối, tốc độ làm việc,
mật độ linh kiện và dung lƣơng cần thiết
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 13
CHƯƠNG 2 : Cấu trúc và tập lệnh của vi xử lý 16 bit
2.1. Cấu trúc vi xử lý 8086/8088
2.1.1 Sơ đồ khối tổng quát của bộ Vi xử lý 8088
E.U (execution unit) B.I.U (Bus interface unit)
Các thanh ghi
đ a nă ng
Các thanh
ghi con trỏ
và chỉ số
Các thanh ghi tạm thời
AX
BX
CX
DX
SP
BP
SI
DI
CS
DS
SS
ES
IP
ALU
Thanh ghi cờ
Khối điều
khiẻn của
EU
Lôgic điều
khiển BUS
Đệm lệnh (hàng đợi lệnh)
(Có 6 byte với 8086)
Bus
ngoài
Bus
data
(8 bít)
Bus
trong
của
CPU 8
bit dữ
liệu 20
bit địa
chỉ chØ
Bus địa chỉ (20 bít)
Các
thanh
ghi
đoạn
và con
trỏ
lệnh
Accumulator
Base
Count
Data
Stack pointer
Base pointer
Source index
Destination index
Code segment
Data segment
Stack segment
Extra segment
Intruction pointer
Bus dữ liệu
ALU 16 bít
Hình 2.1 : Sơ đồ khối tổng quát của bộ Vi xử lý 8086/8088
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 14
BIU: Đơn vị giao tiếp BUS
EU: Đơn vị thực hiện lệnh (CU và ALU)
Đơn vị giao tiếp BUS – BIU:
Chức năng:
– Nhận trƣớc các lệnh cất tạm vào hàng đợi lệnh
– Đảm nhiệm chức năng điều khiển BUS
Giao tiếp qua các BUS:
– Phát các tín hiệu địa chỉ đến bộ nhớ và
các cổng I/O thông qua A-Bus
– Đọc mã lệnh từ bộ nhớ thông qua D-Bus
– Đọc dữ liệu từ bộ nhớ thông qua D-Bus
– Ghi dữ liệu vào bộ nhớ thông qua D-Bus
– Đọc dữ liệu từ các cổng Input thông qua D-Bus
– Ghi dữ liệu ra các cổng Output thông qua D-Bus
Đơn vị số học và logic – ALU:
Chức năng:
– Thực hiện các phép toán số học : Cộng, trừ, nhân, chia, tăng, giảm, đảo
– Thực hiện các phép toán Logic: AND, OR, XOR, NOT, dịc bit
Mô hình kết nối của ALU
Đơn vị điều khiển – CU:
Chức năng:
– Nhận lệnh từ bộ nhớ đƣa vào thanh ghi lệnh IP.
– Tăng nội dung thanh ghi PC mỗi khi nhận lệnh song
– Giải mã lệnh và xác định thao tác mà lệnh yêu cầu
– Phát ra tín hiệu điều khiển thực thi lệnh.
– Nhận các tín hiệu yêu cầu từ BUS hệ thống và giải quyết đáp ứng yêu cầu đó.
Mô hình kết nối đơn vị điều khiển
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 15
Các thông tin đến CU
– Clock: tín hiệu xung nhịp từ mạch tạo dao động.
– Mã lệnh từ thanh ghi lệnh đƣa đến CU giải mã
– Các trạng thái cờ đƣa đến cho biết trạng thái của CPU cũng nhƣ trạng thái thực
hiện các phép toán trong ALU.
– Các tín hiệu điều khiển từ BUS điều khiển.
– Các tín hiệu điều khiển bên trong CPU: điều khiển thanh ghi, ALU.
– Các tín hiệu điều khiển bên ngoài CPU (Bộ nhớ hay cổng vào ra)
2.1.2 Sơ đồ chân tín hiệu của Vi xử lý 8088
Hình 2.2 : Sơ đồ chân tín hiệu của 8086/8088
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 16
Các đƣờng địa chỉ, trạng thái:
- Chân A0-A15: (2 - 16, 35): Là 16 đƣờng địa chỉ
- AD0-AD7: Là các đƣờng địa chỉ và dữ liệu
- A16-A19 (Chân 35 -38): Bốn bit địa chỉ cao hoặc 4 tín hiệu trạng thái chỉ hoạt động
hiện tại của CPU
- S5 chỉ trạng thái cờ IF ở đầu mỗi chu kỳ đồng hồ
- S6 luôn bằng 0
- S4 và S3 cho biết thanh ghi đang đƣợc truy xuất
A17/S4 A16/S3 Thanh ghi đƣợc truy xuất
0 0 ES
0 1 SS
1 0 CS
1 1 DS
Các đƣờng điều khiển địa chỉ/dữ liệu:
ALE (Address Latch Enable- chốt địa chỉ): Chân ra mức cao xác nhận có địa chỉ đang
ổn định trên bus địa chỉ.
DEN (Data Enable) : Lối ra 3 trạng thái. ở mức thấp tín hiệu cho phép truyền dữ liệu
giữa bộ vi xử lý và Bộ nhớ/Vào ra
DT/R (Data Transmit/Receive): Lối ra 3 trạng thái, dùng để xác định chiều truyền số
liệu.
IO/M (Input Output/Memory) : Lối ra 3 trạng thái xác định bus địa chỉ đƣợc nối với
IO hay Memory.
WR (Write): Lối ra 3 trạng thái xác nhận bộ VXL ghi thông tin lên IO hoặc Mem
RD (Read) : Lối ra 3 trạng thái tích cực âm. Xác nhận việc đọc dữ liệu.
SSO (Status Line 0): Lối ra 3 trạng thái. Kết hợp với IO/M và DT/R để cho thông tin
về chu kỳ bus
IO/M DT/R SSO Chức năng chu kỳ bus
0 0 0 Nhận lệnh
0 0 1 Đọc bộ nhớ
0 1 0 Ghi bộ nhớ
0 1 1 Thụ động(Passive)
1 0 0 Báo nhận lệnh ngắt
1 0 1 Đọc cổng I/O
1 1 0 Ghi cổng I/O
1 1 1 Dừng(Halt)
Các đƣờng điều khiển ngắt: Cho phép dừng hoạt động của CPU
NMI (Non Maskable Interrupt) Ngắt không che mặt nạ - tín hiệu vào hiệu lực ở mức
cao dùng để ngắt quá trình xử lý của CPU. Là tín hiệu không thể bị bỏ qua (bị che mặt nạ) bởi
CPU.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 17
INTR (Interrupt Request) Tín hiệu vào để ngắt qúa trình xử lý của CPU, có thể che
đƣợc (masakable) tức CPU có thể bỏ qua bằng sự điều khiển của phần mềm.
INTA (Interrupt Acknowledge) Tín hiệu ra báo MP đã nhận 1 lệnh ngắt.
RESET. Khởi động lại MP.
TEST (Test Interrupt): Khi MP đang thực hiện lệnh WAIT thì MP sẽ kiểm tra chân
TEST. Nếu TEST=1 thì máy tiếp tục chờ cho đến khi TEST=0.
Các chân điều khiển thao tác:
CLK (Clock Input) Tín hiệu đồng hồ chủ, đồng bộ mọi hoạt động của MP.
READY là tín hiệu trả lời của I/O hoặc MEMORY báo chu kỳ chuyền số liệu đã hoàn
tất.
HOLD và HLDA (Hold Request) Báo có yêu cầu làm chủ bus từ bên ngoài. Khi MP
tiếp nhận yêu cầu này thì đƣa ra tín hiệu HLDA (Hold Acknowledge).
MN/MX (Minimum/Maximum Mode) Tín hiệu lối vào báo MP công tác ở mode tối đa
(0) hay tối thiểu (1)
Các chân trong chế độ MAX
Chân QS1 (24) và QS0 (25) báo thông tin trạng thái về hàng đợi lệnh
QS1 QS0 Trạng thái hàng đợi lệnh
0 0 Không hoạt động
0 1 Chỉ byte thứ nhất của mã lệnh
1 0 Chỉ hàng chứa lệnh rỗng
1 1 Chỉ byte tiếp theo trong hàng chứa lệnh
Chân S2, S1, S0 dùng cho bộ điều khiển bus 8288 để tạo ra các tín hiệu điều khiển cho
bus hệ thống. Các tín hiệu này có trở kháng cao khi bus treo.
S2 S1 S0
0 0 0 Trả lời ngắt INTA
0 0 1 Đọc cửa I/O
0 1 0 Ghi cửa I/O
0 1 1 Dừng
1 0 0 Nhận lệnh
1 0 1 Đọc bộ nhớ
1 1 0 Ghi vào bộ nhớ
1 1 1 Thụ động
LOCK (29) cấm không cho VXL hợp tác điều khiển bus.
RQ/GT1, RQ/GT0: Yêu cầu và cho phép bộ xử lý cùng hợp tác đƣợc điều khiển bus.
2.1.3. Tập các thanh ghi bên trong CPU của 8088
Mặc dù bộ vi xử lý có thể thao tác với dữ liệu bộ nhớ nhƣng một lệnh nhƣ vậy sẽ đƣợc
thực hiện nhanh hơn (cần ít chu kỳ đồng hồ hơn), nếu nhƣ dữ liệu đƣợc lƣu trong các thanh
ghi. Đó cũng là nguyên nhân tại sao ngày nay các bộ vi xử lý đƣợc sản xuất với xu hƣớng có
nhiều thanh ghi hơn.
Với các thanh ghi dữ liệu các byte thấp và byte cao có thể đƣợc truy nhập một cách
riêng biệt, sử dụng từng 8 bit một cách riêng rẽ. Ví dụ:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 18
Byte cao của thanh ghi AX đƣợc gọi là AH và byte thấp là AL
Byte cao của thanh ghi BX đƣợc gọi là BH và byte thấp là BL
Byte cao của thanh ghi CX đƣợc gọi là CH và byte thấp là CL
A. Các thanh ghi dữ liệu (AX, BX,CX,DX)
Thanh ghi Byte cao Byte thấp
7 0 7 0
Accumulator AX AH AL
Base BX BH BL
Counter CX CH CL
Data DX DH DL
Thanh ghi AX (Accumulator register): Là thanh ghi tích lũy đƣợc sử dụng nhiều nhất
trong các lệnh số học, logic, và chuyển dữ liệu bởi vì việc sử dụng chúng tạo ra mã máy ngắn
nhất.Trong các phép toán nhân chia một trong các toán hạng tham gia phải đƣợc chứa trong
thanh ghi AX (nếu là 16 bit) và AH hoặc AL (nếu là 8 bit). Các thao tác vào ra cũng sử dụng
thanh ghi AX hoặc AL.
Thanh ghi BX (thanh ghi cơ sở- Base register): Thanh ghi này ngoài việc thao tác dữ
liệu nó thƣờng chứa địa chỉ cơ sở của một bảng dùng cho lệnh XLAT.(dịch AL thành 1 giá trị
trong bảng BX)
Thanh ghi CX (thanh ghi đếm- Count register):Việc xây dựng một chƣơng trình lặp
đƣợc thực hiện dễ dàng bằng cách sử dụng thanh ghi CX, trong đó CX đóng vai trò bộ đếm số
vòng lặp (REP, LOOP). CL đƣợc dùng làm bộ đếm trong các lệnh dịch và quay bit.
Thanh ghi DX (thanh ghi dữ liệu - Data register): DX và AX cùng đƣợc sử dụng trong
các thao tác của phép nhân hoặc chia các số 16 bit. DX còn đƣợc sử dụng để chứa địa chỉ của
các cổng trong các lệnh vào ra dữ liệu trực tiếp (In/Out).
B. Các thanh ghi đoạn (CS, DS, ES, SS)
Khối BIU đƣa ra trên Bus địa chỉ 20 bit địa chỉ, nhƣ vậy 8088 có khả năng phân biệt
đƣợc 220= 1. 048. 576 = 1 Mbyte ô nhớ. Nói cách khác không gian địa chỉ của 8088 là 1
Mbyte. Trong không gian 1 Mbyte bộ nhớ này cần chia thành nhiều đoạn khác nhau :
Đoạn chứa chƣơng trình
Đoạn chứa dữ liệu và kết quả trung gian của chƣơng trình
Tạo ra vùng nhớ đặc biệt gọi là ngăn xếp
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 19
Trong thực tế bộ vi xử lý 8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các
đoạn trên và chúng đƣợc gọi là các thanh ghi đoạn (Segment Registers): CS, DS, SS, ES.
Các thanh ghi đoạn này chỉ ra địa chỉ đầu của 4 đoạn trong bộ nhớ dung lƣợng lớn nhất
của 4 đoạn này là 64 Kbyte. Các đoạn có thể nằm cách nhau hoặc trùm lên nhau
Nội dung của thanh ghi sẽ xác định địa chỉ của ô nhớ đầu tiên của đoạn, địa chỉ này gọi
là địa chỉ cơ sở. Địa chỉ của các ô nhớ khác trong cùng đoạn đƣợc tính bằng cách cộng thêm
vào địa chỉ cơ sở một giá trị gọi là địa chỉ lệch hay độ lệch (offset)
Địa chỉ vật lý (20 bit) của một ô nhớ đƣợc xác định nhƣ sau :
Điạ chỉ vật lý = Điạ chỉ đoạn *10h + thanh ghi lệch (hay offset) và điạ chỉ logic trong
máy tính luôn đƣợc biểu diễn dƣới dạng Segment:Offset. Tại mọi thời điểm thì chỉ những ô nhớ
đƣợc định địa chỉ bởi 4 đoạn trên mới đƣợc truy cập.
C. Các thanh ghi con trỏ và chỉ số : SI, DI, SP, BP
Trong 8088 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 bit. Các thanh ghi này đều có
thể đƣợc dùng nhƣ các thanh ghi đa năng (ngoại trừ IP), nhƣng ứng dụng chính của mỗi thanh
ghi là chúng đƣợc ngầm định nhƣ là thanh ghi lệch cho các đoạn tƣơng ứng. Cụ thể nhƣ sau :
Thanh ghi BP : (con trỏ cơ sở - Base Pointer): BP luôn trỏ vào một dữ liệu nằm trong
đoạn ngăn xếp SS. Địa chỉ cụ thể SS:BP đƣợc xác định nhƣ trên.
Thanh ghi SP(con trỏ ngăn xếp - Stack Pointer): Đƣợc sử dụng kết hợp với SS để truy
nhập vào đoạn ngăn xếp. SP luôn trỏ vào đỉnh hiện thời của ngăn xếp trong đoạn ngăn xếp SS.
Địa chỉ cụ thể SS:SP
Thanh ghi SI(chỉ số nguồn - Source Index):SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà
địa chỉ cụ thể tƣơng ứng với DS:SI. Bằng cách tăng nội dung của SI chúng ta có thể truy nhập
dễ dàng đến các ô nhớ liên tiếp.
Thanh ghi DI (chỉ số đích - Destination Index): SI chỉ vào dữ liệu trong đoạn dữ liệu
DS mà địa chỉ cụ thể tƣơng ứng với DS:DI. Có một số lệnh gọi là các thao tác chuỗi sử dụng
DI để truy nhập đến các ô nhớ đƣợc định địa chỉ bởi ES.
D. Thanh ghi con trỏ lệnh IP:
Các thanh ghi bộ nhớ chúng ta vừa trình bày dùng để truy cập dữ liệu, để truy nhập đến
các lệnh, 8088 sử dụng các thanh ghi CS và IP. Thanh ghi CS chứa điạ chỉ của lệnh tiếp theo
còn IP chứa địa chỉ offset của lệnh đó. Thanh ghi IP đƣợc cập nhập mỗi khi có một lệnh đƣợc
thực hiện.
E. Thanh ghi cờ:
Đây là thanh ghi 16 bit, mỗi bit đƣợc sử dụng để thể hiện một trạng thái của bộ vi xử lý
tại một thời điểm nhất định trong quá trình thực hiện chƣơng trình. Mới chỉ có 9 bit đƣợc sử
dụng và ngƣời ta gọi mỗi bit là một cờ.
x x x x OF DF IF TF SF ZF x AF x PF x CF
Các cờ trạng thái
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 20
CF (Carry Flag): đƣợc thiết lập khi phép toán thực hiện có nhớ hoặc có vay mƣợn
PF(Parity Flag): đƣợc thiết lập khi kết quả của phép toán có tổng số bit có giá trị 1 là
một số chẵn (ở phần thấp của kết quả) .
AF (Auxiliary Flag): đƣợc thiết lập khi có nhớ từ "bit có trọng số lớn nhất ở phần thấp"
sang "bit có trọng số thấp nhất ở phần cao".
ZF (Zero Flag) : Đƣợc thiết lập khi tất cả các bit của kết quả có giá trị 0.
SF ( Sign Flag): đƣợc thiết lập khi bit MSB của kết quả có giá trị 1.
OF (Overflow Flag): đƣợc thiết lập khi kết quả nằm ngoài giới hạn cho phép.
Các cờ điều khiển
TF (Trace Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép thực hiện từng bƣớc
chƣơng trình
IF (Interrupt Flag) : Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép các ngắt cứng có
thể thực hiện.
DF (Direction Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép duyệt chuỗi từ
phải sang trái hoặc từ địa chỉ cao đến địa chỉ thấp.
F. Bộ đếm chƣơng trình PC (Program Counter):
2.1.4 Hoạt động của bộ Vi xử lý 8088
Bộ Vi xử lý 8086/8088 hoạt động ở một trong hai chế độ là chế độ MIN và MAX
Chế độ MIN: CPU tự phát tín hiệu điều khiển cho các BUS
Chế độ MAX: CPU phát tín hiệu trạng thái tới chip điều khiển BUS (8288)
Từ sơ đồ khối ta thấy rằng bên trong CPU 8086/8088 có 2 khối chính đó là khối phối
ghép Bus (Bus Interface Unit : BIU) và khối thực thi lệnh (Excution Unit : EU), 2 khối này
đƣợc ghép với nhau thông qua hàng đợi lệnh nhằm tăng đáng kể tốc độ xử lý của CPU.
Các Bus bên trong CPU có nhiệm vụ chuyển tải các tín hiệu của các khối khác . Trong số các
bus đó có bus dữ liệu 16 bit của ALU, bus các tín hiệu điều khiển ở EU và bus trong của hệ
thống ở BIU. Trƣớc khi đi ra bus ngoài hoặc đi vào bus trong của bộ vi xử lý thì các tín hiệu
truyền trên bus thƣờng đƣợc cho qua các bộ đệm để nâng cao tính tƣơng thích hoặc khả năng
phối ghép. BIU sẽ đƣa ra địa chỉ, đọc mã lệnh từ bộ nhớ, đọc/ghi dữ liệu từ/vào cổng hoặc bộ
nhớ hay nói khác là BIU sẽ chịu trách nhiệm cung cấp địa chỉ lên bus và trao đổi dữ liệu với
bus.
Trong EU ta thấy có khối điều khiển CU, khối này thực hiện việc giả mã lệnh và thông
tin đâù ra sẽ đƣợc đƣa tới mạch tạo xung điều khiển, kết quả là ta thu đƣợc những dãy xung
khác nhau (tùy theo từng mã lệnh cụ thể ) để điều khiển các hoạt động của các bộ phận trong
Thanh ghi bộ đếm chƣơng trình cũng
đƣợc gọi là thanh ghi con trỏ lệnh nó giữ địa
chỉ của lệnh kế tiếp sẽ đƣợc nhận vào. Sau
khi một lệnh đƣợc nhận vào, nội dung PC tự
động tăng lên để trỏ sang lệnh kế tiếp
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 21
và ngoài CPU. Khối ALU dùng để thực hiện các thao tác khác nhau với các toán hạng của
lệnh. Tóm lại, khi CPU hoạt động thì EU sẽ cung cấp thông tin về địa chỉ cho BIU để khối này
đọc lệnh và dữ liệu, còn bản thân nó thì giải mã lệnh và thực thi lệnh.
Trong BIU có bộ nhớ đệm lệnh với dung lƣợng là 4 byte (6 byte với 8086) dùng chứa
các mã lệnh đọc đƣợc nằm sẵn ở đó để chờ EU xử lý. Đây là một cấu trúc mới đƣợc cấy vào bộ
vi xử lý 8086/8088 nhằm tăng tốc độ xử lý theo kiểu xử lý xen kẽ liên tục dòng mã lệnh
(Instruction pipelining).
2.2. Các phƣơng pháp định địa chỉ
Các chế độ địa chỉ chính là phƣơng pháp để xác định toán hạng hoặc kiểu toán hạng
trong các câu lệnh. Bộ vi xử lý 8086/8088 có tổng số trên 20 chế độ địa chỉ cho các thành phần
khác nhau nhƣ mã lệnh, dữ liệu, ngăn xếp. Nhƣng trên thực tế, việc lập trình, phân tích lệnh,
ngƣời ta chỉ qua tâm đến việc dữ liệu của lệnh đƣợc xử lý ra sao. Vì vậy, chúng ta cũng chỉ
nghiên cứu về các chế độ địa chỉ dữ liệu của lệnh.Trong bộ vi xử lý 8086 qui định có 7 chế độ
địa chỉ cho toán hạng của lệnh. Cụ thể bao gồm các chế độ sau:
- Chế độ địa chỉ thanh ghi
- Chế độ địa chỉ tức thì
- Chế độ địa chỉ trực tiếp
- Chế độ địa chỉ gián tiếp thanh ghi
- Chế độ địa chỉ tƣơng đối cơ sở
- Chế độ địa chỉ tƣơng đối chỉ số
- Chế độ địa chỉ tƣơng đối chỉ số cơ sở
Chế độ địa chỉ thanh ghi
Trong chế độ này việc trao đổi thông tin diễn ra trực tiếp giữa các thanh ghi. Toán tử chỉ
hoàn toàn là các thanh ghi. Loại địa chỉ thanh ghi không cần truy nhập bộ nhớ nên rất nhanh.
Ví dụ: MOV AX, BX ;Sao chép nội dung thanh ghi BX sang thanh ghi AX.
MOV AL,CL ; Sao chép nội dung thang ghi CL sang thanh ghi AL.
ADD AL, CL ; Cộng nội dung thanh ghi Clvới thanh ghi AL.
Chế độ địa chỉ tức thì
Trong chế độ này toán hạng đích là một thanh ghi hoặc ô nhớ, còn toán hạng nguồn là một
hằng số. Ta có thể dùng chế độ này để nạp dữ liệu vào bất kỳ thanh ghi nào, trừ thanh ghi đoạn
và thanh ghi cờ.
Mã lệnh Tên các thanh ghi
Tập các
thanh
ghi
Toán hạng
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 22
Ví dụ: MOV CL, 5Fh; chuyển 5Fh vào thanh ghi CL.
MOV AX, 0FF0h; Chuyển 0FF0h vào trong thanh ghi AX
MOV DS, AX; Chuyển nội dung thanh ghi AX vào DS.
MOV [BX], 10; Chuyển 10 vào ô nhớ tại địa chỉ DS:BXX
Chế độ địa chỉ trực tiếp.
Trong chế độ này, một toán hạng chứa địa chỉ lệch của ô nhớ dùng chứa dữ liệu, còn
toán hạng kia chỉ có thể là thanh ghi.
Ví dụ: MOV Al, [1053] ; Chuyển nội dung ô nhớ địa chỉ DS:1053h vào AL
MOV [5307h], CX ; Chuyển nội dung CX vào 2 ô nhớ liên tiếp có địa
; chỉ DS:5307h và DS:5308h
ADD [5307h], AL ; Cộng nội dung AL vào ô nhớ có địa chỉ DS:5307h
Chế độ địa chỉ gián tiếp thanh ghi
Trong chế độ này, một toán hạng là một thanh ghi đƣợc sử dụng để chứa địa chỉ lệch
(Offset) của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có thể là thanh ghi mà không đƣợc là ô
nhớ.
Ví dụ: MOV AL, [BX] ; Chuyển nội dung ô nhớ có đ/c DS:BX vào AL
MOV [SI], CL ; Chuyển nội dung CL vào ô nhớ có đ/c DS:SI
MOV [DI], AX ; Chuyển nội dung AX vào 2 ô nhớ liên tiếp có
; địa chỉ DS:DI và DS:DI+1
Chế độ địa chỉ tƣơng đối cơ sở (Base Relative Addressing)
Trong chế độ này, các thanh ghi cơ sở BX và BP là các hằng số biểu diễn các giá trị
dịch chuyển (Displacement Values), kết hợp với DS và SS để tính địa chỉ hiệu dụng của toán
Mã lệnh Tên các thanh ghi Hằng số
Mã lệnh Toán hạng
Bộ nhớ
Toán hạng
Mã lệnh [Thanh ghi]
Tập các
thanh ghi
Bộ nhớ
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 23
hạng các vùng nhớ. Sự có mặt của các giá trị dịch chuyển xác định tính tƣơng đối (so với cơ
sở) của địa chỉ.
Ví dụ 1: MOV CX, [BX]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
MOV CX, [BX+10] ; DS:(BX+10) và DS:(BX+11) vào CX
MOV CX,10[BX] ;
MOV CL, [BP]+5 ; Chuyển nội dung ô nhớ SS:(BP+5) vào AL
Chú ý: Trong các ví dụ trên, các giá trị 10 và 3 đƣợc gọi là các giá trị dịch chuyển
- (BX+10) hoặc (BP+5) gọi là địac chỉ hiệu dụng (Effective Address – EA)
- DS:(BX+10) hoặc SS:(BP+5) chính là địa chỉ logic tƣơng ứng với 1 PA
Chế độ địa chỉ tƣơng đối chỉ số (Indexed Relative Addressing)
Trong chế độ này, các thanh ghi chỉ số DI và SI và các hằng số biểu diễn giá trị dịch
chuyển, đƣợc dùng để tính địa chỉ của toán hạng trong vùng nhớ DS.
Ví dụ: MOV AX,[SI]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
; DS:(SI+10) và DS:(SI+11) vào AX
MOV AX,[SI+10] ; Tƣơng tự nhƣ trên.
MOV AL, [DI+5]; chuyển nội dung ô nhớ DS:(DI+5) vào CL.
Chế độ địa chỉ tƣơng đối chỉ số cơ sở (Based Indexed Relative)
Là sự kết hợp của 2 chế độ địa chỉ, đó là chế độ địa chỉ tƣơng đối chỉ số và chế độ địa chỉ
tƣơng đối cơ sở. Trong chế độ này dùng cả 2 thanh ghi cơ sở và 2 thanh ghi chỉ số để tính địa chỉ
của toán hạng. Chế độ này rất phù hợp với việc địa chỉ hoá các mảng 2 chiều.
Mã lệnh Địa chỉ thanh ghi
Tập các
thanh ghi
BX,BP
Bộ nhớ
Giá trị cụ thể
Mã lệnh Địa chỉ thanh ghi
Tập các
thanh ghi
DI, SI
Bộ nhớ
Giá trị cụ thể
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 24
Ví dụ: MOV AX, [BX]+[SI]+8 ;chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
MOV AX, [BX+SI] + 8 ; DS:(BX+SI+8) và DS:(BX+SI+9) vào AX
MOV AX, [BX + SI + 8] ;
MOV CL, [BP][DI]+5 ; chuyển nội dung ô nhớ có địa chỉ
; DS:(BP+DI+5) vào CL
Chú ý: Trong các chế độ địa chỉ trên, các thanh ghi đoạn và các thanh ghi lệch đƣợc
ngầm định đi kèm với nhau. Muốn loại bỏ sự ngầm định đó thì ta có thể viết tƣờng minh địa
chỉ của đoạn.
Ví dụ: MOV AL, [BX] ; ngầm định là DS:BX
Muốn bỏ ngầm định là DS ta phải viết
MOV AL, SS:[BX]; chuyển thành SS:BX
Bảng tóm tắt các chế độ địa chỉ
STT Chế độ địa chỉ Toán hạng Đoạn ngầm định
1 Thanh ghi Reg
2 Tức thì Data
3 Trực tiếp [Offset] DS
4 Gián tiếp thanh ghi
[BX]
[SI]
[DI]
DS
DS
DS
5 Tƣơng đối cơ sở
[BX] + Disp
[BP] + Disp
DS
SS
6 Tƣơng đối chỉ số
[DI] + Disp
[SI] + Disp
DS
SS
7 Tƣơng đối chỉ số cơ sở
[BX] + [DI] + Disp
[BX] + [SI] + Disp
[BP] + [DI] + Disp
[BP] + [SI] + Disp
DS
DS
SS
SS
Mã lệnh Thanh ghi
Bộ nhớ
Giá trị cụ thể
Tập các
thanh ghi
BX,BP
Thanh ghi
Tập các
thanh ghi
SI,DI
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 25
Các cặp thanh ghi đoạn và thanh ghi lệch ngầm định
Thanh ghi đoạn CS DS ES SS
Thanh ghi lệch IP SI, DI, BX DI SP, BP
Cách định địa
chỉ
Mã đối
tƣợng
Ví dụ
Từ gợi nhớ Đoạn
truy suất
Hoạt động
Tức thời B80010 MOV AX,1000h Mã AH ← 10h; AL ← 00h
Thanh ghi 89CA MOV DX,CX VXL DX ← CX
Trực tiếp 8A2600
10
MOV AH,[1000h] Dữ liệu AH ← [1000h]
Gián tiếp thanh
ghi
8B04
FF25
FE4600
FF0F
MOV AX,[SI]
JMP [DI]
INC BYTE PTR
[BP]
DEC WORD PTR
[BX]
Dữ liệu
Dữ liệu
Stack
Dữ liệu
AL←[SI]; AH←[SI+1]
IP←[DI+1:DI]
[BP]←[BP]+1
[BX+1:BX]←
[BX+1:BX]-1
Có chỉ số 8B4406
FF6506
MOV AX,[SI+6]
JMP [DI+6]
Dữ liệu
Dữ liệu
AL ← [SI+6]; AH
←[SI+7]
IP←[DI+7:DI+6]
Có nền 8B4602
FF6702
MOV AX,[BP+2]
JMP [BP+2]
Stack
Dữ liệu
AL←[BP+2]; AH
←[BP+3]
IP←[BX+3:BX+6]
Có nền và có
chỉ số
8B00 MOV AX,[BX+SI] Dữ liệu AL←[BX+SI];AH←[B
X+SI+1]
2.3 Tập lệnh của vi xử lý 8086/8088
(Đọc VXL của Đỗ Xuân Tiến)
Trong tập lệnh của vi xử lý 8088 có rất nhiều lệnh, mỗi lệnh thực hiện một nhiệm vụ cụ
thể nào đó, trong phần tài liệu này ta chỉ nghiên cứu một số lệnh cơ bản. Để dễ hiểu, chúng ta
có thể chia chúng ra thành các nhóm lệnh sau:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 26
1. Nhóm lệnh di chuyển dữ liệu 5. Nhóm lệnh rẽ nhánh
2. Nhóm lệnh số học 6. Nhóm lệnh vào ra cổng
3. Nhóm lệnh logic 7. Nhóm lệnh điều khiển.
4. Nhóm lệnh dịch chuyển và quay
o Nhóm lệnh di chuyển dữ liệu (MOV, MOVSB, MOVSW XCHG, PUSH, POP )
o Nhóm lệnh số học(ADD, ADC, INC, SUB, SBB, DEC MUL(IMUL), DIV(IDIV )
o Nhóm lệnh logic ( AND, OR, XOR, NOT )
o Nhóm lệnh dịch chuyển và quay (SHL, SHR, ROL, ROR )
o Nhóm lệnh rẽ nhánh
Nhảy có dấu
Kí
hiệu
Chức năng Điều
kiện
nhảy
Jg/jnl
e
Nhảy nếu lớn hơn
Nhảy nếu không nhỏ hơn hay bằng
Zf=0
,
sf=o
f
Jge/j
nl
Nhảy nếu lớn hơn hay bằng
Nhảy nếu không nhỏ hơn
Sf=0
f
Jl/jng
e
Nhảy nếu nhỏ hơn
Nhảy nếu không lớn hơn hay bằng
Sf
of
Jle/jn
g
Nhảy nêu nhỏ hơn hay bằng
Nhảy nếu không lớn hơn
Zf=1
hay
sf=o
f
Nhảy không dấu
Ja/jn
be
Nhảy nếu lớn hơn
Nhảy nếu không nhỏ hơn hay bằng
Cf=0
và
zf=0
Jae/j
nb
Nhảy nếu lớn hơn hay bằng
Nhảy nếu không nhỏ hơn
Cf=0
Jb/jn
ae
Nhảy nếu nhỏ hơn
Nhảy nếu không lớn hơn hay bằng
Cf=1
Nhảy điều kiện đơn
Je/jz Nhảy nếu bằng
Nhảy nếu bằng 0
Zf=1
Jne/j
nz
Nhảy nếu không bằng
Nhảy nếu không bằng 0
Zf=0
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 27
o Nhóm lệnh vào ra cổng( IN , OUT)
o Nhóm lệnh điều khiển(CALL, INT, NOP, HLT )
2.4. Cách mã hóa lệnh của Vi xử lý 8088
Lệnh của bộ vi xử lý đƣợc ghi bằng các ký tự dƣới dạng gợi nhớ (memonic) để ngƣời sử
dụng dễ nhận biết. Đối với bộ vi xử lý thì lệnh cho nó sẽ đƣợc mã hóa dƣới dạng mã nhị phân
0,1và còn gọi là mã máy. Vì lệnh cho bộ vi xử lý đƣợc cho dƣới dạng mã nên sau khi nhận
lệnh thì bộ vi xử lý phải thực hiện giải mã lệnh rồi mới thực hiện lệnh. Việc hiểu rõ bản chất
cách ghi lệnh bằng số nhị phân cho bộ vi xử lý sẽ thuận tiện khi ta cần dịch bằng tay (thực ra
trong thực tế thì việc dịch này sẽ đƣợc thực hiện bởi trình dịch hợp ngữ ).
Đối với bộ vi xử lý 8088 thì một lệnh có thể có độ dài từ 1byte đến 6 byte, nhƣng ta sẽ
chỉ lấy ví dụ với trƣờng hợp của lệnh MOV để minh họa cho việc mã hóa lệnh: Trƣớc khi thực
hiện mã hóa cho lệnh MOV đích, gốc thì cần phải biết dạng thức các byte dùng để mã hóa cho
lệnh
Opcode: Mã lệnh
D: Hƣớng truyền dữ liệu
– D=0: Dữ liệu đi từ thanh ghi quy định bởi 3 bit REG
– D=1: Dữ liệu đi đến thanh ghi quy định bởi 3 bit REG
W: xác định truyền byte(W=0) hay truyền World (W=1).
REG: Chọn thanh ghi sử dụng
MOD và R/M chọn chế độ địa chỉ cho toán hạng của lệnh.
Ví dụ: lệnh MOV
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 28
Bảng REG Xác định thanh ghi cho toán hạng thứ nhất
16 – Bit (W=1) 8 – Bit (W=0) Segment
000
001
010
011
100
101
110
111
AX
CX
DX
BX
SP
BP
SI
DI
000
001
010
011
100
101
110
111
AL
CL
DL
BL
AH
CH
DH
BH
00
01
10
11
ES
CS
SS
DS
Bảng MOD và R/M cùng nhau xác định toán hạng thứ hai
R/M MOD=00 MOD=01 MOD=10 MOD=11
W=1
MOD=11
W=0
000 [BX]+[SI] [BX]+[SI]+ADD8 [BX]+[SI]+ADD16 AX AL
001 [BX]+[DI] [BX]+[DI]+ADD8 [BX]+[DI]+ADD16 CX CL
010 [BP]+[SI] [BP]+[SI]+ADD8 [BP]+[SI]+ADD16 DX DL
011 [BP]+[DI] [BP]+[DI]+ADD8 [BP]+[DI]+ADD16 BX BL
100 [SI] [SI]+ADD8 [SI]+ADD16 SP AH
101 [DI] [DI]+ADD8 [DI]+ADD16 BP CH
110 ADD16 [BP]+ADD8 [BP]+ADD16 SI DH
111 [BX] [BX]+ADD8 [BX]+ADD16 DI BH
Lập trình hợp ngữ cho hệ Vi xử lý
Tổng quan về ngôn ngữ lập trình Assembly
Khái niệm:
Hợp ngữ là một ngôn ngữ bậc thấp, sử dụng tập lệnh của bộ vi xử lý và có thể tác động
trực tiếp đến các thành phần bên trong của bộ vi xử lý. Mỗi một lệnh của hợp ngữ có quan hệ
một - một với một lệnh mã máy.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 29
Vì vậy, việc lập trình với hợp ngữ đòi hỏi ngƣời lập trình phải hiểu rõ cấu trúc bên
trong, hoạt động, tập thanh ghi và tập lệnh của bộ vi xử lý.
Hình 2.3: Vị trí của hợp ngữ trong các máy tính IBM-PC
Liên quan đến việc tạo ra một chƣơng trình hợp ngữ, có một số khái niệm :
Trình hợp dịch (Assembler): là một chƣơng trình chuyển đổi các chƣơng trình mã
nguồn từ hợp ngữ thành ngôn ngữ máy.
Trình liên kết (Linker): là một chƣơng trình có khả năng tập hợp các tệp tin đã đƣợc hợp
dịch lại thành một tệp tin mã máy.
Trình gỡ rối (Debuger): Là một chƣơng trình có khả năng dịch ngƣợc các lệnh của một
chƣơng trình mã máy. Nó còn cho phép ngƣời lập trình thực hiện sửa lỗi thuật toán cho các
chƣơng trình mã máy.
So sánh hợp ngữ với các ngôn ngữ bậc cao
Hợp ngữ là một ngôn ngữ lập trình sử dụng các lệnh của bộ vi xử lý, vì vậy, nó khó hơn
so với các ngôn ngữ lập trình bậc cao. Mặt khác, hợp ngữ có thể tác động trực tiếp tới cấu trúc
bộ vi xử lý và các thành phần phần cứng khác mà các ngôn ngữ lập trình khác khó có thể thực
hiện đƣợc.
Một chƣơng trình viết bằng hợp ngữ thƣờng có kích thƣớc nhỏ hơn một chƣơng trình
viết bằng ngôn ngữ bậc cao có cùng chức năng.
Việc dịch và chạy một tệp chƣơng trình nguồn của hợp ngữ cũng phức tạp hơn so với một
chƣơng trình viết bằng ngôn ngữ bậc cao.
Việc lập trình bằng hợp ngữ thƣờng khó, nhƣng chúng ta cũng sẽ hiểu rõ hơn về việc xử lý của
máy tính và hiểu rõ nguyên tắc của việc lập trình trong các ngôn ngữ bậc cao.
Các đoạn trong một chƣơng trình
Một chƣơng trình khi thực hiện, nó sẽ đƣợc nạp vào bộ nhớ với 3 đoạn: Đoạn mã,
đoạn ngăn xếp và đoạn dữ liệu. Mỗi đoạn này có thể có độ dài tối đa là 64K với địa chỉ đầu
đoạn là 0000h và địa chỉ offset cuối của đoạn là FFFFh.
Trong đó:
Phần cứng PC
HỢP NGỮ
NNLT BẬC CAO
CÁC CHƯƠNG TRÌNH ỨNG DỤNG
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 30
Đoạn mã đƣợc sử dụng để chứa các mã lệnh của chƣơng trình với các mã lệnh nhị phân.
Thƣờng ngƣời ta sử dụng cặp thanh ghi CS:IP để truy xuất tới các ô nhớ chứa lệnh cần thao
tác.
Trong lập trình với hợp ngữ, ngƣời ta có thể mô tả đoạn mã với việc khai báo vị trí bắt
đầu của đoạn là: .CODE
Đoạn dữ liệu: Đoạn này đƣợc sử dụng để chứa các dữ liệu của chƣơng trình. Mỗi một
biến sử dụng đều đƣợc chƣơng trình dịch chuyển thành một địa chỉ ô nhớ nhất định và tại vị trí
của ô nhớ này sẽ chứa nội dung của biến khi thực hiện chƣơng trình.
Trong lập trình với hợp ngữ, ngƣời ta có thể mô tả đoạn dữ liệu với việc khai báo vị trí bắt đầu
của đoạn là: .DATA
Đoạn ngăn xếp :Đoạn này đƣợc sử dụng để chứa dữ liệu truy xuất theo phƣơng thức
"Vào trƣớc Ra sau - First In Last Out - FILO"
Trong lập trình với hợp ngữ, ngƣời ta có thể mô tả đoạn ngăn xếp với việc khai báo
bằng một tên: .Stack với độ dài đoạn ngăn xếp. Thƣờng thì độ dài tối đa là 256 byte.
Các thành phân cơ bản của Assembly
Cấu trúc chung của một lệnh ASSEMBLY
Một lệnh của hợp ngữ dù đơn giản hay phức tạp đều phải có đầy đủ một trong các thành
phần sau:
[Tên] [Mã lệnh] [Các toán hạng] [; chú thích]
Trong đó:
Tên - có thể là tên một chƣơng trình con, một macro, nhãn hoặc một thành phần nào đó
Mã lệnh - Cơ bản trƣờng này chứa mã lệnh dƣới dạng mã gợi nhớ. Có thể là lệnh thật
hoặc lệnh giả. Nếu là lệnh thật thì đây là các lệnh của bộ vi xử lý.
Nếu là các lệnh giả thì đây là các dẫn hƣớng của chƣơng trình dịch. Ví dụ PROC, MACRO,
ENDP, ENDM, SEGMENT, ENDS...
Các toán hạng - Là các thành phần mà các lệnh sử dụng để thực hiện lệnh.
Nếu là các lệnh thật thì đây chính là các toán hạng của lệnh. Với bộ vi xử lý 8086/8088,
các toán hạng này có thể là 0,1 hoặc 2.
Nếu là các lệnh giả thì đây là các tham số. Số lƣợng tham số tuỳ thuộc vào việc khai
báo các dẫn hƣớng.
Chú thích - là lời giải thích để ngƣời sử dụng hiểu rõ hơn về lệnh. Lời chú thích phải
đƣợc bắt đầu bởi dấu (;) và chúng sẽ không đƣợc chƣơng trình dịch xử lý.
Ví dụ:
Lap: ADD AL,[BX] ;Cộng giá trị trong thanh ghi AL với ô nhớ có địa chỉ là DS:BX
;Kết quả đƣợc đƣa vào thanh ghi AL.
Với ví dụ trên, thi lap la tên một nhãn và kết thúc bằng dấu (:); ADD là lệnh thực hiện
phép cộng; AL và [BX] là hai toán hạng với qui định nếu tên thanh ghi hoặc một giá trị hằng
nằm trong dấu [ ] thì đó là địa chỉ OFFSET của ô nhớ chứa dữ liệu cần thao tác; các thành
phần sau dấu (;) chỉ là lời chú thích.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 31
Khai báo dữ liệu và kiểu dữ liệu
Nhƣ chúng ta đã thấy qua hai ví dụ trên, khi khai báo dữ liệu cho chƣơng trình, ngƣời
ta thƣờng sử dụng toán tử DB. Nhƣng trên thực tế, các toán tử khác cũng có thể đƣợc dùng đến
để khai báo cho các dữ liệu có kiểu khác nhau.
DB - Define Byte - Định nghĩa biến kiểu Byte
DW - Define Word - Định nghĩa biến kiểu Word
DD - Define Double Word - Định nghĩa biến kiểu Double Word
DT - Define Ten Byte - Định nghĩa biến kiểu 10 byte
EQU - Equal (Bằng) - Khai báo một hằng, địa chỉ cổng xác định.
Vậy, chúng ta có thể sử dụng các toán tử trên để khai báo cho các biến và hằng ra sao?
Thể hiện các dạng cấu trúc dữ liệu nhƣ thế nào?
Biến byte
Biến kiểu byte sẽ chiếm 1 byte trong bộ nhớ. Hƣớng dẫn chƣơng trình dịch để định nghĩa biến
kiểu byte có dạng tổng quát nhƣ sau:
Tên BD giá_trị_khởi_tạo
Ví dụ: so1 DB 3Eh
Trong ví dụ trên, so1 là một biến kiểu byte có giá trị khởi tạo là 3Eh. Song, đôi khi
chúng ta không cần thiết phải khởi tạo giá trị cho biến, có thể sử dụng cách khai báo sau:
So2 DB ?
Cũng nhƣ các ngôn ngữ lập trình khác, một biến kí tự cũng đƣợc coi là một biến kiểu
byte với mỗi một kí tự đƣợc thể hiện bằng mã ASCII của chúng từ 0 - FFh
Giả sử, muốn khai báo một biến kí tự và khởi tạo giá trị bằng „A‟, ta có thể thực hiện
bằng một trong hai cách sau:
Ch DB „A‟ ;khởi tạo trực tiếp giá trị „A‟, hoặc nhƣ sau :
Ch DB 41h ;khởi tạo thông qua mã ASCII của „A‟
Biến word
Để khai báo biến kiểu từ (Word), chúng ta có thể sử dụng cú pháp sau:
Tên DW giá_trị_khởi_tạo
Cũng giống nhƣ việc khai báo biến kiểu byte, giá_trị_khởi_tạo có thể là dấu (?) để
không khởi tạo giá trị cho biến.
Ví dụ:
1/ w1 DW 3FB4h ;khai báo biến w1 với giá trị khởi tạo là 3FB4h
2/ w2 DW ? ;không khởi tạo giá trị cho biến w2
Biến mảng
Mảng là một danh sách (dãy) các phần tử có cùng một kiểu với các giá trị (có thể) khác
nhau. Vì vậy, để khai báo một mảng, chúng ta có thể thực hiện theo cú pháp sau:
Tên DB danh_sách_giá_trị_khởi_tạo ;khai báo mảng các phần tử kiểu byte
Tên DW danh_sách_giá_trị_khởi_tạo ;khai báo mảng các phần tử kiểu word
Ví dụ 1: mang1 DB 30,55,73,88,33
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 32
Giả thiết, mang1 đƣợc nạp vào bộ nhớ tại địa chỉ offset 23E5h. Khi đó, mảng này sẽ có
các phần tử đƣợc khởi tạo và hình ảnh của chúng trong bộ nhớ nhƣ sau:
Tên phần tử Giá trị khởi tạo địa chỉ bộ nhớ
Mang10
Mang11
Mang12
Mang13
Mang14
30
55
73
88
33
23E5h
23E6h
23E7h
23E8h
23E9h
Ví dụ 2: mang2 DW 2BA3h,2748h,9843h,1F3Bh
Cũng với giả thiết mang2 đƣợc nạp vào bộ nhớ tại địa chỉ offset 23E5h. Khi đó hình
ảnh của mảng này sẽ là:
Tên phần tử Giá trị khởi tạo địa chỉ bộ nhớ
Mang20
Mang22
Mang24
Mang26
2BA3h
2748h
9843h
1F3Bh
23E5h
23E7h
23E9h
23EBh
Chúng ta cũng có thể khởi tạo các giá trị liên tiếp giống nhau. Khi đó, ta cũng có thể sử
dụng toán tử DUP. Ví dụ:
Mang3 DB 100 DUP(5Ch) ; Mang3 là một mảng có100 phần tử với các giá trị khởi
tạo của các phần tử đều là 5Ch
Mang4 DB 3,4,2,10 DUP(0) ; Mang4 có 13 phần tử với 3 phần tử đầu lần lƣợt là
3,4,2; các phần tử còn lại có giá trị 0.
Với mảng hai chiều, việc định nghĩa chúng có thể thực hiện theo cú pháp sau:
Tên DB (DW) giá_trị_khởi_tạo_hàng_1
giá_trị_khởi_tạo_hàng_2
.......................................
giá_trị_khởi_tạo_hàng_n
Ví dụ:
Mang_2_chieu DB 10 DUP(0)
10 DUP(50)
10 DUP(100)
10 DUP(150)
Khai báo một mảng 2 chiều có 4 hành 10 cột với giá trị khởi tạo của hàng 0 là 0, hàng
1là 50, hàng 2 là 100, hàng 3 là 150
Biến chuỗi
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 33
Biến chuỗi hay xâu kí tự thực chất chỉ là một mảng (1 chiều) các phần tử là các kí tự
trong đó mỗi kí tự có thể đƣợc biểu diễn bằng một số là mã ASCII hoặc là kí tự nằm trong dấu
' ' hoặc " ". Vì vậy, ta có thể khai báo bằng một trong các cách sau:
Xau1 DB 'Chao'
Xau2 DB 'C','h','a','o'
Xau3 DB 43h,68h,61h,6Fh
Chƣơng trình biên dịch Macro
Khung của một chƣơng trình ASSEMBLY.
Một chƣơng trình hợp ngữ thể hiện các đoạn dành cho chúng rõ ràng với việc sử dụng
kích thƣớc bộ nhớ phù hợp và cú pháp của các lệnh rõ ràng tuân theo một cú pháp chung, mặc
dù, đó là lệnh thật hoặc lệnh giả. Để thể hiện một chƣơng trình đó, ngƣời ta đƣa ra 2 dạng cấu
trúc. Bao gồm:
Cấu trúc chƣơng trình để dịch ra tệp *.EXE.
Một chƣơng trình *.EXE thƣờng thể hiện rõ ràng 3 đoạn: mã, dữ liệu, ngăn xếp. Sau khi
đƣợc biên dịch (Assembled) và liên kết (Linked), chúng có thể đƣợc thực thi trực tiếp từ dòng
lệnh của DOS nhƣ các chƣơng trình khác. Cấu trúc cơ bản của một chƣơng trình dạng này nhƣ
sau:
TITLE ten_chuong_trinh
.MODEL
.STACK
.DATA
.CODE
Main PROC
;Khởi tạo cho DS hoặc/và ES
MOV AX,@data
MOV DS,AX
;MOV ES,AX
;Các lệnh của chƣơng trình chính
;Trở về DOS bằng việc sử dụng chức năng 4Ch của ngắt 21h
MOV AH,4Ch
INT 21h
Main ENDP
;Các chƣơng trình con (nếu có)
END Main
Trong cấu trúc trên, tại dòng cuối cùng xuất hiện dẫn hƣớng chƣơng trình dịch END và
MAIN để kết thúc toàn bộ chƣơng trình. Main chính là nơi bắt đầu các lệnh của chƣơng trình
trong đoạn mã.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 34
Khi một chƣơng trình *.EXE đƣợc nạp vào bộ nhớ, DOS sẽ tạo ra một mảng gồm 256
byte cho PSP (Program Segment Prefix - Tiền tố chƣơng trình). PSP đƣợc sử dụng để chứa
các thông tin liên quan đến chƣơng trình và đặt ngay vào trƣớc phần chứa mã lệnh của chƣơng
trình.
Tại dòng .MODEL chúng ta có thể khai báo qui mô sử dụng bộ nhớ phù hợp cho từng
chƣơng trình. Có thể là một trong các thành phần sau:
Kiểu kích thƣớc Mô tả
Tiny (Hẹp) mã lệnh và dữ liệu gói gọn trong một đoạn
Small (nhỏ) mã lệnh gói gọn trong một đoạn, dữ liệu nằm
trong một đoạn
Medium (Trung bình) mã lệnh không gói gọn trong một đoạn, dữ
liệu nằm trong một đoạn
Compact (Gọn) mã lệnh gói gọn trong một đoạn, dữ liệu
không gói gọn trong một đoạn
Large (rộng) mã lệnh không gói gọn trong một đoạn,
dữ liệu không gói gọn trong một đoạn,
không có mảng nào lớn hơn 64K
Huge (Đồ sộ) mã lệnh không gói gọn trong một đoạn,
dữ liệu không gói gọn trong một đoạn,
các mảng có thể lớn hơn 64K
Chƣơng trình dịch sẽ dịch tên @data thành các giá trị số của đoạn dữ liệu và đƣa các
thông số của dữ liệu vào thanh ghi DS và ES.
Để hiểu rõ hơn về cấu trúc chƣơng trình này, chúng ta lấy một ví dụ minh hoạ nhƣ sau:
Ví dụ: Viết chƣơng trình hợp ngữ thực hiện in hai chuỗi kí tự trên hai dòng màn hình.
title ct
.MODEL Small
.STACK 100h
.DATA
chao DB 'Chao cac ban sinh vien lop DTK2$'
hoi DB 'Cac ban co muon hoc mon Vi xu ly khong? $'
.CODE
main PROC
;Nap du lieu cho DS
MOV AX,@DATA
MOV DS,AX
;Xoa man hinh bang chuc nang 0 cua ngat 10h
MOV AH,0
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 35
MOV AL,3 ;che do text 80x25
INT 10h
;In chuoi thu nhat ra man hinh
MOV AH,9
MOV DX,offset chao ;tro toi dia chi offset cua chuoi
INT 21h
;Dua con tro xuong dong tiep theo va ve dau dong
MOV AH,2
MOV DL,13 ;xuong dong
INT 21h
MOV DL,10 ;ve dau dong
INT 21h
;In chuoi thu hai ra man hinh
MOV AH,9
MOV DX,offset hoi
INT 21h
;Ket thuc chuong trinh va tro ve DOS
MOV AH,4Ch
INT 21h
main ENDP
END main
Nhƣ vậy, ta thấy chƣơng trình trên là một chƣơng trình nhỏ nên sử dụng qui mô bộ nhớ
nhỏ (Small). Kích thƣớc ngăn xếp là 256 byte. Dữ liệu cho chƣơng trình có hai chuỗi là chao
và hoi. Các chuỗi này đều đƣợc khai báo với toán tử DB.
Đặc biệt, các lệnh hoặc nhóm lệnh của chƣơng trình trên có giải thích để ngƣời đọc và
chính bản thân ngƣời lập trình (khi đọc lại) cũng sẽ dễ hiểu hơn.
Cấu trúc chƣơng trình để dịch ra tệp *.COM.
Một chƣơng trình *.COM thƣờng có đặc điểm khác biệt với các chƣơng trình *.EXE là
chúng chỉ có thể sử dụng một đoạn duy nhất của bộ nhớ để chứa mã, dữ liệu và ngăn xếp. Vì
vậy, qui mô sử dụng bộ nhớ của các chƣơng trình dạng này thƣờng là Tiny.
Cấu trúc cơ bản của dạng chƣơng trình này nhƣ sau:
Title Cautruc_COM
.Model Tiny
.Code
org 100h
Start: JMP Continue
;Dinh nghia cac bien, hang
Continue:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 36
Main PROC
;Cac lenh cua chuong trinh chinh
INT 20h
Main ENDP
;Cac chuong trinh con (neu co)
End Start
Với dạng cấu trúc này, khi dịch chƣơng trình, chƣơng trình dịch sẽ đƣa ra thông báo
"No Stack Segment".
Trong cấu trúc trên, ta thấy, ở ngay đầu chƣơng trình đoạn mã là lệnh giả ORG (Origin:
điểm xuất phát) và lệnh JMP (nhảy). Lệnh giả ORG 100h dùng để gán địa chỉ bắt đầu cho
chƣơng trình tại địa chỉ 100h (256) trong đoạn mã, chừa lại đoạn bộ nhớ 256byte cho PSP.
Lệnh JMP sau nhãn START dùng để nhảy qua phần bộ nhớ dành cho việc định nghĩa và
khai báo dữ liệu. Đích của lệnh nhảy là phần đầu của chƣơng trình chính.
Hình ảnh của chƣơng trình đƣợc thể hiện trong bộ nhớ đƣợc thể hiện nhƣ trong hình vẽ sau:
Địa chỉ lệch
0000h Đoạn đầu chƣơng trình (PSP)
0100h JMP Continue IP
Dữ liệu cho chƣơng trình
FFFEh
Continue:
(Chiều tiến của mã&dữ liệu)
***
(Chiều tiến của ngăn xếp)
SP
Nhƣ vậy, một chƣơng trình *.COM có một số hạn chế sau:
- Dung lƣợng cực đại của chƣơng trình chỉ giới hạn trong một đoạn 64K.
- Chƣơng trình chỉ đƣợc phép sử dụng ngăn xếp với kích thƣớc nhỏ. Nếu không, nó sẽ
chiếm nhiều phần trong đoạn mã lệnh.
Chƣơng trình *.COM thƣờng đƣợc kết thúc bởi lệnh INT 20h.
Sau đây chúng ta xét một ví dụ để hiểu rõ hơn về việc sử dụng cấu trúc trên trong lập
trình hợp ngữ.
Chƣơng trình đƣợc viết nhƣ sau:
Title Cautruc_COM
.Model Tiny
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 37
.Code
Org 100h
Start: JMP Continue
chao DB 'Chao cac ban sinh vien lop TK1$'
hoi DB 'Cac ban co muon hoc mon Vi xu ly khong? $'
Continue: Main PROC
;Xoa man hinh bang chuc nang 0 cua ngat 10h
MOV AH,0
MOV AL,3 ;che do text 80x25
INT 10h
;In chuoi thu nhat ra man hinh
MOV AH,9
MOV DX,offset chao ;tro toi dia chi offset cua chuoi
INT 21h
;Dua con tro xuong dong tiep theo va ve dau dong
MOV AH,2
MOV DL,13 ;xuong dong
INT 21h
MOV DL,10 ;ve dau dong
INT 21h
;In chuoi thu hai ra man hinh
MOV AH,9
MOV DX,offset hoi
INT 21h
INT 20h
Main ENDP
End Start
Chúng ta có thể nhận xét rằng một chƣơng trình *.COM không cần phải nạp dữ liệu vào
DS vì chƣơng trình dạng này có mã, dữ liệu và ngăn xếp trong cùng một đoạn.
Cách tạo và chạy một chƣơng trình hợp ngữ
Một chƣơng trình viết bằng ngôn ngữ bậc cao có thể chạy trực tiếp trong môi trƣờng
của chúng. Song, với ngôn ngữ lập trình bậc thấp (hợp ngữ) thì việc chạy chƣơng trình cần
phải thông qua việc hợp dịch (Assembled), liên kết (Linked). Ngƣời ta đã đƣa ra các bƣớc để
soạn thảo, dịch và chạy chƣơng trình nhƣ sau:
Bƣớc 1: Soạn thảo văn bản chƣơng trình
Trong bƣớc này, ta có thể thực hiện bằng một trình soạn thảo văn bản bất kỳ nào nhƣ EDIT,
NCEDIT, TURBO PASCAL, C, NOTEPAD, hoặc WINWORD... nhƣng, cần phải ghi lại với
phần mở rộng là *.ASM.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 38
Soạn thảo văn bản chƣơng trình
Dịch ra các tệp .OBJ bằng MASM
Liên kết các tệp .OBJ thành tệp .EXE
Lỗi cú pháp?
Dịch ra tệp .COM?
Dịch từ tệp .EXE sang tệp .COM
Không
Có
Chạy chƣơng trình
Không
Có
Bƣớc 2: Hợp dịch chƣơng trình nguồn ra các tệp đối tƣợng *.OBJ
Trong bƣớc này, ta có thể sử dụng trình MASM (MicroSoft Assembler) hoặc TASM (Turbo
Assembler) theo cú pháp sau:
MASM tên_tệp[.phần_mở_rộng]
Hoặc: TASM tên_tệp[.phần_mở_rộng]
Sau khi dịch, nếu có lỗi cú pháp, máy sẽ báo dòng gây lỗi và mã lỗi. Khi đó ta có thể quay lại
bƣớc 1 để sửa tệp nguồn và dịch lại cho đến khi không có lỗi.
Bƣớc 3: Liên kết các tệp đối tƣợng thành tệp chƣơng trình *.EXE
Có thể sử dụng trình liên kết LINK hoặc TLINK (Turbo) theo cú pháp sau:
LINK tệp_đt1[+tệp_đt2+...+tệp_đtn]
Hoặc: TLINK tệp_đt1[+tệp_đt2+...+tệp_đtn]
Bƣớc 4: Nếu chƣơng trình viết dƣới dạng cấu trúc *.COM thì thực hiện dịch sang dạng
*.COM bằng cú pháp sau:
EXE2BIN tên_tệp_exe tên_tệp_com.COM
Nếu tệp viết để dịch ra chƣơng trình *.EXE thì bỏ qua bƣớc này
Bƣớc 5: Chạy tệp chƣơng trình vừa dịch
Tên_tệp_chƣơng_trình
Với các bƣớc thực hiện nhƣ trên, chúng ta có thể mô phỏng bằng lƣu đồ sau:
Ví dụ: Soạn thảo một chƣơng trình đơn giản, sau đó dịch và chạy chƣơng trình này
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 39
Bƣớc 1: Soạn thảo văn bản chƣơng trình
Bƣớc 2: Dịch ra tệp .OBJ
Nếu có lỗi nhƣ hình trên, quay lại bƣớc 1. Cứ nhƣ vậy cho đến khi không còn lỗi
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 40
Bƣớc 3: Liên kết các tệp *.OBJ thành tệp chƣơng trình.
Bƣớc 4: Vì tệp chƣơng trình có cấu trúc *.EXE, nên ta có thể bỏ qua bƣớc này.
Bƣớc 5: Chạy tệp chƣơng trình
Vidu_exe
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 41
CHƢƠNG 3: Một số IC ngoại vi
3.1. Vi mạch chốt
Trong hệ thống vi xử lý có đa hợp địa chỉ và dữ liệu thì khi kết nối vi xử lý với hệ thống phải
tiến hành tách riêng từng đƣờng địa chỉ và dữ liệu. Các IC thƣờng đƣợc dùng để tách địa chỉ
và dữ liệu là IC chốt 75373, 74375, 74573.
Hình 3-1. Sơ đồ chân và sơ đồ logic IC chốt 74573
Hình 3.2 Cấu trúc 74573
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 42
Bảng trạng thái hoạt động của IC chốt 74573.
Bảng 3-1. Bảng trạng thái hoạt động của IC chốt 74573
Trong bảng trạng thái thì khi ngõ cho phép chốt (LE) ở mức cao (H) thì dữ liệu ngõ ra
Q phụ thuộc vào dữ liệu ngõ vào D (Q=D), khi LE ở mức thấp dữ liệu tại ngõ ra đƣợc chốt lại
không phụ còn phụ thuộc dữ liệu của ngõ vào (không thay đổi) bất chấp dữ liệu ngõ vào . khi
đó ta xem dữ liệu đã đƣợc chốt lại.
Chân điều khiển cho phép OE tích cực mức thấp. Khi OE ở múc cao thì 8 ngõ ra sẽ ở trạng
thái tổng trở cao.
3.2. Vi mạch đệm
Các IC đệm có dòng vào, dòng ra, áp vào, áp ra lớn để đệm các đƣờng địa chỉ và
các đƣờng
dữ liệu khi vi xử lý kết nối với nhiều IC nhớ hay Ic ngoại vi. Có 2 dạng IC đệm: đệm 1 chiều
và đệm 2 chiều.
Đệm 2 chiều thƣờng sử dụng là IC 75245 có sơ đồ chân và sơ đồ logic nhƣ hình
Hình 3.3. Sơ đồ chân và sơ đồ logic IC đệm 74245 .
Bảng trạng thái hoạt động của IC đệm 74245
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 43
Bảng 3.2. Bảng trạng thái hoạt động của IC đệm 74245.
Trong bảng trạng thái thì 2 trạng thái đầu OE = L cho phép IC hoạt động và nếu Diretion =
L thì dữ liệu truyền từ bus ngõ vào B sang bus ngõ ra A, Diretion = H thì dữ liệu truyền từ ngõ
vào A sang bus ngõ ra B. Khi OE = H thì các bus ở trạng thái tổng trở cao.
IC 74245 thƣờng đƣợc dùng để đệm bus dữ liệu hi chiều của vi xử lý.
Ngoài IC đệm 2 chiều còn có các IC đệm một chiều 74244 và IC đệm đảo 74240.
Đệm 1 chiều thƣờng sử dụng là IC 75244 có sơ đồ chân và sơ đồ logic nhƣ hình 6-6:
Hình 3.4. Sơ đồ chân và sơ đồ logic Ic đệm 74244 .
Trong sơ đồ logic hình 6-7 sẽ thấy rõ ràng hơn về Ic đệm 74244: trong IC74244 chia ra làm
2 khối đệm 4 bit hoạt đọng độc lập.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 44
Hình 3.5. Sơ đồ logic IC đệm 74244 chia ra làm 2 khối.
Bảng trạng thái hoạt động của IC đệm 74244:
Bảng 3.3. Bảng trạng thái hoạt động của IC đệm 74244.
Trong bảng trạng thái thì 2 trạng thái đầu OE = L cho phép IC đệm dữ liệu. Khi OE= H thì
các ngõ ra ở trạng thái tổng trở cao.
IC 74240 là IC đệm hoạt động giống nhƣ IC đệm 74244 nhƣng ngõ ra bị đảo.
3.3. Vi mạch giải mã
Trong hệ thống vi xử lý thƣờng kết nối với nhiều bộ nhớ và nhiều thiết bj ngoại vi khác nhau.
Vì các bộ nhớ và thiết bị ngoại vi sử dụng chung bus địa chỉ và bus dữ liệu nên phải tiến hành
giải mã để phân chia các vùng nhớ khác nhau cho các bộ nhớ và các thiết bị ngoại vi sao cho
một địa chỉ tƣơng ứng với 1 ô nhớ duy nhất.
Các IC số thƣờng đƣợc dùng để giải mã bộ nhớ trong các hệ thống vi xử lý là các cổng
logic, các Icgiải mã và các IC PROM hay PAL,...
Trong phần này giới thiệu các IC giải mã thƣờng sử dụng nhƣ IC 74139 giải mã 2
đƣờng sang 4 đƣờng và IC 74138 giải mã 3 đƣờng sang 8 đƣờng
Sơ đồ chân và sơ đồ kí hiệu logic nhƣ hình
Hình 3.6. Sơ đồ chân và sơ đò logic IC giải mã 74138
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 45
Bảng trạng thái hoạt động của IC giải mã 74138.
Bảng 3.4 Bảng trạng thái hoạt động của IC giải mã 74138
Trong bảng trạng thái thì 3 trạng thái đầu thì IC không đƣợc phép giải mã – tất cả các
ngõ ra đếu ở mức H.
8 trạng thái còn lại cho phép giải mã 8 ngõ ra theo 3 ngõ vào, mỗi mốt trạng thái có 1
ngõ ra ở múc L.
Khi cần nhiều ngõ ra thì két nối nhiều IC giải mã 74138 ví dụ nhƣ cần giải mã 5 đƣờng
sang 32 đƣờng thì sẽ dùng 4 IC giải mã kết nối nhƣ hình 6-3:
Hình 3.7 Sơ đồ mạch giải mã 5 đƣờng sang 32 đƣờng
Cùng họ với IC giải mã 74138 thì còn IC giải mã 74139 giải mã 2 đƣờng sang 4 đƣờng có
sơ đồ logic nhƣ hình 6-4:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 46
Hình 3.8. Sơ đồ chân và sơ đồ logic IC giải mã 74139
Trong Ic giải mã 74139 có 2 mạch giải mã 2 đƣờng sang 4 đƣờng.
Bảng trạng thái hoạt động của IC giải mã 74139.
Bảng 3.5. Bảng trạng thái hoạt động của IC giải mã 4139
Trạng thái đầu tiên thì chân cho phép E ở mức H sẽ không cho phép giải mã , các ngõ ra ở
mức H. 4 trạng thái còn lại thì cho phép giải mã , ngõ ra tích cực mức thấp.
3.4. Các bộ nhớ bán dẫn
Trong các hệ thống vi xử lý luôn sử dụng bộ nhớ ROM và bộ nhớ RAM để lƣu chƣơng trình
và dữ liệu xử lý. Tùy thuộc vào yêu cầu mà hệ thống bộ nhớ đƣợc sử dụng nhiều hay ít.
Các bộ nhớ ROM thƣờng sử dụng là loại EPROM họ 27xxx, loại EPROM họ 28xxx, họ
29xxx.
Bộ nhớ RAM sử dụng nhiều loại và phổ biến là họ 26xx.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 47
Khảo sát EPROM họ 27xxx: bao gòm 2716 đến 27512 nhƣ hình
Hình 3.8. Sơ đồ chân IC nhớ họ 27xxx.
Trong sơ đồ tổng quát hình 6-8 thì các IC 2716 và 2732 chỉ có 24 chân, các IC từ 2764 đến
27512 thì có 28 chân, để quan sát rõ hơn hãy xem hình 6-9. EPROM 2716 có dung lƣợng
2kbyte, 2732 có dung lƣợng 4kbyte, 2764 có dung lƣợng 8 kbyte.
Hình 3.9. Sơ đồ chân IC2716, 2732, 2764
Tên của các chân nhƣ bảng
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 48
Bảng 3.6. Tên các chân IC nhớ họ 27.
Bảng trạng thái hoạt đôngk của các IC nhớ 2716, 2732 và 2764: nhƣ các bảng
Bảng 3.7. Bảng trạng thái hoạt động của IC2716
Bảng 3.8. Bảng trạng thái hoạt động của IC2732.
Bảng 3.9. Bảng trạng thái hoạt động của IC2764.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 49
Trong bảng trạng thái liệt kê đầy đủ các trạng thái nhƣng nếu sử dụng trong hệ thống giao
tiếp với vi xử lý thì chỉ cần quan tâm đến các trạng thái sau: “Read”. “Standby” và “Output”
Disable”. Các trạng thái còn lại dành cho các nhà nghiên cứu thiết kế bộ nạp Eprom.
Khi sử dụng bộ nhớ kết nối với vi xử lý thì cần phải quan tâm đến các thông số của IC
nhớ cho đầy đủ trong datasheet của IC. Có rất nhiều thông số nhƣng ngƣời sử dụng cần biết
các thông số cơ bản đó là thời gian truy suất bộ nhớ. Hình 6-10 trình bày dạng sóng truy suất
bộ nhớ của IC nhớ 2716:
Hình 3.10. Dạng sóng truy xuất bộ nhớ 2716.
Phân tích dạng sóng: sau khi bộ nhó 2716 nhận đƣợc địa chỉ đã xác lập, tiếp theo chân
điều khiển CE chuyển trạng thái từ H xuống mức L để cho phép bộ nhớ, tiếp theo chân OE
chuyển trạng thái từ H xuống mức L để cho phép xuất dữ liệu.
Nhìn vào dạng sóng thì ta thấy có 3 thông số:
- Thông số tOE đƣợc tính từ khi chân OE xuống mức L cho đến khi dữ liệu xuất ra bus.
- Thông số tCE đƣợc tính từ khi chân CE xuống mức L cho đến khi dữ liệu xuất ra bus.
- Thông số tACC đƣợc tính từ khi địa chỉ xác lập cho đến khi dữ liệu xuất ra bus (thông số
này thƣờng đƣợc gọ là thời gian truy xuất).
Cả 3 thông số đƣợc cho ở bảng 3.10. Trong bảng này liệt kê các thông số cho 2 lọai bộ nhớ.
Bảng 3-10. Bảng thông số thời gian hoạt động của IC 2716.
Khảo sát SRAM họ 62xxx: bao gồm 6264 và 62256, 62512:
SARM 6 264 bộ nhớ này có dung lƣợng 8kbyte có sơ đồ chân và sơ đồ logic nhƣ hình 3-11:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 50
Hình 3. 11. Sơ đồ chân và sơ đồ logic IC nhớ 6264
Tên của các chân nhƣ bảng 3-11:
Bảng 3-11. Tên các chân của IC nhớ 6264.
Bảng trạng thái hoạt động của các IC nhớ 6264 nhƣ bảng 6-12:
Bảng 3-12: Bảng trạng thái hoạt động của IC6264
Dạng sóng đọc dữ liệu từ bộ nhớ RAM 6264 và các thông số: Tƣơng tự nhƣ bộ nhớ EPROM
khi sử dụng phải quan tâm đến các thông số truy suất bộ nhớ đọc và ghi dữ liệu. Hình 6-12
trình bày dạng song đọc dữ liệu từ bộ nhớ của RAM 6264:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 51
Hình 3-12. Dạng song đọc bộ nhớ RAM 6264.
Phân tích dạng sóng: sau khi bộ nhớ 6264 nhận đƣợc địa chỉ đã xác lập, tiếp theo các
chân điều khiển CE1 và CE2 chuyển sang trạng thái cho phép bộ nhớ, tiếp theo chân OE
chuyển trạng thái từ H xuống mức L để cho phép xuát dữ liệu.
Nhìn vào dạng sóng thì ta thấy có 3 thông số:
- Thông số tDOE đƣợc tính từ khi chân OE xuống mức L cho đến khi xuất dữ liệu ra bus.
- Thông số tACE1 đƣợc tính từ khi chân CE1 xuống mức L cho đến khi dữ liệu xuất ra bus.
- Thông số tACE2 đƣợc tính từ khi chân CE2 xuống mức L cho đến khi dữ liệu xuất ra bus.
- Thông số t
AA đƣợc tính từ khi địa chỉ xác lập cho đến khi dữ liệu xuất ra bus (thông số
này thƣờng đƣợc gọi là thời gian truy suất).
Cả 3 thông số đƣợc cho ở bảng 3-13.
Bảng 3-13. Bảng thông số thời gian hoạt động đọc của IC 6264.
Dạng sóng ghi dữ liệu vào bộ nhớ RAM và các thông số: dạng sóng ghi dữ liệu vào ô
nhớ của RAM 6264 nhƣ hình 6-13:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 52
Hình 3-13. Dạng sóng ghi dữ liệu vào bộ nhớ RAM 6264.
Phân tích dạng sóng: sau khi chuyển bộ nhớ 6264 nhận đƣợc địa chỉ đã xác lập, tiếp
theo các chân điều khiển CE1 và CE2 chuyển sang trạng thái cho phép bộ nhớ, tiếp theo chân
WE chuyển trạng thái từ H xuống mức L để cho phép ghi dữ liệu.
Nhìn vào dạng sóng thì ta thấy có 3 thông số:
- Thông số t
PWE đƣợc tính từ khi chân WE xuống mức L cho đến khi dữ liệu đƣợc ghi.
- Thông số tSCE1 đƣợc tính từ khi chân CE1 xuống mức L cho đến khi dữ liệu đƣợc ghi.
- Thông số tSCE2 đƣợc tính từ khi chân CE2 xuống mức L cho đến khi dữ liệu đƣợc ghi.
- Thông số tWC đƣợc tính từ khi địa chỉ xác lập cho đến khi dữ liệu đƣợc ghi (thông số này
thƣờng đƣợc gọi là chu kì ghi).
Cả 3 thông số đƣợc cho ở bảng 3-14.
Bảng 3-14. Bảng thông số thời gian hoạt động ghi của RAM 6264.
SRAM 62256 bộ nhớ này có dung lƣợng 32 kbyte có sơ đồ chân và sơ đồ logic nhƣ
hình 3-14:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 53
Hình 3-14. Sơ đồ chân và sơ đồ logic IC nhớ 62256.
Tên của các chân và bảng trạng thái hoạt động nhƣ bảng 6-17:
Bảng 3-15. Tên các chân IC nhớ 62256.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 54
Chƣơng 4: Hệ vi xử lý 8951 (Sytem on chip or Microcontrollers)
4.1 Tổng quan về vi xử lý 8951(Vi điều khiển)
Vi điều khiển (VĐK) là một “hệ” Vi xử lý (VXL) đƣợc tổ chức trong một chip, nó bao
gồm:
- Bộ VXL (CPU)
- Bộ nhớ chƣơng trình (ROM/EPROM/EEPROM/FLASH).
- Bộ nhớ dữ liệu (RAM).
- Các thanh ghi chức năng, các cổng I/O, cơ chế điều khiển ngắt và truyền tin nối tiếp.
- Các bộ thời gian dùng trong lĩnh vực chia tần và tạo thời gian thực.
- ...
Bộ VĐK có thể đƣợc lập trình để điều khiển các thiết bị thông tin, viễn thông, thiết bị
đo lƣờng, thiết bị điều chỉnh cũng nhƣ các ứng dụng trong công nghệ thông tin và kỹ thuật
điều khiển tự động. Có thể xem bộ VĐK nhƣ một hệ VXL On-chip, đối với AT89C51, nó có
đầy đủ chức năng của một hệ VXL 8 bit, đựoc điều khiển bởi một hệ lệnh, có số lệnh đủ mạnh,
cho phép lập trình bằng hợp ngữ (Assembly).
Sự khác nhau giữa bộ Vi xử lý và bộ Vi điều khiển.
Tiêu chí SS VXL VĐK
Phần cứng
CPU đơn chíp.
CPU, RAM, ROM, Timers, SFR,
mạch giao tiếp, hệ thống ngắt và cơ
chế điều khiển ngắt..
Tập lệnh
Sử dụng các tập lệnh bao quát,
mạnh về kiểu định địa chỉ. Các
lệnh này có thể truy xuất dữ
liệu lớn, thực hiện ở dạng 1/2
Byte, Byte, Word, Double
Word.
Sử dụng các lệnh điều khiển xuất
nhập, có thể truy xuất dữ liệu ở dạng
Bit hoặc Byte. Các nhóm lệnh chính:
Chuyển dữ liệu, điều khiển biến logic,
rẽ nhánh chƣơng trình, tính toán số
học và logic.
Ứng dụng
Trong các hệ máy vi tính.
Trong các hệ thống điều khiển, đo
lƣờng và điều chỉnh
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 55
4.2. Cấu trúc phần cứng của bộ Vi điều khiển 89C51.
4.2.1. Sơ đồ khối.
Bộ VĐK 8 bit AT89C51 hoạt động ở tần số 12 MHz, với bộ nhớ ROM 4Kbyte, bộ nhớ
RAM 128 Byte cƣ trú bên trong và có thể mở rộng bộ nhớ ra ngoài. Ở bộ VĐK này còn có 4
cổng 8 bit (P0P3) vào/ ra 2 chiều để giao tiếp với thiết bị ngoại vi. Ngoài ra, nó còn có:
- CPU
- 2 bộ đinh thời 16 bit (Timer 0 và Timer 1)
- Mạch giao tiếp nối tiếp.
- Bộ xử lý bit (thao tác trên các bit riêng rẽ).
- Hệ thống điều khiển và xử lý ngắt.
- Các kênh điều khiển/ dữ liệu/ địa chỉ.
- Các thanh ghi chức năng đặc biệt (SFR).
Tuy nhiên, tuỳ thuộc vào từng họ VĐK của từng hãng sản xuất khác nhau mà tính năng
cũng nhƣ phạm vi ứng dụng của mỗi bộ VĐK là khác nhau, và chúng đƣợc thể hiện trong các
bảng thống kê sau:
Interrupt
Control
4K
FLASH
128 Bytes
RAM
Timer 1
Timer 0
CPU
OSC Bus
Control
4 I/O Ports Serial
Ports
External
Interrupts
P0 P2 P1 P3
Address/Data
TxD RxD
Counter
Inputs
Hình 4.1. Sơ đồ khối họ VĐK AT89C51
/WR /RD
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 56
Họ VĐK
ROM
(bytes)
RAM
(bytes)
Tốc độ
(MHz)
Chân
I/O
Timer/
Counter
UART Ngắt
8051
8031AH ROMLESS 128 12 32 2 1 5
8051AH 4K ROM 128 12 32 2 1 5
8051AHP 4K ROM 128 12 32 2 1 5
8751H 4K EPROM 128 12 32 2 1 5
8751BH 4K EPROM 128 12 32 2 1 5
8052
8032AH ROMLESS 256 12 32 3 1 6
8052AH 8K ROM 256 12 32 3 1 6
8752BH 8K EPROM 256 12 32 3 1 6
80C51 32
80C31BH ROMLESS 128 12,16 32 2 1 5
80C51BH 4K ROM 128 12,16 32 2 1 5
80C31BH 4K ROM 128 12,16 32 2 1 5
87C51 4K EPROM 128 12,16,20,24 32 2 1 5
8xC52/54/58
80C32 ROMLESS 256 12,16,20,24 32 3 1 6
80C52 8K ROM 256 12,16,20,24 32 3 1 6
87C52 8K EPROM 256 12,16,20,24 32 3 1 6
80C54 16K ROM 256 12,16,20,24 32 3 1 6
87C54 16K EPROM 256 12,16,20,24 32 3 1 6
Họ VĐK
ROM
(bytes)
RAM
(bytes)
Tốc độ
(MHz)
Chân
I/O
Timer/
Counter
UART Ngắt
80C58 32K ROM 256 12,16,20,24 32 3 1 6
87C58 32K EPROM 256 12,16,20,24 32 3 1 6
8xL52/54/58
80L52 8K ROM 256 12,16,20 32 3 1 6
87L52 8K OTP ROM 256 12,16,20 32 3 1 6
80L54 16K ROM 256 12,16,20 32 3 1 6
87L54 16KOTP ROM 256 12,16,20 32 3 1 6
80L58 32K ROM 256 12,16,20 32 3 1 6
87L58 32KOTP ROM 256 12,16,20 32 3 1 6
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 57
Họ VĐK Bộnhớ ROM(Bytes) Bộ nhớ dữ liệu (Bytes) Timer 16 bit Công nghệ
AT89C1051 1K Flash 64 RAM 1 CMOS
AT89C2051 2K Flash 128 RAM 2 CMOS
AT89C51 4K Flash 128 RAM 2 CMOS
AT89C52 8K Flash 256 RAM 3 CMOS
AT89C55 20K Flash 256 RAM 3 CMOS
AT89S8252 8K Flash 256RAM+2K EPROM 3 CMOS
AT89S53 12K Flash 256 RAM 3 CMOS
Bảng 4.1. Các thông số của các họ VĐK thuộc hãng Intel _ Atmel (MSC 51)
Trong thực tế có rất nhiều họ Vi điều khiển đƣợc sản xuất để sử dụng cho đa mục đích, tuy
nhiên trong khuôn khổ tài liệu này chỉ giới hạn ở một số vi điều khiển của hãng ATMEL
Hình 4.2 : Cấu trúc các thanh ghi bên trong của VĐK 80C51/89C51
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 58
4.2.2. Sơ đồ chân tín hiệu.
Chức năng của các chân tín hiệu nhƣ sau:
- P0.0 đến P0.7 là các chân của cổng 0.
- P1.0 đến P1.7 là các chân của cổng 1.
- P2.0 đến P2.7 là các chân của cổng 2
- P3.0 đến P3.7 là các chân của cổng 3
- RxD: Nhận tín hiệu kiểu nối tiếp.
- TxD: Truyền tín hiệu kiểu nối tiếp.
- /INT0: Ngắt ngoài 0.
- /INT1: Ngắt ngoài 1.
- T0: Chân vào 0 của bộ Timer/Counter 0.
- T1: Chân vào 1 của bộ Timer/Counter 1.
- /Wr: Ghi dữ liệu vào bộ nhớ ngoài.
- /Rd: Đọc dữ liệu từ bộ nhớ ngoài.
- RST: Chân vào Reset, tích cực ở mức logic cao trong khoảng 2 chu kỳ máy.
- XTAL1: Chân vào mạch khuyếch đaị dao động
- XTAL2: Chân ra từ mạch khuyếch đaị dao động.
- /PSEN : Chân cho phép đọc bộ nhớ chƣơng trình ngoài (ROM ngoài).
- ALE (/PROG): Chân tín hiệu cho phép chốt địa chỉ để truy cập bộ nhớ ngoài, khi On-chip
xuất ra byte thấp của địa chỉ. Tín hiệu chốt đƣợc kích hoạt ở mức cao, tần số xung chốt = 1/6
P1.0 --
P1.1--
P1.2--
P1.3--
P1.4--
P1.5--
P1.6--
P1.7--
RST--
(RxD) P3.0--
(TxD) P3.1--
(/INT0) P3.2--
(/INT1) P3.3--
(T0) P3.4--
(T1) P3.5--
(/Wr) P3.6--
(/Rd) P3.7--
XTAL2--
XTAL1--
GND--
--Vcc
--P0.0 (AD0)
--P0.1 (AD1)
--P0.2 (AD2)
--P0.3 (AD3)
--P0.4 (AD4)
--P0.5 (AD5)
--P0.6 (AD6)
--P0.7 (AD7)
--/EA/Vpp
--ALE/(/PROG)
--/PSEN
--P2.7 (A15)
--P2.6 (A14)
--P2.5 (A13)
--P2.4 (A12)
--P2.3 (A11)
--P2.2 (A10)
--P2.1 (A9)
--P2.0 (A8)
1 40
2 39
3 38
4 37
5 36
6 35
7 34
8 33
9 32
10 31
11 30
12 29
13 28
14 27
15 26
16 25
17 24
18 23
19 22
20 21
Hình 4.3 : Sơ đồ chân tín hiệu của VXL 80C51/89C51
80C51/89C51
AT MEL
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 59
tần số dao động của bộ VĐK. Nó có thể đƣợc dùng cho các bộ Timer ngoài hoặc cho mục đích
tạo xung Clock. Đây cũng là chân nhận xung vào để nạp chƣơng trình cho Flash (hoặc
EEPROM) bên trong On-chip khi nó ở mức thấp.
- /EA/Vpp: Cho phép On-chip truy cập bộ nhớ chƣơng trình ngoài khi /EA=0, nếu /EA=1 thì
On-chip sẽ làm việc với bộ nhớ chƣơng trình nội trú (trƣờng hợp cần truy cập vùng nhớ lớn
hơn dung lƣợng bộ nhớ chƣơng trình nội trú, thì bộ nhớ chƣơng trình ngoài cũng đƣợc sử
dụng). Khi chân này đƣợc cấp nguồn điện áp 12V (Vpp) thì On-chip đảm nhận chức năng nạp
chƣơng trình cho Flash bên trong nó.
- Vcc: Cung cấp dƣơng nguồn cho On-chip (+ 5V).
- GND: nối Mass.
4.2.3. Các thanh ghi chức năng đặc biệt.
Thanh
ghi
MSB
Nội dung
LSB
IE EA - ET2 ES ET1 EX1 ET0 EX0
IP - - PT2 PS PT1 PX1 PT0 PX0
PSW CY AC FO RS1 RS0 OV - P
TMOD GAT
E
C/(/T) M1 M0 GATE C/(/T) M1 M0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
PCON SMO
D
- - - GF1 GF0 PD IDL
P1 T2 T2EX /SS MOSI MISO SCK
P3 RXD TXD /INT0 /INT1 T0 T1 /WR /RD
Bảng địa chỉ trực tiếp của các thanh ghi đặc biệt đƣợc lƣu trữ trong RAM
Symbol Name Address Reset Values
* ACC Thanh ghi tích luỹ 0E0h 00000000b
* B Thanh ghi B 0F0h 00000000b
* PSW Từ trạng thái chƣơng trình 0D0h 00000000b
SP Con trỏ ngăn xếp 81h 00000111b
DP0L Byte cao của con trỏ dữ liệu 0 82h 00000000b
DP0H Byte thấp của con trỏ dữ liệu 0 83h 00000000b
* P0 Cổng 0 80h 11111111b
* P1 Cổng 1 90h 11111111b
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 60
Symbol Name Address Reset Values
* P2 Cổng 2 0A0h 11111111b
* P3 Cổng 3 0B0h 11111111b
* IP TG điều khiển ngắt ƣu tiên 0B8h xxx00000b
* IE TG điều khiển cho phép ngắt 0A8h 0xx00000b
TMOD Điều khiển kiểu Timer/Counter 89h 00000000b
* TCON TG điều khiển Timer/Counter 88h 00000000b
TH0 Byte cao của Timer/Counter 0 8Ch 00000000b
TL0 Byte thấp của Timer/Counter 0 8Ah 00000000b
TH1 Byte cao của Timer/Counter 1 8Dh 00000000b
TL1 Byte thấp của Timer/Counter 1 8Bh 00000000b
* SCON Serial Control 98h 00000000b
SBUF Serial Data Buffer 99h indeterminate
PCON Power Control 87h 0xxx0000b
* : có thể định địa chỉ bit, x: không định nghĩa
Bảng 4.2. Địa chỉ, ý nghĩa và giá trị của các SFR sau khi Reset
Thanh ghi ACC:
ACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0
Thanh ghi ACC là thanh ghi tích luỹ, nó có độ dài 8 bits và dùng để lƣu trữ kết quả của
phép tính. Trong các tập lệnh của On-chip, nó thƣờng đƣợc quy ƣớc đơn giản là A.
Thanh ghi B :
Thanh ghi B cũng có độ dài 8 bít . Nó thƣờng đƣợc dùng chung với thanh ghi A trong
các phép toán nhân hoặc chia. Khi nhân thì nó còn lƣu trữ kết quả của byte cao còn khi chia thì
dùng để lƣu kết quả phần dƣ. Đối với các lệnh khác, nó có thể xem nhƣ là thanh ghi đệm tạm
thời. Thanh ghi B dài 8 bits.
Thanh ghi SP:
Thanh ghi con trỏ ngăn xếp dài 8 bit. SP chứa địa chỉ của dữ liệu hiện đang hiện hành ở
đỉnh của ngăn xếp hay nối khác là SP luôn trỏ tới ngăn nhớ sử dụng cuối cùng (gọi là đỉnh
ngăn xếp). Giá trị của nó đƣợc tự động tăng lên khi thực hiện lệnh PUSH trƣớc khi dữ liệu
đƣợc lƣu trữ trong ngăn xếp. SP sẽ tự động giảm xuống khi thực hiện lệnh POP. Ngăn xếp có
thể đặt ở bất cứ nơi nào trong RAM on-chip, nhƣng sau khi khởi động lại hệ thống thì con trỏ
ngăn xếp mặc định sẽ trỏ tới địa chỉ khởi đầu là 07h, vì vậy ngăn xếp sẽ bắt đầu từ địa chỉ 08h.
Ta cũng có thể định con trỏ ngăn xếp tại địa chỉ mong muốn bằng các lệnh di chuyển dữ liệu
thông qua định địa chỉ tức thời.
Nói thêm vế ngăn xếp: Ngăn xếp là một vùng của bộ nhớ RAM dùng để lƣu trữ thông
tin tạm thời (có thể là dữ liệu hoặc địa chỉ), lý do cần có không gian lƣu trữ này là vì số lƣợng
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 61
thanh ghi có hạn. Ngăn xếp chiếm 1 vùng nhớ có địa chỉ từ 08h 1Fh tức là toàn bộ 3 bank
thanh ghi1,2,3 (gồm24 Byte). Nếu trong 1 chƣơng trình mà cần phải có ngăn xếp > 24 Byte thì
phải gán địa chỉ cho ngăn xếp lên vùng nhớ có địa chỉ từ 30h trở lên. Nhớ rằng khi reset hệ
thống thì giá trị của SP = 07h.
Thanh ghi DPTR:
Dph Dpl
Thanh ghi con trỏ dữ liệu (16 bit) bao gồm 1 thanh ghi byte cao (DPH-8bit) và 1 thanh ghi
byte thấp (DPL-8bit). DPTR có thể đƣợc dùng nhƣ thanh ghi 16 bit hoặc 2 thanh ghi 8 bit độc
lập. Thanh ghi này đƣợc dùng để truy cập RAM ngoài.
Ports 0 to 3:
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0
P0, P1, P2, P3 là các chốt của các cổng 0, 1, 2, 3 tƣơng ứng. Mỗi chốt gồm 8 bit. Khi
ghi mức logic 1 vào một bit của chốt, thì chân ra tƣơng ứng của cổng ở mức logic cao. Còn khi
ghi mức logic 0 vào mỗi bit của chốt thì chân ra tƣơng ứng của cổng ở mức logic thấp. Khi các
cổng đảm nhiệm chức năng nhƣ các đầu vào thì trạng thái bên ngoài của các chân cổng sẽ
đƣợc giữ ở bit chốt tƣơng ứng. Tất cả 4 cổng của on-chip đều là cổng I/O hai chiều, mỗi cổng
đều có 8 chân ra, bên trong mỗi chốt bit có bộ “Pullup-tăng cƣờng” do đó nâng cao khả năng
nối ghép của cổng với tải (có thể giao tiếp với 4 đến 8 tải loại TTL).
Thanh ghi SBUF:
SBUF
SBUF
Đệm dữ liệu nối tiếp gồm 2 thanh ghi riêng biệt, một thanh ghi đệm phát và một thanh
ghi đệm thu. Khi dữ liệu đƣợc chuyển tới SBUF, nó sẽ đi vào bộ đệm phát, và đƣợc giữ ở đấy
để chế biến thành dạng truyền tin nối tiếp. Khi dữ liệu đƣợc truyền đi từ SBUF, nó sẽ đi ra từ
bộ đệm thu.
Các Thanh ghi Timer: Các đôi thanh ghi (TH0, TL0), (TH1, TL1) là các thanh ghi đếm 16 bit
tƣơng ứng với các bộ Timer/Counter 0 và 1.
THX TLX
Các thanh ghi điều khiển: Các thanh ghi chức năng đặc biệt: IP, IE, TMOD, TCON, SCON,
và PCON bao gồm các bit trạng thái và điều khiển đối với hệ thống ngắt, các bộ Timer/Counter
và cổng nối tiếp. Chúng sẽ đƣợc mô tả ở phần sau.
Thanh ghi PSW:
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 62
CY AC FO RS1 RS0 OV - P
Từ trạng thái chƣơng trình dùng để chứa thông tin về trạng thái chƣơng trình. PSW có
độ dài 8 bit, mỗi bit đảm nhiệm một chức năng cụ thể. Thanh ghi này cho phép truy cập ở dạng
mức bit.
* CY: Cờ nhớ. Trong các phép toán số học, nếu có nhớ từ phép cộng bit 7 hoặc có số
mƣợn mang đến bit 7 thì CY đƣợc đặt bằng 1.
* AC: Cờ nhớ phụ (Đối với mã BCD). Khi cộng các giá trị BCD, nếu có một số nhớ
đƣợc tạo ra từ bit 3 chuyển sang bit 4 thì AC đƣợc đặt bằng 1. Khi giá trị đƣợc cộng là BCD,
lệnh cộng phải đƣợc thực hiện tiếp theo bởi lệnh DA A (hiệu chỉnh thập phân thanh chứa A) để
đƣa các kết quả lớn hơn 9 về giá trị đúng.
* F0: Cờ 0 (Có hiệu lực với các mục đích chung của ngƣời sử dụng)
* RS1: Bit 1 điều khiển chọn băng thanh ghi.
* RS0: Bit 0 điều khiển chọn băng thanh ghi.
Lƣu ý: RS0, RS1 đƣợc đặt/xoá bằng phần mềm để xác định băng thanh ghi đang hoạt động
(Chọn băng thanh ghi bằng cách đặt trạng thái cho 2 bit này)
RS1 (PSW. 4) RS0 (PSW. 3)
Bank 0 0 0
Bank 1 0 1
Bank 2 1 0
Bank 3 1 1
Bảng 4.3 Chọn băng thanh ghi
* OV: Cờ tràn. Khi thực hiện các phép toán cộng hoặc trừ mà xuất hiện một tràn số học,
thì OV đƣợc đặt bằng 1. Khi các số có dấu đƣợc cộng hoặc đƣợc trừ, phần mềm có thể kiểm tra
OV để xác định xem kết quả có nằm trong tầm hay không. Với phép cộng các số không dấu,
OV đƣợc bỏ qua. Kết quả lớn hơn +128 hoặc nhỏ hơn -127 sẽ đặt OV=1.
* -: Bit dành cho ngƣời sử dụng tự định nghĩa(Nếu cần).
* P: Cờ chẵn lẻ. Đƣợc tự động đặt/ xoá bằng phần cứng trong mỗi chu trình lệnh để
chỉ thị số chẵn hay lẻ của bit 1 trong thanh ghi tích luỹ. Số các bit 1 trong A cộng với bit P
luôn luôn là số chẵn.
Thanh ghi PCON: Thanh ghi điều khiển nguồn.
SMOD - - - GF1 GF0 PD IDL
* SMOD: Bit tạo tốc độ Baud gấp đôi. Nếu Timer 1 đƣợc sử dụng để tạo tốc độ baud và
SMOD=1, thì tốc độ Baud đƣợc tăng lên gấp đôi khi cổng truyền tin nối tiếp đƣợc dùng bởi
các kiểu 1, 2 hoặc 3.
* -: Không sử dụng, các bit này có thể đƣợc dùng ở các bộ VXL trong tƣơng lai. Ngƣời
sử dụng không đƣợc phép tự định nghĩa cho các bit này.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 63
* GF0, GF1: Cờ dùng cho các mục đích chung (đa mục đích).
* PD: bit nguồn giảm. Đặt bit này ở mức tích cực để vận hành chế độ nguồn giảm trong
AT89C51. Chỉ có thể ra khỏi chế độ bằng Reset.
* IDL: bit chọn chế độ nghỉ. Đặt bit này ở mức tích cực để vận hành kiểu Idle (Chế độ
không làm việc) trong AT89C51.
Lƣu ý: Nếu PD và IDL cùng đƣợc kích hoạt cùng 1 lúc ở mức tích cực, thì PD đƣợc ƣu
tiên thực hiện trƣớc. Chỉ ra khỏi chế độ bằng 1 ngắt hoặc Reset lại hệ thống.
Thanh ghi IE: Thanh ghi cho phép ngắt
EA - ET2 ES ET1 EX1 ET0 EX0
* EA: Nếu EA=0, không cho phép bất cứ ngắt nào hoạt động.
* Nếu EA=1, mỗi nguồn ngắt riêng biệt sẽ phụ thuộc và bít cho phép ngắt tƣơng ứng
* -: Không dùng, ngƣời sử dụng không nên định nghĩa cho Bit này, bởi vì nó có thể
đƣợc dùng ở các bộ AT89 trong tƣơng lai.
* ET2: Bit cho phép hoặc không cho phép ngắt bộ Timer 2.
* ES: Bit cho phép hoặc không cho phép ngắt cổng nối tiếp (SPI và UART).
* ET1: Bit cho phép hoặc không cho phép ngắt tràn bộ Timer 1
* EX1: Bit cho phép hoặc không cho phép ngắt ngoài 1.
* ET0: Bit cho phép hoặc không cho phép ngắt tràn bộ Timer 0
* EX0: Bit cho phép hoặc không cho phép ngắt ngoài 0.
Thanh ghi IP: Thanh ghi ƣu tiên ngắt.
- - PT2 PS PT1 PX1 PT0 PX0
* - : Không dùng, ngƣời sử dụng không nên ghi “1” vào các Bit này.
* PT2: Xác định mức ƣu tiên của ngắt Timer 2.
* PS: Định nghĩa mức ƣu tiên của ngắt cổng nối tiếp.
* PT1: Định nghĩa mức ƣu tiên của ngắt Timer 1.
* PX1: Định nghĩa mức ƣu tiên của ngắt ngoàI 1.
* PT0: Định nghĩa mức ƣu tiên của ngắt Timer 0.
* PX0: Định nghĩa mức ƣu tiên của ngắt ngoàI 0.
Thanh ghi TCON : Thanh ghi điều khiển bộ Timer/Counter
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
* TF1: Cờ tràn Timer 1. Đƣợc đặt bởi phần cứng khi bộ Timer 1 tràn. Đƣợc xoá bởi
phần cứng khi bộ vi xử lý hƣớng tới chƣơng trình con phục vụ ngắt.
TR1: Bit điều khiển bộ Timer 1 hoạt động. Đƣợc đặt/xoá bởi phần mềm để điều khiển
bộ Timer 1 ON/OFF
* TF0: Cờ tràn Timer 0. Đƣợc đặt bởi phần cứng khi bộ Timer 0 tràn. Đƣợc xoá bởi
phần cứng khi bộ vi xử lý hƣớng tới chƣơng trình con phục vụ ngắt.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 64
* TR0: Bit điều khiển bộ Timer 0 hoạt động. Đƣợc đặt/xoá bởi phần mềm để điều khiển
bộ Timer 0 ON/OFF.
* IE1: Cờ ngắt ngoài 1. Đƣợc đặt bởi phần cứng khi sƣờn xung của ngắt ngoài 1 đƣợc
phát hiện. Đƣợc xoá bởi phần cứng khi ngắt đƣợc xử lý.
* IT1: Bit điều khiển ngắt 1 để tạo ra ngắt ngoài. Đƣợc đặt/xoá bởi phần mềm.
* IE0: Cờ ngắt ngoài 0. Đƣợc đặt bởi phần cứng khi sƣờn xung của ngắt ngoài 0 đƣợc
phát hiện. Đƣợc xoá bởi phần cứng khi ngắt đƣợc xử lý.
* IT0: Bit điều khiển ngắt 0 để tạo ra ngắt ngoài. Đƣợc đặt/xoá bởi phần mềm.
Thanh ghi TMOD: Thanh ghi điều khiển kiểu Timer/Counter
GATE C/(/T) M1 M0 GATE C/(/T) M1 M0
Dành cho Timer 1 Dành cho Timer 0
* GATE: Khi GATE=1 và TRx =1, bộ TIMER/COUTERx hoạt động chỉ khi chân INTx
ở mức cao. Khi GATE=0, bộ TIMER/COUNTERx sẽ hoạt động chỉ khi TRx=1
* C/(/T): Bit này cho phép chọn chức năng là Timer hay Counter.
- Bit này =0 thì thực hiện chức năng Timer
- Bit này =1 thì thực hiện chức năng Counter
* M0, M1: Bit chọn Mode, để xác định trạng thái và kiểu Timer/Counter:
- M1=0, M0=0: Chọn kiểu bộ Timer 13 bit.Trong đó THx dài 8 bit, TLx dài 5 bit. -
- M1=0, M0=1: Chọn kiểu bộ Timer 16 bit. THx và TLx dài 16 bit đƣợc ghép tầng.
- M1=1, M0=0: 8 bit Auto reload. Các thanh ghi tự động nạp lại mỗi khi bị tràn. Khi bộ
Timer bị tràn, THx dài 8 bit đƣợc giữ nguyên giá trị, còn giá trị nạp lại đƣợc đƣa vào TLx.
- M1=1, M0=1: Kiểu phân chia bộ Timer. TL0 là 1 bộ Timer/Counter 8 bit, đƣợc điều
khiển bằng các bit điều khiển bộ Timer 0, Còn TH0 chỉ là bộ Timer 8 bit, đƣợc điều khiển
bằng các bit điều khiển Timer 1.
- M1=1, M0=1: Timer/Counter 1 Stopped
Thanh ghi SCON:
SM0 SM1 SM2 REN TB8 RB8 TI RI
SCON là thanh ghi trạng thái và điều khiển cổng nối tiếp. Nó không những chứa các bit
chọn chế độ, mà còn chứa bit dữ liệu thứ 9 dành cho việc truyền và nhận tin (TB8 và RB8) và
chứa các bit ngắt cổng nối tiếp.
* SM0, SM1: Là các bit cho phép chọn chế độ cho cổng truyền nối tiếp.
SM0 SM1 Mode Đặc điểm Tốc độ Baud
0 0 0 Thanh ghi dịch Fosc /12
0 1 1 8 bit UART Có thể thay đổi (đƣợc đặt bởi bộ Timer)
1 0 2 9 bit UART Fosc /64 hoặc Fosc /32
1 1 3 9 bit UART Có thể thay đổi (đƣợc đặt bởi bộ Timer)
Bảng 4.4 : Chọn Mode trong SCON
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 65
* SM2: Cho phép truyền tin đa xử lý, thể hiện ở Mode 2 và 3. ở chế độ 2 hoặc 3, nếu đặt
SM2 = 1 thì RI sẽ không đƣợc kích hoạt nếu bit dữ liệu thứ 9 (RB8) nhận đƣợc giá trị bằng 0.
ở Mode 1, nếu SM2=1 thì RI sẽ không đƣợc kích hoạt nếu bit dừng có hiệu lực đã không đƣợc
nhận. ở chế độ 0, SM2 nên bằng 0
* REN: Cho phép nhận nối tiếp. Đƣợc đặt hoặc xoá bởi phần mềm để cho phép hoặc
không cho phép nhận.
* TB8: Là bit dữ liệu thứ 9 mà sẽ đƣợc truyền ở Mode 2 và 3. Đƣợc đặt hoặc xoá bởi
phần mềm.
* RB8: Là bit dữ liệu thứ 9 đã đƣợc nhận ở Mode 2 và 3. Ở Mode 1, nếu SM2=0 thì
RB8 là bit dừng đã đƣợc nhận. Ở Mode 0, RB8 không đƣợc sử dụng.
* TI: Cờ ngắt truyền. Đƣợc đặt bởi phần cứng tại cuối thời điểm của bit thứ 8 trong
Mode 0, hoặc đầu thời điểm của bit dừng trong các Mode khác. Ở bất kỳ quá trình truyền nối
tiếp nào, nó cũng phải đƣợc xoá bằng phần mềm.
* RI: Cờ ngắt nhận. Đƣợc đặt bởi phần cứng tại cuối thời điểm của bit thứ 8 trong
Mode 0, hoặc ở giữa thời điểm của bit dừng trong các Mode khác. Ở bất kỳ quá trình nhận nối
tiếp nào (trừ trƣờng hợp ngoại lệ, xem SM2), nó cũng phải đƣợc xoá bằng phần mềm.
Các cổng vào/ra của 80C51/89C51.
Vi điều khiển 8051/8951 có 4 cổng, mỗi cổng có 8 bit để thực hiện việc xuất /nhập dữ
liệu. Bốn cổng này sẽ cho phép ngƣời lập trình truy xuất dữ liệu dƣới dạng cả byte hoặc truy
xuất từng bít riêng rẽ, khi truy xuất cả byte thì nó đƣợc ký hiệu là P0 , P1, P2 và P3. Một chú ý
là khi khởi động lại bộ VĐK (Reset ) thì giá trị của các cổng đều ở mức lôgic 1.
Cổng P0 có 8 chân và số thứ tự chân từ 32 đến chân 39(chân 39~P0.0 và chân 32~P0.7)
Cổng P1 có 8 chân và số thứ tự chân từ 1 đến chân 8 (chân 1~P1.0 và chân 8 ~P1.7)
Cổng P2 có 8 chân và số thứ tự chân từ 21 đến chân 28(chân 21~P2.0 và chân 28~P2.7)
Cổng P3 có 8 chân và số thứ tự chân từ 10 đến chân 17(chân 10~P3.0 và chân 17~P3.7)
Bình thƣờng thì P0 đƣợc dùng làm đầu ra, khi sử dụng P0 vừa làm đầu ra vừa làm đầu
vào thì cần phải sử dụng điện trở kéo lên vì riêng P0 đƣợc thiết kế kiểu cực máng hở.
4.3. Tổ chức không gian bộ nhớ của 80C51.
4.3.1 Sơ đồ khối.
Tất cả các bộ Flash Microcontrollers của hãng Atmel đều tổ chức các vùng địa chỉ tách
biệt đối với bộ nhớ chƣơng trình và bộ nhớ dữ liệu, đƣợc mô tả ở hình 7.8. Các vùng nhớ
chƣơng trình và dữ liệu tách biệt cho phép lƣu trữ và truy xuất dữ liệu với tốc độ cao ở vùng
địa chỉ 8 bít. Tuy nhiên, địa chỉ bộ nhớ dữ liệu 16 bit cũng có thể đƣợc tạo ra thông qua thanh
ghi con trỏ dữ liệu (DPTR).
Bộ nhớ chƣơng trình có thể chỉ đƣợc đọc. Chúng có thể là bộ nhớ chƣơng trình 4 Kbyte
ROM trong có khả năng định địa chỉ trực tiếp hoặc 64 Kbyte bộ nhớ chƣơng trình ngoài. Khi
truy xuất bộ nhớ ngoài thì cần xác định trạng thái phù hợp cho chân /PSEN.
Bộ nhớ dữ liệu trong có dung lƣợng là 128 Byte nằm ở vùng địa chỉ riêng biệt so với bộ
nhớ chƣơng trình, tuy nhiên 64 Kbyte bộ nhớ ngoài cũng có thể đƣợc kết nối khi cần thiết .
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 66
Để đọc dữ liệu ở bộ nhớ RAM ngoài ngoài thì CPU cần tạo ra tín hiệu đọc và ghi (/RD, /WR)
cho phù hợp để truy cập bộ nhớ dữ liệu ngoài.
Bộ nhớ chƣơng trình ngoài và bộ nhớ dữ liệu ngoài có thể đƣợc kết hợp bởi các tín hiệu
/RD và /PSEN để đƣa vào 1 cổng AND và sử dụng đầu ra của cổng này để đọc nội dung từ
bộ nhớ dữ liệu/chƣơng trình ngoài.
4.3.2. Bộ nhớ chƣơng trình và bộ nhớ dữ liệu nội trú.
a. Bộ nhớ chƣơng trình nội trú:
Bộ nhớ chƣơng trình của AT89C51 đƣợc tổ chức nhƣ thể hiện ở hình trên. Không gian
nhớ cực đại của bộ nhớ này chiếm 64 Kbyte, đƣợc định địa chỉ từ 0000h đến FFFFh, trong đó
có 4 Kbyte Flash nội trú bên trong nó và đƣợc định địa chỉ từ 0000h đến 0FFFh. Do đó có thể
mở rộng thêm 60 Kbyte bộ nhớ chƣơng trình bên ngoài, đƣợc định địa chỉ từ 1000h đến
FFFFh. Tuy nhiên bộ VĐK này cũng có thể sử dung toàn bộ bộ nhớ chƣơng trình ngoài bao
gồm 64 Kbyte đƣợc định địa chỉ từ 0000h đến FFFFh.
Hình 4.4. Tổ chức không gian bộ nhớ 89c51
Cũng từ hình trên ta thấy, thông qua việc chọn mức logic cho bit /EA có thể lựa chọn để
truy cập bộ nhớ chƣơng trình nội trú (4Kb), bộ nhớ chƣơng trình mở rộng ngoại trú (60Kb),
hoặc toàn bộ bộ nhớ chƣơng trình ngoại trú bên ngoài On-chip (64Kb). Cụ thể, khi /EA = 1 thì
bộ VĐK sử dụng cả bộ nhớ chƣơng trình nội trú và ngoại trú. Ngƣợc lại, khi /EA = 0 thì bộ
VĐK chỉ sử dụng bộ nhớ chƣơng trình ngoại trú.
Mỗi khi đƣợc Reset, bộ VĐK sẽ truy cập bộ nhớ chƣơng trình tại địa chỉ khởi đầu là
0000h, sau đó nếu cơ chế ngắt đƣợc sử dụng thì nó sẽ truy cập tới địa chỉ quy định trong bảng
vecter ngắt.
ĐỀ CƢƠNG MÔN HỌC KỸ THUẬT VI XỬ LÝ
KHOA ĐIỆN – ĐIỆN TỬ - ĐHSPKT-HY_01/2017 Trang 67
Khi truy cập bộ nhớ chƣơng trình, bộ VĐK sử dụng xung chọn /PSEN để điều khiển.
Nếu on-chip làm việc với bộ nhớ chƣơng trình nội trú thì chân phát ra xung chọn /PSEN không
sử dụng. Nếu bộ VĐK làm việc với bộ nhớ chƣơng trình ngoại trú thì chân phát ra xung chọn
/PSEN đƣợc sử dụng. Khi đó nếu /PSEN = 0 thì cho phép bộ VĐK đọc bộ nhớ chƣơng trình
ngoài, ngƣợc lại nếu /PSEN = 1 thì bộ VĐK chỉ làm việc với bộ nhớ chƣơng trình nội trú.
b. Bộ nhớ dữ liệu nội trú
AT89C51 có bộ nhớ dữ liệu chiếm một khoảng không gian bộ nhớ độc lập với bộ nhớ
chƣơng trình. Dung lƣợng của RAM nội trú ở họ VĐK này là 128 Byte, đƣợc định địa chỉ từ
00h đến 7Fh. Phạm vi địa chỉ từ 80h đến FFh dàn
Các file đính kèm theo tài liệu này:
- 05200065_4186_1984590.pdf