1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giáo trình Vi điều khiển (Nghề Cơ điện tử Trình độ Cao đẳng)

142 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo trình Vi điều khiển
Tác giả Đỗ Hữu Hậu
Trường học Cao đẳng nghề Cần Thơ
Chuyên ngành Cơ điện tử
Thể loại sách giáo trình
Năm xuất bản 2021
Thành phố Cần Thơ
Định dạng
Số trang 142
Dung lượng 5,32 MB

Cấu trúc

  • BÀI 1: HỌ VI XỬ LÝ INTEL 80x86 (6)
    • 1. Cấu trúc bên trong và hoạt động của vi xử lý 8086 (5)
      • 1.1. Các khối chức năng của CPU (7)
      • 1.2. Các thanh ghi của CPU (8)
      • 1.3. Tổ chức bộ nhớ của vi xử lý 8086 (0)
    • 2. Các chế độ định địa chỉ của bộ vi xư lý 8086 (5)
      • 2.1. Chế độ địa chỉ thanh ghi (12)
      • 2.2. Chế độ địa chỉ tức thì (12)
      • 2.3. Chế độ địa chỉ trực tiếp (13)
      • 2.4. Chế độ địa chỉ gián tiếp qua thanh ghi (13)
      • 2.5. Chế độ địa chỉ tương đối cơ sở (13)
      • 2.6. Chế độ địa chỉ tương đối chỉ số (13)
      • 2.7. Chế độ địa chỉ tương đối chỉ số cơ sở (13)
    • 3. Tập lệnh của vi xử lý 8086 (0)
    • 4. Các chế độ làm việc của vi xử lý (5)
    • 5. Lập trình hợp ngữ cho vi xử lý 8086/8088 (19)
      • 5.1. Giới thiệu chung về hợp ngữ (19)
      • 5.2. Cú pháp của chương trình hợp ngữ (19)
    • 6. Thực hành (6)
      • 6.1. Các bước khi lập trình (22)
      • 6.2. Sinh viên thực hành (22)
  • BÀI 2: CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051 (24)
    • 1. Tổng quan (6)
    • 2. Sơ đồ chân vi điều khiển 8051 (6)
      • 2.1. Chân cho phép bộ nhớ chương trình PSEN (26)
      • 2.2. Chân cho phép chốt địa chỉ ALE (26)
      • 2.3. Chân truy xuất ROM ngoài EA (27)
      • 2.4. Chân RESET(RST) (27)
      • 2.5. Các chân XTAL1,XTAL2 (27)
    • 3. Cấu trúc Port I/O (6)
    • 4. Tổ chức bộ nhớ (6)
      • 4.1. Tổng quan tổ ch́ức bộ nhớ (29)
      • 4.2. Vùng RAM đa năng (30)
      • 4.3. Vùng RAM định địa chỉ bit (30)
    • 5. Thực hành (6)
      • 5.1. Các bước thực hiện vẽ sơ đồ chân (34)
      • 5.2. Sinh viên thực hành (34)
  • BÀI 3: TẬP LỆNH 8051 (35)
    • 1. Các cách định địa chỉ (6)
    • 2. Các nhóm lệnh (38)
      • 2.1. Nhóm lệnh số học (38)
      • 2.2. Nhóm lệnh logic (42)
      • 2.3. Nhóm lệnh truyền dữ liệu (46)
      • 2.4. Nhóm lệnh boolean (48)
      • 2.5. Nhóm lệnh rẽ nhánh chương trình (50)
    • 3. Thực hành (6)
      • 3.1. Các bước lập trình (54)
      • 3.2. Sinh viên thực hành (54)
  • BÀI 4: BỘ ĐỊNH THỜI (56)
    • 1. Thanh ghi SFR của timer (57)
    • 2. Các chế độ làm việc (6)
      • 2.1. Chế độ định thời 13 bit (chế độ 0) (58)
      • 2.2. Chế độ định thời 16 bit (chế độ 1) (58)
      • 2.3. Chế độ tự nạp lại 8 bit (chế độ 2) (59)
      • 2.4. Chế độ định thời tách biệt timer (chế độ 3) (59)
  • BÀI 5: VI ĐIỀU KHIỂN PIC (67)
    • 1. Vi điều khiển PIC18F4550 (67)
      • 1.1. Cấu trúc phần cứng (67)
      • 1.2. Các tính năng đặc biệt, các bit cấu hình của PIC 18F4550 (73)
    • 2. Thực hành khảo sát nguồn và dao động (75)
  • BÀI 6: NGÔN NGỮ LẬP TRÌNH PIC18F4550 (77)
    • 1. Các phần mềm lập trình (77)
      • 1.1 Phần mềm MPLAB (78)
      • 1.2. Phần mềm CCS (79)
      • 1.3. Phần mềm MikroC (80)
    • 2. Phần mềm MPLAB và XC8 (81)
      • 2.1. Khởi tạo Project trên phần mềm MPLAB (81)
      • 2.2. Ngôn ngữ lập trình C của trình biên dịch XC8 (84)
      • 2.3. Bộ định thời timer (91)
      • 2.4. Khối CCP (Capture - Compare - PWM) (98)
      • 2.5 Bộ biến đổi ADC (101)
      • 2.6. Truyền thông nối tiếp trong vi điều khiển (109)
      • 3.1. Cài đặt phần mềm CCS (112)
  • BÀI 7: LẬP TRÌNH ĐIỀU KHIỂN VÀ MÔ PHỎNG (126)
    • 1. Chương trình điều khiển LED đơn (chương trình mẫu) (6)
    • 2. Mô phỏng (6)
      • 3.1. Viết chương trình theo yêu cầu (136)
      • 3.2. Chạy mô phỏng (137)
  • TÀI LIỆU THAM KHẢO (142)

Nội dung

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ử

2 Bài 2: Cấu trúc họ vi điều khiển 8051

1 Các cách định địa chỉ

1.Thanh ghi SFR của timer

2 Các chế độ làm việc

05 Bài 5: Vi điều khiển PIC 8 4 3 1

1 Cấu trúc của vi điều khiển

2 Kiến trúc của vi điều khiển

3 Một số họ vi điều khiển thông dụng

06 Bài 6: Ngôn ngữ lập trình cho

1 Các phần mềm lập trình

2 Phần mềm MPLAB X IDE và XC8

07 Bài 7: Lập trình điều khiển và mô phỏng 12 6 5 1

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86

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 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 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 chúng cũng có 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 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 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 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ể 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 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, 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 của lệnh CALL (gọi chương trình con) hoặc JMP (nhảy), vì khi gặp các lệnh này, nội dung cũ trong bộ đệm sẽ bị xóa và thay thế bằng nội dung mới Điều này dẫn đến việc tiêu tốn thời gian hơn so với trường hợp bộ đệm chỉ chứa 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 để đọ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 nào trên Bus Tuy nhiên, thực tế cho thấy đây là 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, 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, 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 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, 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 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 Mặc dù tất cả dữ liệu mà EU điều khiển là địa chỉ 16 bit, BIU có khả năng định vị lại địa chỉ, cho phép EU 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ì, dữ liệu từ các thanh ghi hoặc từ bộ nhớ Kết quả của các thao tác đượ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 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 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 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 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 bộ nhớ, được gọi là 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 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 đ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 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ác chế độ làm việc của vi xử lý

5 Lập trình hợp ngữ cho vi xử

2 Bài 2: Cấu trúc họ vi điều khiển 8051

1 Các cách định địa chỉ

1.Thanh ghi SFR của timer

2 Các chế độ làm việc

05 Bài 5: Vi điều khiển PIC 8 4 3 1

1 Cấu trúc của vi điều khiển

2 Kiến trúc của vi điều khiển

3 Một số họ vi điều khiển thông dụng

06 Bài 6: Ngôn ngữ lập trình cho

1 Các phần mềm lập trình

2 Phần mềm MPLAB X IDE và XC8

07 Bài 7: Lập trình điều khiển và mô phỏng 12 6 5 1

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86

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 chạy trên các hệ thống tiên tiến hơn 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 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), đảm nhiệm các chức năng logic quan trọng trong hoạt động của nó.

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, 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 bận rộn, BIU có thể 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 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ể 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ả khi 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 Điều này dẫn đến việc 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 để đọc lệnh và dữ liệu Trong khi đó, EU giải mã lệnh, thực hiện và chuyển kết quả về BIU để lưu trữ.

Hành động đầu tiên của EU là giải mã lệnh, 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 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, nằm 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 thu thập các lệnh để đưa vào hàng đợi.

Khối EU trong vi xử lý 8086/8088 được hình thành từ 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 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 lưu trữ trong bộ nhớ Kết quả của các phép toán được lưu trữ trong một thanh ghi hoặc bộ nhớ, đồng thời 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 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 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à phần ghi lại đ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, CS là vùng nhớ 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…

Thanh ghi đoạn ngăn xếp (SS) là một 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, giúp quản lý và duy trì thông tin cần thiết cho các tác vụ đang thực hiệ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 Đ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 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

2 Bài 2: Cấu trúc họ vi điều khiển 8051

1 Các cách định địa chỉ

1.Thanh ghi SFR của timer

2 Các chế độ làm việc

05 Bài 5: Vi điều khiển PIC 8 4 3 1

1 Cấu trúc của vi điều khiển

2 Kiến trúc của vi điều khiển

3 Một số họ vi điều khiển thông dụng

06 Bài 6: Ngôn ngữ lập trình cho

1 Các phần mềm lập trình

2 Phần mềm MPLAB X IDE và XC8

07 Bài 7: Lập trình điều khiển và mô phỏng 12 6 5 1

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86

Bộ vi xử lý 80x86 của Intel từng 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 đượ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 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 chức năng nhận và 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ý 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 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 gián đoạn hoạt động của BIU, 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 trong bộ đệm được thể hiện qua việc 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 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 thực hiện việc giải mã lệnh, thực hiện các thao tác cần thiết và chuyển kết quả trở lại BIU để lưu trữ.

Hành động đầu tiên của EU là giải mã lệnh, và khoảng thời gian này có vẻ như là lãng phí 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à thời gian mà BIU tận dụng để lấy trước các câu lệnh tiếp theo, như đã được 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 sau lệnh hiện tại đang được thực hiện Khi EU hoàn thành một lệnh và chuyển điều khiển đến một đị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 được cấu 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 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 Mặc dù EU điều khiển dữ liệu với đị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ó 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ó cấu trúc độ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ì, 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ớ, và 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 vi xử lý 8086 phân biệt được 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, 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 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) 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à 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…

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 sự quản lý hiệu quả và an toàn cho thông tin trong quá trình thực thi chương trình.

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 dung lượng đầy đủ 64 Kbyte, hoặc có thể trùng lặp do một số đoạn 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

05 Bài 5: Vi điều khiển PIC 8 4 3 1

1 Cấu trúc của vi điều khiển

2 Kiến trúc của vi điều khiển

3 Một số họ vi điều khiển thông dụng

06 Bài 6: Ngôn ngữ lập trình cho

1 Các phần mềm lập trình

2 Phần mềm MPLAB X IDE và XC8

07 Bài 7: Lập trình điều khiển và mô phỏng 12 6 5 1

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86

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 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 các 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 cũng như 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à hiệu quả của vi xử lý trong việc thực hiện các tác vụ tính toán.

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 cải thiện hiệu suất 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 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 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 mã lệnh CALL hoặc JMP, vì những lệnh này sẽ xóa nội dung cũ 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 khi bộ đệm chỉ chứa cá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 thực hiện việc giải mã lệnh, thực hiện các thao tác cần thiết, và chuyển kết quả lại cho BIU để lưu trữ.

EU thực hiện thao tác giải mã lệnh đầu tiên, và khoảng 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ờ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ự 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 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 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 có đị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 hoạt động như một cấu trúc độ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ủ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).

Bộ vi xử lý 8086 sử dụng địa chỉ 20 bit trên BUS, cho phép nó 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 để 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 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 cập dữ liệu trong bộ nhớ.

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à 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 dữ liệu từ các thanh ghi được lưu trữ 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ể 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

05 Bài 5: Vi điều khiển PIC 8 4 3 1

1 Cấu trúc của vi điều khiển

2 Kiến trúc của vi điều khiển

3 Một số họ vi điều khiển thông dụng

06 Bài 6: Ngôn ngữ lập trình cho

1 Các phần mềm lập trình

2 Phần mềm MPLAB X IDE và XC8

07 Bài 7: Lập trình điều khiển và mô phỏng 12 6 5 1

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86

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 được viết cho 80x86 vẫn có khả năng hoạt động trên các hệ thống hiện đại 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 đó, nếu nắm vững kỹ thuật của 8086, người dùng sẽ có nền tảng vững chắc để tiếp cận các bộ vi xử lý khác trong cùng dòng 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, lấy lệnh và thực hiện 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 các lệnh tiếp theo từ bộ nhớ và lưu trữ chúng trong một 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 gây độc chiếm BIU, 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, 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 mã lệnh của các lệnh CALL hoặc JMP, vì khi gặp những 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 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 để đọ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ả về BIU để lưu trữ.

EU thực hiện thao tác giải mã lệnh đầu tiên, 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ự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, như đã mô tả trước đó.

Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, tiếp theo 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à gửi ngay cho EU, sau đó tiếp tục thu thập các lệnh mới để đưa vào hàng đợi.

Khối EU trong vi xử lý 8086/8088 được hình thành từ 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 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 Mặc dù dữ liệu mà EU điều khiển là địa chỉ 16 bit, 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 phần của EU, 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ủ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 theo 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ý 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ụ cho 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 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 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 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 Nó 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 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.

Thực hành

1.Thanh ghi SFR của timer

2 Các chế độ làm việc

05 Bài 5: Vi điều khiển PIC 8 4 3 1

1 Cấu trúc của vi điều khiển

2 Kiến trúc của vi điều khiển

3 Một số họ vi điều khiển thông dụng

06 Bài 6: Ngôn ngữ lập trình cho

1 Các phần mềm lập trình

2 Phần mềm MPLAB X IDE và XC8

07 Bài 7: Lập trình điều khiển và mô phỏng 12 6 5 1

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86

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 đượ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ý từ các nhà sản xuất 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 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 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, nâng cao hiệu suất 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 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 gián đoạn hoạt động của BIU, 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ả 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ũ 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í 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.

Hàng đợi lệnh chứa các lệnh được lưu trữ trong các ô nhớ liên tiếp, theo sau lệnh hiện tại đ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 mới từ địa chỉ đó, sau đó chuyển ngay cho EU và 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ó 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, 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 2^20 = 1.048.576 ô nhớ, tương đương với 1MB Trong không gian bộ nhớ 1MB này, cần phải 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 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 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 Nó bao gồm các lệnh thực hiện được 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, chứa địa chỉ bắt đầu của mảng stack Đây là một phần của RAM, nơi lưu trữ dữ liệu trong 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 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 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

05 Bài 5: Vi điều khiển PIC 8 4 3 1

1 Cấu trúc của vi điều khiển

2 Kiến trúc của vi điều khiển

3 Một số họ vi điều khiển thông dụng

06 Bài 6: Ngôn ngữ lập trình cho

1 Các phần mềm lập trình

2 Phần mềm MPLAB X IDE và XC8

07 Bài 7: Lập trình điều khiển và mô phỏng 12 6 5 1

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86

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 tương thích với 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 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 dòng 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 và lấy lệnh thường trùng nhau, giúp tăng hiệu suất của vi xử lý nhờ 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 tiếp theo từ bộ nhớ và lưu trữ chúng trong hàng đợi RAM nội bộ tốc độ cao Đối với vi xử lý 8086, độ dài hàng đợi là 6 byte, cho phép BIU sử dụng bộ nhớ hiệu quả BIU liên tục cung cấp lệnh mà không chiếm dụng Bus, giảm thiểu thời gian chết Hàng đợi lệnh hoạt động như 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 của lệnh CALL hoặc JMP, vì các lệnh này sẽ làm mất nội dung cũ của bộ đệm 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à 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, 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 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ư đã được 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ự 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ẽ xoá 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 trong 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 của BIU 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 Mặc dù 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 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, 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ủa các phép toán được lưu trữ trong thanh ghi hoặc bộ nhớ, đồng thời 6 cờ trạng thái cũng đượ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 (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 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ý 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à một đ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 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, có vai trò 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 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ể trùng lặp nếu không sử dụng hết dung lượng này.

VI ĐIỀU KHIỂN PIC

Vi điều khiển PIC18F4550

Vi điều khiển PIC18F4550 thuộc dòng vi điều khiển PIC 8 bit Có cấu trúc như hình 5.1

Bộ xử lý trung tâm CPU (Central Processing Unit)

- Bộ nhớ chương trình (Program Memory) bao gồm 16384 bytes kiểu Flash.

- Bộ nhớ dữ liệu (Data Memory) bao gồm 768 byte SRAM (Static Random Ac- cess Memory), 256 byte EEPROM.

Bộ nhớ dữ liệu SRAM được phân chia thành hai khu vực chức năng khác nhau: vùng RAM đa dụng GPR (General Purpose Registers) dùng để lưu trữ dữ liệu và vùng các thanh ghi chức năng đặc biệt SFR (Special Function Registers) chứa các thanh ghi điều khiển ngoại vi cũng như CPU.

Bộ nhớ EEPROM là loại bộ nhớ không bị mất dữ liệu khi mất điện, khác biệt với bộ nhớ chương trình và RAM Nó được sử dụng để lưu trữ dữ liệu lâu dài và có khả năng ghi/đọc lên đến 1.000.000 lần Dữ liệu có thể được lưu trữ một cách an toàn trong bộ nhớ này.

Trong suốt 100 năm qua, việc điều khiển và đọc/ghi bộ nhớ dữ liệu EEPROM không được thực hiện trực tiếp qua các tệp thanh ghi hay vùng nhớ chương trình Thay vào đó, quá trình này được thực hiện gián tiếp thông qua các thanh ghi chức năng đặc biệt (SFR).

Bộ phát xung hệ thống (Oscillator) là thiết bị quan trọng trong việc cung cấp nguồn xung cho hệ thống Nguồn xung có thể đến từ bên ngoài hoặc từ bộ phát xung nội bộ Sau đó, tín hiệu này sẽ được xử lý qua bộ nhân hoặc chia tần số để lựa chọn tần số phù hợp, đảm bảo hoạt động ổn định của hệ thống.

- Nguồn xung chính được đưa vào chip qua chân OSC1 và OSC2, tần cao cao nhất đạt 40MHz.

- Nguồn xung phụ được đưa vào chip qua các chân T1OSI, T1OSO.

- Bộ phát xung nội tần số 31kHz tới 8 MHz.

Watchdog Timer (WDT) là một bộ đếm thời gian đặc biệt có chức năng khởi động lại hệ thống khi không nhận được tín hiệu reset trong khoảng thời gian đã định Thời gian khởi động lại hệ thống có thể được điều chỉnh từ 4ms đến 131,072s WDT được khởi tạo ở đầu chương trình và được chèn các lệnh reset trong thân chương trình để đảm bảo rằng khi vi điều khiển thực hiện đúng các lệnh, WDT sẽ không bị tràn Mục đích chính của WDT là ngăn chặn vi điều khiển rơi vào vòng lặp chết (dead loop), khi đó nếu không thực hiện được lệnh reset, WDT sẽ tràn và tự động khởi động lại hệ thống, giúp thoát khỏi tình trạng treo.

WDT (Watchdog Timer) có khả năng hoạt động ngay cả khi bộ điều khiển chính (MC) ở chế độ ngủ, giúp ngăn chặn tình trạng "bị treo" trong vòng lặp chết Điều này làm cho WDT trở thành công cụ hữu ích trong các ứng dụng tiết kiệm năng lượng.

Bộ nạp chương trình: Bộ nạp chương trình nối tiếp trên chip (Single-Supply

In- Circuit Serial Programming) sẽ giúp nạp chương trình từ mạch nạp vào bộ nhớ ROM qua các chân PGM, PGC và PGD.

Hình 5.1: Sơ đồ khối của PIC18F4550

Bộ Debugger (In-Circuit Debugger) là một công cụ quan trọng giúp lập trình viên kiểm soát lỗi chương trình Mạch Debugger trên chip cho phép vi điều khiển hoạt động ở chế độ chạy từng lệnh, nhóm lệnh hoặc toàn bộ chương trình, từ đó hỗ trợ quá trình phát triển và sửa lỗi hiệu quả hơn.

Khối phát hiện tín hiệu reset: Mạch phát hiện tín hiệu reset có khả năng phát hiện 03 nguồn reset:

- Reset khi bật nguồn (POR: Power-on Reset).

- Reset khi nguồn yếu (BOR: Brown-out Reset).

Khối quản lý lỗi bộ phát xung (Fail-Safe Clock Monitor): Khối này được sự dụng để quản lý an toàn bộ phát xung hệ thống.

Khối định thời khởi động bộ phát xung (Oscillator Start-up Timer): Khối này sử dụng để tạo thời gian trễ chờ cho bộ phát xung ổn định.

Thiết bị ngoại vi (Peripheral): PIC18F4550 được tích hợp các thiết bị ngoại vi sau:

- Bộ phát hiện điện áp cao/thấp HLVD (High/low-Voltage Detect).

- Bộ nhớ lưu dữ liệu khi tắt nguồn EEPROM.

- 04 bộ đếm, định thời 16 bit: Timer0, Timer1, Timer2 và Timer3.

- 01 bộ so sánh tín hiệu tương tự (Comparator).

- 09 kênh biến đổi tương tự - số (ADC) độ phân giải 10 bit.

- 02 bộ CCP1, CCP2 (Capture, Compare, PWM: Chụp, So sánh, xung PWM);

- 08 kênh “Power Control PWM Module” 14 bits

- 01 cổng truyền thông nối tiếp đồng bộ (Master Synchronous Serial Port) có thểhoạt động được ở chế độ SPI hoặc I2C.

The EUSART (Enhanced Universal Synchronous Asynchronous Receiver Transmitter) is a versatile communication interface that enables PIC microcontrollers to communicate with each other or connect to a computer's COM port.

Khối giao tiêp vào/ra số:

Vi điều khiển PIC18F4520 được trang bị 5 cổng vào/ra, bao gồm A, B, C, D và E Mỗi cổng tương ứng với một thanh ghi đệm dữ liệu, cụ thể là PORTA, PORTB, PORTC, PORTD và PORTE, với các thanh ghi này được định địa chỉ theo byte và theo bit.

Bảng 5.1 trình bày tóm tắt cấu trúc các dòng vi điều khiển cùng họ với 18F4550.

Bảng 5.1 Cấu trúc vi điều khiển PIC 18F4550

Hình 5.2: Sơ đồ chân giao tiếp ngoại viKhối tạo dao động

PIC 18F4550 hỗ trợ 10 chế độ tạo dao động khác nhau Để chọn chế độ tạo dao động, người dùng cần cấu hình các bit FOSC trong thanh ghi CONFIG1H.

LP (Low-Power Crystal) nguồn xung thạch anh ngoài, nguồn thấp

XT (Crystal/Resonator) thạch anh/bộ cộng hưởng bên ngoài

HS (High-Speed Crystal/Resonator) thạch anh/bộ cộng hưởng bên ngoài tốc độ cao

HSPLL nhân 4 lần tần số HS bằng vòng khóa pha (Phase Locked Loop)

RC (External Resistor/Capacitor) tạo dao động bằng mạch RC bên ngoài, phát xung FOSC/4 ra chân RA6.

RCIO tạo dao động bằng mạch RC ngoài, vào/ra trên chân RA6.

INTIO1 (Internal Oscinator) bộ tạo dao động nội, phát xung FOSC/4 ra chân RA6, vào/ra trên chân RA7.

INTIO2 bộ tạo dao động nội, vào/ra trên chân RA6 và RA7.

EC (External Clock) bộ phát xung ngoài, phát xung FOSC/4 ra chân RA6. ECIO bộ phát xung ngoài, vào/ra trên chân RA6.

Hình 5.3: Sơ đồ khối bộ tạo dao động trên PIC 18F4550

Tạo dao động bằng thạch anh ngoài (Crystal/Ceramic Resonator)

Trong chế độ tạo dao động LP, XT, HS, và HSPLL, XT sử dụng thạch anh mà không có tụ điện, trong khi HSPLL sử dụng mạch cộng hưởng thạch anh bọc gốm đã có tụ điện Các chế độ này kết nối bộ tạo dao động với vi điều khiển PIC 18F4550 thông qua hai chân OSC1 và OSC2.

- Sơ đồ kết nối giữa vi điều khiển với bộ phát xung ngoài:

Hình 5.4: Sơ đồ kết nối với bộ dao động thạch anh/mạch cộng hưởng ngoài

- Lựa chọn giá trị tụ điện khi sử dụng mạch cộng hưởng thạch anh bọc gốm (Ceramic Resonator).

Vi điều khiển PIC 18F4550 hỗ trợ chuẩn nạp ICSP (In Circuit Serial Programming), cho phép nạp trực tiếp ngay cả khi PIC đang gắn trên mạch Chuẩn nạp này sử dụng các chân 1 (VPP), chân 39 (PGC) và chân 40 (PGD) của PIC 18F4550.

Cổng nạp ICSP (6 chân) và chuẩn nạp MH PRO (10 chân) được minh họa trong hình 5.5 Để nạp PIC, chỉ cần 5 chân từ 1 đến 5 của cổng ICSP, nhưng chân số 6 được thêm vào để phòng ngừa trường hợp cắm ngược Khi đó, chân MCRL/VPP sẽ kết nối với chân NC, và điện áp chân MCRL/VPP sẽ được nâng lên từ 8-13V Nếu chân MCRL/VPP kết nối với một I/O bất kỳ, có thể gây hỏng thiết bị Do đó, việc chọn loại Bus có quy định chiều cắm cho chuẩn ICSP là rất quan trọng, như trong chuẩn nạp MH PRO.

Hình 5.5: Chuẩn nạp cho PIC

Trên thị trường hiện có nhiều loại mạch nạp cho PIC, bao gồm các mẫu nổi bật như mạch nạp PIC KIT2, mạch nạp PIC KIT3, mạch nạp Burn-E và mạch nạp PIC KIT2 MH Hình 1.19 minh họa một số loại mạch nạp này.

Hình 5.6: Một số mạch nạp cho P1C

1.2 Các tính năng đặc biệt, các bit cấu hình của PIC 18F4550

The PIC18F4550 microcontroller is designed with a range of features that enhance system reliability while reducing costs by eliminating the need for external components Key functionalities include Reset, Power-on Reset (POR), Power-up Timer (PWRT), Oscillator Start-up Timer (OST), Brown-out Reset (BOR), Interrupts, Watchdog Timer (WDT), Oscillator selection, Sleep mode, Code protection, ID Locations, In-Circuit Serial Programming, and Low-voltage In-Circuit Serial Programming These features collectively contribute to energy efficiency and robust protection mechanisms.

Thực hành khảo sát nguồn và dao động

Bước 1: Cấp nguồn cho bộ thực hành

Bước 2: Bật công tắc nguồn

Bước 3: Dùng VOM đo điện áp tại các chân 1, 11, 12 và chân 31, 32

Bước 4: Dùng OSC đo giá trị tại các chân 13, 14

Bước 5: Ghi nhận kết quả theo bảng

Chân Giá trị điện áp Giá trị tần số Ghi chú

Bước 6: Nhận xét và lưu lại giá trị điện áp, tần số mẫu này làm tư liệu học tập

Những trọng tâm cần chú ý trong bài

- Chân Reset và chân cấp nguồn

- Giá trị điện áp nguồn cung cấp

- Giá trị tần số dao động ngoại

- Các bước thực hiện khảo sát bộ thực hành PIC

Bài tập mở rộng và nâng cao

Câu 1: Trình bày cấu trúc chung của vi điều khiển? Vẽ hình minh họa.

Câu 2: Trình bày các kiểu kiến trúc của vi điều khiển? Vi điều khiểnPIC18F4550 thuôc kiểu kiến trúc nào?

Câu 3: Trình bày cấu trúc, sơ đồ các khối của vi điều khiển PIC18F4550? Vẽ hình minh họa.

Câu 4: Trình bày các chế độ tạo dao động của PIC18F4550? Vẽ hình nguyên lý chế độ tạo dao động bằng thạch anh ngoài?

Câu 5: Trình bày chức năng khối Reset của vi điều khiển và các nguồn reset của PIC18F4550? Vẽ hình nguyên lý minh họa mạch reset ngoài MCLR?

Yêu cầu về đánh giá kết quả học tập bài 5

Việc hiểu biết về vi xử lý và vi điều khiển là rất quan trọng trong lĩnh vực công nghệ Vi xử lý là bộ phận xử lý trung tâm của máy tính, trong khi vi điều khiển là một hệ thống nhúng tích hợp cả bộ xử lý, bộ nhớ và các thiết bị ngoại vi Cấu trúc chung của vi điều khiển bao gồm bộ xử lý, bộ nhớ và các cổng vào/ra, trong đó vi điều khiển PIC nổi bật với thiết kế đơn giản, dễ lập trình và khả năng ứng dụng rộng rãi trong các dự án điện tử.

- Về kỹ năng: Xác định chính xác điện áp và tần số trên các chân chức năng tương ứng của vi điều khiển PIC 18F4550

- Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác, ngăn nắp trong công việc.

- Về kiến thức: Đánh giá bằng hình thức kiểm tra viết, trắc nghiệm, vấn đáp

- Về kỹ năng: Đánh giá kỹ năng thực hành thông qua thao tác đo các thông số trong bộ thực hành theo yêu cầu của bài

- Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác, ngăn nắp trong công việc.

NGÔN NGỮ LẬP TRÌNH PIC18F4550

Các phần mềm lập trình

Các bước khi thiết lập và làm việc với các ứng dụng sử dụng vi điều khiển minh họa như hình 6.1

Hình 6.1: Các bước thực hiện dự án với vi điều khiển

Máy tính và vi điều khiển xử lý thông tin thông qua các chuỗi bit “0” và “1” theo một trật tự nhất định, được gọi là mã máy Để thực hiện thuật toán, cần viết chúng dưới dạng mã máy hoặc các lệnh theo quy ước, sau đó biên dịch thành mã máy Tập hợp các ký hiệu và quy tắc để viết lệnh thể hiện thuật toán được gọi là ngôn ngữ lập trình, trong đó các quy tắc viết chương trình được gọi là cú pháp của ngôn ngữ Có nhiều ngôn ngữ lập trình khác nhau, và chúng có thể được phân loại thành ba lớp dựa trên mức độ hình thức hóa.

Lớp 1: Ngôn ngữ máy Chương trình trong ngôn ngữ máy là dãy các lệnh máy mà CPU có thể thực hiện trực tiếp Đó là ngôn ngữ lập trình duy nhất mà máy tính

Hiểu được ngôn ngữ máy là bước đầu tiên trong giao tiếp với máy tính, mặc dù đây là mức thấp nhất nhưng lại mang lại hiệu quả cao nhất cho chương trình Mỗi loại máy tính có một ngôn ngữ máy riêng, phụ thuộc vào thiết kế phần cứng của nó Các lệnh trong ngôn ngữ máy thường được biểu diễn dưới dạng nhị phân hoặc các biến thể trong hệ đếm 16.

Lớp 2: Hợp ngữ (Assembly) Hợp ngữ được viết bằng tập hợp các chữ (ký tự), mỗi mã lệnh được thể hiện bằng một mã chữ, địa chỉ các đối tượng trong lệnh cũng được “quy ước” thành các ký tự.

Trong vi điều khiển PIC18Fxxx, lệnh hợp ngữ MOVLW 0X0F có nghĩa là chuyển hằng số 0F(H) vào thanh ghi W, và mã máy tương ứng là 0000 1110 0000 1111 Để chương trình viết bằng hợp ngữ có thể chạy trên máy tính, nó cần được dịch sang ngôn ngữ máy thông qua một chương trình gọi là hợp dịch (Assembler).

Lớp 3: Ngôn ngữ thuật toán (Algorithmic language) Là ngôn ngữ có các câu lệnh gần với ngôn ngữ tự nhiên, ngôn ngữ toán học và độc lập với bất cứ loại máy cụ thể nào Ngôn ngữ thuật toán còn được gọi là ngôn ngữ lập trình bậc cao (high level programming language) Cũng như đối với hợp ngữ, mỗi ngôn ngữ lập trình bậc cao trên một loại máy cụ thể đều cần có chương trình dịch (còn gọi là trình biên dịch, gọi tắt là trình dịch) để dịch các chương trình sang sang ngôn ngữ máy của máy đó mới có thể thực hiện được.

Hình 6.2: Nhiệm vụ của trình biên dịch

Trình dịch (Compiler) là phần mềm chuyển đổi mã nguồn từ ngôn ngữ lập trình sang ngôn ngữ máy tính, tạo ra mã đối tượng tương ứng Đối với vi điều khiển PIC18, có các ngôn ngữ lập trình phù hợp với ba lớp khác nhau, với hợp ngữ có 76 lệnh, chủ yếu được mã hóa bằng 16 bit Bài viết này sẽ tổng quan về các trình biên dịch dịch từ ngôn ngữ C cho vi điều khiển PIC, phân tích ưu nhược điểm và khả năng ứng dụng của từng loại trình biên dịch, cho thấy sự phát triển của chúng trong lĩnh vực vi điều khiển PIC.

2 hướng sau: Hướng tiện dụng, nhanh chóng và hướng chuyên sâu.

MPLAB IDE là phần mềm do Microchip phát triển, chuyên dùng để lập trình mã cho các ứng dụng PIC Để lập trình PIC hiệu quả trên MPLAB, người dùng cần cài đặt trình biên dịch C, với nhiều lựa chọn trình biên dịch hỗ trợ có sẵn trong phần mềm này.

Hitech là một nhóm phát triển độc lập với Microchip, nổi bật với trình biên dịch Hi-Tech C, cho phép lập trình viên tương tác ở cấp độ bit trong thanh ghi của vi điều khiển Để sử dụng hiệu quả công cụ này, lập trình viên không chỉ cần kiến thức vững về lập trình C mà còn phải hiểu rõ kiến trúc phần cứng của vi điều khiển Sự hiểu biết này giúp họ tối ưu hóa mã nguồn và nắm rõ hoạt động của vi điều khiển Hitech C được thiết kế đặc biệt cho dòng vi điều khiển PIC16F.

Microchip đã kế thừa những ưu điểm của Hi-Tech C và phát triển các trình biên dịch C16, C18, C30, C32, với C16 dành cho dòng vi điều khiển 16F, C18 cho dòng 18F và C30 cho DsPIC30F Cấu trúc chương trình và phương pháp tương tác của các trình biên dịch này hoàn toàn tương tự như Hi-Tech C, điểm khác biệt duy nhất là phương pháp CONFIG, dùng để khai báo phần cứng ban đầu.

Microchip hiện đã ngừng hỗ trợ MPLAB, chỉ còn MPLAB IDE X được phát triển Đồng thời, vào tháng 9 năm 2012, Microchip đã phát hành ba phiên bản nâng cấp của các trình biên dịch Hitech C, C18, C30 và C32.

XC8 cho dòng vi điều khiển PIC 8 bit như PIC10, PIC12, PIC16 , PIC18

XC16 cho dòng vi điều khiển PIC 16 bit như dSPIC30F, dSPIC33F

XC 32 cho dòng vi điều khiển PIC 32 bit.

Hình 6.3: Phần mềm MPLAB và các trình biên dịch C

Ưu điểm của phương pháp lập trình này bao gồm khả năng tương tác cấp độ phần cứng, tính mở và dễ dàng phát triển Nó cho phép kết nối với các phương pháp lập trình khác, giúp lập trình viên tối ưu hóa mã nguồn Bên cạnh đó, lập trình viên có thể tính toán chính xác thời gian thực thi chương trình Phương pháp này cũng rất tương thích với môi trường lập trình MPLAB và vi điều khiển PIC.

Tuy nhiên, việc sử dụng ngôn ngữ lập trình C cũng có một số nhược điểm đáng kể Để có thể sử dụng ngôn ngữ này một cách hiệu quả, người dùng không chỉ cần có kiến thức vững vàng về C mà còn phải hiểu rõ về cấu trúc máy tính và bộ nhớ Hơn nữa, C cũng hỗ trợ ít thư viện, điều này đòi hỏi người sử dụng phải tự xây dựng các thư viện cần thiết, gây tốn thời gian và công sức.

Khi nghiên cứu sâu về vi điều khiển để phát triển các dòng vi điều khiển phức tạp hơn, việc tối ưu hóa code và thời gian thực thi là rất quan trọng Điều này đặc biệt cần thiết cho những dự án yêu cầu khắt khe về thời gian tính toán của chip xử lý.

CCSC là trình biên dịch phổ biến nhất cho vi điều khiển PIC, nổi bật với tính dễ sử dụng, cho phép lập trình viên tập trung vào lập trình mà không cần lo lắng về phần cứng Kể từ khi ra mắt vào năm 2003, CCSC đã trở thành lựa chọn quen thuộc cho người dùng dòng PIC16F và vẫn được ưa chuộng cho đến nay.

Có thể khái quát một số ưu, nhược điểm của mảng này như sau:

- Ưu điểm: Dễ sử dụng (chỉ cần có kiến thức về C cơ bản), nhiều thư viện hỗ trợ, hỗ trợ nhiều công cụ đi kèm

Phần mềm MPLAB và XC8

Trong giáo trình này sử dụng phần mềm MPLAB và trình biên dịch C XC8. Phần dưới đây trình bày các tập lệnh ngôn ngữ C trên trình biên dịch XC8.

2.1 Khởi tạo Project trên phần mềm MPLAB

Khởi tạo Project: File  New Project

Cửa sổ mới xuất hiện, chọn Standalone Project và chọn Next

Tiếp theo chọn dòng vi điều khiển 8 bit tại Family và chọn PIC18F4550 tại Device.

Hình 6.8: Chọn PIC18F4550 tại Device

Cửa sổ tiếp theo xuất hiện, yêu cầu chọn phần cứng kèm theo Ta lựa chọn công cụ mạch nạp hoặc mô phỏng, sau đó nhấn Next.

Tiếp theo là chọn trình biên dịch C cho Project, ta chọn XC8.

Hình 6.10: Chọn trình biên dịch

Sau khi hoàn tất các bước trước, bước tiếp theo là chọn tên cho dự án và đường dẫn lưu trữ Bạn cần nhập tên dự án cùng với đường dẫn lưu trữ, sau đó nhấn Finish để hoàn tất quá trình khởi tạo dự án.

Hình 6.11: Nhập tên và đường dẫn dự án

Sau đó tại cửa sổ phần mềm MPLAB, tạo file C mới như hình dưới Sau đó viết chương trình các file tạo ra tùy người sử dụng.

Hình 6.12: Nhập tên và đường dẫn dự án

2.2 Ngôn ngữ lập trình C của trình biên dịch XC8

2.2.1 Khung một chương trình ngôn ngữ C với XC8

Cấu trúc chương trình C bao gồm các khối sau:

2 Cấu hình vi điều khiển

3 Khai báo biến, hằng toàn cục (nếu có)

4 Các chương trình con (nếu có)

6 Chương trình ngắt (nếu có)

7 Các chú thích (nếu có)

Ví dụ một chương trình C cơ bản như sau:

#pragma config FOSC = EXTRC_CLKOUT// Oscillator Selection bits

#pragma config WDTE = OFF // Watchdog Timer Enable bit

#pragma config PWRTE = OFF // Power-up Timer Enable bit

#pragma config MCLRE = ON // RE3/MCLR pin function select bit

#pragma config CP = OFF // Code Protection bit

#pragma config CPD = OFF // Data Code Protection bit

#pragma config BOREN = ON // Brown Out Reset Selection bits

#pragma config IESO = ON // Internal External Switchover bit

#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enabled bit

#pragma config LVP = OFF // Low Voltage Programming Enable bit

#pragma config BOR4V = BOR40V // Brown-out Reset Selection bit

#pragma config WRT = OFF // Flash Program Memory Self Write Enable bits

#define key1 PORTD bits.RD0

#define relay1 PORTA bits.RA1

// #pragma config statements should precede project file includes.

// Use project enums instead of #define for ON and OFF.

#define _XTAL_FREQ 20000000 char i,j,k,l,sda,sdb; void chop_tat()

{ for(j=0;j5 sẽ trả ra giá trị 0

>= So sánh lớn hơn hoặc bắng a>=b

6>=2 sẽ trả ra giá trị 1

6

Ngày đăng: 16/12/2023, 16:04

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN