HỌ VI XỬ LÝ INTEL 80x86
Cấu trúc bên trong và hoạt động của vi xử lý 8086
động của vi xử lý 8086
Các chế độ định địa chỉ của bộ vi xư lý 8086
3 Tập lệnh của vi xử lý 8086
4 Các chế độ làm việc của vi xử lý
5 Lập trình hợp ngữ cho vi xử lý 8086/8088
2 Bài 2: Cấu trúc họ vi điều khiển 8051 4 2 1 1
1 Các cách định địa chỉ
1.Thanh ghi SFR của timer
2 Các chế độ làm việc
3 Khởi tạo và truy suất thanh ghi PORT nối tiếp
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi bật của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình phát triển cho 80x86 vẫn có khả năng chạy trên các hệ thống tiên tiến hơn Mặc dù các họ vi xử lý của các hãng khác nhau có sự khác biệt, nhưng vẫn tồn tại nhiều điểm tương đồng quan trọng Khi nắm vững kỹ thuật của 8086, người dùng sẽ có nền tảng vững chắc để hiểu và làm việc với các bộ vi xử lý khác trong cùng họ Intel hoặc từ các hãng khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU) Khối BIU chịu trách nhiệm quản lý giao tiếp với bộ nhớ và các thiết bị ngoại vi, trong khi khối EU thực hiện các lệnh và xử lý dữ liệu Sự phân chia này giúp tối ưu hóa hiệu suất và hiệu quả trong xử lý thông tin.
BIU cung cấp các chức năng nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, giúp tăng cường hiệu suất hoạt động của vi xử lý thông qua cải thiện Bus Khi khối thực hiện lệnh đang xử lý lệnh hiện tại, BIU có thể bắt đầu lấy lệnh tiếp theo từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM nội bộ tốc độ cao, với độ dài 6 byte cho vi xử lý 8086 Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm gián đoạn hoạt động của BIU, từ đó giảm đáng kể thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự vào/ra liên tục của dòng mã lệnh trong bộ đệm cho thấy sự phối hợp hiệu quả giữa hai khối EU và BIU, nhờ vào cơ chế xử lý xen kẽ liên tục nhằm tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật này sẽ không còn hiệu quả nếu bộ đệm chứa các mã lệnh của lệnh CALL hoặc JMP, vì khi gặp các lệnh này, nội dung cũ trong bộ đệm sẽ bị xoá và thay thế bằng nội dung mới Quá trình này tiêu tốn nhiều thời gian hơn so với trường hợp bộ đệm chỉ chứa mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để xử lý lệnh và dữ liệu Trong quá trình này, EU thực hiện việc giải mã lệnh, thực hiện các tác vụ cần thiết, và sau đó gửi kết quả trở lại BIU để lưu trữ.
Thao tác đầu tiên của EU là giải mã lệnh, mặc dù thời gian này có vẻ lãng phí cho CPU do không có hoạt động điện nào trên Bus Tuy nhiên, thực tế cho thấy đây là khoảng thời gian quan trọng mà BIU tận dụng để lấy trước các câu lệnh tiếp theo.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, theo thứ tự sau lệnh đang thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ mới, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và chuyển ngay cho EU, sau đó tiếp tục thu thập các lệnh để đưa vào hàng đợi.
Khối EU trong vi xử lý 8086/8088 bao gồm các thanh ghi chung với độ rộng 16 bit EU không giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi do BIU cung cấp Khi có lệnh yêu cầu truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU điều khiển đều là địa chỉ 16 bit, nhưng thông qua việc di chuyển vị trí bộ nhớ do BIU thực hiện, EU có thể truy cập toàn bộ bộ nhớ 1 MB.
ALU là một phần của EU, nhưng thực tế hoạt động như một đơn vị độc lập, chịu trách nhiệm thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thì, từ các thanh ghi hoặc bộ nhớ Kết quả được lưu trữ trong thanh ghi hoặc bộ nhớ, và 6 cờ trạng thái được cập nhật dựa trên kết quả của các phép toán này.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU của 8086 sử dụng địa chỉ 20 bit, cho phép phân biệt 2^20 = 1.048.576 ô nhớ, tương đương với 1MB Trong không gian bộ nhớ 1MB này, cần chia thành các vùng khác nhau để quản lý hiệu quả.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được tạo ra để quản lý các thông số của bộ vi xử lý khi gọi hoặc trở về từ chương trình con.
Vi xử lý 8086/8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là các thanh ghi đoạn (Segment register) Các thanh ghi này đóng vai trò quan trọng trong việc quản lý và truy cập dữ liệu trong bộ nhớ.
CS (Code Segment) là một phần quan trọng trong lập trình, chứa địa chỉ bắt đầu của đoạn mã chương trình thực thi Nó thường được lưu trữ trong vùng nhớ không thay đổi hoặc trong ROM/EPROM, đảm bảo rằng các lệnh có thể thực hiện được một cách hiệu quả.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
Thanh ghi đoạn ngăn xếp (SS) là một thành phần quan trọng trong bộ nhớ RAM, chứa địa chỉ bắt đầu của mảng stack Mảng này lưu trữ dữ liệu từ các thanh ghi trong suốt quá trình ngắt, đảm bảo rằng thông tin cần thiết được bảo toàn và truy xuất hiệu quả.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép linh hoạt trong việc thay đổi giá trị các thanh ghi đoạn, giúp dịch chuyển trong không gian 1 Mbyte Do đó, các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu đủ 64 Kbyte, hoặc có thể chồng lấn lên nhau khi không sử dụng hết dung lượng này.
Các chế độ làm việc của vi xử lý
5 Lập trình hợp ngữ cho vi xử lý 8086/8088
2 Bài 2: Cấu trúc họ vi điều khiển 8051 4 2 1 1
1 Các cách định địa chỉ
1.Thanh ghi SFR của timer
2 Các chế độ làm việc
3 Khởi tạo và truy suất thanh ghi PORT nối tiếp
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi tiếng nhất của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau Các chương trình được phát triển cho 80x86 vẫn có khả năng chạy trên các hệ thống tiên tiến hơn Mặc dù các họ vi xử lý của các hãng khác nhau có sự khác biệt, nhưng chúng vẫn chia sẻ nhiều điểm tương đồng quan trọng Do đó, khi nắm vững kỹ thuật của 8086, người dùng sẽ có nền tảng vững chắc để hiểu và làm việc với các bộ vi xử lý khác trong cùng họ của Intel hoặc từ các hãng khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU) Khối BIU chịu trách nhiệm giao tiếp với bộ nhớ và các thiết bị ngoại vi, trong khi khối EU thực hiện các lệnh và xử lý dữ liệu Sự phân chia này giúp tối ưu hóa hiệu suất và khả năng xử lý của vi xử lý.
BIU cung cấp chức năng nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, giúp tăng khả năng hoạt động của vi xử lý qua việc cải thiện Bus Khi khối thực hiện lệnh bận rộn, BIU có thể bắt đầu lấy lệnh kế tiếp từ bộ nhớ và lưu trữ chúng trong RAM nội bộ tốc độ cao gọi là hàng đợi, với độ dài 6 byte cho vi xử lý 8086 Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm tắc nghẽn BUS, từ đó giảm thiểu thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự phối hợp hiệu quả giữa hai khối EU và BIU được thể hiện qua việc có dòng mã lệnh liên tục trong bộ đệm, giúp tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật xử lý xen kẽ liên tục sẽ không còn hiệu quả nếu bộ đệm chứa các lệnh CALL hoặc JMP, vì những lệnh này sẽ xoá nội dung cũ và thay thế bằng mã lệnh mới, dẫn đến việc tiêu tốn nhiều thời gian hơn so với khi bộ đệm chỉ chứa mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Đồng thời, EU sẽ giải mã lệnh, thực hiện chúng và chuyển kết quả trở lại BIU để lưu trữ.
EU thực hiện thao tác giải mã lệnh đầu tiên, mặc dù khoảng thời gian này có vẻ lãng phí cho CPU do không có hoạt động điện nào trên Bus Tuy nhiên, thời gian này thực chất được BIU tận dụng để lấy trước các câu lệnh tiếp theo, như đã mô tả.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, theo thứ tự thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ khác, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và chuyển ngay cho EU, sau đó tiếp tục thu thập các lệnh để đưa vào hàng đợi.
Khối EU trong vi xử lý 8086/8088 được cấu thành từ các thanh ghi chung với độ rộng 16 bit, không có giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi của BIU Khi cần truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU quản lý đều có địa chỉ 16 bit, nhưng nhờ vào khả năng di chuyển vị trí bộ nhớ của BIU, EU có thể truy cập toàn bộ bộ nhớ 1 MB.
ALU là một tập con của EU, hoạt động như một phần độc lập, thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thì, từ các thanh ghi hoặc bộ nhớ Kết quả của các thao tác được lưu trữ trong thanh ghi hoặc bộ nhớ, trong khi 6 cờ trạng thái được cập nhật theo kết quả của các phép toán này.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU của 8086 sử dụng địa chỉ 20 bit, cho phép phân biệt 2^20 = 1.048.576 ô nhớ, tương đương với 1MB Trong không gian 1MB này, bộ nhớ cần được phân chia thành các vùng khác nhau để phục vụ các mục đích sử dụng riêng biệt.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được sử dụng để quản lý các thông số của bộ vi xử lý trong quá trình gọi và trở về từ chương trình con.
Vi xử lý 8086/8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là thanh ghi đoạn (Segment register) Các thanh ghi này đóng vai trò quan trọng trong việc quản lý và truy cập dữ liệu trong bộ nhớ.
CS (Code Segment) là một phần quan trọng trong lập trình, chứa địa chỉ bắt đầu của đoạn mã chương trình Đoạn mã này bao gồm các lệnh thực thi và thường được lưu trữ trong vùng nhớ không thể thay đổi (như ROM hoặc EPROM).
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
Thanh ghi đoạn ngăn xếp (SS) là một thành phần quan trọng, chứa địa chỉ bắt đầu của mảng stack Mảng này nằm trong RAM và lưu trữ dữ liệu từ các thanh ghi trong suốt quá trình ngắt.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép thay đổi giá trị các thanh ghi đoạn để linh hoạt dịch chuyển trong không gian 1 Mbyte Điều này có nghĩa là các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu đầy đủ 64 Kbyte, hoặc có thể trùng lắp nếu không sử dụng hết dung lượng của 64 Kbyte.
Thực hành
2 Bài 2: Cấu trúc họ vi điều khiển 8051 4 2 1 1
1 Các cách định địa chỉ
1.Thanh ghi SFR của timer
2 Các chế độ làm việc
3 Khởi tạo và truy suất thanh ghi PORT nối tiếp
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi tiếng của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình được viết cho 80x86 vẫn có khả năng chạy trên các hệ thống tiên tiến hơn Mặc dù các họ vi xử lý của các hãng khác nhau có sự khác biệt, nhưng chúng vẫn chia sẻ nhiều điểm tương đồng quan trọng Do đó, việc nắm vững các vấn đề kỹ thuật của 8086 sẽ giúp người dùng dễ dàng tiếp cận và hiểu biết về các bộ vi xử lý khác trong cùng họ Intel hoặc từ các hãng khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính về mặt logic: khối giao diện bus (BIU) và khối thực hiện lệnh (EU).
BIU cung cấp các chức năng nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, giúp cải thiện hiệu suất của vi xử lý thông qua việc tối ưu hóa Bus Khi khối thực hiện lệnh đang xử lý lệnh hiện tại, BIU có thể bắt đầu lấy lệnh tiếp theo từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM tốc độ cao Đối với vi xử lý 8086, độ dài hàng đợi này là 6 byte, cho phép BIU sử dụng bộ nhớ hiệu quả hơn BIU liên tục cung cấp lệnh mà không làm gián đoạn hoạt động của hệ thống, giảm thiểu thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự vào/ra liên tục của dòng mã lệnh trong bộ đệm cho thấy sự phối hợp hiệu quả giữa hai khối EU và BIU, nhờ vào cơ chế xử lý xen kẽ liên tục nhằm tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật này sẽ không còn hiệu quả khi bộ đệm chứa các mã lệnh CALL hoặc JMP, vì khi gặp các lệnh này, nội dung cũ của bộ đệm sẽ bị xóa và thay thế bằng nội dung mới, dẫn đến việc tiêu tốn thời gian hơn so với trường hợp chỉ có mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Đồng thời, EU giải mã lệnh, thực hiện chúng và chuyển kết quả lại cho BIU để lưu trữ.
Thao tác đầu tiên của EU là giải mã lệnh, và khoảng thời gian này có vẻ như lãng phí CPU do không có hoạt động điện trên Bus Tuy nhiên, thực tế cho thấy đây là thời gian mà BIU tận dụng để lấy trước các câu lệnh tiếp theo.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, theo thứ tự với lệnh đang thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ mới, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và gửi ngay cho EU, sau đó tiếp tục thu thập các lệnh để đưa vào hàng đợi.
Khối EU trong vi xử lý 8086/8088 bao gồm các thanh ghi chung với độ rộng 16 bit EU không giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi của BIU Khi lệnh yêu cầu truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU xử lý đều là địa chỉ 16 bit, nhưng thông qua việc BIU di chuyển vị trí bộ nhớ, EU có thể truy cập toàn bộ bộ nhớ 1 MB.
ALU là một tập con của EU, nhưng hoạt động như một phần độc lập, thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thời, dữ liệu từ các thanh ghi hoặc từ bộ nhớ Kết quả của các phép toán được lưu trữ trong thanh ghi hoặc bộ nhớ, và 6 cờ trạng thái sẽ được cập nhật dựa trên kết quả của các thao tác này.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU của 8086 sử dụng địa chỉ 20 bit, cho phép vi xử lý này phân biệt được 1MB bộ nhớ, tương đương với 2^20 ô nhớ Trong không gian 1MB này, bộ nhớ cần được phân chia thành các vùng khác nhau, mỗi vùng được dành riêng cho các mục đích cụ thể.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được sử dụng để quản lý các thông số của bộ vi xử lý khi thực hiện gọi chương trình con hoặc khi trở về từ chương trình con.
Vi xử lý 8086/8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là các thanh ghi đoạn (Segment register).
CS (Code Segment) là phần ghi đoạn mã, chứa địa chỉ bắt đầu của chương trình với các lệnh thực thi Thông thường, nó là một vùng nhớ chứa dữ liệu không thể thay đổi hoặc là vùng ROM/EPROM.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
SS (Stack Segment) là thanh ghi dùng để lưu trữ địa chỉ bắt đầu của mảng stack, một phần của RAM Đây là nơi dữ liệu trong các thanh ghi được lưu giữ trong suốt quá trình ngắt, đảm bảo rằng thông tin cần thiết luôn sẵn sàng khi cần thiết.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép thay đổi giá trị các thanh ghi đoạn để linh hoạt dịch chuyển trong không gian 1 Mbyte Do đó, các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu đầy đủ 64 Kbyte, hoặc có thể trùng lặp với nhau nếu không sử dụng hết dung lượng này.
CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051
Thực hành
1 Các cách định địa chỉ
1.Thanh ghi SFR của timer
2 Các chế độ làm việc
3 Khởi tạo và truy suất thanh ghi PORT nối tiếp
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi tiếng của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình được viết cho 80x86 vẫn có khả năng hoạt động trên các hệ thống tiên tiến hơn Mặc dù các họ vi xử lý của các hãng khác nhau có sự khác biệt, nhưng vẫn tồn tại nhiều điểm tương đồng quan trọng Do đó, khi đã nắm vững các vấn đề kỹ thuật của 8086, người dùng sẽ dễ dàng tiếp cận và hiểu biết về các bộ vi xử lý khác trong cùng họ của Intel hoặc từ các hãng khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU), mỗi khối đảm nhận những chức năng logic quan trọng trong quá trình xử lý dữ liệu.
BIU (Bus Interface Unit) cung cấp các chức năng nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, tăng cường hiệu suất hoạt động của vi xử lý bằng cách cải thiện Bus Khi khối thực hiện lệnh đang bận, BIU có thể bắt đầu lấy các lệnh kế tiếp từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM nội bộ tốc độ cao, với độ dài 6 byte cho vi xử lý 8086 Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm tắc nghẽn BUS, giảm thiểu thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự vào/ra liên tục của dòng mã lệnh trong bộ đệm cho thấy sự phối hợp hiệu quả giữa hai khối EU và BIU, nhờ vào cơ chế xử lý xen kẽ liên tục, giúp tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật này sẽ không còn hiệu quả nếu bộ đệm chứa các mã lệnh CALL hoặc JMP, vì khi gặp các lệnh này, nội dung cũ của bộ đệm sẽ bị xoá và thay thế bằng nội dung mới, dẫn đến việc tiêu tốn nhiều thời gian hơn so với trường hợp chỉ có mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để đọc lệnh và dữ liệu Đồng thời, EU sẽ giải mã lệnh, thực hiện các thao tác và chuyển kết quả trở lại BIU để lưu trữ.
EU thực hiện thao tác giải mã lệnh đầu tiên, mặc dù thời gian này có vẻ như lãng phí cho CPU do không có hoạt động điện nào trên Bus Tuy nhiên, thực tế cho thấy đây là khoảng thời gian mà BIU tận dụng để lấy trước các câu lệnh tiếp theo.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp và theo thứ tự thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ mới, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và chuyển ngay cho EU, sau đó tiếp tục thu thập các lệnh để đưa vào hàng đợi.
Khối EU trong vi xử lý 8086/8088 bao gồm các thanh ghi chung với độ rộng 16 bit, không giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi do khối BIU cung cấp Khi lệnh yêu cầu truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu do EU điều khiển đều là địa chỉ 16 bit, nhưng nhờ vào việc BIU di chuyển vị trí bộ nhớ, EU có khả năng truy cập toàn bộ bộ nhớ 1 MB.
ALU, mặc dù chỉ là một phần của EU, nhưng hoạt động như một đơn vị độc lập, đảm nhiệm các phép toán số học và logic Các toán hạng có thể là dữ liệu trực tiếp, dữ liệu từ các thanh ghi hoặc từ bộ nhớ Kết quả của các phép toán được lưu trữ trong thanh ghi hoặc bộ nhớ, trong khi 6 cờ trạng thái được cập nhật dựa trên kết quả của các thao tác này.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU trên BUS sử dụng địa chỉ 20 bit, cho phép 8086 phân biệt được 1MB (1048576 ô nhớ) Trong không gian 1MB này, bộ nhớ cần được phân chia thành các vùng khác nhau để sử dụng hiệu quả.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được tạo ra để quản lý các thông số của bộ vi xử lý trong quá trình gọi và trở về từ chương trình con.
Vi xử lý 8086/8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là các thanh ghi đoạn (Segment register).
CS (Code Segment) là phần ghi đoạn mã, chứa địa chỉ bắt đầu của đoạn chương trình với các lệnh thực thi Thường thì, nó là một vùng nhớ chứa dữ liệu dạng hàng không thể thay đổi hoặc là một vùng ROM/EPROM.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
SS (Stack Segment) là thanh ghi chứa địa chỉ bắt đầu của mảng stack, là một phần của RAM Mảng này lưu trữ dữ liệu từ các thanh ghi trong suốt quá trình ngắt, đảm bảo thông tin quan trọng được bảo tồn.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép linh hoạt trong việc thay đổi giá trị các thanh ghi đoạn, dịch chuyển trong không gian 1 Mbyte Các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu đủ 64 Kbyte, hoặc có thể trùng lặp khi không sử dụng hết dung lượng này.
TẬP LỆNH 8051
Các cách định địa chỉ
1.Thanh ghi SFR của timer
2 Các chế độ làm việc
3 Khởi tạo và truy suất thanh ghi PORT nối tiếp
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi tiếng của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình được phát triển cho 80x86 vẫn có khả năng hoạt động trên các hệ thống tiên tiến sau này Mặc dù các họ vi xử lý từ các hãng khác nhau có sự khác biệt, nhưng chúng vẫn chia sẻ nhiều điểm tương đồng quan trọng Do đó, việc nắm vững các vấn đề kỹ thuật của 8086 sẽ giúp người dùng dễ dàng tiếp cận và hiểu biết về các bộ vi xử lý khác trong cùng họ của Intel hoặc từ các nhà sản xuất khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU) Khối BIU chịu trách nhiệm quản lý giao tiếp với bộ nhớ và các thiết bị ngoại vi, trong khi khối EU thực hiện các lệnh và xử lý dữ liệu Sự phân chia này giúp tối ưu hóa hiệu suất và khả năng xử lý của vi xử lý.
BIU cung cấp các chức năng quan trọng như nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, giúp nâng cao hiệu suất hoạt động của vi xử lý nhờ cải thiện Bus Khi khối thực hiện lệnh đang bận, BIU có thể bắt đầu lấy lệnh tiếp theo từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM nội bộ tốc độ cao, với độ dài 6 byte trên vi xử lý 8086 Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm tắc nghẽn BUS, từ đó giảm thiểu thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm lệnh FIFO (First In First Out).
Sự vào/ra liên tục của dòng mã lệnh trong bộ đệm cho thấy sự phối hợp hiệu quả giữa hai khối EU và BIU, giúp tăng tốc độ xử lý tổng thể thông qua kỹ thuật xen kẽ liên tục Tuy nhiên, kỹ thuật này sẽ không còn hiệu quả nếu bộ đệm chứa các mã lệnh của lệnh CALL hoặc JMP, vì khi gặp các lệnh này, nội dung cũ của bộ đệm sẽ bị xóa và thay thế bằng nội dung mới, dẫn đến việc tiêu tốn thời gian hơn so với trường hợp chỉ có mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để đọc lệnh và dữ liệu Đồng thời, EU giải mã lệnh, thực hiện chúng và chuyển kết quả về BIU để lưu trữ.
Thao tác đầu tiên của EU là giải mã lệnh, khoảng thời gian này có vẻ lãng phí CPU vì không có hoạt động điện nào trên Bus Tuy nhiên, đây chính là thời gian mà BIU tận dụng để lấy trước các câu lệnh tiếp theo, như đã mô tả.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, theo thứ tự với lệnh đang được thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ mới, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và chuyển ngay cho EU, sau đó tiếp tục thu thập các lệnh để đưa vào hàng đợi.
Khối EU của vi xử lý 8086/8088 được hình thành từ các thanh ghi chung, với độ rộng 16 bit cho tất cả các thanh ghi và đường truyền dữ liệu nội bộ EU không giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi do BIU cung cấp Khi có lệnh yêu cầu truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU điều khiển đều có địa chỉ 16 bit, nhưng nhờ vào khả năng di chuyển vị trí bộ nhớ của BIU, EU có thể truy cập toàn bộ bộ nhớ 1 MB.
ALU, mặc dù chỉ là một tập con của EU, nhưng thực tế hoạt động như một phần độc lập, đảm nhiệm việc thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thời, dữ liệu từ các thanh ghi hoặc dữ liệu lưu trữ trong bộ nhớ Kết quả của các thao tác này được lưu trữ trong một thanh ghi hoặc bộ nhớ, và 6 cờ trạng thái sẽ được cập nhật dựa trên kết quả của các phép toán.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU của 8086 sử dụng địa chỉ 20 bit, cho phép phân biệt 1MB (1048576 ô nhớ) Trong không gian 1MB này, bộ nhớ cần được phân chia thành các vùng riêng biệt.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được sử dụng để quản lý các thông số của bộ vi xử lý khi thực hiện cuộc gọi đến chương trình con hoặc khi trở về từ chương trình con.
Vi xử lý 8086/8088 sở hữu các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là các thanh ghi đoạn (Segment register) Các thanh ghi này đóng vai trò quan trọng trong việc quản lý và truy xuất dữ liệu trong bộ nhớ.
CS (Code Segment) là phần ghi lại đoạn mã, chứa địa chỉ khởi đầu của chương trình với các lệnh thực thi Thông thường, nó là một vùng nhớ chứa dữ liệu không thể thay đổi hoặc là một vùng ROM/EPROM.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
SS (Stack Segment) là thanh ghi đoạn ngăn xếp, giữ địa chỉ bắt đầu của mảng stack Nó hoạt động như một mảng trong RAM, nơi lưu trữ dữ liệu từ các thanh ghi trong suốt quá trình ngắt.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép linh hoạt trong việc thay đổi giá trị các thanh ghi đoạn tương ứng, dịch chuyển trong không gian 1 Mbyte Điều này có nghĩa là các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu đủ 64 Kbyte, hoặc chúng cũng có thể chồng lấp lên nhau nếu không sử dụng hết dung lượng này.
Thực hành
1.Thanh ghi SFR của timer
2 Các chế độ làm việc
3 Khởi tạo và truy suất thanh ghi PORT nối tiếp
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi tiếng của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình được phát triển cho 80x86 vẫn có thể hoạt động trên các hệ thống tiên tiến sau này Mặc dù các họ vi xử lý từ các hãng khác nhau có sự khác biệt, nhưng chúng vẫn chia sẻ nhiều điểm tương đồng quan trọng Do đó, việc nắm vững các vấn đề kỹ thuật của 8086 sẽ giúp người dùng dễ dàng tiếp cận và hiểu biết về các bộ vi xử lý khác trong cùng họ của Intel hoặc từ các hãng khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU) Khối BIU chịu trách nhiệm quản lý giao tiếp với bộ nhớ và các thiết bị ngoại vi, trong khi khối EU thực hiện các lệnh và xử lý dữ liệu Sự phân chia này giúp tối ưu hóa hiệu suất và khả năng xử lý của vi xử lý.
BIU cung cấp các chức năng nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh, lấy lệnh và thực hiện lệnh thường trùng nhau, giúp nâng cao hiệu suất vi xử lý bằng cách cải thiện Bus Khi khối thực hiện lệnh đang xử lý lệnh hiện tại, BIU có thể bắt đầu lấy lệnh tiếp theo từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM nội bộ tốc độ cao, có độ dài 6 byte với vi xử lý 8086 Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm gián đoạn hoạt động của BIU, từ đó giảm đáng kể thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự vào/ra liên tục của dòng mã lệnh trong bộ đệm cho thấy sự phối hợp hiệu quả giữa hai khối EU và BIU, nhờ vào cơ chế xử lý xen kẽ liên tục, từ đó tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật này sẽ không còn hiệu quả nếu bộ đệm chứa các mã lệnh của lệnh CALL hoặc JMP, vì khi gặp các lệnh này, nội dung cũ của bộ đệm sẽ bị xóa và thay thế bằng nội dung mới, dẫn đến việc tiêu tốn thời gian hơn so với trường hợp chỉ có mã lệnh của các lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Đồng thời, EU giải mã lệnh, thực hiện chúng và chuyển kết quả về BIU để lưu trữ.
Thao tác đầu tiên của EU là giải mã lệnh, mặc dù khoảng thời gian này có vẻ như là lãng phí cho CPU do không có hoạt động điện nào diễn ra trên Bus Tuy nhiên, thực tế cho thấy đây là thời gian mà BIU tận dụng để lấy trước các câu lệnh tiếp theo.
Các lệnh trong hàng đợi lệnh được lưu trữ trong các ô nhớ liên tiếp, ngay sau lệnh đang được thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ mới, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và chuyển cho EU, sau đó tiếp tục thu thập các lệnh để đưa vào hàng đợi.
Khối EU của vi xử lý 8086/8088 bao gồm các thanh ghi chung với độ rộng 16 bit EU không giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi do BIU cung cấp Khi có lệnh yêu cầu truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU điều khiển đều là địa chỉ 16 bit, và thông qua việc di chuyển vị trí bộ nhớ do BIU thực hiện, EU có khả năng truy cập toàn bộ bộ nhớ 1 MB.
ALU là một tập con của EU, hoạt động như một phần độc lập, chuyên thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thì, dữ liệu từ các thanh ghi hoặc từ bộ nhớ Kết quả của các thao tác này được lưu trữ trong thanh ghi hoặc bộ nhớ, trong khi 6 cờ trạng thái sẽ được cập nhật dựa trên kết quả thu được.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU của vi xử lý 8086 sử dụng địa chỉ 20 bit, cho phép phân biệt 2^20 = 1.048.576 ô nhớ, tương đương với 1MB Trong không gian 1MB này, bộ nhớ cần được phân chia thành các vùng khác nhau để phục vụ các mục đích sử dụng riêng biệt.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được sử dụng để quản lý các thông số của bộ vi xử lý khi thực hiện việc gọi hoặc trở về từ chương trình con.
Vi xử lý 8086/8088 sở hữu các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là thanh ghi đoạn (Segment register) Các thanh ghi này đóng vai trò quan trọng trong việc quản lý và truy cập dữ liệu trong bộ nhớ.
CS (Code Segment) là một phần quan trọng trong lập trình, chứa địa chỉ bắt đầu của đoạn mã chương trình Nó bao gồm các lệnh thực thi và thường được lưu trữ trong vùng nhớ không thay đổi hoặc trong ROM/EPROM.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
SS (Stack Segment) là thanh ghi quản lý đoạn ngăn xếp, lưu trữ địa chỉ bắt đầu của mảng stack Đây là một khu vực trong RAM, nơi dữ liệu trong các thanh ghi được bảo tồn trong suốt quá trình ngắt.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép thay đổi giá trị các thanh ghi đoạn để linh hoạt dịch chuyển trong không gian 1 Mbyte Điều này có nghĩa là các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu dung lượng đầy đủ 64 Kbyte, hoặc có thể chồng lấp lên nhau nếu không sử dụng hết dung lượng này.
BỘ ĐỊNH THỜI
Các chế độ làm việc
3 Khởi tạo và truy suất thanh ghi PORT nối tiếp
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi tiếng của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình viết cho 80x86 vẫn có khả năng chạy trên các hệ thống tiên tiến hơn sau này Mặc dù các họ vi xử lý của các hãng khác nhau có sự khác biệt, nhưng vẫn tồn tại nhiều điểm tương đồng quan trọng Do đó, việc nắm vững kỹ thuật của 8086 sẽ giúp người dùng dễ dàng tiếp cận và hiểu biết về các bộ vi xử lý khác trong cùng họ của Intel hoặc từ các hãng khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU) Khối BIU chịu trách nhiệm quản lý giao tiếp với bộ nhớ và các thiết bị ngoại vi, trong khi khối EU thực hiện các lệnh và xử lý dữ liệu Sự phân chia này giúp tối ưu hóa hiệu suất và khả năng xử lý của vi xử lý.
BIU cung cấp chức năng nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, giúp nâng cao hiệu suất của vi xử lý bằng cách cải thiện Bus Khi khối thực hiện lệnh đang xử lý lệnh hiện tại, BIU có thể bắt đầu lấy lệnh tiếp theo từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM nội bộ tốc độ cao, với độ dài 6 byte cho vi xử lý 8086 Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm gián đoạn hoạt động của BIU, giảm thiểu thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự vào/ra liên tục của dòng mã lệnh trong bộ đệm cho thấy sự phối hợp hiệu quả giữa hai khối EU và BIU, nhờ vào cơ chế xử lý xen kẽ liên tục, giúp tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật này sẽ không còn hiệu quả nếu bộ đệm chứa các mã lệnh CALL hoặc JMP, vì khi gặp các lệnh này, nội dung cũ của bộ đệm sẽ bị xóa và thay thế bằng nội dung mới, dẫn đến việc tiêu tốn thời gian hơn so với trường hợp chỉ có mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Đồng thời, EU sẽ giải mã lệnh, thực hiện chúng và gửi kết quả về BIU để lưu trữ.
Thao tác đầu tiên của EU là giải mã lệnh, và khoảng thời gian này có vẻ lãng phí cho CPU do không có hoạt động điện nào trên Bus Tuy nhiên, thời gian này thực chất được BIU tận dụng để lấy trước các câu lệnh tiếp theo.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, ngay sau lệnh đang thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ khác, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và chuyển ngay cho EU, sau đó tiếp tục thu thập các lệnh để bổ sung vào hàng đợi.
Khối EU của vi xử lý 8086/8088 được hình thành từ các thanh ghi chung với độ rộng 16 bit, không giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi của khối BIU Khi có yêu cầu truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU điều khiển đều là địa chỉ 16 bit, nhưng nhờ vào khả năng di chuyển vị trí bộ nhớ do BIU thực hiện, EU có thể truy cập toàn bộ bộ nhớ 1 MB.
ALU là một thành phần của EU, hoạt động như một phần độc lập, thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thời, dữ liệu từ các thanh ghi hoặc dữ liệu lưu trữ trong bộ nhớ Kết quả của các phép toán được lưu trữ trong thanh ghi hoặc bộ nhớ, trong khi 6 cờ trạng thái được cập nhật dựa trên kết quả của các thao tác này.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU của 8086 sử dụng địa chỉ 20 bit, cho phép phân biệt 1MB bộ nhớ, tương đương với 2^20 ô nhớ, tức 1048576 ô Trong không gian 1MB này, bộ nhớ cần được phân chia thành các vùng riêng biệt để phục vụ các mục đích khác nhau.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được sử dụng để quản lý các thông số của bộ vi xử lý khi gọi hoặc trở về từ chương trình con.
Vi xử lý 8086/8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là các thanh ghi đoạn (Segment register) Những thanh ghi này đóng vai trò quan trọng trong việc quản lý và truy cập dữ liệu trong bộ nhớ.
CS (Code Segment) là phần ghi đoạn mã, chứa địa chỉ bắt đầu của chương trình với các lệnh thực thi Thường thì, đây là một vùng nhớ lưu trữ dữ liệu dạng hàng không thay đổi hoặc là vùng ROM/EPROM.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
SS (Stack Segment) là thanh ghi đoạn ngăn xếp, lưu trữ địa chỉ bắt đầu của mảng stack Đây là một mảng trong RAM, nơi dữ liệu trong các thanh ghi được bảo tồn trong suốt quá trình ngắt.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép thay đổi giá trị các thanh ghi đoạn để linh hoạt dịch chuyển trong không gian 1 Mbyte Do đó, các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu đủ 64 Kbyte, hoặc có thể chồng lấp lên nhau nếu không sử dụng hết dung lượng này.
CỔNG NỐI TIẾP (SERIAL PORT)
Chế độ làm việc
3 Khởi tạo và truy suất thanh ghi PORT nối tiếp
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi tiếng của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình viết cho 80x86 vẫn có khả năng chạy trên các hệ thống tiên tiến hơn Mặc dù các họ vi xử lý của các hãng khác nhau có sự khác biệt, nhưng vẫn tồn tại nhiều điểm tương đồng quan trọng Do đó, việc nắm vững các vấn đề kỹ thuật của 8086 sẽ giúp người dùng dễ dàng tiếp cận và hiểu biết về các bộ vi xử lý khác trong cùng họ của Intel hoặc các họ khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU) Khối BIU chịu trách nhiệm quản lý giao tiếp với bộ nhớ và các thiết bị ngoại vi, trong khi khối EU thực hiện các lệnh và xử lý dữ liệu Sự phân chia này giúp tối ưu hóa hiệu suất và khả năng xử lý của vi xử lý.
BIU cung cấp các chức năng quan trọng như nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, giúp tăng cường hiệu suất của vi xử lý thông qua việc cải thiện Bus Khi khối thực hiện lệnh đang xử lý, BIU có thể bắt đầu lấy các lệnh tiếp theo từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM nội bộ tốc độ cao, với độ dài 6 byte trên vi xử lý 8086 Kỹ thuật hàng đợi lệnh giúp BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm tắc nghẽn BUS, từ đó giảm thiểu thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự vào/ra liên tục của dòng mã lệnh trong bộ đệm cho thấy sự phối hợp hiệu quả giữa hai khối EU và BIU, giúp tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật này sẽ không còn hiệu quả nếu bộ đệm chứa các lệnh CALL hoặc JMP, vì khi gặp các lệnh này, nội dung cũ sẽ bị xoá và thay thế bằng nội dung mới, dẫn đến việc tiêu tốn nhiều thời gian hơn so với trường hợp chỉ có mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi và cung cấp toán hạng cùng địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Đồng thời, EU sẽ giải mã lệnh, thực hiện chúng và chuyển kết quả trở lại BIU để lưu trữ.
Thao tác đầu tiên của EU là giải mã lệnh, mặc dù thời gian này có vẻ lãng phí cho CPU khi không có hoạt động điện nào trên Bus Tuy nhiên, thời gian này thực sự được BIU khai thác để lấy trước các câu lệnh tiếp theo.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, ngay sau lệnh đang được thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ mới, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và chuyển ngay cho EU, sau đó tiếp tục lấy các lệnh mới để đưa vào hàng đợi.
Khối EU trong vi xử lý 8086/8088 bao gồm các thanh ghi chung với độ rộng 16 bit EU không giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi do BIU cung cấp Khi có lệnh yêu cầu truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU điều khiển đều là địa chỉ 16 bit, nhưng nhờ vào việc BIU thực hiện định vị lại địa chỉ, EU có thể truy cập toàn bộ bộ nhớ 1 MB.
ALU là một phần của EU nhưng hoạt động như một đơn vị độc lập, thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thì, từ các thanh ghi hoặc bộ nhớ Kết quả được lưu trữ trong thanh ghi hoặc bộ nhớ, và 6 cờ trạng thái sẽ được cập nhật dựa trên kết quả của các thao tác này.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU của 8086 sử dụng địa chỉ 20 bit, cho phép vi xử lý này phân biệt được 1MB (2^20 = 1048576) ô nhớ Trong không gian 1MB này, bộ nhớ cần được phân chia thành các vùng khác nhau để phục vụ các mục đích riêng biệt.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được tạo ra để quản lý các thông số của bộ vi xử lý khi thực hiện việc gọi hoặc trở về từ chương trình con.
Vi xử lý 8086/8088 sở hữu các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là các thanh ghi đoạn (Segment register).
CS (Code Segment) là một phần quan trọng trong lập trình, chứa địa chỉ bắt đầu của đoạn mã chương trình Đoạn mã này bao gồm các lệnh thực thi và thường được lưu trữ trong vùng nhớ không thay đổi hoặc trong ROM/EPROM.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
SS (Stack Segment) là thanh ghi đoạn ngăn xếp, lưu trữ địa chỉ bắt đầu của mảng stack Đây là một phần của RAM, nơi dữ liệu trong các thanh ghi được bảo quản trong suốt quá trình ngắt.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép linh hoạt trong việc thay đổi giá trị các thanh ghi đoạn, dịch chuyển trong không gian 1 Mbyte Điều này có nghĩa là các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu đầy đủ 64 Kbyte, hoặc có thể chồng lấp lên nhau nếu không sử dụng hết dung lượng này.
Tốc độ baud
3 Thiết kế chương trình dùng ngắt
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những sản phẩm nổi bật của hãng, được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình viết cho 80x86 vẫn tương thích với các hệ thống tiên tiến hơn sau này Mặc dù các họ vi xử lý khác nhau giữa các hãng có sự khác biệt, nhưng vẫn tồn tại nhiều điểm tương đồng quan trọng Do đó, việc nắm vững kiến thức về 8086 sẽ giúp người dùng dễ dàng tiếp cận và hiểu biết về các bộ vi xử lý khác trong cùng họ của Intel hoặc từ các hãng khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU), mỗi khối đảm nhiệm những chức năng logic quan trọng trong quá trình xử lý thông tin.
BIU cung cấp các chức năng nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, giúp tăng khả năng hoạt động của vi xử lý qua việc cải thiện Bus Khi khối thực hiện lệnh đang bận, BIU có thể bắt đầu lấy các lệnh tiếp theo từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM nội bộ tốc độ cao, với độ dài 6 byte cho vi xử lý 8086 Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm gián đoạn hoạt động của BIU, từ đó giảm đáng kể thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự phối hợp hiệu quả giữa hai khối EU và BIU trong bộ đệm diễn ra khi có sự vào/ra liên tục của dòng mã lệnh, giúp tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật xen kẽ liên tục sẽ không còn hiệu quả nếu bộ đệm chứa các mã lệnh của lệnh CALL hoặc JMP, vì các lệnh này sẽ xóa nội dung cũ và nạp nội dung mới, dẫn đến việc tiêu tốn nhiều thời gian hơn so với trường hợp chỉ có mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Đồng thời, EU giải mã lệnh, thực hiện các thao tác và chuyển kết quả trở lại BIU để lưu trữ.
Thao tác đầu tiên của EU là giải mã lệnh, khoảng thời gian này có vẻ như lãng phí cho CPU vì không có hoạt động điện nào diễn ra trên Bus Tuy nhiên, thực tế cho thấy đây là thời gian mà BIU tận dụng để lấy trước các câu lệnh tiếp theo.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, ngay sau lệnh đang được thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ khác, BIU sẽ xóa hàng đợi và lấy lệnh từ địa chỉ mới, sau đó chuyển ngay cho EU và tiếp tục lấy các lệnh để đưa vào hàng đợi.
Khối EU trong vi xử lý 8086/8088 bao gồm các thanh ghi chung với độ rộng 16 bit, không giao tiếp trực tiếp với môi trường bên ngoài mà nhận lệnh từ hàng đợi do khối BIU cung cấp Khi có lệnh yêu cầu truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU điều khiển đều là địa chỉ 16 bit, nhưng nhờ vào khả năng di chuyển vị trí bộ nhớ của BIU, khối EU có thể truy cập toàn bộ bộ nhớ 1 MB.
ALU là một tập con của EU, hoạt động như một phần độc lập chịu trách nhiệm thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thời, dữ liệu từ các thanh ghi hoặc dữ liệu trong bộ nhớ Kết quả của các thao tác được lưu trữ trong thanh ghi hoặc bộ nhớ, và 6 cờ trạng thái sẽ được cập nhật dựa trên kết quả của các phép toán này.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU của 8086 sử dụng địa chỉ 20 bit, cho phép vi xử lý này phân biệt được 1MB (2^20 = 1048576) ô nhớ Trong không gian 1MB này, bộ nhớ cần được phân chia thành các vùng khác nhau để phục vụ các mục đích riêng biệt.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được sử dụng để quản lý các thông số của bộ vi xử lý khi thực hiện gọi chương trình con hoặc quay trở lại từ chương trình con.
Vi xử lý 8086/8088 sở hữu các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là các thanh ghi đoạn (Segment register).
CS (Code Segment) là đoạn mã chứa địa chỉ bắt đầu của chương trình, bao gồm các lệnh thực thi Thông thường, nó là một vùng nhớ chứa dữ liệu không thể thay đổi hoặc thuộc loại ROM/EPROM.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
SS (Stack Segment) là thanh ghi đoạn ngăn xếp, chứa địa chỉ bắt đầu của mảng stack Đây là một mảng trong RAM, nơi lưu trữ dữ liệu từ các thanh ghi trong suốt quá trình ngắt.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép linh hoạt trong việc thay đổi giá trị các thanh ghi đoạn, dịch chuyển trong không gian 1 Mbyte Các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ yêu cầu đủ 64 Kbyte, hoặc có thể chồng lấp lên nhau nếu không sử dụng hết dung lượng này.
NGẮT
Tổ chức ngắt của 805
Ngắt (interrupt) là hiện tượng làm tạm ngưng chương trình hiện tại để phục vụ một điều kiện khác thông qua một chương trình riêng Chúng đóng vai trò quan trọng trong thiết kế và thực hiện ứng dụng vi điều khiển, cho phép hệ thống phản ứng với sự kiện một cách không đồng bộ Nhờ vào ngắt, hệ thống có thể xử lý sự kiện trong khi vẫn thực thi các chương trình khác, tạo ra ấn tượng về khả năng thực hiện nhiều công việc đồng thời.
Trong vi điều khiển, các nguồn ngắt là những yếu tố quan trọng làm ngừng chương trình chính Khi timer/counter đếm tràn, nó sẽ tạo ra ngắt, đóng vai trò thiết yếu trong lập trình điều khiển.
CPU không thể thực hiện nhiều nhiệm vụ cùng lúc, nhưng có khả năng tạm ngưng chương trình hiện tại để chuyển sang thực thi một chương trình khác Sau khi hoàn thành, CPU sẽ quay trở lại và tiếp tục thực hiện chương trình đã bị tạm ngưng Điều này tương tự như việc CPU rời khỏi chương trình gọi để thực hiện chương trình con, rồi sau đó trở về với chương trình gọi ban đầu.
Chương trình phục vụ ngắt (ISR - Interrupt Service Routine) là một chương trình được thực thi để xử lý ngắt và thường liên quan đến việc giao tiếp với thiết bị Khi ngắt xảy ra, chương trình chính sẽ tạm dừng, và CPU sẽ chuyển sang thực thi ISR ISR thực hiện nhiệm vụ cần thiết và kết thúc khi gặp lệnh "quay về từ một trình phục vụ ngắt" (RETI) Do đó, chương trình chính hoạt động ở mức nền, trong khi ISR hoạt động ở mức ngắt.
Việc sử dụng ngắt giúp vi xử lý hoặc vi điều khiển có khả năng phản hồi nhanh chóng với nhiều sự kiện quan trọng, đồng thời xử lý các sự kiện này ngay cả khi chương trình khác đang được thực thi.
Trong quá trình thực hiện chương trình chính, vi điều khiển có thể nhận dữ liệu từ hệ thống khác hoặc nhận tín hiệu ngắt từ bên ngoài Khi đó, vi điều khiển sẽ tạm dừng chương trình chính để xử lý chương trình phục vụ ngắt, sau đó tiếp tục quay lại thực hiện chương trình chính.
Ngắt cho phép vi điều khiển thực hiện nhiều chương trình đồng thời, nghĩa là các chương trình sẽ được thực hiện theo dạng xoay vòng.
Ta có thể minh họa quá trình thực hiện 1 chương trình trong trường hợp có ngắt và không có ngắt như hình 6.1
Hình 6.1 Vi điều khiển thực hiện chương trình chính trong 2 trường hợp không và có ngắt.
chỉ ra rằng vi điều khiển sẽ tiếp tục thực hiện chương trình chính sau khi hoàn thành chương trình con phục vụ ngắt ISR.
Hình 6.2: Vi điều khiển 89C52 có 6 nguồn ngắt.
Có 5 nguyên nhân tạo ra ngắt đối với 8051: hai ngắt do bên ngoài, hai ngắt do bộ định thời và một ngắt do port nối tiếp 8052 có thêm nguyên nhân ngắt thứ 6: do bộ định thời được thêm vào,bộ định thời thứ ba Khi ta thiết lập trạng thái ban đầu cho hệ thống, tất cả các ngắt điều bị vô hiệu hóa và sau đó chúng được cho phép riêng rẻ bằng phần mềm.
1.1 Cho phép và không cho phép ngắt
Để hiểu rõ về ngắt, trước tiên chúng ta cần phân biệt giữa cho phép và không cho phép ngắt Khi cho phép ngắt, vi điều khiển sẽ tạm dừng chương trình chính để thực hiện chương trình con phục vụ ngắt Ngược lại, khi không cho phép ngắt, vi điều khiển sẽ tiếp tục thực hiện chương trình chính mà không xử lý các tác động từ ngắt.
Trong vi điều khiển, thanh ghi IE (Interrupt Enable) tại địa chỉ 0A8H có chức năng quản lý việc cho phép hoặc cấm ngắt Thanh ghi này cho phép người dùng kiểm soát từng nguồn ngắt cũng như toàn bộ hệ thống ngắt Cấu trúc của thanh ghi IE rất quan trọng trong việc điều khiển hoạt động của các nguồn ngắt.
EA - ET2 ES ET1 EX1 ET0 EX0
Thanh ghi chức năng đặc biệt IE (interrup- tenable) với địa chỉ byte 0A8H cho phép quản lý từng nguyên nhân ngắt riêng lẻ thông qua các bit, trong đó mỗi bit quyết định việc cho phép hay không cho phép từng nguyên nhân ngắt Ngoài ra, thanh ghi IE còn có một bit toàn cục cho phép hoặc không cho phép tất cả các ngắt Hoạt động của từng bit trong thanh ghi IE được tóm tắt trong bảng dưới đây.
Bảng 6.1: Thanh ghi cho phép ngắt IE
Bit Ký hiệu Địa chỉ bit Mô tả(0:không cho phép,1:cho phép)
IE.7 EA AFH Cho phép/không cho phép ngắt tồn cục
IE.6 - AEH Không sử dụng
IE.5 ET2 ADH Cho phép ngắt do bộ định thời 2
IE.4 ES ACH Cho phép ngắt do port nối tiếp
IE.3 ET1 ABH Cho phép ngắt do bộ định thời 1
IE.2 EX1 AAH Cho phép ngắt từ bên ngoài(ngắt ngoài1)
IE.1 ET0 A9H Cho phép ngắt do bộ định thời 0
IE.0 EX0 A8H Cho phép ngắt từ bên ngoài(ngắt ngoài 0)
Trong thanh ghi IE, bit IE.6 chưa được sử dụng, trong khi bit IE.7 đóng vai trò quan trọng trong việc cho phép hoặc cấm tất cả các nguồn ngắt Khi bit IE.7 được đặt là 0, tất cả các nguồn ngắt sẽ bị cấm, ngược lại, khi bit IE.7 là 1, tất cả các nguồn ngắt sẽ được phép hoạt động, tuy nhiên, điều này vẫn phụ thuộc vào các bit điều khiển ngắt của từng nguồn ngắt cụ thể.
Ví dụ: Ngắt do bộ định thời 1 được cho phép bằng cách dùng hai lệnh:
SETB ET1 :Cho phép ngắt do bộ định thời một
SETB EA :set bit EA bằng 1để cho phép ngắt tồn cục
Đối với yêu cầu của ví dụ trên, hai cách thực hiện đã hoàn thành Tuy nhiên, khi so sánh hai phương pháp này, cần lưu ý rằng các lệnh của cách 1 không làm ảnh hưởng đến các bit còn lại trong thanh ghi IE.
Cách thứ hai là xóa các bit còn lại trong thanh ghi IE Đầu chương trình, nên khởi gán IE bằng lệnh MOV BYTE Khi điều khiển cho phép hoặc cấm trong chương trình, sử dụng các lệnh SET BIT và CLR BIT để tránh ảnh hưởng đến các bit khác trong thanh ghi IE.
Thiết kế chương trình dùng ngắt
Thực hành
BÀI 1: HỌ VI XỬ LÝ INTEL 80x86
Mã bài: MĐ 16-01 Giới thiệu:
Bộ vi xử lý 80x86 của Intel là một trong những dòng vi xử lý nổi tiếng và được ứng dụng rộng rãi trong nhiều lĩnh vực Các chương trình được phát triển cho 80x86 vẫn có khả năng hoạt động trên các hệ thống tiên tiến hơn sau này Mặc dù các họ vi xử lý từ các hãng khác nhau có sự khác biệt, nhưng vẫn tồn tại nhiều điểm tương đồng quan trọng Do đó, việc nắm vững kỹ thuật của 8086 sẽ giúp người dùng dễ dàng tiếp cận và hiểu biết về các bộ vi xử lý khác trong cùng họ của Intel hoặc từ các hãng khác.
- Trình bày được cấu trúc hệ vi xử lý 80x86
- Trình bày được tập lệnh của hệ vi xử lý 80x86
- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86
- Rèn luyện tính tư duy, tác phong trong công nghiệp
1 Cấu trúc bên trong và hoạt động của vi xử lý 8086
1.1 Các khối chức năng của CPU
Vi xử lý có hai khối xử lý chính: khối giao diện bus (BIU) và khối thực hiện lệnh (EU) Khối BIU chịu trách nhiệm giao tiếp với bộ nhớ và các thiết bị ngoại vi, trong khi khối EU thực hiện các lệnh và xử lý dữ liệu Sự phân chia này giúp tối ưu hóa hiệu suất và khả năng xử lý của vi xử lý.
BIU cung cấp các chức năng nhận lệnh, xếp hàng lệnh, lưu trữ toán hạng và định vị địa chỉ, đồng thời điều khiển BUS cơ sở Thời gian thực hiện lệnh và lấy lệnh thường trùng nhau, giúp tăng cường hiệu suất vi xử lý bằng cách cải thiện Bus Khi khối thực hiện lệnh bận, BIU có thể bắt đầu lấy lệnh kế tiếp từ bộ nhớ và lưu trữ chúng trong một hàng đợi RAM nội bộ tốc độ cao, với độ dài 6 byte cho vi xử lý 8086 Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả, cung cấp lệnh liên tục mà không làm tắc nghẽn BUS, từ đó giảm thiểu thời gian chết trên Bus Hàng đợi lệnh hoạt động như một bộ đệm FIFO (First In First Out).
Sự vào/ra liên tục của dòng mã lệnh trong bộ đệm cho thấy sự phối hợp hiệu quả giữa khối EU và BIU, nhờ vào cơ chế xử lý xen kẽ liên tục, giúp tăng tốc độ xử lý tổng thể Tuy nhiên, kỹ thuật này sẽ không còn hiệu quả khi bộ đệm chứa các lệnh CALL hoặc JMP, vì các lệnh này sẽ xóa nội dung cũ và nạp nội dung mới, dẫn đến việc tiêu tốn thời gian hơn so với trường hợp chỉ có mã lệnh tuần tự.
EU nhận lệnh từ hàng đợi, cung cấp toán hạng và địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Đồng thời, EU giải mã lệnh, thực hiện và chuyển kết quả về BIU để lưu trữ.
Thao tác đầu tiên của EU là giải mã lệnh, mặc dù thời gian này có vẻ như lãng phí cho CPU vì không có hoạt động điện nào diễn ra trên Bus Tuy nhiên, thực tế cho thấy đây là khoảng thời gian mà BIU tận dụng để lấy trước các câu lệnh tiếp theo.
Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, theo thứ tự sau lệnh đang thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến địa chỉ mới, BIU sẽ xóa hàng đợi hiện tại, lấy lệnh từ địa chỉ mới và chuyển ngay cho EU, sau đó tiếp tục thu thập các lệnh để đưa vào hàng đợi.
Khối EU trong vi xử lý 8086/8088 bao gồm các thanh ghi chung với độ rộng 16 bit Không có giao tiếp trực tiếp giữa EU và môi trường bên ngoài, vì EU nhận lệnh từ hàng đợi do BIU cung cấp Khi cần truy cập bộ nhớ hoặc I/O, EU sẽ chỉ đạo BIU thực hiện việc truyền hoặc nhận dữ liệu Tất cả dữ liệu mà EU điều khiển đều có địa chỉ 16 bit, nhưng nhờ vào việc BIU thực hiện di chuyển vị trí bộ nhớ, EU có thể truy cập toàn bộ bộ nhớ 1 MB.
ALU là một phần của EU nhưng hoạt động như một đơn vị độc lập, thực hiện các phép toán số học và logic Các toán hạng có thể là dữ liệu tức thời, dữ liệu từ các thanh ghi hoặc dữ liệu trong bộ nhớ Kết quả được lưu trữ trong một thanh ghi hoặc bộ nhớ, trong khi 6 cờ trạng thái được cập nhật dựa trên kết quả của các phép toán này.
1.2 Các thanh ghi của CPU
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
Các thanh ghi đoạn: CS, DS, SS, ES.
Các thanh ghi đa năng: AX, BX, CX, DX.
Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
Thanh ghi cờ FR (Flag).
Khối BIU trên BUS sử dụng địa chỉ 20 bit, cho phép vi xử lý 8086 phân biệt được 1MB (2^20 = 1048576) ô nhớ Trong không gian 1MB này, bộ nhớ cần được chia thành các vùng khác nhau để phục vụ các mục đích cụ thể.
Chứa dữ liệu và kết quả trung gian của chương trình.
Ngăn xếp (stack) là một vùng nhớ đặc biệt được sử dụng để quản lý các thông số của bộ vi xử lý khi thực hiện gọi chương trình con hoặc khi trở về từ chương trình con.
Vi xử lý 8086/8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng nhớ, được gọi là các thanh ghi đoạn (Segment register) Các thanh ghi này đóng vai trò quan trọng trong việc quản lý và truy cập dữ liệu trong bộ nhớ.
CS (Code Segment) là một phần quan trọng trong lập trình, chứa địa chỉ bắt đầu của đoạn mã chương trình với các lệnh thực thi Thông thường, vùng nhớ này chứa dữ liệu dạng hàng không thể thay đổi hoặc là vùng ROM/EPROM.
DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu…
SS (Stack Segment) là thanh ghi đoạn ngăn xếp, lưu trữ địa chỉ bắt đầu của mảng stack Đây là một khu vực trong RAM, nơi dữ liệu trong các thanh ghi được bảo quản trong suốt quá trình ngắt.
ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ sung.
Dung lượng tối đa của mỗi đoạn nhớ là 64 Kbyte, cho phép thay đổi giá trị các thanh ghi đoạn để linh hoạt dịch chuyển trong không gian 1 Mbyte Điều này có nghĩa là các đoạn nhớ có thể nằm cách nhau khi thông tin cần lưu trữ đòi hỏi dung lượng đầy đủ 64 Kbyte, hoặc có thể trùng lấp nhau nếu không sử dụng hết dung lượng này.