Bài giảng Kỹ thuật vi xử lý

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ọ...

pdf124 trang | Chia sẻ: putihuynh11 | Lượt xem: 455 | Lượt tải: 0download
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:

  • pdf05200065_4186_1984590.pdf
Tài liệu liên quan