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

Giáo trình Vi điều khiển cơ bản (Nghề Điện tử dân dụng Trình độ Trung cấp)

141 4 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 cơ bản
Tác giả Đỗ Hữu Hậu, Nguyễn Thanh Nhàn
Trường học Cao đẳng nghề Cần Thơ
Chuyên ngành Điện tử dân dụng
Thể loại sách giáo trình
Năm xuất bản 2018
Thành phố Cần Thơ
Định dạng
Số trang 141
Dung lượng 2,54 MB

Cấu trúc

  • BÀI 1: TỔNG QUAN VỀ CÁC HỆ VI XỬ LÝ (0)
    • 1. Biểu diễn thông tin trong các hệ vi xử lý (0)
    • 2. Cấu trúc của hệ vi xử lý và máy vi tính (6)
  • BÀI 2: CÁC ĐƠN VỊ VI XỬ LÝ TRUNG TÂM (0)
    • 1. Trung tâm vi xử lý P 8085 (17)
    • 2. Các trung tâm vi xử lý họ 80x86 (24)
  • BÀI 3: BỘ NHỚ TRONG CỦA HỆ VI XỬ LÝ (32)
    • 2. Tổ chức bộ nhớ cho hệ vi xử lý (33)
  • BÀI 4: THIẾT BỊ VÀO RA CỦA HỆ VI XỬ LÝ (36)
    • 1. Bàn phím HEX (keyboard) (36)
    • 3. Màn hình (Monitor) (40)
  • BÀI 5: SƠ LƯỢC LỊCH SỬ, HƯỚNG PHÁT TRIỂN VI ĐIỀU KHIỂN (0)
    • 2. Vi điều khiển (microcontroller) (44)
  • BÀI 6: CẤU TRÚC CỦA HỌ VI ĐIỀU KHIỂN 8051 (48)
    • 1. Tổng quan (48)
    • 3. Cấu trúc Port I/O (51)
    • 4. Tổ chức bộ nhớ (53)
    • 5. Các thanh ghi chức năng đặc biệt (SFR) (55)
    • 6. Bộ nhớ ngoài (57)
    • 7. Hoạt động Reset (58)
  • BÀI 7: PHẦN MỀM HỢP NGỮ (0)
    • 1. Hoạt động của Assembler (0)
    • 2. Cấu trúc chương trình dữ liệu (62)
    • 3. Tính biểu thức trong khi hợp dịch (64)
    • 4. Các điều khiển của ASSEMBLER (0)
    • 5. Hoạt động liên kết (Linker) (67)
    • 6. Macro (68)
  • BÀI 8: TẬP LỆNH 8051 (70)
    • 2. Các nhóm lệnh (72)
  • BÀI 9: BỘ ĐỊNH THỜI (91)
    • 3. Nguồn cung cấp xung cho Timer (94)
    • 5. Khởi tạo và truy xuất thanh ghi Timer (7)
  • BÀI 10: CỔNG NỐI TIẾP (SERIAL PORT) (102)
    • 1. Thanh ghi điều khiển (102)
    • 2. Chế độ làm việc (0)
    • 3. Khởi tạo và truy xuất thanh ghi PORT nối tiếp (110)
    • 4. Truyền thông đa xử lý (Multiprocessor Communications) (111)
    • 5. Tốc độ baud (112)
  • BÀI 11: NGẮT (117)
    • 2. Xử lý ngắt (122)
    • 3. Thiết kế chương trình dùng ngắt (124)
    • 4. Ngắt cổng nối tiếp (125)
    • 5. Các cổng ngắt ngoài (126)
    • 6. Đồ thị thời gian của ngắt (0)
  • BÀI 12: LẬP TRÌNH MÔ PHỎNG CHƯƠNG TRÌNH ỨNG DỤNG (0)
    • 1. Lập trình giao tiếp với 8 LED đơn (0)
    • 2. Lập trình giao tiếp với LED 7 đoạn (8)
    • 3. Lập trình giao tiếp với ma trận phím bấm (8)
    • 4. Lập trình giao tiếp với LCD (0)
  • TÀI LIỆU THAM KHẢO (141)

Nội dung

TỔNG QUAN VỀ CÁC HỆ VI XỬ LÝ

Cấu trúc của hệ vi xử lý và máy vi tính

2 Bài 2: Các đơn vi vi xử lý trung tâm 2 0.5 1.5

1 Trung tâm vi xử lý mP 8085 0.25 0.25

2 Các trung tâm vi xử lý họ 80x86 1.75 0.25 1.5

3 Bài 3: Bộ nhớ trong của hệ vi xử lý 4 1 3

1 Bộ nhớ trong hệ vi xử lý 2 0.5 1.5

2 Tổ chức bộ nhớ cho hệ vi xử lý 2 0.5 1.5

4 Bài 4: Thiết bị vào ra của hệ vi xử lý 4 1 3

2 Ghép nối bàn phím với hệ vi xử lý 1.25 0.25 1

5 Bài 5: Sơ lược về lịch sử và hướng phát triển của vi điều khiển 1 1

3 Lĩnh vực và ứng dụng 0.25 0.25

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

5 Các thanh ghi chức năng đặc biệt 0.25 0.25

7 Bài 7: Phần mềm hợp ngữ 8 2 6

2 Cấu trúc chương trình dữ liệu 1 0.5 0.5

3 Tính biểu thức trong khi hợp dịch 1 0.5 0.5

4 Các điều khiển của ASSEMBLER 2 0.25 1.75

1 Các cách định địa chỉ 3.5 0.25 3.25

1.Thanh ghi SFR của timer 0.25 0.25

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

3 Nguồn cung cấp xung cho Timer 0.25 0.25

4 Khởi động, dừng, điều khiển Tim- er 2 0.25 1.75

5 Khởi tạo và truy xuất thanh ghi

Timer - Đọc thời gian đang hoạt động

3 Khởi tạo và truy suất thanh ghi

4 Truyền thông đa xử lý 2.75 0.25 2.5

3 Thiết kế chương trình dùng ngắt 1.25 0.25 1

6 Đồ thị thời gian của ngắt 2.75 0.25 2.5

12 Bài 12: Lập trình và mô phỏng một số chương trình ứng dụng 18 1.5 15.5 1

1 Lập trình giao tiếp với 8 LED đơn 3 0.25 2.75

2 Lập trình giao tiếp với 2 LED 7 đoạn 3 0.25 2.75

3 Lập trình giao tiếp với ma trận phím bấm 3 0.25 2.75

4 Lập trình giao tiếp với LCD 3 0.25 2.75

5 Lập trình giao tiếp với động cơ 2.5 0.25 2.25

6 Lập trình giao tiếp điều khiển van từ, xi lanh 2.5 0.25 2.25

BÀI 1: TỔNG QUAN VỀ CÁC HỆ VI XỬ LÝ

Mã bài: MĐ18-01 Giới thiệu

Kỹ thuật vi xử lý hiện đang được giảng dạy phổ biến tại các trường Đại học và Cao đẳng trên toàn quốc Tuy nhiên, lĩnh vực này vẫn chưa được khai thác triệt để trong các hệ thống điều khiển, đo lường và điều khiển trong dây chuyền công nghiệp.

- Trình bày được một số hệ đếm, và các mã thường dùng trong hệ vi xử lý

- Tính toán, chuyển đổi được các phép toán nhị phân

- Trình bày được cách biểu diễn thông tin trong các hệ vi xử lý

- Rèn luyện tính tư duy, tác phong trong công nghiệp

1 Biểu diễn thông tin trong các hệ vi xử lý:

1.1 Mã hóa các thông tin không số

1.1.1 Mã hóa chữ và dữ liệu kiểu văn bản Đơn vị cơ sở của dữ liệu văn bản là chữ Chữ ở đây được hiểu theo nghĩa rộng, không chỉ là các chữ cái Latinh mà kể cả chữ số, các dấu chính tả, các dấu toán học, các kí hiệu để trình bày Mặt khác không phải dân tộc nào cũng dùng chữ Latinh nên đối với một số dân tộc có thể có những chữ riêng Chúng ta dùng thuật ngữ ký tự

(character) với ý nghĩa là một ký hiệu dùng trong văn bản

Khi sử dụng một vùng nhớ k bit để mã hóa một ký tự, chỉ có thể biểu diễn tối đa 2^k ký tự do chỉ có 2^k mã nhị phân khác nhau Điều này lý giải vì sao người Mỹ chỉ cần 7 bit để mã hóa các chữ cái của họ; trong khi để bao gồm thêm các ký tự từ chữ cái Châu Âu, chữ Hy Lạp hay tiếng Nhật, cần sử dụng mã 16 bit.

Văn bản được hiểu là một chuỗi ký tự, với nội dung như sách hay thơ được đưa vào máy tính là ví dụ cụ thể về thông tin văn bản Hiện nay, hầu hết các máy tính và môi trường lập trình đều sử dụng một byte để mã hóa mỗi ký tự.

Nguyên tắc mã hóa giá trị logic thường sử dụng bit 0 để biểu thị giá trị sai và bit 1 cho giá trị đúng Tuy nhiên, trong thực tế, việc sử dụng từng bit hiếm khi xảy ra do cơ chế địa chỉ hóa thường ít nhất ở mức byte Do đó, một byte thường được dùng để mã hóa các giá trị logic.

Dữ liệu loại logic chỉ có hai trạng thái đối lập: đúng hoặc sai, có hoặc không Thông tin kiểu logic bị ảnh hưởng bởi các phép toán so sánh, cũng như các phép toán logic như "và", "hoặc" và phép phủ định "không".

Nguyên tắc mã hóa giá trị trong máy tính thường sử dụng bit 0 để biểu thị giá trị sai và bit 1 để biểu thị giá trị đúng Tuy nhiên, trong thực tế, việc sử dụng mức bit ít phổ biến hơn, vì cơ chế địa chỉ hóa thường hoạt động ở mức byte Do đó, một byte thường được sử dụng để mã hóa các giá trị logic trong các hệ thống máy tính.

1.2 Mã hóa các thông tin số:

Nếu dùng 1 byte (8 bit) để biểu diễn các số nguyên không dấu (số tự nhiên) thì ta có thể biểu diễn được 2n = 28 = 256 số từ 0 đến 255

Nếu dùng 1 byte để biểu diễn các số nguyên có dấu thì có thể biểu diễn được

Số nguyên có thể được biểu diễn trong khoảng từ -128 đến 127 nhờ vào việc sử dụng 1 bit để biểu diễn dấu, cụ thể là bit MSB Với công thức 2n = 28, ta có tổng cộng 256 số.

Trong biểu diễn số, bit MSB (Most Significant Bit) quyết định dấu của số: MSB = 1 cho số âm và MSB = 0 cho số dương Khi MSB = 0, số dương lớn nhất có thể đạt được là 0111 1111, tương đương với 127 Ngược lại, khi MSB = 1, số âm được biểu diễn chủ yếu bằng cách sử dụng kiểu số bù hai, với số âm nhỏ nhất là 1000.

1.3 Biểu diễn dữ liệu số trong máy tính:

Để tối ưu hóa hiệu quả trong xử lý, lưu trữ và truyền thông tin, việc tổ chức và biểu diễn thông tin trong máy tính điện tử là rất quan trọng Dữ liệu, với vai trò là hình thức biểu diễn thông tin, được máy tính mã hóa dưới dạng nhị phân.

Dữ liệu - thông tin được máy tính xử lý có thể có các dạng khác nhau

Hình 1.1 Phân loại các dạng dữ liệu cơ bản

Máy tính có khả năng thực hiện các phép toán trên số liệu, xử lý thông tin chữ viết và thông tin logic, cũng như quản lý các dữ liệu đa phương tiện như âm thanh và hình ảnh Bên cạnh đó, máy tính còn có thể xử lý tri thức một cách hiệu quả.

Thông tin về một đối tượng có thể rất đa dạng, bao gồm tên, nơi sinh, ngày sinh, lương và ảnh chân dung Để lưu trữ trên máy tính, tất cả dữ liệu này, dù là số hay phi số, đều được mã hóa bằng mã nhị phân Điều này có nghĩa là mọi loại dữ liệu, mặc dù khác nhau về bản chất, đều được số hóa.

1.4 Bản chất vật lý của thông tin trong các hệ vi xử lý Đối với bộ nhớ trong, các thông tin sau khi mã hóa dưới dạng nhị phân được đưa vào bộ nhớ theo quy ước Mỗi ngăn của ô nhớ sẽ lưu giữ một trong hai trạng thái được quy ước là một trong hai bit 0 hoặc 1

Khi sử dụng chiều của từ thông để mã hóa, việc phân biệt các bit giống nhau liên tiếp trở nên khó khăn Thông thường, các bit được ghi theo kiểu điều tần, với các biến thể của từ trường thể hiện giá trị bit thay vì dựa vào chiều của từ thông.

Trên đĩa từ, vùng nhiễm chứa dữ liệu được ghi một cách phức tạp, bao gồm không chỉ thông tin dữ liệu mà còn cả địa chỉ và các thông tin đồng bộ, nhằm đảm bảo việc đọc thông tin diễn ra chính xác.

2 Cấu trúc của hệ vi xử lý và máy vi tính:

2.1 Lịch sử phát triển các trung tâm vi xử lý:

CÁC ĐƠN VỊ VI XỬ LÝ TRUNG TÂM

Trung tâm vi xử lý P 8085

Khỏc với cỏc loại àP xuất hiện trước đú như àP8008 hay àP8080, àP8085 cú những bước phát triển có tính đột phá như sau:

Cơ cấu ngắt đa mức được thiết lập thông qua khối điều khiển ngắt, giúp tạo ra vector ngắt và tránh xung đột do lệnh RET N trên BUS dữ liệu Tín hiệu nhận biết yêu cầu ngắt INTA được phát sinh từ khối điều khiển ngắt, không phải từ mạch phụ 8228 như ở vi xử lý P8080.

Các tín hiệu điều khiển ghi (WR) và đọc (RD) được tạo ra từ bộ định thời và chức năng điều khiển Các tín hiệu INTA, WR và RD được sinh ra ngay trong CPU, không cần đến mạch phụ trợ bên ngoài.

- àP8085 cú mạch tạo xung đồng hồ được tớch hợp ngay trong CPU

Khối chức năng điều khiển vào/ra nối tiếp tích hợp trên vi điều khiển àP8085 cho phép thực hiện các lệnh vào/ra dữ liệu nối tiếp mà không cần sự hỗ trợ của vi mạch chuyên dụng.

Thanh ghi đệm địa chỉ của àP8085 bao gồm hai nhóm: A5-A8 và AD7-AD0, hỗ trợ cả dữ liệu và địa chỉ Việc dồn kênh này không chỉ tối ưu hóa hiệu suất mà còn cho phép mở rộng thêm các chân chức năng, từ đó nâng cao sức mạnh của CPU.

- Đặc tính của vi xử lý 8085:

+ Dòng điện cực đại: Imax = 170 mA

+ Tần số xung clock chuẩn: 6,134 Mhz

+ Độ dài dữ liệu là 8 bit

+ Khả năng truy xuất ô nhớ trực tiếp là 64Kb

+ Vi xử lý có thể tính số nhị phân, thập phân

- Vi xử lý có 8 đường dữ liệu và 16 đường địa chỉ

- Các đường điều khiển: RD\, WR\, IO/M\, Clock Out, Reset Out và 4 ngắt

1.1 Cỏc nhúm tớn hiệu trong à8085:

Nhóm tín hiệu ra A8 – A15 bao gồm 8 bit cao của địa chỉ, được kết nối với bên ngoài qua mạch 3 trạng thái Các phần tử 3 trạng thái sẽ chuyển sang trạng thái high-z khi một trong các tín hiệu HOLD hoặc HALT được kích hoạt Đồng thời, nhóm tín hiệu AD0 – AD7 cũng thuộc về dồn kênh 3 trạng thái và hoạt động trong giai đoạn đầu của chu kỳ.

18 máy, T1 của M1, sẽ là byte thấp của 16 bộ địa chỉ

ALE (Address Enable) là tín hiệu ra qua mạch 3 trạng thái, được sử dụng để chốt byte thấp của tín hiệu địa chỉ (A0 - A7) Tín hiệu này được tạo ra trong giai đoạn đầu tiên của chu kỳ máy, T1 của M1, và cũng được dùng để chốt các tín hiệu trạng thái S0 và S1 khi cần thiết.

- S0 và S1 (Data BUS Status) Là các tín hiệu chỉ trạng thái của các chân thuộc

BUS dữ liệu trong mỗi chu kỳ máy Tổ hợp của hai tín hiệu này cũng cho biết trạng thái của CPU

S0 S1 Hoạt động của BUS dữ liệu

0 1 CPU đang thực hiện thao tác WRITE

1 0 CPU đang thực hiện thao tác READ

1 1 CPU đang thực hiện thao tác nhận lệnh Instruction fetch

Chân ra RD (Read) có ba trạng thái và thuộc nhóm tín hiệu điều khiển Tín hiệu này được coi là tích cực khi CPU thực hiện việc đọc dữ liệu từ bộ nhớ hoặc thiết bị ngoại vi Trong chế độ HALT hoặc DMA, chân ra này sẽ ở trạng thái high-z.

Chân ra WR (Write) có 3 trạng thái và thuộc nhóm tín hiệu điều khiển Tín hiệu này sẽ tích cực khi CPU thực hiện ghi dữ liệu vào bộ nhớ hoặc xuất dữ liệu ra thiết bị ngoại vi Tuy nhiên, trong các chế độ HALT hoặc DMA, chân ra này sẽ ở trạng thái high-z.

Ngõ ra IO/M cho biết trạng thái logic của CPU khi làm việc với thiết bị ngoại vi hoặc bộ nhớ Khi IO/M là "1", CPU đang truy cập thiết bị vào/ra; ngược lại, nếu là "0", CPU đang truy cập bộ nhớ Ngõ ra này kết hợp với hai tín hiệu RD và WR để tạo ra các tín hiệu I/OR, I/OW RD, MEMR và MEMW trong trường hợp sử dụng địa chỉ tách biệt cho thiết bị vào/ra Là một phần của nhóm tín hiệu điều khiển, IO/M cũng hoạt động như một ngõ ra 3 trạng thái.

- Interrupts àP8085 cú ngắt đa mức Cú 5 chõn ngắt tất cả: (INTR, RST5.5

RST6.5, RST7.5 và TRAP) Ngoài chân ngắt không che được là TRAP, các chân khác đều có thể che hoặc không che nhờ lập trình phần mềm

 INTR: Chân nhận yêu cầu ngắt từ bên ngoài, được đáp ứng theo nguyên tắc polling hoặc vectoring thông qua lệnh RST

Các yêu cầu ngắt RST bao gồm 3 ngõ vào với mức ưu tiên khác nhau: RST7.5, RST6.5 và RST5.5 Khi có yêu cầu ngắt từ các chân này, CPU sẽ tự động chuyển đến các vector ngắt tương ứng.

RST5.5 là ngắt có mức ưu tiên thấp nhất, hoạt động dựa trên mức điện áp tại chân yêu cầu ngắt với địa chỉ vector ngắt tại ô nhớ 2CH Trong khi đó, RST6.5 là ngắt có mức ưu tiên thấp thứ hai, cũng phản ứng theo mức điện áp trên chân yêu cầu ngắt, với địa chỉ vector ngắt nằm ở ô nhớ 34H.

RST7.5 có mức ưu tiên cao nhất, phản ứng theo sườn lên của xung yêu cầu ngắt Sườn lên này tác động lên một flip-flop, giúp mạch giữ lại yêu cầu ngắt cho đến khi được xóa nhờ tín hiệu nhận biết yêu cầu ngắt Acknowledge Địa chỉ của vector ngắt được lưu trữ tại ô nhớ 3CH.

- TRAP: Là chân nhận yêu cầu ngắt không che được (có mức ưu tiên cao nhất) Địa chỉ của vector ngắt này ở ô nhớ 24H

- INTA Tín hiệu ra nhận biết yêu cầu ngắt tại chân INTR Các yêu cầu ngắt

RST5.5, RST6.5, RST7.5 và TRAP không tác động đến INTA

- HOLD trạng thái logic "1" ở chân này là yêu cầu của thao tác DMA.Các ngõ ra RD, WR, IO/M và ALE sẽ được đưa về trạng thái high-z

- HLDA Tín hiệu nhận biết yêu cầu HOLD

- IN RESET Logic thấp "0" ở Ngõ vào của chân này yêu cầu tái khởi động hệ

Vi xử lý sẽ nạp lại giá trị của thanh đếm chương trình PC thành 0000H khi tín hiệu RESET IN tích cực được kích hoạt Đồng thời, các địa chỉ ngắt và tín hiệu HLDA cũng sẽ được thiết lập lại về giá trị mặc định.

- RESET OUT Ngõ ra nhận biết hệ Vi xử lý được tái khởi động Dùng tín hiệu này để tái khởi động toàn bộ hệ thống

Logic "1" ở ngõ vào này cho biết trạng thái sẵn sàng cung cấp hoặc nhận dữ liệu từ CPU của các thiết bị ngoại vi Cổng SID (Serial Input Data) là nơi tiếp nhận dữ liệu nối tiếp vào hệ vi xử lý Bit tại cổng này được đọc vào CPU thông qua lệnh RIM và sẽ được đưa vào bit cao nhất của thanh ghi Acc (MSB).

- SOD (Serial Output Data) Bit cao (MSB) của Acc được truyền ra ngoài chân này khi sử dựng lệnh SIM

- X1, X2 Chân nối thạch anh hoặc một mạch dao động để tạo xung nhịp cho

CPU sử dụng thạch anh với tần số dao động từ 0.5 đến 3MHz CLK là ngõ ra của xung nhịp, cung cấp tín hiệu xung cho các thành phần chức năng khác trong hệ vi xử lý.

Các trung tâm vi xử lý họ 80x86

2.1 Mô tả chân của P 8086 và các tín hiệu:

Vi xử lý àP8086 được sản xuất theo công nghệ HMOS, với vỏ CerDIP 40 chân, có khả năng xử lý dữ liệu 8 hoặc 16 bit Nó hoàn toàn tương thích với tập lệnh của IAPX 86/10 và phần cứng tương thích với các mạch ngoại vi của trung tâm 8080/8085 của Intel àP8086 có thể hoạt động ở hai chế độ khác nhau.

+ Chế độ MIN: CPU tự tạo ra các tín hiệu điều khiển hoạt động của BUS (các chân từ 24 đến 34)

Hình 2.5 Sơ đồ chân trung tâm Vi xử lý 8086

Chế độ MAX yêu cầu CPU chỉ phát ra tín hiệu trạng thái, kèm theo đó là một chip điều khiển BUS (BUS controller 8288) để chuyển đổi các tín hiệu này thành tín hiệu điều khiển BUS tương thích với cấu trúc MULTIBUSTM, từ đó đảm bảo quá trình đọc dữ liệu diễn ra ổn định hơn.

AD15 – AD0: BUS dồn kênh dữ liệu và địa chỉ 16 bit

A19 - A16/S6 - S3: 4 bits địa chỉ cao hoặc 4 tín hiệu trạng thái hoạt động hiện tại của CPU

S4 S3 Thanh ghi được truy xuất

S5 chỉ trạng thái cờ ngắt

+ BHE/S7: Tín hiệu này kết hợp với chân địa chỉ A0 cho chỉ thị các trạng thái sau:

0 0 Một từ đã được truyền qua D5 – D0

0 1 Một Byte trên D15 - D8 được truy xuất tới một địa chỉ Byte lẻ

1 0 Một Byte trên D7 – D0 được truy xuất tới một địa chỉ Byte chẵn

RD : Nếu bằng "l" đang đọc bộ nhớ (hoặc thiết bị vào/ra) Nếu bằng "0" đang ghi ra bộ nhớ (hoặc thiết bị vào/ra)

Khi bộ nhớ hoặc thiết bị vào/ra hoàn tất việc chuyển dữ liệu, chúng cần phát tín hiệu READY ở mức "1" tới chân CPU Chỉ khi nhận được tín hiệu này, CPU mới tiến hành đọc dữ liệu vào hoặc xuất dữ liệu ra.

CPU kiểm tra trạng thái chân ngắt sau mỗi lệnh để xác định có yêu cầu ngắt từ phần cứng hay không Nếu trạng thái ở mức "1", CPU sẽ chuyển sang phục vụ ngắt Thao tác kiểm tra này có thể được thực hiện nhờ vào việc sử dụng mặt nạ che ngắt.

Lối vào TEST của CPU được kiểm tra liên tục trong lệnh WAIT Khi giá trị TEST bằng "0", CPU tiếp tục thực hiện chương trình Ngược lại, nếu TEST bằng "1", CPU sẽ chạy các chu trình giả cho đến khi giá trị TEST chuyển về "0".

NMI: Chân ngắt theo sườn lên của xung, không che được

RESET là tín hiệu để tái khởi động hệ thống Khi có sự thay đổi từ "0" lên "1" và duy trì ít nhất trong 4 nhịp đồng hồ, hệ thống sẽ tự động khởi động lại.

CLK: Lối vào của xung nhịp đồng hồ

MN/MX: Khi được nối với Vcc, àP8086 hoạt động ở chế độ MIN, nếu nối với GND, hoạt động ở chế độ MAX

Trong chế độ MAX, chip điều khiển BUS sử dụng ba tín hiệu trạng thái S2, S1 và S0 để phát ra các tín hiệu điều khiển cho việc truy xuất bộ nhớ và thiết bị vào ra Tổ hợp các tín hiệu này đóng vai trò quan trọng trong quá trình điều khiển và quản lý dữ liệu.

0 0 0 yêu cầu ngắt cứng qua chân 1NTR được chấp nhận

0 0 1 đọc thiết bị vào/ra

0 1 0 Ghi thiết bị vào/ra

1 0 0 nạp mã chương trình vào hàng nhận lệnh

RQ / GT0 và RQ / GT1 là tín hiệu quan trọng cho việc chuyển mạch BUS cục bộ giữa các đơn vị làm chủ BUS BUS cục bộ chỉ kết nối giữa các đơn vị xử lý, không bao gồm các thiết bị ngoại vi Đơn vị làm chủ BUS có thể là chip àP8086 hoặc một chip điều khiển khác, chẳng hạn như DMAC, đang nắm quyền điều khiển BUS cục bộ.

LOCK: nếu bằng "0" đơn vị làm chủ BUS không nhượng quyền làm chủ BUS cục bộ

QS1, QS0 chỉ thị trạng thái của hàng nhận lệnh trước PQ

0 1 byte 1 của mã toán trong PQ được xử lý

1 0 hàng đợi lệnh được xóa

1 1 byte 2 của mã toán trong PQ được xử lý

2.2 Cấu trúc trung tâm Vi xử lý họ 80x86:

Các vi xử lý 80x86 được phát triển dựa trên công nghệ VLSI, với các thành phần chính là transistor trường MOS tiêu thụ năng lượng rất thấp Sơ đồ khối chức năng của vi xử lý 8086 bao gồm hai phần chính: đơn vị ghép nối BUS (BIU) và đơn vị thực hiện lệnh (EU) Tất cả các thanh ghi và đường truyền dữ liệu trong EU có độ dài 16 bits, trong khi BIU đảm nhiệm các nhiệm vụ liên quan đến BUS cho EU, bao gồm thiết lập kết nối với BUS dữ liệu, BUS địa chỉ và BUS điều khiển.

Dữ liệu giữa CPU và bộ nhớ được trao đổi khi EU yêu cầu, nhưng không được truyền trực tiếp tới EU mà thông qua một vùng nhớ RAM nhỏ (6 bytes) gọi là hàng nhận lệnh trước (Instruction Stream Byte Queue - Prefetch Queue), trước khi được gửi đến hệ thống điều khiển EU (Execution Unit Control System).

- Khi EU đang thực hiện một lệnh thì BIU đã tìm và lấy lệnh sau đặt sẵn vào

PQ Đây là cơ chế đường ống (pipeline), một kỹ thuật tăng tốc độ cho CPU

Kỹ thuật đường ống sử dụng vùng nhớ RAM tốc độ cao để tăng cường hiệu suất của bộ vi xử lý, cho phép truy xuất lệnh từ bộ nhớ chương trình thay vì phụ thuộc vào kết nối trực tiếp giữa CPU và bộ nhớ Đặc biệt, bộ xử lý Pentium được trang bị hai đường ống: một dành cho lệnh và một dành cho dữ liệu.

Bảng 2.1:Thông số kỹ thuật cơ bản của các trung tâm Vi xử lý họ 80

Loại àp Độ dài thanh ghi Độ rộng BUS địa chỉ Độ rộng BUS dữ liệu

8088 16 bits 20 bits 8 bits 1 MByte 10 MHZ

8086 16 bits 20 bits 16 bits 1 MByte 10 MHZ

80188 16 bits 20 bits 8 bits 1 MByte 10 MHZ

80186 16 bits 20 bits 16 bits 1 MByte 10 MHZ

80286 16 bits 24 bits 16 bits 16Mbytes 16 MHZ

Bài viết này so sánh các vi xử lý, bắt đầu với 80386SX, có độ rộng 32 bit, 24 bit, và 16 bit, với khả năng hỗ trợ 16MB bộ nhớ và tốc độ 20MHz Tiếp theo là 80386DX, cũng có độ rộng 32 bit, nhưng hỗ trợ 4GB bộ nhớ và hoạt động ở tốc độ 40MHz Vi xử lý i486 có độ rộng 32 bit, hỗ trợ 4GB bộ nhớ và tốc độ 66MHz, trong khi phiên bản i486SX có cùng thông số nhưng chỉ chạy ở tốc độ 25MHz Cuối cùng, phiên bản đầu tiên của Pentium có độ rộng 32 bit, hỗ trợ 64 bit và 4GB bộ nhớ, với tốc độ 66MHz.

Hỡnh 2.6 Cấu trỳc cỏc khối chức năng àP8086

2.3 Hệ thống thanh ghi trong cỏc àP80x86:

Các thanh ghi trong các trung tâm vi xử lý có thể được xem như một bộ nhớ nhanh bên trong CPU, dùng để lưu trữ dữ liệu và kết quả tạm thời của quá trình tính toán Đặc biệt, các thanh ghi trong họ P80x86 có độ dài khác nhau, với 16 bits cho các trung tâm 8088/86 và 80188/86.

80286, 32 bits với các trung tâm 80386/486 trở đi và được mô tả trên hình 2.6

- EU của àP8086 cú 8 thanh ghi đa năng với tờn gọi là AH, AL, BH, BL, CH,

Các thanh ghi CL, DH, và DL có khả năng lưu trữ dữ liệu nhị phân 8 bits một cách riêng lẻ Ngoài ra, chúng cũng có thể được kết hợp thành từng cặp thanh ghi, tạo thành các nhóm để xử lý dữ liệu hiệu quả hơn.

AX (AH-AL), BX (BH-BL), CX (CH-CL), và DX (DH-DL) để lưu giữ các dữ liệu nhị phân 16 bits

2.4 Các chế độ làm việc MIN/MAX:

Vi xử lý àP8086 có hai chế độ làm việc chính: chế độ MIN và chế độ MAX Chân số 33 của àP8086 được xem như chân bẫy (trap pin) để xác định chế độ hoạt động Do yêu cầu mạch phụ trợ cho hai chế độ này không thể được thỏa mãn chỉ với hệ thống 40 chân của CPU, một số chân sẽ đảm nhiệm các chức năng khác, tùy thuộc vào cách nối chân MN/MX Khi nối với GND (mức điện áp 0V), àP8086 chuyển đổi các chân từ 24 đến 31 sang chế độ MAX Mạch phụ điều khiển BUS 8288 sẽ giải mã các tín hiệu trạng thái S0, S1, S2 để tạo ra các tín hiệu định thời và điều khiển tương thích với cấu trúc MULTIBUSTM trong hệ thống máy tính Ngược lại, khi nối với mức điện áp nguồn (+5V), àP8086 tự tạo ra các tín hiệu điều khiển BUS trên các chân từ 24 đến 31.

2.5 Phương thức quản lý bộ nhớ, các mode địa chỉ:

2.5.1 Phương thức quản lý bộ nhớ:

BỘ NHỚ TRONG CỦA HỆ VI XỬ LÝ

Tổ chức bộ nhớ cho hệ vi xử lý

2.1 Tổ chức bộ nhớ vật lý:

Tổ chức bộ nhớ trong hệ vi xử lý không chỉ phụ thuộc vào loại vi xử lý mà còn vào cách bố trí hợp lý trong hệ thống Đầu tiên, cần hiểu rõ về chip nhớ và từ nhớ để phân tích tổ chức vật lý của bộ nhớ Sau đó, chúng ta sẽ mở rộng khái niệm tổ chức bộ nhớ từ góc độ của lập trình viên, tức là tổ chức logic.

Chip nhớ được sản xuất với nhiều kích cỡ khác nhau tùy thuộc vào công nghệ chế tạo Đây là một vi mạch cụ thể, trong đó các chân của chip nhớ thường bao gồm các lối vào của BUS địa chỉ, lối dữ liệu và các chân điều khiển chọn chip từ A0 đến A9.

WE Điều khiển Ghi/đọc

GND Chân nối đất và các chân nguồn

Số lượng chân địa chỉ và chân dữ liệu của chip nhớ thay đổi tùy thuộc vào độ dài và dung lượng của nó Độ dài từ nhớ có thể là 1 bit, 4 bits hoặc 8 bits, trong khi số chân địa chỉ thường bắt đầu từ 10 trở lên Đối với chip có độ dài từ nhớ 1 bit, cần ghép song song 8 chip để tạo thành 1 byte và 16 chip để tạo thành một từ (word - 2 bytes).

2.2 Thiết kế vỉ nhớ cho hệ vi xử lý:

Thiết kế vỉ nhớ đóng vai trò quan trọng trong việc xây dựng hệ Vi xử lý, với các loại vỉ nhớ phổ biến như EPROM và RAM Việc lựa chọn chip nhớ thường dựa trên các sản phẩm thông dụng trên thị trường, đảm bảo các thông số kỹ thuật đáp ứng yêu cầu cần thiết.

+ Dung lượng nhớ của chip nhớ tính theo đơn vị Kbyte

+ Độ dài từ nhớ của chip nhớ tính theo số bits

- Một số thông số kỹ thuật khác nhu thời gian truy xuất, công suất tiêu tán của

34 chip v v Những thông số này không có ảnh hưởng lớn đến quá trình thiết kế và xây dựng vỉ nhớ

- Các thông số được cho trước trong việc thiết kế một vỉ nhớ bao gồm:

Chip nhớ như EPROM 2764 (8kx8) hoặc RAM TMS 2064 (8kx8) là những loại phổ biến trong thiết kế vi mạch Dung lượng của vi nhớ cần phải đáp ứng yêu cầu cụ thể, thường là 64KB hoặc 128KB Địa chỉ đầu của vùng nhớ, chẳng hạn như A0000H, cũng là yếu tố quan trọng cần được xác định trong quá trình thiết kế.

Ví dụ minh họa: Dùng EPROM 2764 (8kx8bit) xây dựng vỉ nhớ có dung lượng 32KB, địa chỉ đầu là 22000H

Giải: Dựa trên yêu cầu của đề ra, phải thực hiện các bước sau:

1 Xác định số chip nhớ cần thiết để tạo từ nhớ cơ bản (độ dài 8 bits), có thể tính theo công thức: n 8

Trong đó: n là số chip cần để tạo được từ nhớ cơ bản k là độ dài từ nhớ của chip nhớ

Các chip này được kết nối với nhau thông qua tín hiệu chọn vỏ CS, tạo thành một chip liên thông Dữ liệu sẽ được định vị theo thứ tự từ D7 đến D0, tương ứng với các bit trong BUS dữ liệu.

2 Xác định số chip nhớ, hoặc số chip liên thông để tạo được dung lượng nhớ theo yêu cầu Trong trường hợp cụ thể của đề ra, cần 4 chip để tạo được dung lượng nhớ 32KB Tính theo công thức:

Trong đó: Q là dung lượng của vỉ nhớ

D là dung lượng của chip nhớ hoặc dung lượng của chip liên thông

M là số chip nhớ hoặc số chip liên thông cần thiết

3 Xác định số dây địa chỉ cơ sở (tức là số dây địa chỉ thấp được nối trực tiếp vào chip nhớ hoặc chip liên thông): Số dây địa chỉ m phụ thuộc vào dung lượng nhớ của chip nhớ hoặc chip liên thông theo biểu thức sau:

2 m = D trong đó: D là dung lượng của chip nhớ m là số dây địa chỉ cơ sở

4 Từ số chip hoặc số chip liên thông, xác định số dây địa chỉ cần thiết để tạo các dây chọn chip riêng biệt Tính theo công thức:

Để giải mã và xác định các tín hiệu chọn chip cho chip nhớ hoặc chip liên thông, số dây địa chỉ i cần thiết được tính bằng công thức 2^i = M, trong đó M là số lượng chip hoặc số lượng chip liên thông Việc xây dựng mạch tổ hợp nhằm tạo ra các tín hiệu chọn chip CSi là rất quan trọng trong quá trình này.

5 Các dây địa chỉ còn lại được sử dụng để tạo tín hiệu xác định vùng nhớ của vỉ nhớ trong không gian nhớ (được gán cho vỉ nhớ theo địa chỉ đầu của vỉ nhớ theo yêu cầu)

Bài 1 Phần tử nhớ là gì? Cho ví dụ minh họa

Bài 2 Thế nào là bộ nhớ ROM, RAM?

Bài 3 Vẽ cấu trúc của Chíp DRAM và nêu chức năng của các tín hiệu điều khiển

 YÊU CẦU ĐÁNH GIÁ KẾT QUẢ HỌC TẬP BÀI 3 :

+ Về kiến thức: trình bày tổ chức bộ nhớ

+ Về kỹ năng: xác định được dung lượng nhớ của Vi xử lý

+ Năng lực tự chủ và trách nhiệm: Rèn luyện tính tỷ mỉ, chính xác, an toàn và vệ sinh công nghiệp

+ Về kiến thức: Được đánh giá bằng phương pháp viết, trắc nghiệm

+ Về kỹ năng: Được đánh giá bằng phương pháp thực hành

+ Năng lực tự chủ và trách nhiệm: Rèn luyện tính tỷ mỉ, chính xác, an toàn và vệ sinh công nghiệp

THIẾT BỊ VÀO RA CỦA HỆ VI XỬ LÝ

Bàn phím HEX (keyboard)

Hình 4.1 Sơ đồ nguyên lý và các ghép nối của bàn phím

Bàn phím được cấu trúc theo kiểu ma trận với các hàng và cột, trong đó các công tắc thường mở tại vị trí giao nhau chỉ tiếp xúc khi được nhấn Để xác định phím nào bị nhấn, ta nối đất tất cả các hàng và kiểm tra giá trị ở các cột; nếu giá trị đọc được là "0" trên cột nào đó, điều đó có nghĩa là có một phím bị nhấn trên cột đó.

Bàn phím Hexa trong Hình 4.2 bao gồm 22 phím, được thiết kế từ một ma trận 3 hàng và 8 cột Để xây dựng bàn phím này, ta sử dụng vi mạch vào ra song song PPI-8255 Ba ngõ ra của port B, cụ thể là R0, R1, R2 (tương ứng với các dây PB0, PB1 và PB2), hoạt động ở chế độ Output, trong khi 8 lối vào của port A (D0 ÷ D7, tương ứng với PA ÷ PA7) hoạt động ở chế độ Input Chu trình đọc phím được thực hiện thông qua chế độ dò tìm (polling).

1 Để đảm bảo phím nhấn trước đó đã được nhả ra, các giá trị "0" cùng lúc được

37 áp lên tất cả các hàng và đọc các giá trị trên các cột Nếu các cột đều ở mức "l", chương trình tiếp tục đọc giá trị các cột

2 Quét các cột, tức là đọc giá trị tại các cột để phát hiện có phím bị nhấn Để tăng độ tin cậy khi đọc phím, tránh tác động của nhiễu cơ học khi phím bị nhấn và các loại nhiễu khác, sau khi phát hiện có phím bị nhấn, chương trình chờ khoảng 20msec rồi đọc tiếp giá trị tại các cột Giá trị "0" đọc được ở cột nào sẽ được ghi nhớ để sử dụng cho việc xác định phím ở vị trí nào bị nhấn

3 Quét hàng để xác định vị trí của phím bị nhấn Số vòng lặp này là không cố định, nhưng nhiều nhất là bằng số hàng có trong cấu trúc của bàn phím

4 Gán mã cho phím Mã cho phím là do thiết kế phần cứng quy định, tuỳ theo chức năng và yêu cầu của người dùng

Hình 4.2 Bàn phím 22 phím sử dụng giao tiếp qua PPI8255

Trong ví dụ này giả sử rằng các phím được gán mã như sau:

- Từ phím 00 đến phím 0F (toàn bộ các phím trong Row 1 và Row 2) được gán mã xa từ "0H" trên "FH"

- Các phím ở Row 0 có thể gán các chức năng sau:

 Phím 10 là phím chức năng "GO" - thực hiện chương trình

 Phím 11 là phím chức năng "INS" - thực hiện chức năng thay đổi nội dung các thanh ghi của CPU

 Phím 12 là phím "REP" - thực hiện chức năng sửa nội dung thanh ghi của CPU

 Phím 13 là phím "DISP" - thực hiện chức năng hiển thị nội dung các thanh ghi của CPU

 Phím 14 là phím "STEP" - thực hiện chức năng chạy chương trình theo từng lệnh

 Phím 14 là phím "ENTER" - thực hiện chức năng kết thúc nhập dữ liệu hoặc lệnh từ bàn phím

Các lệnh cho bàn phím:

EDh Bật/tắt LED Bật/tắt các đèn led của bàn phím

EEh Echo Trả về byte EEh

F0h Đặt/nhận dạng mã quét Đặt 1 trong 3 tập mã quét và nhận diện các mã quét tập mã quét hiện tại

F2h Nhận diện bàn phím Nhận diện ACK = AT,

F3h Đặt tốc độ lặp lại/trễ Đặt tốc độ lặp lại và thời gian trễ của bàn phím F4h Enable Cho phép bàn phím hoạt động

F5h Chuẩn/không cho phép Đặt giá trị chuẩn và cấm bàn phím

F6h Chuẩn/cho phép Đặt giá trị chuẩn và cho phép bàn phím

FEh Resend Bàn phím truyền ký tự cuối cùng một lần nữa tới bộ điều khiển bàn phím

FFh Reset Chạy reset bên trong bàn phím

2.Ghép nối bàn phím với hệ vi xử lý

Bàn phím là thiết bị ngoại vi quan trọng giúp nhập thông tin vào máy tính dưới dạng mã ký tự Chức năng chính của bàn phím là chuyển đổi lực nhấn và vị trí phím thành mã phím, sau đó gửi đến máy tính Bàn phím bao gồm hai bộ phận chính: ma trận phím, là tổ hợp các phím được sắp xếp theo hàng và cột, và mạch điện tử quét phím.

Phím luôn ở trạng thái nhả, với hai tiếp điểm không nối nhau, tạo ra mức điện áp dương tương ứng với logic "1" Khi phím được nhấn, hai tiếp điểm kết nối qua công tắc, dẫn đến ngõ ra có mức điện áp 0V, tương ứng với logic "0".

- Đề mỗi lần nhấn phím có một mã phím tương ứng được tạo ra, cần sắp xếp hệ thống phím dưới dạng ma trận phím

Ma trận phím là cấu trúc bao gồm các dây hàng và dây cột giao nhau mà không tiếp xúc trực tiếp Công tắc phím được bố trí tại các điểm giao nhau của hàng và cột, với hai tiếp điểm nằm trên hàng và cột tại vị trí giao Khi phím được nhấn, hai dây hàng và cột sẽ kết nối thông qua hai tiếp điểm của công tắc tại điểm giao đó.

2.1 Hệ thống bàn phím của máy vi tính

Hệ thống bàn phím của máy vi tính bao gồm hai phần chính: bàn phím và thiết bị giao diện bàn phím Hai phần này được kết nối và trao đổi thông tin theo kiểu "chủ".

Hình 4.3 Sơ đồ ghép nối bàn phím (keyboard) với hệ thống máy tính

Bàn phớm là tổ hợp của ma trận 8x13 phớm và mạch vi điều khiển àP8048, một hệ vi xử lý nhỏ tích hợp trên một chip Mạch 8048 bao gồm CPU, bộ nhớ ROM chứa chương trình điều khiển quét và tạo mã phím, RAM lưu trữ dữ liệu của chương trình điều khiển, cùng với hai cổng vào/ra P1 và P2, và một cổng dữ liệu.

Mạch 8048 tuần tự phát ra mã nhị phân 3 bit tại cổng P2, qua bộ giải mã 3/8 để tạo tín hiệu quét bàn phím Khi mã 3 bit được xuất ra, mạch 8048 đọc tín hiệu 13 bit từ ma trận và đưa vào cổng P1, từ đó tạo ra mã phím (mã quét) cho phím được nhấn Khi phím được nhả, mã phím (mã quét) cũng được tạo ra bằng cách cộng mã phím nhấn với giá trị 80H.

Mạch àP8048, được cấp nguồn từ máy tính, thực hiện trao đổi thông tin với thiết bị giao diện bàn phím KC 8042 theo kiểu nối tiếp đồng bộ KC 8042 có cấu trúc tương tự như mạch àP8048, với KC 8042 đóng vai trò "chủ" và 8048 đóng vai trò "thợ" trong quá trình truyền tin qua hai dây tín hiệu: dây "DATA" và dây "CLOCK".

Dữ liệu truyền tín hiệu giữa àP8048 và KC 8042 sử dụng giao thức nối tiếp, bao gồm các thành phần: bit START, 8 bộ dữ liệu, 1 bit PARITY và 1 bit STOP Quá trình trao đổi thông tin giữa hai thiết bị này được đồng bộ hóa thông qua tín hiệu trên dây.

2.2 Quá trình truyền dữ liệu từ bàn phím cho CPU

- Mạch àP8048 luụn phải kiểm tra trạng thỏi truyền tin qua hai dõy “DATA” và

"CLOCK" trước khi phát đi mã phím Khi KC 8042 đặt "DATA" = 0 và "CLOCK" = l thì 8048 phải nhận các chỉ lệnh từ KC 8042 Khi KC 8042 đặt "DATA" = 1 và

Vi mạch àP8048 có khả năng truyền mã phỏng cho máy tính thông qua tín hiệu đồng bộ Quá trình truyền dữ liệu được thực hiện nhờ vào dãy xung đồng bộ mà àP8048 phát ra trên tín hiệu "CLOCK".

Khi KC 8042 nhận mã phím nối tiếp, nó sẽ loại bỏ các bit dữ liệu truyền và chuyển mã phím vào thanh ghi tạm, đồng thời phát ra yêu cầu ngắt IRQ1 cho hệ thống ngắt cứng Hệ thống này sẽ kích hoạt chương trình phục vụ bàn phím 09H trong BIOS, có nhiệm vụ dịch mã phím thành mã hai byte và lưu trữ vào vùng đệm bàn phím.

Chương trình phục vụ bàn phím 09H tiến hành kiểm tra mã các phím trượt như Shift, Alt, Ctrl và các phím đặc biệt như Scrolllock, Numlock, Capslock, Insert trước khi chuyển đổi mã phím sang mã hai byte.

Màn hình (Monitor)

3.1 Màn hình ống tia âm cực CRT (Cathode Ray Tube):

Màn hình CRT là một ống thủy tinh chân không bao gồm các bộ phận chính như cathode phát xạ điện tử, ống phóng tia điện tử, cuộn lái tia và màn hiển thị Cathode được nối với điện áp âm, làm nóng và tạo ra các điện tử tự do, trong khi màn hiển thị được phủ một lớp chất liệu phát quang và dẫn điện, kết nối với điện áp dương, đóng vai trò là anode Dưới tác dụng của điện trường cao trong ống phóng, các điện tử rời khỏi cathode và được hội tụ thành chùm tia hướng về màn hình Cuộn lái tia giúp điều khiển chùm tia điện tử di chuyển theo hai chiều dọc và ngang Khi chùm tia điện tử va chạm với màn hiển thị, nó tạo ra một điểm sáng, cường độ của điểm sáng phụ thuộc vào cường độ chùm tia và chất liệu phát sáng Điểm sáng sẽ lưu lại một thời gian ngắn sau khi chùm tia mất đi hoặc chuyển hướng, thời gian lưu sáng này cũng phụ thuộc vào chất liệu phát sáng và cường độ chùm tia.

Màn hình CRT tạo ra hình ảnh từ các điểm ảnh, được hình thành khi cường độ chùm tia điện tử tăng lên Điểm ảnh không hiển thị khi chùm tia tắt Quá trình tạo điểm ảnh diễn ra theo từng dòng từ trên xuống dưới, và một hình ảnh hoàn chỉnh được tạo ra từ các dòng chứa điểm ảnh Các điểm ảnh chỉ tồn tại trong thời gian ngắn và cần được làm tươi theo chu kỳ xác định để có thể quan sát Việc làm tươi diễn ra theo từng dòng, bắt đầu từ dòng đầu tiên và tiếp tục tuần tự cho đến dòng cuối cùng, sau đó quay lại từ dòng đầu tiên.

3.2 Ghép nối màn hình với hệ Vi xử lý:

Các thiết bị hiển thị trên máy vi tính PC sử dụng bộ nhớ ánh xạ, cho phép cả đơn vị xử lý trung tâm và thiết bị điều khiển màn hình truy cập cùng một bộ nhớ gọi là bộ nhớ hiển thị Thông tin cần hiển thị được lưu trữ trong bộ nhớ này, và thiết bị điều khiển màn hình CRTC sẽ liên tục đọc dữ liệu từ bộ nhớ để hiển thị lên màn hình.

Mỗi ký tự trên màn hình được ánh xạ từ một ô nhớ hai byte trong bộ nhớ hiển thị, trong đó byte đầu chứa mã ASCII của ký tự và byte thứ hai chứa thuộc tính như màu nền, màu chữ và trạng thái nhấp nháy Vị trí của mã ký tự trong bộ nhớ xác định vị trí hiển thị của ký tự trên màn hình, với mã ký tự đầu tiên được ánh xạ thành ký tự đầu tiên và tiếp tục như vậy cho các ký tự tiếp theo.

Phương pháp ánh xạ bộ nhớ giúp chương trình máy tính dễ dàng thay đổi nội dung hiển thị bằng cách điều chỉnh nội dung trong bộ nhớ hiển thị.

Mỗi ký tự được hiên thị trên màn hình dưới dạng một ma trận 8x8 điểm ảnh sáng/tối.

Phương pháp hiển thị ánh xạ bộ nhớ không hoàn toàn hiệu quả cho các đối tượng có hình dạng bất thường và chuyển động nhanh Thời gian thực bị chậm do cần thao tác nhiều điểm ảnh để di chuyển các đối tượng này.

3.3 Bộ điều khiển màn hình CRTC:

Thiết bị giao diện màn hình, hay còn gọi là bộ điều khiển màn hình CRTC, có chức năng chuyển mã ký tự từ bộ nhớ hiển thị thành các ký tự hiển thị trên màn hình Trong chế độ văn bản, các mẫu ký tự được trình bày ở các vị trí hàng và cột cố định, với kích thước 25 hàng và 80 cột.

- Sơ đồ nguyên lý của thiết bị giao diện màn hình ở chế độ văn bản như hình 4.4

Hình 4.4 Sơ đồ khối điều khiển hiển thị CRTC

Mỗi ký tự trên màn hình được cấu thành từ nhiều hàng điểm ảnh, và CRTC có nhiệm vụ chuyển đổi mã ASCII trong bộ nhớ hiển thị thành chuỗi mẫu điểm ảnh, đặt mỗi mẫu lên một dòng màn hình Quá trình này được thực hiện thông qua bộ ROM tạo ký tự, chứa các hộp mẫu ký tự có kích thước 8 byte, cung cấp thông tin về ma trận điểm ảnh của từng ký tự.

Để hiển thị 256 ký tự ASCII, cần một ROM dung lượng 2kbyte, đủ để chứa 256 hộp mẫu ký tự, mỗi hộp chiếm 8 ô nhớ liên tiếp Các hộp mẫu ký tự trong ROM được định vị bằng địa chỉ 11 bit, trong đó 8 bit địa chỉ cao xác định vị trí của hộp trong ROM, còn 3 bit địa chỉ thấp xác định vị trí của từng byte mẫu điểm ảnh trong hộp đó Các mẫu ký tự được sắp xếp trong ROM theo thứ tự của bảng mã ASCII.

Nguyên lý hoạt động của thiết bị giao diện màn hình trong chế độ văn bản cho phép hiển thị các ký tự tại các vị trí xác định Ví dụ, để hiển thị hai ký tự A và B, chúng sẽ được đặt tại hàng 0, cột 0 và hàng 0, cột 1.

1 trên màn hình Mã ASCII của hai ký tự được đặt tại hai vị trí tương ứng trong bộ nhớ hiển thị

- CRTC gửi địa chỉ hàng và cột màn hình cho bộ nhớ hiển thị (hàng=0, cột=0)

Bộ nhớ hiển thị truyền mã ASCII của ký tự A đến ROM, trong đó mã ASCII chứa thông tin về địa chỉ của hộp mẫu ký tự trong ROM (8 bit địa chỉ cao) Đồng thời, CRTC cũng gửi địa chỉ của dòng mẫu điểm ảnh (dòng mẫu điểm 0) đến ROM.

Hai địa chỉ 3 bit kết hợp tạo thành địa chỉ 11 bit, cho phép truy cập vào dòng mẫu điểm ảnh đầu tiên của ký tự A trong ROM Dữ liệu từ ROM được xuất ra thanh ghi dịch ảnh, từ đó từng bit mẫu ảnh được đưa ra màn hình một cách tuần tự.

Khi tất cả các bit mẫu ảnh từ thanh ghi dịch được hiển thị, CRTC tiếp tục gửi địa chỉ hàng-cột cho bộ nhớ hiển thị và địa chỉ dòng mẫu điểm ảnh cho ROM Bộ nhớ hiển thị cung cấp mã ASCII của ký tự B cho ROM, và dòng mẫu điểm ảnh đầu tiên của ký tự B được xuất ra thanh ghi dịch ảnh Quá trình này lặp lại cho tất cả các ký tự trên cùng một hàng màn hình cho đến khi ký tự cuối cùng được hiển thị.

CRTC tiếp tục gửi địa chỉ hàng-cột (hàng=0, cột=0) đến bộ nhớ hiển thị, trong khi địa chỉ dòng mẫu điểm ảnh hiện tại là 1 cho ROM Bộ nhớ hiển thị cung cấp mã ASCII của ký tự A cho ROM, và ROM xuất ra dòng mẫu điểm ảnh 1 của ký tự A Tương tự, dòng 1 của ký tự B cũng được xuất ra Các dòng điểm ảnh tiếp theo của ký tự sẽ lần lượt được hiển thị trên màn hình cho đến khi tất cả các dòng điểm ảnh được trình bày.

42 ảnh của hàng văn bản đầu tiên (hàng 0) được hiển thị trên màn hình

Các hàng văn bản tiếp theo được hiển thị theo phương pháp tương tự, tuy nhiên, hoạt động của CRTC phức tạp hơn CRTC cần có khả năng hiển thị ở chế độ đồ họa, theo dõi thông tin về thuộc tính của ký tự, và tạo ra điểm nháy Ngoài ra, CRTC cũng phải phát sinh hai tín hiệu đồng bộ ảnh ngang và dọc, đồng thời làm tươi màn hình với tần số tối thiểu là 50 Hz.

YÊU CẦU ĐÁNH GIÁ KẾT QUẢ HỌC TẬP BÀI 4:

+ Về kiến thức: trình bày cấu tạo của bàn phím hex và màn hình

+ Về kỹ năng: Lập trình truyền dữ liệu từ bàn phím đến Vi xử lý

+ Năng lực tự chủ và trách nhiệm: Rèn luyện tính tỷ mỉ, chính xác, an toàn và vệ sinh công nghiệp

+ Về kiến thức: Được đánh giá bằng phương pháp viết, trắc nghiệm

+ Về kỹ năng: Được đánh giá bằng phương pháp thực hành

+ Năng lực tự chủ và trách nhiệm: Rèn luyện tính tỷ mỉ, chính xác, an toàn và vệ sinh công nghiệp

BÀI 5: SƠ LƯỢC VỀ LỊCH SỬ VÀ HƯỚNG PHÁT TRIỂN CỦA

Mã bài: MĐ18-05 Giới thiệu:

SƠ LƯỢC LỊCH SỬ, HƯỚNG PHÁT TRIỂN VI ĐIỀU KHIỂN

Vi điều khiển (microcontroller)

2.1.1 Cấu tạo vi điều khiển

Vi điều khiển là một máy tính mini tích hợp trên một chip, thường được sử dụng để điều khiển các thiết bị điện tử Nó bao gồm một vi xử lý với hiệu suất cao và giá thành thấp so với các vi xử lý đa năng trong máy tính, kết hợp với các thiết bị ngoại vi như bộ nhớ, mô đun vào/ra, mô đun chuyển đổi giữa tín hiệu số và tương tự, cũng như mô đun điều chế độ rộng xung (PWM).

Vi điều khiển là thành phần quan trọng trong việc xây dựng hệ thống nhúng, thường được sử dụng trong nhiều thiết bị điện tử như máy giặt, lò vi sóng, điện thoại và dây truyền tự động.

Hầu hết các loại vi điều khiển hiện nay sử dụng cấu trúc Harvard, trong đó bộ nhớ chương trình và bộ nhớ dữ liệu được phân tách riêng biệt.

Cấu trúc của vi điều khiển bao gồm các thành phần chính như CPU, bộ nhớ chương trình (thường là ROM hoặc Flash), bộ nhớ dữ liệu (RAM), các bộ định thời và cổng vào/ra để giao tiếp với thiết bị bên ngoài Tất cả các thành phần này được tích hợp trên một vi mạch duy nhất.

Các loại vi điều khiển trên thị trường hiện nay:

- VDK ATMEL: 89Cxx, AT89Cxx51

2.1.2 Nguyên lý hoạt động của Vi điều khiển

Mặc dù có nhiều họ vi điều khiển và chương trình điều khiển khác nhau, tất cả đều chia sẻ những điểm chung cơ bản Nếu nắm vững một họ vi điều khiển, việc tìm hiểu thêm về các họ khác sẽ trở nên dễ dàng hơn Một kịch bản chung cho hoạt động của vi điều khiển có thể được mô tả như sau:

Khi không có nguồn điện, vi điều khiển chỉ là một chip chứa chương trình đã được nạp sẵn và không thực hiện bất kỳ hoạt động nào.

Khi có nguồn điện, mọi hoạt động diễn ra nhanh chóng dưới sự điều khiển của đơn vị điều khiển logic, thiết bị này quản lý tất cả các hoạt động và chỉ mở khóa mạch giao động thạch anh Chỉ sau vài mili giây, mọi hệ thống đã sẵn sàng hoạt động hiệu quả.

Điện áp nguồn đạt giá trị tối đa và tần số giao động ổn định, cho phép các bit trong các thanh ghi SFR phản ánh trạng thái của tất cả các mạch trong vi điều khiển Toàn bộ hệ thống vi điều khiển hoạt động theo chu kỳ của chuỗi xung chính.

Thanh ghi bộ đếm chương trình (Program Counter) được đặt về 0, và lệnh từ địa chỉ này sẽ được chuyển đến bộ giải mã lệnh để thực thi ngay lập tức.

-Giá trị trong thanh ghi PC được tăng lên 1 và toàn bộ quá trình được lặp lại vài…triệu lần trong một giây

2.2.Các kiểu cấu trúc bộ nhớ

Memory (bộ nhớ): là ROM/RAM lưu trữ chương trình hay các kết quả trung gian

Bộ nhớ chỉ đọc (ROM) là loại bộ nhớ lưu trữ vĩnh viễn các chương trình thực thi, với kích thước chương trình phụ thuộc vào dung lượng của ROM ROM có thể được tích hợp trong vi điều khiển hoặc thêm vào dưới dạng chip bên ngoài, mỗi tùy chọn đều có những nhược điểm riêng Chip ROM bên ngoài giúp vi điều khiển tiết kiệm chi phí và cho phép chương trình tồn tại lâu hơn, nhưng giảm số lượng chân vào/ra cho các mục đích khác Trong khi đó, ROM nội bộ thường nhỏ hơn và đắt hơn, nhưng lại có thêm các chân kết nối với môi trường ngoại vi Dung lượng của ROM có thể dao động từ 512B trở lên.

Bộ nhớ truy cập ngẫu nhiên (RAM) là loại bộ nhớ dùng để lưu trữ tạm thời dữ liệu và kết quả trung gian trong quá trình hoạt động của bộ vi điều khiển Dữ liệu trong RAM sẽ bị xóa khi nguồn điện bị ngắt.

Bộ nhớ EEPROM (Electrically Erasable Programmable ROM) là một loại bộ nhớ đặc biệt, chỉ có ở một số vi điều khiển, cho phép thay đổi nội dung trong quá trình thực hiện chương trình giống như RAM, nhưng vẫn lưu giữ dữ liệu vĩnh viễn ngay cả khi mất điện, tương tự như ROM EEPROM thường được sử dụng để lưu trữ các giá trị quan trọng như hiệu chuẩn, mã và giá trị đếm, cần được bảo toàn sau khi nguồn cung cấp bị ngắt Tuy nhiên, một nhược điểm của bộ nhớ này là tốc độ ghi dữ liệu tương đối chậm.

Hình 5.1 Giao tiếp bộ nhớ

Bộ đếm chương trình (PC) là thành phần quan trọng trong CPU, chứa địa chỉ của ô nhớ mà từ đó câu lệnh tiếp theo sẽ được thực hiện Sau mỗi lệnh, giá trị của bộ đếm này sẽ tăng lên 1 Chức năng chính của CPU là thực hiện các phép toán và xử lý dữ liệu, đồng thời phát tín hiệu địa chỉ, dữ liệu và điều khiển để thực hiện các nhiệm vụ được lập trình thông qua các lệnh.

CPU (Đơn vị xử lý trung tâm) là thành phần chính trong máy tính, có chức năng thực hiện các phép toán và xử lý dữ liệu Nó gửi tín hiệu địa chỉ, dữ liệu và điều khiển để hoàn thành các nhiệm vụ được lập trình sẵn thông qua các lệnh.

Bộ giải mã lệnh có chức năng nhận dạng và điều khiển các mạch khác dựa trên các lệnh đã được giải mã Quá trình giải mã này dựa vào tập lệnh (instruction set), và mỗi họ vi điều khiển thường sở hữu các tập lệnh riêng biệt.

CẤU TRÚC CỦA HỌ VI ĐIỀU KHIỂN 8051

Tổng quan

Hình 6.1 Sơ đồ khối vi điều khiển 8051

Thuật ngữ “8051” chỉ các chip thuộc họ MSC-51, với chip 8051 là sản phẩm đầu tiên do Intel phát triển Họ MCS-51 bao gồm nhiều phiên bản khác nhau, mỗi phiên bản bổ sung thêm các thanh ghi điều khiển hoạt động Nhiều nhà sản xuất IC như Seimens, AMD, Fujitsu, Philips, và Atmel được cấp phép sản xuất chip MSC-51 Tại Việt Nam, các chip và biến thể của Atmel và Philips như AT89C2051, AT89C4051, AT89C51, AT8C52, AT89S52, AT89S8252, AT89S8253, P89C51RDxx, và P89V51RDxx được sử dụng phổ biến.

Vi điều khiển 8051 có 40 chân, mỗi chân có một kí hiệu tên và có các đặc trưng như

- 4KBROM, 128byteRAM 4port xuất nhập (I/Oport) 8bit

- 2 bộ định thời 16bit, mạch giao tiếp nối tiếp

- Không gian nhớ chương trình ngoài 64K, không gian nhớ dữ liệu ngoài 64K

- Bộ xử lý bit 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1bit nhân/chia trong 4às

Tính năng và phạm vi ứng dụng của mỗi bộ VĐK phụ thuộc vào từng họ VĐK của các hãng sản xuất khác nhau.

2 Sơ đồ chân vi điều khiển 8051

Mặc dù họ MSC-51 có nhiều kiểu đóng vỏ khác nhau như DIP, vỏ dẹp vuông và chip không chân đỡ LLC, nhưng bài viết chỉ khảo sát Vi điều khiển 40 chân dạng DIP Họ MSC-51 với 40 chân thực hiện các chức năng quan trọng như vào ra (I/O), đọc, ghi, địa chỉ, dữ liệu và ngắt.

Hình 6.2 Sơ đồ chân của họ 8051

Chip 8051 có 40 chân, mỗi chân có một kí hiệu tên và có các chức năng như sau:

- Chân 40: nối với nguồn nuôi +5V

- Chân 20: nối với đất (Mass, GND)

Chân 29 (PSEN) của vi điều khiển 8051 là tín hiệu điều khiển cho phép chọn bộ nhớ ngoài, kết nối với chân OE của EPROM để đọc byte chương trình Tín hiệu PSEN hạ thấp trong quá trình thực thi lệnh, cho phép mã nhị phân từ EPROM được đọc qua bus dữ liệu và lưu vào thanh ghi lệnh của 8051 Lưu ý rằng việc đọc ở đây chỉ liên quan đến các lệnh, không phải dữ liệu, khi đó vi xử lý chỉ đọc các bit opcode của lệnh và đưa chúng vào hàng đợi lệnh qua bus địa chỉ và dữ liệu.

- Chân 30 (ALE: Adress Latch Enable) là tín hiệu điều khiển xuất ra của 8051, nó

50 cho phép phân kênh bus địa chỉ và bus dữ liệu của Port 0

- Chân 31 (EA: Eternal Acess) được đưa xuống thấp cho phép chọn bộ nhớ mã ngoài Đối với 8051 thì:

- 32 chân còn lại chia làm 4 cổng vào/ra: có thể dùng chân đó để để đọc mức logic ( 0;1 tương ứng với 0V; 5V) vào hay xuất mức logic ra (0;1),

 Port 0 từ chân 39 -32 tương ứng là các chân P0.0 đến P0.7

 Port 1 từ chân 1- 8 tương ứng là các chân P1.0 đến P1.7

 Port 2 từ chân 21- 28 tương ứng là các chân P2.0 đến P2.7

 Port 1 từ chân 10- 17 tương ứng là các chân P3.0 đến P3.7

Chân cho phép bộ nhớ chương trình PSEN

Chân cho phép bộ nhớ chương trình (PSEN) là tín hiệu xuất trên chân 29, cho phép truy xuất bộ nhớ chương trình ngoài Chân này thường được kết nối với chân cho phép xuất (OE) của EPROM hoặc ROM để đọc các byte lệnh Tín hiệu PSEN ở mức logic 0 trong suốt thời gian tìm nạp lệnh, trong khi mã nhị phân của chương trình hay Op code được đọc từ EPROM qua bus dữ liệu và được lưu vào thanh ghi lệnh IR của 8051 để giải mã Khi thực thi chương trình trong ROM nội, chân PSEN duy trì mức logic không tích cực (logic 1).

Hình 6.3.Ghép nối vi điều khiển 8951 với IC chốt, mạch Reset, tụ thạch anh

2.2.Chân cho phép chốt địa chỉALE

Ngõ xuất tín hiệu ALE (address latch enable) cho phép chốt địa chỉ, đóng vai trò quan trọng trong việc giải đa hợp (demultiplexing) bus dữ liệu và bus địa chỉ Khi port 0 được sử dụng như bus địa chỉ/dữ liệu đa hợp, chân ALE sẽ xuất tín hiệu để chốt byte thấp của địa chỉ 16 bit vào một thanh ghi ngoài trong suốt đầu chu kỳ bộ nhớ Sau khi hoàn tất, các chân của port 0 sẽ thực hiện xuất/nhập dữ liệu trong suốt phần thứ hai của chu kỳ bộ nhớ Tín hiệu ALE có tần số bằng 1/6 tần số của mạch dao động bên trong chip vi điều khiển.

2.3 Chân truy xuất ROM ngoài EA

Ngõ vào/EA có thể được nối với 5V (logic1) hoặc với GND (logic 0) Nếu chân

Chân 51 của chip 8051 nối lên 5V cho phép thực thi chương trình trong ROM nội Nếu chân này được nối với GND và chân PSEN cũng ở mức logic 0, chương trình cần thực thi sẽ được lưu trữ trong bộ nhớ ngoài.

Ngõ vào RST của vi điều khiển 8051 đóng vai trò là ngõ vào xóa chính (master reset), giúp thiết lập lại trạng thái ban đầu cho hệ thống Khi ngõ vào này được giữ ở mức logic 1 trong khoảng 2 chu kỳ máy, các thanh ghi bên trong 8051 sẽ được nạp lại các giá trị thích hợp, đảm bảo quá trình khởi động lại hệ thống diễn ra hiệu quả.

Kết nối chân RESET là yếu tố quan trọng để đảm bảo hệ thống hoạt động khi vi điều khiển được cấp điện, hoặc khi xảy ra lỗi và cần khôi phục hoạt động Ngoài ra, người sử dụng cũng có thể sử dụng chân RESET để quay về trạng thái hoạt động ban đầu.

Vi điều khiển sử dụng thạch anh cú tõ̀n số f zat = 12MHz với CàF và RKΩ Thanh ghi quan trọng nhất trong vi điều khiển là thanh ghi bộ đếm chương trình PC, có giá trị là 0000H.

Sau khi reset, vi điều khiển bắt đầu thực hiện chương trình tại địa chỉ 0000H của bộ nhớ chương trình, do đó, các chương trình cần được viết bắt đầu từ địa chỉ này Đặc biệt, nội dung của RAM trong vi điều khiển không bị thay đổi khi có tác động từ ngõ vào reset, nghĩa là dữ liệu trong các thanh ghi sẽ vẫn được giữ nguyên ngay cả khi vi điều khiển bị reset.

2.5.1 Kết nối chân XTAL1,XTAL2

Mạch dao động trên chip được kết nối với mạch thạch anh bên ngoài qua hai chân XTAL1 và XTAL2, cùng với các tụ ổn định có giá trị do nhà sản xuất quy định (30p–40p) Tần số thạch anh phổ biến trong các ứng dụng là 11.0592 MHz cho giao tiếp với cổng Com máy tính và 12 MHz, với tần số tối đa lên tới 24 MHz Tần số càng cao thì vi điều khiển xử lý càng nhanh.

Tần số dao động của thạch anh, ký hiệu là fzat, là yếu tố quan trọng đối với các vi điều khiển 89Sxx, với tần số dao động từ 2MHz đến 33MHz Chu kỳ máy là khoảng thời gian cần thiết để vi điều khiển hoàn thành một lệnh cơ bản, và một chu kỳ máy tương đương với 12 lần chu kỳ dao động của nguồn xung cấp.

Tck = 12.Toc Với: Tck là chu kì máy

Toc là chu kì của nguồn xung dao động cấp cho Vi điều khiển

Với: T ck là chu kì máy f oc là tần số dao động cấp cho Vi điều khiển

Ví dụ: Ta kết nối Vi điều khiển với thạch anh có tần số f zat là 12MHz, thì chu kì máy

Thạch anh có tần số f zat 12MHz được sử dụng phổ biến trong lập trình nhờ vào khả năng tạo ra chu kỳ máy là 1ms, thuận lợi cho việc tính toán thời gian Ngoài ra, khi giao tiếp truyền nối tiếp với máy vi tính, thạch anh có tần số f zat 11.0592MHz cũng thường được áp dụng.

Cấu trúc Port I/O

Hình 6.4 Vào ra với thiết bị ngoại vi

3.1 Port0: Port0 là port có 2 chức năng ở các chân (32–39)

Chức năng IO (xuất/nhập) là lựa chọn lý tưởng cho các thiết kế nhỏ, nhưng khi sử dụng, Porto cần thêm điện trở kéo lên (pull-up) Giá trị của điện trở này phụ thuộc vào thành phần kết nối với Port.

- Khi dùng làm ngõ ra, Porto có thể kéo được 8 ngõ TTL

- Khi dùng làm ngõ vào, Port0 phải được set mức logic 1 trước đó

Port0 trong thiết kế lớn có chức năng kép, vừa là bus dữ liệu 8 bit, vừa là bus địa chỉ 8 bit thấp, đặc biệt hữu ích khi cần sử dụng bộ nhớ ngoài.

Khi lập trình cho AT89C51, Port0 được sử dụng để nhận mã trong quá trình lập trình và xuất mã trong quá trình kiểm tra, trong đó quá trình kiểm tra yêu cầu phải có điện trở kéo lên.

Port1 (chân 1 – 8) chỉ có chức năng IO, không sử dụng cho mục đích khác, ngoại trừ trong 8032/8052/8952, nơi P1.0 và P1.1 được dùng cho bộ định thời thứ 3 Port1 đã được trang bị điện trở kéo lên, vì vậy không cần thêm điện trở ngoài.

- Port1 có khả năng kéo được 4 ngõ TTL và còn dùng làm 8bit địa chỉ thấp trong quá trình lập trình hay kiểm tra

- Khi dùng làm ngõ vào, Port1 phải được set mức logic 1 trước đó

3.2 Port2 : Port2 (chân21–28) là port có 2 chức năng:

- Chức năng IO (xuất/nhập): có khả năng kéo được 4ngõ TTL

- Chức năng địa chỉ: dùng làm 8bit địa chỉ cao khi cần bộ nhớ ngoài có địa chỉ 16bit Khi đó, Port2 không được dùng cho mục đích I/O

- Khi dùng làm ngõ vào, Port2 phải được set mức logic1 trước đó

- Khi lập trình, Port2 dùng làm 8bit địa chỉ cao hay một số tính hiệu điều khiển

3.3 Port3 : Port3 (chân10–17)là port có 2 chức năng:

- Chức năng IO:có khả năng kéo được 4 ngõ TTL

- Khi dùng làm ngõ vào, Port3 phải được set mức logic 1trước đó

Các Port khi xuất tín hiệu logic 1 thường dao động trong khoảng từ 3.5V đến 4.9V, không đạt đến 5V và dòng xuất ra rất nhỏ, dưới 5mA (P0, P2 khoảng 1mA; P1, P3 khoảng 1mA đến 5mA), do đó không đủ để làm LED sáng Khi các Port xuất tín hiệu ở mức logic 0, dòng điện cũng không đủ mạnh để kích hoạt thiết bị.

53 điện cho phép đi qua lớn hơn rất nhiều:

Chân Vi điều khiển khi ở mức 0:

Dòng lớn nhất qua P0 : -25mA

Dòng lớn nhất qua P1,P2,P3 : -15mA

Tổ chức bộ nhớ

4.1 Tổng quan tổ ch́ức bộ nhớ

Hình 6.5 Tổ chức bộ nhớ họ MCS-51

Bộ nhớ của họ MCS-51 được chia thành hai phần chính: bộ nhớ trong và bộ nhớ ngoài Bộ nhớ trong bao gồm 4KB ROM và 128 byte RAM (256 byte đối với 8052) Các byte RAM có địa chỉ từ 00h đến 7Fh, trong khi các thanh ghi chức năng đặc biệt (SFR) có địa chỉ từ 80h đến 0FFh, cho phép truy xuất trực tiếp.

Các chip vi điều khiển đóng vai trò trung tâm trong thiết kế hệ thống điều khiển, với bộ nhớ hạn chế và không có hệ điều hành Chương trình điều khiển thường lưu trữ trong ROM, trong khi chip 8051 có không gian bộ nhớ riêng cho cả chương trình và dữ liệu Cả hai loại bộ nhớ này đều nằm trong chip, nhưng có thể mở rộng thêm bằng cách sử dụng chip nhớ bên ngoài với dung lượng tối đa lên đến 64K.

- Bộ nhớ nội trong chip bao gồm ROM và RAM

Bộ nhớ ROM là nơi lưu trữ chương trình được viết bởi lập trình viên, bao gồm các câu lệnh thực hiện các thuật toán để giải quyết công việc cụ thể Chương trình này được thiết kế trên máy tính và sau đó được nạp vào ROM của vi điều khiển Khi hoạt động, vi điều khiển sẽ truy xuất các câu lệnh trong ROM để thực hiện chương trình Ngoài ra, ROM còn chứa các dữ liệu bảng, tham số hệ thống và số liệu cố định Dung lượng bộ nhớ ROM tích hợp trong chip vi điều khiển phụ thuộc vào loại vi điều khiển, chẳng hạn như 8KByte cho 89S52 và 12KByte cho 89S53.

Bộ nhớ bên trong của Vi điều khiển 89Sxx là Flash ROM, cho phép xóa và nạp chương trình mới bằng điện, đồng thời hỗ trợ việc nạp xóa nhiều lần.

Vi điều khiển có khả năng mở rộng bộ nhớ ROM thông qua việc kết nối với bộ nhớ ROM bên ngoài, cho phép dung lượng lên đến 64Kbyte, với địa chỉ từ 0000H đến FFFH.

Bộ nhớ RAM là môi trường quan trọng trong việc xử lý thông tin, giúp lưu trữ các kết quả trung gian và cuối cùng của các phép toán Nó cũng đóng vai trò trong việc tổ chức các vùng đệm dữ liệu, hỗ trợ các thao tác thu phát và chuyển đổi dữ liệu.

RAM trong vi điều khiển được tổ chức với các vị trí được định địa chỉ theo từng byte bằng số thập lục phân (Hex) Các bank thanh ghi có địa chỉ từ 00H đến 1FH, với tổng cộng 210 vị trí được định địa chỉ theo bit Ngoài ra, các thanh ghi có chức năng đặc biệt có địa chỉ từ 80H đến FFH.

Vùng RAM đa mục đích có kích thước 80 byte, nằm trong khoảng địa chỉ từ 30H đến 7FH Tất cả các vị trí trong vùng RAM này có thể được truy xuất một cách tự do thông qua các kiểu định địa chỉ trực tiếp hoặc gián tiếp.

4.3 Vùng RAM định địa chỉ bit

8051 có 210 vị trí bit được định địa chỉ, trong đó 128 bit nằm trong các byte từ địa chỉ 20H-2FH, và phần còn lại nằm trong các thanh ghi chức năng đặc biệt Bộ nhớ nội của 8051 chứa 32 vị trí thanh ghi thấp nhất Các lệnh của 8051 cho phép thao tác với các thanh ghi này một cách hiệu quả.

8051 hỗ trợ 8 thanh ghi từ R0–R7 thuộc dãy 0 (bank0) Đây là dãy mặc định sau khi reset hệ thống Các thanh ghi này ở các địa chỉ từ 00H– 07H

Các lệnh sử dụng thanh ghi từ R0–R7 có tốc độ thực hiện nhanh hơn so với các lệnh sử dụng kiểu định địa chỉ trực tiếp Để tối ưu hóa hiệu suất, các giá trị thường dùng nên được lưu trữ trong các thanh ghi này, được gọi là dãy thanh ghi tích cực Dãy thanh ghi tích cực có thể được điều chỉnh bằng cách thay đổi các bit chọn dãy trong thanh ghi PSW.

Các thanh ghi chức năng đặc biệt (SFR)

Các thanh ghi nội của 8051 được cấu hình như một phần của RAM trên chip, với mỗi thanh ghi có một địa chỉ riêng Trong số các thanh ghi từ R0–R7, có 21 thanh ghi chức năng đặc biệt (SFR) chiếm không gian từ địa chỉ 80H đến FFH trong RAM nội Cần lưu ý rằng không phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa, mà chỉ có 21 địa chỉ được xác định.

5.1.Từ trạng thái chương trình PSW (program status word)

Thanh ghi PSW có địa chỉ là D0H chứa các bit trạng thái có chức năng được tóm tắt trong bảng sau:

PSW.6 AC D6H AuxiliaryCaryFlag: Cờ nhớ phụ

PSW.5 F0 D5H Flag0 còn gọi là cờ Zero kí hiệu là Z

PSW4 RS1 D4H Register Bank Select 1: bit lựa chọn bank thanh ghi

PSW.3 RS0 D3H Register Bank Select 0: bit lựa chọn bank thanh ghi

00 nk 0; ô nhớ có address 00H÷07H gán cho R0-R7

01 nk 1; ô nhớ có address 08H÷0FH gán cho R0-R7

10 nk 2; ô nhớ có address 10H÷17H gán cho R0-R7

11 nk 3; ô nhớ có address 18H÷1FHgán choR0-R7 PSW.2 OV D2H Overflow Flag: cờ tràn số nhị phân có dấu

PSW.1 - D1H Reserved: chưa thiết kế nên chưa sử dụng được

PSW.0 P D0H Even Parity Flag: cờ chẵn lẻ

Thanh ghi Bở địa chỉ F0H được dùng chung với thanh chứa A trong các phép toán nhân (MUL),chia (DIV).Các bit của thanh ghi B được định địa chỉ từ F0H-F7H

Con trỏ StackSP (stack pointer) là thanh ghi 8 bit tại địa chỉ 81H, chứa địa chỉ của dữ liệu ở đỉnh Stack Các lệnh liên quan đến Stack bao gồm PUSH để cất dữ liệu vào Stack và POP để lấy dữ liệu ra Khi cất dữ liệu vào Stack, thanh ghi SP sẽ tăng trước khi ghi dữ liệu, trong khi việc lấy dữ liệu sẽ làm giảm thanh ghi SP Nếu không khởi động SP, giá trị mặc định của thanh ghi này là 07H.

Vùng stack của 8051 được lưu trữ trong RAM nội, giới hạn ở các địa chỉ truy xuất bằng kiểu định địa chỉ gián tiếp Các lệnh PUSH và POP được sử dụng để lưu trữ và lấy dữ liệu từ stack, trong khi các lệnh gọi chương trình con (ACALL, LCALL) và lệnh trở về (RET, RETI) đảm nhiệm việc lưu và phục hồi nội dung của bộ đếm chương trình PC (Program Counter).

5.4.Con trỏ dữ liệu DPTR

Con trỏ dữ liệu DPTR (datapointer) được sử dụng để truy xuất bộ nhớ chương trình ngoài hoặc bộ nhớ dữ liệu ngoài DPTR là một thanh ghi 16 bit, với địa chỉ byte thấp là 82H (DPL) và byte cao là 83H (DPH).

5.5.Các thanh ghi Port nối tiếp

Các port xuất nhập của 8051 bao gồm port 0 (80H), port 1 (90H), port 2 (A0H) và port 3 (0BH) Lưu ý rằng port 0, 2 và 3 không thể sử dụng cho việc xuất/nhập khi có bộ nhớ ngoài hoặc khi có một số đặc tính nhất định.

8051 được sử dụng cho các chức năng như ngắt và cổng nối tiếp Tất cả các cổng đều được định địa chỉ theo từng bit, mang lại khả năng giao tiếp mạnh mẽ.

5.6 Các thanh ghi định thời

8051 được trang bị hai bộ đếm thời gian 16 bit, cho phép định các khoảng thời gian hoặc đếm sự kiện Bộ định thời 0 có địa chỉ TL0 (byte thấp) tại 8AH và TH0 (byte cao) tại 8CH, trong khi bộ định thời 1 có TL1 tại 8BH và TH1 tại 8DH Hoạt động của các bộ định thời này được thiết lập thông qua thanh ghi chế độ định thời TMOD tại địa chỉ 89H và thanh ghi điều khiển định thời TCON tại địa chỉ 88H.

5.7 Các thanh ghi port nối tiếp (Serial Data Buffer)

Bên trong vi điều khiển 8051, có một cổng nối tiếp cho phép truyền thông với các thiết bị như đầu cuối hoặc modem, cũng như giao tiếp với các IC khác Thanh ghi SBUF (bộ đệm dữ liệu nối tiếp) tại địa chỉ 99H lưu trữ dữ liệu gửi đi và nhận về Ghi dữ liệu vào SBUF sẽ chuẩn bị cho việc truyền, trong khi đọc từ SBUF sẽ lấy dữ liệu đã nhận Dữ liệu được đưa vào SBUF sẽ được lưu trong bộ đệm truyền dữ liệu cho đến khi quá trình truyền thông nối tiếp hoàn tất Khi dữ liệu được chuyển ra từ SBUF, nó sẽ được lấy từ bộ đệm nhận dữ liệu của hệ thống truyền thông nối tiếp.

Các chế độ hoạt động khác nhau được lập trình thông qua thanh ghi điều khiển port nối tiếp SCON (serial port control register) tại địa chỉ 98H, trong khi TCON được định nghĩa với địa chỉ từng bit.

8051 có cấu trúc ngắt với hai mức ưu tiên và năm nguyên nhân ngắt Sau khi hệ thống được reset, các ngắt sẽ bị vô hiệu hóa và có thể được cho phép bằng cách ghi vào thanh ghi cho phép ngắt IE tại địa chỉ A8H Mức ưu tiên của các ngắt được thiết lập thông qua thanh ghi ưu tiên ngắt IP tại địa chỉ B8H.

Cả hai thanh ghi này đều được định địa chỉ từng bit

5.9.Thanh ghi điều khiển nguồn PCON

Thanh ghi PCON (power control) giúp điều khiển công suất tiêu thụ của vi điều khiển trong quá trình hoạt động và khi ở chế độ chờ Khi vi điều khiển không còn thực hiện tác vụ nào, lập trình viên có thể lập trình để chuyển vi điều khiển sang chế độ chờ, nhằm giảm thiểu mức tiêu thụ năng lượng, đặc biệt khi nguồn cấp là pin.

Thanh ghi PCON tại địa chỉ 87H không cho phép định địa chỉ bit:

Chức năng SMOD1 SMOD0 - POF GF1 GF0 PD IDL

+SMOD1(SerialMode1):=1 cho phép tăng gấp đơi tốc độ port nối tiếp trong chế độ1, 2 và 3

+SMOD0 (SerialMode0): cho phép chọn bit SM0 hay FE trong thanh ghi SCON (họn bit FE)

+POF(Power-offFlag):dùng để nhận dạng loại reset POF=1 khi mở nguồn

Do đó, để xác định loại reset,cần phải xóa bit POF trướcđó

+GF1, GF0 (GeneralpurposeFlag):các bit cờ dành cho người sử dụng

PD (PowerDown) sẽ bị xóa bằng phần cứng khi quá trình reset diễn ra Khi bit PD=1, vi điều khiển sẽ chuyển sang chế độ nguồn giảm, giúp tiết kiệm năng lượng.

 Chỉ có thể thốt khỏi chế độ nguồn giảm bằng cách reset

 Nội dung RAM và mức logic trên các port được duy trì

 Mạch dao động bên trong và các chức năng khác ngừng hoạt động

 Chân ALE và PSEN ớ mức thấp

 Yêu cầu Vcc phải có điện áp ít nhất là 2V và phục hồi Vcc=5V ít nhất 10 chu kỳ trước khi chân RESET xuống mức thấp lần nữa

IDL (Idle) sẽ bị xóa qua phần cứng khi có hoạt động reset hoặc khi xảy ra ngắt Khi bit IDL=1, vi điều khiển sẽ chuyển sang chế độ nghỉ Trong chế độ này, vi điều khiển tiết kiệm năng lượng và giảm tiêu thụ điện.

Chế độ nguồn giảm chỉ có thể được thoát ra thông qua việc Reset hoặc khi có sự ngắt xảy ra Trong quá trình này, trạng thái hiện tại của vi điều khiển vẫn được duy trì và nội dung các thanh ghi không bị thay đổi.

+ Mạch dao động bên trong không gởi được tín hiệu đến CPU

+ Chân ALE và PSEN mức cao

- Lưu ý rằng các bit điều khiển PD và IDL có tác dụng chính trong tất cả các

IC họ MSC-51nhưng chỉ có thể thực hiện được trong các phiên bản CMOS.

Bộ nhớ ngoài

MCS-51 sử dụng cấu trúc bộ nhớ Harvard, phân chia rõ ràng giữa bộ nhớ chương trình và bộ nhớ dữ liệu Nó hỗ trợ kết nối với 64KB cho cả chương trình và dữ liệu Bộ nhớ chương trình được truy xuất qua chân PSEN, trong khi bộ nhớ dữ liệu được truy xuất qua chân WR hoặc RD.

Khi truy xuất bộ nhớ chương trình, địa chỉ luôn là 16 bit, trong khi bộ nhớ dữ liệu có thể là 8 bit hoặc 16 bit tùy thuộc vào lệnh sử dụng Nếu sử dụng bộ nhớ dữ liệu 8 bit, Port2 có thể được sử dụng như một Port I/O thông thường Tuy nhiên, khi sử dụng ở chế độ 16 bit, Port2 chỉ được dùng để làm các bit địa chỉ cao.

 Port0 được dùng làm địa chỉ thấp/dữ liệu đa hợp.Tín hiệu /ALE để tách byte

Trong chu kỳ ghi, byte dữ liệu sẽ xuất hiện tại Port0 ngay trước khi tín hiệu /WR được kích hoạt và sẽ được giữ lại cho đến khi tín hiệu này không còn hoạt động Ngược lại, trong chu kỳ đọc, byte dữ liệu sẽ được chấp nhận ngay trước khi tín hiệu /RD không còn hoạt động Bộ nhớ chương trình ngoài chỉ được xử lý khi thỏa mãn một trong hai điều kiện đã nêu.

- Tín hiệu EA tích cực(=0)

- Giá trị của bộ đếm chương trình(PC- Program Counter) lớn hơn kích thước bộ nhớ

 Bộ nhớ dữ liệu ngoài được truy xuất bằng lệnh MOVX thông qua các thanh ghi xác định địa chỉ DPTR (16 bit) hay R0,R1 (8 bit)

 Quá trình thực hiện đọc hay ghi dữ liệu được cho phép bằng tín hiệu RD hay

Trong các ứng dụng vi điều khiển 8051, ngoài việc giao tiếp với bộ nhớ dữ liệu, vi điều khiển còn tương tác với nhiều thiết bị như bàn phím, LED và động cơ thông qua các Port Tuy nhiên, khi số lượng thiết bị tăng lên, các Port sẽ không đủ để điều khiển tất cả Giải pháp là coi các thiết bị này như bộ nhớ dữ liệu và thực hiện quá trình giải mã địa chỉ để phân biệt các thiết bị ngoại vi Quá trình này thường được thực hiện bằng các IC giải mã như 74139, 74138 và 74154, với ngõ ra của chúng được kết nối tới chân chọn chip hoặc bộ đệm để điều khiển các thiết bị ngoại vi.

Hoạt động Reset

Việc reset vi điều khiển 8051 được thực hiện bằng cách giữ chân RST ở mức cao ít nhất 2 chu kỳ máy, sau đó chuyển về mức thấp RST có thể được kích hoạt bằng tay hoặc tự động khi cấp nguồn thông qua một mạch RC.

Trạng thái của các thanh ghi sau khi reset như sau:

Các thanh ghi định thời 00H

Bài 1: Vẽ sơ đồ chân và giải thích chức năng của các chân trong Vi điều khiển 8051?

Bài 2: Mô tả chuỗi lệnh ghi giá trị 0ABH vào địa chỉ 9A00H của RAM ngoài trong hệ thống 8051

Bài 3: Viết chuỗi lệnh chép nội dung thanh ghi R7 vào địa chỉ 100H của bộ nhớ RAM ngoài

Sau khi reset hệ thống, nếu lệnh đầu tiên thực hiện là một lệnh gọi chương trình con, thanh ghi PC sẽ được lưu trữ tại một địa chỉ cụ thể trong RAM nội trước khi chuyển đến chương trình con.

Bài 5: Viết chuỗi lệnh giá trị trong ô nhớ có địa chỉ 50H của RAM nội vào thanh ghi chứa sử dụng định vị địa chỉ gián tiếp

Để tính giá trị offset tương đối cho lệnh SJMP AHEAD, trước tiên cần xác định địa chỉ của lệnh hiện tại là A050H và A051H Nhãn AHEAD đại diện cho lệnh ở địa chỉ 9FE0H Giá trị offset sẽ được tính bằng cách lấy địa chỉ của nhãn AHEAD trừ đi địa chỉ của lệnh SJMP, sau đó chuyển đổi kết quả thành dạng số nguyên có dấu.

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

+ Về kiến thức: cấu tạo, đặc điểm, ứng dụng của các loại Vi điều khiển

- Thực hiện viết các chương trình theo yêu cầu cho trước

+ Năng lực tự chủ và trách nhiệm: Đánh giá phong cách, thái độ học tập

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

Kỹ năng thực hành mỗii sinh viên hoặc nhóm học viên sẽ được đánh giá dựa trên việc thực hiện công việc theo yêu cầu của giáo viên Tiêu chí đánh giá sẽ dựa trên các nội dung cụ thể được xác định trước.

- Độ chính xác của công việc

- Độ an toàn trên mạch điện

- Thời gian thực hiện công việc

- Độ chính xác theo yêu cầu kỹ thuật

+ Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác

BÀI 7: PHẦN MỀM HỢP NGỮ

Mã bài: MĐ18-07 Giới thiệu:

Vi điều khiển là một IC lập trình, cần được lập trình trước khi sử dụng Mỗi phần cứng phải có chương trình phù hợp, do đó người viết cần nắm rõ cấu tạo phần cứng và yêu cầu của mạch điện để viết chương trình hiệu quả.

Chương trình cho vi điều khiển có thể được viết bằng các ngôn ngữ như C++, C, Visual Basic và nhiều ngôn ngữ cấp cao khác Assembly, với tư cách là ngôn ngữ cấp thấp, cho phép mỗi câu lệnh tương ứng trực tiếp với chỉ lệnh mà bộ xử lý có thể thực hiện Ưu điểm của hợp ngữ Assembly bao gồm mã gọn, chiếm ít dung lượng bộ nhớ, tốc độ hoạt động nhanh và hiệu suất vượt trội so với các chương trình viết bằng ngôn ngữ bậc cao khác.

Trình bày được sự cần thiết và cơ chế hoạt động của trình dịch hợp ngữ theo nội dung đã học

Chương trình hợp ngữ có cấu trúc chung rõ ràng, phản ánh nội dung đã học Để viết chương trình tổ chức lớn, cần phân chia thành các mô đun một cách hợp lý và tuân thủ đúng quy trình kỹ thuật.

Viết được chương trình điều khiển theo yêu cầu

Việc lập trình cho vi điều khiển (VĐK) thường gặp khó khăn do các lệnh có dạng số nhị phân dài và phức tạp, làm cho việc gỡ lỗi trở nên khó khăn Tuy nhiên, máy vi tính giúp người lập trình có thể sử dụng ngôn ngữ lập trình cấp cao để viết chương trình, và các trình biên dịch sẽ tự động chuyển đổi các câu lệnh này thành mã máy Mã máy sau đó được nạp vào bộ nhớ ROM của VĐK, cho phép vi điều khiển thực hiện chương trình bằng cách đọc các lệnh từ ROM Tuy nhiên, máy tính không thể trực tiếp thực hiện các mã máy này vì chúng không tương thích với phần cứng, do đó cần có các chương trình mô phỏng chuyên dụng.

Hợp ngữ (assembly language) sử dụng các từ gợi nhớ thay cho mã nhị phân, giúp việc lập trình trở nên dễ dàng hơn Tuy nhiên, máy tính không thể hiểu hợp ngữ trực tiếp, vì vậy cần có trình biên dịch hợp ngữ Assembler và trình liên kết Linker để chuyển đổi các chương trình viết bằng hợp ngữ sang ngôn ngữ máy.

Chương trình hợp ngữ (Assembly Language Program) là một loại chương trình được viết bằng cách sử dụng các nhãn và từ gợi nhớ, với mỗi phát biểu tương ứng với một lệnh của ngôn ngữ máy Chương trình này, gọi là mã nguồn, không thể thực thi trực tiếp mà giúp lập trình viên dễ dàng đọc hiểu và gỡ rối các thao tác của vi điều khiển Assembly là ngôn ngữ lập trình cấp thấp gần gũi với ngôn ngữ máy, và sau khi viết xong, cần được chuyển đổi thành mã lệnh (mã máy) của vi điều khiển thông qua chương trình dịch Assembler Các mã lệnh này sau đó được nạp vào ROM của vi điều khiển để thực hiện chương trình Chương trình dịch Assembler phổ biến hiện nay là Macro Assembler.

Chương trình ngôn ngữ máy là tập hợp các mã nhị phân tương ứng với từng lệnh của vi xử lý Những chương trình được viết bằng ngôn ngữ máy thường được gọi là mã đối tượng và có khả năng thực thi.

Chương trình Assembler chuyển đổi mã nguồn viết bằng hợp ngữ thành ngôn ngữ máy, với ngôn ngữ máy có thể ở dạng tuyệt đối hoặc tái định vị Trong khi đó, chương trình Linker kết hợp các chương trình đối tượng tái định vị để tạo ra chương trình đối tượng tuyệt đối, giúp chương trình có thể thực thi.

Segment là đơn vị bộ nhớ dùng để lưu trữ mã lệnh hoặc dữ liệu, có thể ở dạng tuyệt đối hoặc tái định vị Segment tái định vị được có tên, kiểu và các thuộc tính giúp chương trình linker kết hợp với các đoạn khác để định vị chính xác Ngược lại, segment ở dạng tuyệt đối không có tên và không thể kết hợp với các đoạn khác.

Module là một đơn vị chứa một hoặc nhiều segment, hoặc một phần của segment, và được người sử dụng đặt tên Định nghĩa module xác định phạm vi của các ký hiệu cục bộ Một tập tin đối tượng có thể chứa một hoặc nhiều module, và trong nhiều trường hợp, module được coi như một tập tin độc lập.

Chương trình bao gồm nhiều module tuyệt đối, kết hợp và tái định vị các đoạn từ tất cả các module nhập Mỗi chương trình chỉ chứa mã nhị phân cho các chỉ thị mà máy tính có thể hiểu Vi điều khiển MSC-51 đều sử dụng chung một tập lệnh, trong khi các vi điều khiển cải tiến sau này thường ít thay đổi hoặc mở rộng tập lệnh, tập trung chủ yếu vào việc phát triển phần cứng.

PHẦN MỀM HỢP NGỮ

Cấu trúc chương trình dữ liệu

2.1 Các thành phần cơ bản của ngôn ngữ Assembly

- Lables:Nhãn–đánh dấu cho một đoạn lệnh

- Directives: Định hướng chương trình dịch

- Comments:Các lời chú thích

Một dòng lệnh trong chương trình hợp ngữ gồm có các trường sau:

Tên Lệnh Toán hạng Chú thích

A: Mov AH, 10h ; Đưa giá trị 10h vào thanh ghi AH Để có thể dịch thành file mã máy dạng HEX-Code trước khi download vào Chip thì một chương trình assembly phải tuân thủ các nguyên tắcsau:

- Mỗi dòng lệnh không vượt quá 255 kýtự

- Mỗi dòng lệnh phải bắt đầu bằng 1 ký tự,nhãn,lệnh hoặc chỉ thị định hướng chương trình dịch

Mọi thứ sau dấu ";" được coi là lời giải thích và sẽ bị chương trình dịch bỏ qua Các thành phần trong mỗi dòng lệnh cần phải cách biệt với nhau ít nhất bằng một dấu cách.

2.2.Cấu trúc chương trình dữ liệu

• Những lệnh của vi xử lý

• Những chỉ dẫn assembler (Assembler Directive)

 Cú pháp lệnh của vi xử lý như sau:

[label:] mnemonic [operand] [,operand] […] [;comment]

Trong lập trình, label (nhãn) được theo sau bởi dấu hai chấm “:”, mnemonic (từ gợi nhớ) thể hiện lệnh, operand (toán hạng) có thể có một hoặc nhiều toán hạng, hoặc không có Cuối cùng, chú thích cho lệnh được đặt sau dấu chấm phẩy “;” Kí hiệu là tên đại diện cho giá trị, khối văn bản, địa chỉ hoặc tên thanh ghi, đồng thời có thể biểu diễn các hằng số và biểu thức Tên của các kí hiệu được giới hạn tối đa 31 kí tự, với kí tự đầu tiên phải là chữ cái hoặc dấu “?” hoặc “-”, và các kí tự theo sau có thể là chữ, số, “?” hoặc “-” Kí hiệu có thể viết hoa hoặc thường mà không phân biệt Lưu ý rằng các từ đã được sử dụng làm kí hiệu không thể dùng cho mục đích khác.

Ví dụ 1: Bdn EQU R2 Nhãn là một loại kí hiệu dùng để định nghĩa vị trí trong chương trình:

• Tên nhãn tượng trưng cho một địa chỉ

• Vùng văn bản thứ nhất trong dòng hợp ngữ

• Theo sau nhãn là dấu hai chấm “:”

• Trên một hàng chỉ có thể định nghĩa một nhãn

• Không được đặt tên các nhãn trùng nhau

Mnemonic là tất cả các từ gợi nhớ cho tất cả các lệnh và các chỉ dẫn assembler:

• Mnemonic cho lệnh: ADD, SUB, MUL, DIV, MOV,…

• Mnemonic cho chỉ dẫn assembler: org, equ, db, bit,…

Toán hạng operand là đối số hoặc biểu thức được đặt tả cùng với lệnh hoặc chỉ dẫn assembler, toán hạng có thể là địa chỉ hoặc dữ liệu

Trong hợp ngữ ASM51 có các kiểu toán hạng bảng sau:

Kiểu toán hạng Mô tả

Dữ liệu tức thời có thể được biểu thị bằng ký hiệu hoặc hằng số, đóng vai trò là giá trị số Địa chỉ bit trực tiếp cũng sử dụng ký hiệu hoặc hằng để tham chiếu đến địa chỉ bit Trong khi đó, địa chỉ chương trình tham chiếu đến mã thông qua ký hiệu hoặc hằng Địa chỉ dữ liệu trực tiếp tương tự, sử dụng ký hiệu hoặc hằng để chỉ định địa chỉ dữ liệu Cuối cùng, địa chỉ gián tiếp cho phép tham chiếu đến bộ nhớ thông qua một offset, tạo điều kiện cho việc truy cập linh hoạt hơn.

Kí hiệu assembler đặc biệt Tên thanh ghi

Dữ liệu tức thời (immediate data) là biểu thức số được mã hóa trong lệnh ngôn ngữ máy, với ký hiệu “#” đứng trước để phân biệt.

Ví dụ: MOV R0,#30 Trong ví dụ này 30 là dữ liệu tức thời

+ Địa chỉ bit trực tiếp: (direct bit address): Kiểu này dùng để truy cập các bit của các ô nhớ cho phép truy xuất bit

Có 3 cách để định địa chỉ bit:

 Truy xuất trực tiếp địa chỉ bit

 Truy xuất toán tử chấm (byte.bit)

 Kí hiệu assembler được định nghĩa trước

Ví dụ: SETB 00H ;bit có địa chỉ 00H

Lệnh CLR ACC.7 được sử dụng để xóa bit thứ 7 của thanh ghi A Địa chỉ chương trình là toán hạng của lệnh nhảy, trong đó lệnh nhảy tương đối sử dụng toán hạng 8 bit làm offset cho lệnh nhảy không điều kiện sjmp và lệnh nhảy có điều kiện Đối với lệnh nhảy và lệnh gọi tuyệt đối, toán hạng có độ dài 11 bit được dùng để quản lý trang bộ nhớ cho lệnh AJMP và ACALL Cuối cùng, lệnh nhảy và lệnh gọi có địa chỉ dài sử dụng toán hạng 16 bit để quản lý toàn bộ bộ nhớ cho lệnh LJMP và LCALL.

 Lệnh JMP có thể được dịch hợp thành lệnh SJMP, AJMP hoặc LJMP

 Lệnh Call có thể được dịch hợp thành lệnh ACALL hoặc LCALL

 Người lập trình không cần quan tâm đến địa chỉ thật khi nhảy hay gọi

- Quy tắc chuyển thành tuỳ thuộc vào assembler:

 Lệnh SJMP: không có tham chiếu tới và địa chỉ đích trong vùng -128 byte

64 so với địa chỉ của lệnh kế

 Lệnh AJMP/ACALL: không có tham chiếu tới và địa chỉ đích trong vùng nhớ cùng khối 2 KByte so với lệnh kế

Lệnh AJMP/ACALL cho phép tham chiếu đến địa chỉ đích trong vùng nhớ 64Kbyte Địa chỉ dữ liệu trực tiếp (direct data address) được sử dụng để truy xuất bộ nhớ dữ liệu nội từ địa chỉ 00H đến 7FH, cũng như các vùng nhớ chứa các thanh ghi đặc biệt từ 80H đến FFH Tất cả các ký hiệu đã được định nghĩa đều có thể áp dụng cho các thanh ghi chức năng.

Địa chỉ dữ liệu gián tiếp (indirect data address) sử dụng các thanh ghi như R0, R1, DPTR và PC để chứa địa chỉ của các ô nhớ cần truy xuất dữ liệu Các kí hiệu đặc biệt trong assembler bao gồm A, DPTR, R0 đến R7, PC, cờ C và cặp thanh ghi AB, cho phép thực hiện cách định địa chỉ thông qua thanh ghi Đặc biệt, kí hiệu dấu “$” được dùng để tham chiếu đến giá trị hiện hành của bộ đếm vị trí.

Ví dụ: hai lệnh sau là tương đương:

Ten_bien DB Gia_Tri_Khoi_Tao

DB là chỉ lệnh dữ liệu phổ biến trong hợp ngữ, được sử dụng để định nghĩa dữ liệu 8bit Khi định nghĩa byte dữ liệu, các số có thể ở dạng thập phân, nhị phân, Hex hoặc ASCII Đối với dữ liệu thập phân, cần thêm chữ "D" sau số, với số nhị phân là chữ "B" và dữ liệu dạng Hex cần có chữ "H" Để khai báo biến kiểu nguyên với kích thước 2 byte, sử dụng lệnh DW.

Lệnh EQU trong lập trình được sử dụng để định nghĩa một hằng số mà không chiếm chỗ trong bộ nhớ Nó không dành chỗ cho dữ liệu, nhưng gán một giá trị hằng số với nhãn dữ liệu Khi nhãn xuất hiện trong chương trình, giá trị hằng số tương ứng sẽ được thay thế cho nhãn đó.

2.2.3 Cấu trúc một chương trình hợp ngữ

ORG 0000h; Đặt lệnh LJMP main tại địa chỉ

LJMP main; 0000h (địa chỉ bắt đầu khi reset AT89C51)

ORG 0030h; Vùng địa chỉ 0003h–002Fh

Main: ;dùngđể chứa các chương trình phục vụ ngắt

END ;kết thúc chương trình

Tính biểu thức trong khi hợp dịch

3.1.Khái niệm các biểu thức và toán tử

- Toán tử được dùng để kết hợp và so sánh các toán hạng trong chương trình hợp ngữ

Biểu thức trong lập trình giúp kết hợp số, chuỗi ký tự, ký hiệu và toán tử để tính toán số nhị phân 16 bit, từ đó làm cho chương trình trở nên dễ đọc và linh hoạt hơn.

- Các toán hạng gồm có: số, ký tự, chuỗi ký tự và bộ đếm vị trí

- Các toán tử gồm có: toán tử số học, toán tử nhị phân, toán tử quan hệ và các toán tử khác

Số: có thể được sử dụng là:

• Số thập lục phân (hexadecimal = hex, có cơ số 16): H, h

• Số thập phân (decimal, có cơ số 10): D, d hoặc không cần ghi

• Số bát phân (octal, có cơ số 8): O, o, Q, q

• Số nhị phân (binary, có cơ số 2): B, b

Chú ý: Với số hex nếu kí tự số hex đầu tiên bên trái là chữ (từ A đến F) thì phải có thêm kí tự số 0 ở trước

 Ký tự: Cho phép tối đa 2 ký tự nằm giữa 2 dấu nháy (‘) có thể được dùng làm toán hạng trong biểu thức

Chúng ta cũng có thể sử dụng ký tự làm toán hạng cho dữ liệu tức thời

 Chuỗi ký tự (character string):

Có thể kết hợp với chỉ dẫn DB để định nghĩa các thông báo trong chương trình hợp ngữ

Hướng dẫn này sẽ tạo ra một vùng nhớ dữ liệu chứa các mã ASCII tương ứng, bao gồm 50H (chữ P), 72H (chữ r), 65H (chữ e), và lưu trữ tại địa chỉ kytu.

 Bộ đếm vị trí (location counter):

Ký tự ‘$’ trong chương trình biên dịch được sử dụng để xác định địa chỉ của từng mã lệnh dựa trên chỉ dẫn ORG, và nó sẽ trả về giá trị hiện tại của bộ đếm vị trí.

3.2 Các toán tử số học (arithetic operation)

• Toán tử cộng “+” expr + expr

• Toán tử trừ “-” expr - expr

• Toán tử nhân “×” expr * expr

• Toán tử chia “/” expr / expr

• Toán tử chia lấy phần dư “mod” expr MOD expr

Trong đó expr là biểu thức

• Toán tử NOT: NOT expr lấy bù đảo từng bit

• Toán tử SHR expr SHR n dịch sang phải n bit

• Toán tử SHL expr SHL n dịch sang trái n bit

• Toán tử AND expr AND expr and từng cặp bit tương ứng

• Toán tử OR expr OR expr or từng cặp bit tương ứng

• Toán tử XOR expr XOR expr xor từng cặp bit tương ứng

Trong đó expr là biểu thức và x là số vị trí cần dịch

3.4 Các toán tử quan hệ (relation operators)

• NE không bằng nhau (not equal)

• LT < nhỏ hơn (less than)

• LE lớn hơn (greater than)

• GE >= lớn hơn hay bằng (greater than or equal)

Kết quả luôn trả về đúng (FFFFH) hoặc sai (0000H

• Toán tử LOW expr có chức năng lấy kết quả byte thấp của expr

• Toán tử HIGH expr có chức năng lấy kết quả byte cao của expr

3.6 Thứ tự ưu tiên các toán tử

Danh sách quyền ưu tiên của các toán tử được sắp theo thứ tự từ cao nhất đến thấp nhất như bảng sau:

5 EQ NE LT LE GT GE = 6 NOT

Khi các toán tử được sử dụng có quyền ưu tiên ngang nhau thì việc tính toán ra giá trị sẽ bắt đầu tính từ trái sang phải

4 Các điều khiển của ASSEMBLER

Là những chỉ thị lệnh cho assembler và được chia ra làm các nhóm như sau:

- Điều khiển trạng thái Assembler: ORG, END, USING

- Định nghĩa ký hiệu: segment, equ, set, data, Idata, Xdata, bit, code

- Khởi tạo hay định nghĩa trong bộ nhớ: DS, DBIT, DB, DW

- Liên kết chương trình: public, extrn, name

- Chọn đoạn: Rseg, Cseg, Dseg, Iseg, Bseg, Xseg

4.1 Điều khiển trạng thái ASSEMBLER

 ORG: có chức năng thay đổi bộ đếm vị trí của segment hiện thời để đặt gốc chương trình mới cho các đoạn chương trình theo sau ORG

Cách sử dụng: ORG expr

ORG 2200h ;khai báo địa chỉ bắt đầu 2200h

ORG ($+1000H) and 0F000h ;khai báo địa chỉ bằng địa chỉ hiện tại cộng

Nếu loại bỏ lệnh AND với F000H, địa chỉ mới sẽ trở thành 3206H, được tính từ 2206H cộng với 1000H Khai báo ORG có thể được sử dụng trong bất kỳ loại segment nào Khi segment hiện tại là tuyệt đối, giá trị sẽ tương ứng với địa chỉ tuyệt đối trong segment đó Ngược lại, nếu segment hiện tại là tái định vị, giá trị của biểu thức ORG sẽ được xử lý như offset của địa chỉ nền trong segment hiện tại.

Sử dụng lệnh USING giúp assembler nhận diện bank thanh ghi hiện tại mà không chuyển đổi giữa các băng thanh ghi Để đảm bảo hoạt động chính xác, người dùng cần khai báo USING và sử dụng các thanh ghi AR0 đến AR7 thay vì R0 đến R7.

67 assembler sẽ tự động sử dụng đúng thanh ghi trong băng thanh ghi mong muốn đó và khi dịch assembler sẽ đổi ARN sang địa chỉ trực tiếp

END: là phát biểu cuối cùng trong tập tin nguồn, những gì sau chỉ dẫn END sẽ không được xử lý

4.2 Chỉ dẫn định nghĩa kí hiệu

Các chỉ dẫn này sử dụng ký hiệu để biểu diễn các segment, thanh ghi, số và địa chỉ, mà không cho phép sử dụng nhãn Các ký hiệu được định nghĩa bởi những chỉ dẫn này là duy nhất, ngoại trừ chỉ dẫn SET, cho phép định nghĩa lại các ký hiệu đó.

EQU hay SET: có chức năng gán 1 ký số hay ký hiệu thanh ghi cho tên ký hiệu được đặt tả

Cách sử dụng: symbol equ expr symbol set expr Trong đó symbol là ký hiệu do người dùng định nghĩa và expr là biểu thức

4.3 Khởi tạo giá trị trong bộ nhớ

+DB (define byte): định nghĩa byte, có chức năng khởi tạo vùng nhớ mã với các giá trị kiểu byte

Cách sử dụng: [label:] db expr [,expr][…]

Trong đó label là nhãn do người dùng định nghĩa và expr là biểu thức

+DW (define word): định nghĩa từ, có chức năng khởi tạo vùng nhớ mã với các giá trị kiểu word

Cách sử dụng: [label:] dw expr [,expr][…]

Trong đó label là nhãn do người dùng định nghĩa và expr là biểu thức

4.4 Định địa chỉ trong bộ nhớ

+DS (định nghĩa vùng lưu trữ) là chỉ dẫn dùng để chỉ định vùng nhớ theo byte, có thể áp dụng cho mọi loại segment ngoại trừ DBIT Cú pháp sử dụng là: [nhãn:] ds biểu thức.

Trong đó label là nhãn do người dùng định nghĩa và expr là biểu thức không có tham chiếu tới

+ Dbit (define bit): định nghĩa vùng lưu trữ dữ liệu bit, có chức năng dành vùng nhớ theo bit trong segment bit

Cách sử dụng: [label:] dbit expr

Trong ngữ cảnh này, label là nhãn do người dùng xác định, trong khi expr là biểu thức không có tham chiếu Khi chương trình gặp chỉ dẫn DBIT, bộ đếm vị trí của segment BIT hiện tại sẽ được tăng thêm số bit tương ứng với giá trị của expr.

5 Hoạt động liên kết (Linker)

- Với những ứng dụng lớn người lập trình thường chia chương trình thành nhiều chương trình con hay các module và có thể tái định vị được

Để tạo ra một module đối tượng tuyệt đối có thể thực thi, cần có chương trình liên kết và định vị để kết hợp các module Tất cả các ký hiệu ngoài phải được thay thế bằng các giá trị chính xác và được lưu trữ trong các tập tin xuất, như minh họa trong hình 7.2.

Hình 7.2 Hoạt động của chương trình linker có tên là RL51

ASM51 sử dụng phương tiện xử lý macro để thay thế chuỗi ký tự, cho phép định nghĩa các phần mã thường xuyên sử dụng chỉ một lần Người dùng có thể sử dụng từ gợi nhớ đơn giản để chèn vào bất kỳ vị trí nào trong chương trình, giúp tối ưu hóa mã nguồn và tăng tính hiệu quả trong lập trình.

Macro có thể được định nghĩa ở bất kỳ vị trí nào trong mã nguồn và có thể được sử dụng giống như các lệnh thông thường khác Cú pháp để định nghĩa macro được quy định như sau:

%*define (call_pattern) (macro_body)

-Trong đó call_pattern là từ gợi nhớ do người dùng định nghĩa và macro_body là thân macro chính là đoạn chương trình thường lặp lại

Để phân biệt các lệnh macro với lệnh thật, người ta thêm ký hiệu “%” trước tên macro Khi thực hiện hợp dịch, tất cả các lệnh trong thân macro sẽ được thay thế vào vị trí gọi chương trình macro.

Ví dụ: Nếu định nghĩa macro sau ở đầu tập tin nguồn

Thì khi gặp phát biểu %push_dptr trong chương trình nguồn thì trình biên dịch sẽ thay thế bằng 2 lệnh trên

PUSH DPH PUSH DPL trong tập tin.lst

- Các tiện lợi khi sử dụng macro:

 Chương trình nguồn có sử dụng macro thì dễ đọc hơn vì từ gợi nhớ của macro cho biết ý nghĩa của công việc phải thực hiện

 Chương trình ngắn gọn hơn nên ít đánh máy hơn

 Sử dụng macro sẽ làm giảm bớt lỗi

 Sử dụng macro giúp cho người lập trình không phải bận rộn với những chi tiết cấp thấp

Bài 1.Điều khiển khối hiển thị LCD (Chương trình điều khiển hiển thị hai dòng Tex tra màn hình LCD sau đó di chuyển hai dòng text kết hợp với bật tắt đèn Backlight)

Bài 2: Truy xuất IC real time DS12887, chương trình đồng hồ báo giờ, phút, giây, thứ ngày, tháng, năm bằng cách truy xuất dữ liệu thời gian từ Realtime, cho phép khởi tạo lại Realtime

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

Trình bày cấu tạo, đặc điểm,ứng dụng của các loại Vi điều khiển được học

Trình bày được sự cần thiết và cơ chế hoạt động của trình dịch hợp ngữ theo nội dung đã học

Trình bày được cấu trúc chung của chương trình hợp ngữ theo nội dung đã học

Lắp ráp các mạch ứng dụng từng phần do giáo viên đề ra

Thực hiện viết các chương trình theo yêu cầu cho trứoc

+ Năng lực tự chủ và trách nhiệm: Đánh giá phong cách, thái độ học tập

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

Kỹ năng đánh giá thực hành là một phần quan trọng trong quá trình học tập của sinh viên, nơi mỗi sinh viên hoặc nhóm học viên thực hiện nhiệm vụ theo yêu cầu của giáo viên Tiêu chí đánh giá dựa trên các nội dung cụ thể, đảm bảo tính chính xác và hiệu quả trong việc đánh giá kỹ năng thực hành của từng cá nhân hoặc nhóm.

- Độ chính xác của công việc

- Tính thẩm mỹ của mạch điện

- Độ an toàn trên mạch điện

- Thời gian thực hiện công việc

- Độ chính xác theo yêu cầu kỹ thuật

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

Hoạt động liên kết (Linker)

- Với những ứng dụng lớn người lập trình thường chia chương trình thành nhiều chương trình con hay các module và có thể tái định vị được

Để kết hợp các module thành một module đối tượng tuyệt đối có thể thực thi được, cần có chương trình liên kết và định vị Tất cả các ký hiệu ngoài sẽ được thay thế bằng các giá trị đúng và được lưu trữ trong các tập tin xuất, như minh họa trong hình 7.2.

Hình 7.2 Hoạt động của chương trình linker có tên là RL51.

Macro

Phương tiện xử lý macro của ASM51 cho phép thay thế chuỗi ký tự bằng cách định nghĩa các phần mã thường sử dụng chỉ một lần thông qua từ gợi nhớ đơn giản Điều này giúp người lập trình có thể chèn từ gợi nhớ vào bất kỳ vị trí nào trong chương trình, tiết kiệm thời gian và công sức.

Macro có thể được định nghĩa ở bất kỳ vị trí nào trong chương trình nguồn và có thể được sử dụng giống như các lệnh khác Cú pháp để định nghĩa macro được trình bày như sau:

%*define (call_pattern) (macro_body)

-Trong đó call_pattern là từ gợi nhớ do người dùng định nghĩa và macro_body là thân macro chính là đoạn chương trình thường lặp lại

Để phân biệt các lệnh macro với lệnh thật, người ta thêm ký hiệu “%” trước tên macro Khi thực hiện hợp dịch, tất cả các lệnh trong thân macro sẽ được thay thế vào vị trí gọi chương trình macro.

Ví dụ: Nếu định nghĩa macro sau ở đầu tập tin nguồn

Thì khi gặp phát biểu %push_dptr trong chương trình nguồn thì trình biên dịch sẽ thay thế bằng 2 lệnh trên

PUSH DPH PUSH DPL trong tập tin.lst

- Các tiện lợi khi sử dụng macro:

 Chương trình nguồn có sử dụng macro thì dễ đọc hơn vì từ gợi nhớ của macro cho biết ý nghĩa của công việc phải thực hiện

 Chương trình ngắn gọn hơn nên ít đánh máy hơn

 Sử dụng macro sẽ làm giảm bớt lỗi

 Sử dụng macro giúp cho người lập trình không phải bận rộn với những chi tiết cấp thấp

Bài 1.Điều khiển khối hiển thị LCD (Chương trình điều khiển hiển thị hai dòng Tex tra màn hình LCD sau đó di chuyển hai dòng text kết hợp với bật tắt đèn Backlight)

Bài 2: Truy xuất IC real time DS12887, chương trình đồng hồ báo giờ, phút, giây, thứ ngày, tháng, năm bằng cách truy xuất dữ liệu thời gian từ Realtime, cho phép khởi tạo lại Realtime

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

Trình bày cấu tạo, đặc điểm,ứng dụng của các loại Vi điều khiển được học

Trình bày được sự cần thiết và cơ chế hoạt động của trình dịch hợp ngữ theo nội dung đã học

Trình bày được cấu trúc chung của chương trình hợp ngữ theo nội dung đã học

Lắp ráp các mạch ứng dụng từng phần do giáo viên đề ra

Thực hiện viết các chương trình theo yêu cầu cho trứoc

+ Năng lực tự chủ và trách nhiệm: Đánh giá phong cách, thái độ học tập

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

Đánh giá kỹ năng thực hành là một phần quan trọng trong quá trình học tập của sinh viên Mỗi sinh viên hoặc nhóm học viên sẽ thực hiện các nhiệm vụ theo yêu cầu của giáo viên Tiêu chí đánh giá sẽ được xác định dựa trên các nội dung cụ thể, nhằm đảm bảo tính khách quan và hiệu quả trong việc đánh giá năng lực thực hành của từng học viên.

- Độ chính xác của công việc

- Tính thẩm mỹ của mạch điện

- Độ an toàn trên mạch điện

- Thời gian thực hiện công việc

- Độ chính xác theo yêu cầu kỹ thuật

+ Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác

TẬP LỆNH 8051

Các nhóm lệnh

Tùy thuộc vào cách và chức năng của mỗi lệnh, có thể chia ra thành 5 nhóm lệnh như sau:

- Nhóm lệnh vận truyền dữ liệu

- Nhóm lệnh Boolean (thao tác bit)

- Nhóm lệnh rẽ nhánh chương trình

Cấu trúc chung của mỗi lệnh:

Mã_lệnh Toán_hạng1, Toán_hạng2, Toán_hạng3 Trong đó:

- Mã_lệnh:Tên gợi nhớ cho chức năng của lệnh.(VD như add cho addition)

- Toán_hạng1,Toán_hạng2,Toán_hạng3:Là các toán hạng của lệnh, tùy thuộc vào mỗi lệnh số toán hạng có thể không có, có1, 2 hoặc 3

- RET (Kết thúc chương trình con) Lệnh này không có toán hạng

- JZTEMP(Chuyển con trỏ chương trình đến vị trí TEMP) Chỉ có1 toán hạng

- CJNEA,#20,LOOP (So sánh A với 20, nếu không bằng thì chuyển con trỏ chương trình đến nhãn LOOP).Có 3 toán hạng

Các bạn cần nắm rõ phần cứng, đặc biệt là vùng nhớ Ram của vi điều khiển Chú ý các thuật ngữ sau:

Các byte RAM 8 bit của vi điều khiển được gọi là "ô nhớ" Những ô nhớ có chức năng đặc biệt thường được gọi là "thanh ghi", trong khi các bit đơn lẻ được gọi là "bit nhớ".

Dữ liệu của một ô nhớ là trạng thái (0 hoặc 1) cần thiết lập cho các bit của ô nhớ

2.1.1 Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn:

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này có chức năng cộng giá trị dữ liệu từ thanh ghi A với giá trị dữ liệu từ thanh ghi Rn, và kết quả sẽ được lưu trữ tại thanh ghi A Sau khi thực hiện, lệnh cũng tác động đến thanh trạng thái PSW.

Kết quả : A có giá trị là 28H

R1 vẫn giữ nguyên giá trị là 08H

2.1.2 Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct:

- Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này cộng giá trị dữ liệu trong thanh ghi A với giá trị dữ liệu tại ô nhớ có địa chỉ trực tiếp, và kết quả sẽ được lưu trữ lại trong thanh ghi A Thực hiện lệnh này cũng ảnh hưởng đến thanh trạng thái PSW.

2.1.3 Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp:

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này cộng giá trị dữ liệu trong thanh ghi A với giá trị dữ liệu từ ô nhớ có địa chỉ tương ứng với thanh ghi Ri Sau khi thực hiện, kết quả sẽ được lưu trữ trong thanh ghi A và lệnh này cũng tác động đến thanh trạng thái PSW.

2.1.4 Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu xác định:

- Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này có chức năng cộng giá trị dữ liệu trên thanh ghi A với một giá trị xác định, và sau khi thực hiện, kết quả sẽ được lưu trữ lại trong thanh ghi A Ngoài ra, lệnh này cũng ảnh hưởng đến thanh trạng thái PSW.

2.1.5 Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn có số nhớ ở cờ C:

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

- Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên thanh

Lệnh 74 ghi giá trị Rn và cộng thêm giá trị của số nhớ trên cờ C, sau khi thực hiện, kết quả sẽ được lưu ở thanh ghi A Lệnh này cũng tác động đến thanh trạng thái PSW.

2.1.6 Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct và giá trị số nhớ ở cờ C

- Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này thực hiện việc cộng giá trị dữ liệu trong thanh ghi A với giá trị từ ô nhớ có địa chỉ trực tiếp, đồng thời cộng thêm giá trị từ cờ C Kết quả sau khi thực hiện lệnh sẽ được lưu trữ trong thanh ghi A và ảnh hưởng đến thanh trạng thái PSW.

2.1.7 Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp và số nhớ ở cờ C

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này cộng giá trị dữ liệu trong thanh ghi A với giá trị từ ô nhớ có địa chỉ tương ứng với thanh ghi Ri, đồng thời cộng thêm giá trị từ cờ C Kết quả của phép cộng sẽ được lưu trữ trong thanh ghi A và tác động đến thanh trạng thái PSW.

2.1.8 Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu xác định và số nhớ ở cờ C

- Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này có công dụng cộng giá trị dữ liệu trong thanh ghi A với một giá trị xác định, đồng thời cộng thêm giá trị từ số nhớ trên cờ C Sau khi thực hiện lệnh, kết quả sẽ được lưu trữ trong thanh ghi.

A Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW

2.1.9 Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn và số nhớ ở cờ C

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này thực hiện việc trừ giá trị dữ liệu trong thanh ghi A với giá trị trong thanh ghi Rn và trừ thêm giá trị nhớ trên cờ C Sau khi thực hiện, kết quả được lưu trữ lại trong thanh ghi A, đồng thời ảnh hưởng đến thanh trạng thái PSW.

2.1.10 Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct và số nhớ ở cờ C

- Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này có chức năng trừ giá trị dữ liệu trong thanh ghi A với giá trị từ ô nhớ có địa chỉ trực tiếp, đồng thời trừ thêm giá trị từ cờ C Kết quả sau khi thực hiện lệnh sẽ được lưu lại trong thanh ghi A, và lệnh này cũng ảnh hưởng đến thanh trạng thái PSW.

2.1.11 Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp và số nhớ ở cờ C

 Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

 Thời gian thực hiện: 1 chu kì máy

Lệnh này có chức năng trừ giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu từ ô nhớ có địa chỉ tương ứng với giá trị của thanh ghi Ri, đồng thời trừ thêm giá trị nhớ trên cờ C Sau khi thực hiện, kết quả sẽ được lưu trữ trong thanh ghi A và lệnh này sẽ tác động đến thanh trạng thái PSW.

2.1.12 Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu xác định và số nhớ ở cờ C

- Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

- Thời gian thực hiện: 1 chu kì máy

Lệnh này có chức năng trừ giá trị dữ liệu trong thanh ghi A với một giá trị xác định, đồng thời trừ thêm giá trị nhớ trên cờ C Sau khi thực hiện, kết quả sẽ được lưu trữ trong thanh ghi A và lệnh này sẽ ảnh hưởng đến thanh trạng thái PSW.

2.1.13.Lệnh tăng giá trị dữ liệu trên thanh ghi A lên 1 đơn vị

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

- Công dụng: Tăng giá trị dữ liệu lưu giữ trên thanh ghi A lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW

2.1.14.Lệnh tăng giá trị dữ liệu trên thanh ghi Rn lên 1 đơn vị

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

- Công dụng: Tăng giá trị dữ liệu lưu giữ trên thanh ghi Rn lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW

2.1.15.Lệnh tăng giá trị dữ liệu ở ô nhớ có địa chỉ direct lên 1 đơn vị

- Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

- Thời gian thực hiện: 1 chu kì máy

- Công dụng: Tăng giá trị dữ liệu ở một ô nhớ có địa chỉ direct lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW

2.1.16.Lệnh tăng giá trị dữ liệu ở ô nhớ có địa chỉ gián tiếp lên 1 đơn vị

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

Công dụng của lệnh này là tăng giá trị dữ liệu tại ô nhớ có địa chỉ bằng giá trị dữ liệu trên thanh Ri lên 1 đơn vị mà không làm ảnh hưởng đến các cờ nhớ trên PSW.

2.1.17.Lệnh tăng giá trị của con trỏ dữ liệu DPTR lên 1 đơn vị

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 2 chu kì máy

- Công dụng: Tăng giá trị dữ liệu của thanh ghi con trỏ dữ liệu DPTR lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW

2.1.18 Lệnh giảm giá trị dữ liệu trên thanh ghi A xuống 1 đơn vị

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

- Công dụng: Giảm giá trị dữ liệu lưu giữ trên thanh ghi A xuống 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW

2.1.19 Lệnh giảm giá trị dữ liệu trên thanh ghi Rn xuống 1 đơn vị:

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

- Công dụng: Giảm giá trị dữ liệu lưu giữ trên thanh ghi Rn xuống 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW

2.1.20.Lệnh giảm giá trị dữ liệu ở ô nhớ có địa chỉ direct xuống 1 đơn vị

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

- Công dụng: Giảm giá trị dữ liệu ở ô nhớ có địa chỉ direct xuống 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW

2.1.21.Lệnh giảm giá trị dữ liệu ở ô nhớ có địa chỉ gián tiếp xuống 1 đơn vị

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 1 chu kì máy

Công dụng của lệnh này là giảm giá trị dữ liệu tại ô nhớ có địa chỉ Ri xuống 1 đơn vị, trong khi không làm ảnh hưởng đến các cờ nhớ trên thanh trạng thái PSW.

2.1.22.Lệnh nhân thanh ghi A với thanh ghi B

- Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

- Thời gian thực hiện: 4 chu kì máy

BỘ ĐỊNH THỜI

Khởi tạo và truy xuất thanh ghi Timer

Timer - Đọc thời gian đang hoạt động

3 Khởi tạo và truy suất thanh ghi

4 Truyền thông đa xử lý 2.75 0.25 2.5

3 Thiết kế chương trình dùng ngắt 1.25 0.25 1

6 Đồ thị thời gian của ngắt 2.75 0.25 2.5

12 Bài 12: Lập trình và mô phỏng một số chương trình ứng dụng 18 1.5 15.5 1

1 Lập trình giao tiếp với 8 LED đơn 3 0.25 2.75

2 Lập trình giao tiếp với 2 LED 7 đoạn 3 0.25 2.75

3 Lập trình giao tiếp với ma trận phím bấm 3 0.25 2.75

4 Lập trình giao tiếp với LCD 3 0.25 2.75

5 Lập trình giao tiếp với động cơ 2.5 0.25 2.25

6 Lập trình giao tiếp điều khiển van từ, xi lanh 2.5 0.25 2.25

BÀI 1: TỔNG QUAN VỀ CÁC HỆ VI XỬ LÝ

Mã bài: MĐ18-01 Giới thiệu

Kỹ thuật vi xử lý đang được giảng dạy phổ biến tại các trường Đại học và Cao đẳng trên toàn quốc Tuy nhiên, lĩnh vực này vẫn chưa được ứng dụng một cách triệt để trong các hệ thống điều khiển, đo lường và quản lý dây chuyền công nghiệp.

- Trình bày được một số hệ đếm, và các mã thường dùng trong hệ vi xử lý

- Tính toán, chuyển đổi được các phép toán nhị phân

- Trình bày được cách biểu diễn thông tin trong các hệ vi xử lý

- Rèn luyện tính tư duy, tác phong trong công nghiệp

1 Biểu diễn thông tin trong các hệ vi xử lý:

1.1 Mã hóa các thông tin không số

1.1.1 Mã hóa chữ và dữ liệu kiểu văn bản Đơn vị cơ sở của dữ liệu văn bản là chữ Chữ ở đây được hiểu theo nghĩa rộng, không chỉ là các chữ cái Latinh mà kể cả chữ số, các dấu chính tả, các dấu toán học, các kí hiệu để trình bày Mặt khác không phải dân tộc nào cũng dùng chữ Latinh nên đối với một số dân tộc có thể có những chữ riêng Chúng ta dùng thuật ngữ ký tự

(character) với ý nghĩa là một ký hiệu dùng trong văn bản

Khi sử dụng vùng nhớ k bit để mã hóa một ký tự, chỉ có thể biểu diễn tối đa 2^k ký tự, do chỉ có 2^k mã nhị phân khác nhau Điều này lý giải tại sao người Mỹ chỉ cần 7 bit để mã hóa các ký tự của họ, trong khi để bao gồm các ký tự châu Âu, Hy Lạp hay Nhật Bản, cần phải sử dụng mã 16 bit.

Văn bản được hiểu là một chuỗi ký tự, với nội dung như sách và thơ được lưu trữ trong máy tính, minh họa cho thông tin văn bản Hầu hết các máy tính và môi trường lập trình hiện nay sử dụng một byte để mã hóa mỗi ký tự.

Trong nguyên tắc mã hóa, giá trị sai có thể được biểu diễn bằng bit 0 và giá trị đúng bằng bit 1 Tuy nhiên, việc sử dụng đến từng bit rất hiếm gặp, vì cơ chế địa chỉ hóa thường hoạt động ít nhất ở mức byte Do đó, một byte thường được sử dụng để mã hóa các giá trị logic.

Dữ liệu loại logic chỉ có hai trạng thái đối lập: đúng hoặc sai, có hoặc không Thông tin kiểu logic được xử lý thông qua các phép toán so sánh và các phép toán logic như "và", "hoặc", cũng như phép phủ định "không".

Nguyên tắc mã hóa giá trị logic sử dụng bit 0 để biểu thị giá trị sai và bit 1 để biểu thị giá trị đúng Tuy nhiên, trong thực tế, việc sử dụng mức bit hiếm khi xảy ra vì cơ chế địa chỉ hóa thường được thực hiện ít nhất ở mức byte Do đó, một byte thường được dùng để mã hóa các giá trị logic.

1.2 Mã hóa các thông tin số:

Nếu dùng 1 byte (8 bit) để biểu diễn các số nguyên không dấu (số tự nhiên) thì ta có thể biểu diễn được 2n = 28 = 256 số từ 0 đến 255

Nếu dùng 1 byte để biểu diễn các số nguyên có dấu thì có thể biểu diễn được

Số nguyên được biểu diễn trong hệ nhị phân 2n = 28, tương đương với 256 số từ -128 đến 127 Khoảng số nguyên này chỉ có thể từ -128 đến 127 do cần một bit để biểu diễn dấu, trong đó bit biểu diễn dấu là bit MSB.

Trong hệ thống số, bit cao nhất (MSB) xác định dấu của số: MSB = 1 cho số âm và MSB = 0 cho số dương Số dương lớn nhất với MSB = 0 là 0111 1111, tương đương với 127 Đối với số âm, thường sử dụng phương pháp biểu diễn số bù hai, trong đó số âm nhỏ nhất được biểu diễn là 1000.

1.3 Biểu diễn dữ liệu số trong máy tính:

Để đạt hiệu quả cao trong việc xử lý, lưu trữ và truyền thông tin, cần tổ chức và biểu diễn thông tin một cách hợp lý trong máy tính điện tử Dữ liệu, được coi là hình thức biểu diễn thông tin, chính là các thông tin đã được mã hóa dưới dạng nhị phân đối với máy tính.

Dữ liệu - thông tin được máy tính xử lý có thể có các dạng khác nhau

Hình 1.1 Phân loại các dạng dữ liệu cơ bản

Máy tính có khả năng thực hiện các phép toán trên số, xử lý thông tin chữ viết và thông tin logic, cũng như quản lý các dữ liệu đa phương tiện như âm thanh và hình ảnh Hơn nữa, máy tính còn có thể xử lý tri thức một cách hiệu quả.

Thông tin về một đối tượng có thể rất phức tạp và được thể hiện qua nhiều loại dữ liệu khác nhau, chẳng hạn như tên, nơi sinh, ngày sinh, lương và ảnh chân dung Để lưu trữ trên máy tính, tất cả các dữ liệu số, phi số và tri thức đều được mã hóa bằng mã nhị phân Do đó, dù bản chất của dữ liệu có khác nhau, chúng đều được số hóa.

1.4 Bản chất vật lý của thông tin trong các hệ vi xử lý Đối với bộ nhớ trong, các thông tin sau khi mã hóa dưới dạng nhị phân được đưa vào bộ nhớ theo quy ước Mỗi ngăn của ô nhớ sẽ lưu giữ một trong hai trạng thái được quy ước là một trong hai bit 0 hoặc 1

Khi sử dụng chiều của từ thông để mã hóa, sẽ không thể phân biệt các bit giống nhau đứng liền nhau Thông thường, các bit được ghi theo kiểu điều tần, với các biến thể của từ trường để thể hiện chúng, thay vì dựa vào chiều của từ thông.

Đĩa từ chứa 12 vùng nhiễm, và việc ghi dữ liệu trên đĩa này khá phức tạp Ngoài việc lưu trữ dữ liệu, người ta còn ghi các thông tin địa chỉ và thông tin đồng bộ, giúp đảm bảo việc đọc thông tin chính xác.

2 Cấu trúc của hệ vi xử lý và máy vi tính:

2.1 Lịch sử phát triển các trung tâm vi xử lý:

CỔNG NỐI TIẾP (SERIAL PORT)

Thanh ghi điều khiển

Cổng nối tiếp trong 8051 chủ yếu được sử dụng cho các ứng dụng truyền thông với máy tính hoặc vi điều khiển khác Hai thanh ghi chính liên quan đến cổng nối tiếp là SCON và SBUF Bên cạnh đó, thanh ghi PCON (không có địa chỉ bit) chứa bit 7 tên là SMOD, quy định tốc độ truyền của cổng nối tiếp, có thể gấp đôi (SMOD = 1) hoặc không (SMOD = 0) Dữ liệu được truyền nhận qua hai chân cổng P3.0 (RxD) và P3.1 (TxD).

- Port nối tiếp hoạt động song công (full duplex), nghĩa là có khả năng thu và phát đồng thời

- Sử dụng 2 thanh ghi chức năng đặc biệt SBUF (địa chỉ byte là 99H) và SCON (địa chỉ byte là 98H) để truy xuất port nối tiếp)

- Việc ghi lên SBUF sẽ nạp dữ liệu để phát, và việc đọc SBUF sẽ truy xuất dữ liệu đã nhận được thực ra có 2 SBUF riêng rẽ

- SCON chứa các bit trạng thái và điều khiển, thanh này được định địa chỉ bit

- Tần số hoạt động của port nối tiếp hay còngọi là tốc độ baud (baud rate) có thể cố định hoặc thay đổi

Cổng nối tiếp trong 8051 hỗ trợ cả chế độ đồng bộ và bất đồng bộ thông qua hai chân TxD (P3.1) và RxD (P3.0) Chức năng chính của cổng này là chuyển đổi dữ liệu từ dạng song song sang nối tiếp khi xuất ra và ngược lại khi nhập vào.

When operating in asynchronous transmission/reception mode (UART - Universal Asynchronous Receiver/Transmitter), the serial port features three duplex modes (1, 2, and 3) The read/write process of the serial port utilizes the SBUF (Serial Buffer) register, which consists of two distinct registers: one for transmission and another for reception.

8051 có một cổng UART hoạt động theo chuẩn TTL Sau khi khởi động, tất cả các cổng của 8051 đều ở chế độ vào ra số Để sử dụng UART, cần cấu hình cổng này thông qua các thanh ghi điều khiển và ghép nối tương thích với chuẩn RS232.

Hình 10.1 Ghép nối RS232 với 8051

Thanh ghi đệm SBUF và thanh ghi điều khiển SCON là hai thành phần quan trọng trong việc truyền dữ liệu Thanh ghi SBUF, nằm tại địa chỉ 99H, có hai chức năng chính: khi vi điều khiển ghi dữ liệu vào SBUF, dữ liệu đó sẽ được truyền đi, và khi có hệ thống khác gửi dữ liệu đến, dữ liệu sẽ được lưu trữ trong SBUF.

Thanh ghi điều khiển truyền dữ liệu SCON, nằm ở địa chỉ 98H, cho phép truy suất các bit trạng thái và bit điều khiển Các bit điều khiển được sử dụng để thiết lập nhiều kiểu hoạt động truyền dữ liệu khác nhau, trong khi các bit trạng thái cho biết thời điểm kết thúc khi một ký tự được truyền hoặc nhận xong Các bit trạng thái này có thể được kiểm tra trong chương trình hoặc được lập trình để phát sinh ngắt.

Hình 10.2 Sơ đồ của khối truyền dữ liệu nối tiếp

Tần số hoạt động của truyền dữ liệu nối tiếp, hay còn gọi là tốc độ BAUD, là số lượng bit dữ liệu được truyền đi trong một giây Tốc độ này có thể hoạt động ở chế độ cố định, sử dụng dao động để đảm bảo việc truyền tải thông tin chính xác và hiệu quả.

104 trên chip) hoặc có thể thay đổi Khi cần tốc độ Baud thay đổi thì phải sử dụng Timer 1 để tạo tốc độ baud

Nội dung thanh ghi SCON FE/SM0 SM1 SM2 REN TB8 RB8 TI RI

Bit Ký hiệu Địa chỉ

Lỗi khung (Framing Error) được đánh dấu khi phát hiện sự cố tại bitstop và cần phải được xóa bằng phần mềm Bit FE chỉ có thể được truy xuất khi bit SMOD bằng 0.

SM0 Serial port Mode bit 0–Xác định chế độ cho cổng nối tiếp

SCON.6 SM1 9Eh Serial port Mode bit1

SM0 SM1 Môtả Tốc độ baud

SCON.5 SM2 9Dh SerialportModebit2–Chế độ đa xử lý

=1:cho phép truyền thông đa xử lý trong chế độ 2 và 3

SCON.4 REN 9Ch ReceptionEnablebit–Cho phép thu

=1:cho phép thu tại cổng nối tiếp

SCON.3 TB8 9Bh Transmitter Bit–Bit truyền thứ 9 trong chế độ 2 và 3

Giá trị khi reset: 00h, cho phép định địa chỉ bit

1.2.Thanh ghi BDRCON (Baud Rate Control Register)

Nội dung thanh ghi BDRCON

- - - BRR TBCK RBCK SPD SRC

Bit Ký hiệu Mô tả

4 BRR Baud Rate Runcontrol bit–Cho phép hoạt động

=0:cấm bộ tạo tốc độ baud nội(internal baud rate generator) hoạt động

=1:cho phép bộ tạo tốc độ baud nội (internal baud rate generator) hoạt động

3 TBCK Transmission Baud rate generator selection bit for UART–Chọn bộ tạo tốc độ baud truyền là bộ tạo tốc độ nội (=1) hay bằng timer(=0)

2 RBCK Reception Baud rate generator selection bit for UART–Chọn bộ tạo tốc độ baud nhận là bộ tạo tốc độ nội (=1) hay bằng timer(=0)

1 SPD Baud Rate Speed control bit for UART–Chọn tốc độ baud là nhanh (=1)hay chậm(=0)

Bit Ký hiệu Địa chỉ

SCON.2 RB8 9Ah ReceiverBit–Bit nhận thứ 9 trong chế độ 2 và 3 Trong chế độ 1, nếu SM2=0 thì RB8= stopbit

SCON.1 TI 99h Transmit Interrupt flag–Cờ ngắt phát Được đặt bằng 1 khi kết thúc quá trình truyền và xóa bằng phần mềm

SCON.0 RI 99h Receive Interrupt flag–Cờ ngắt thu Được đặt bằng 1khi nhận xong dữ liệu và xóa bằng phần mềm

In Mode 0 for UART, the SRC Baud Rate Source select bit determines the baud rate by choosing between the quartz oscillator (set to 0) or the baud rate generator (set to 1).

Giá trị khi reset :00h, không cho phép định địa chỉ bit

 Ngoài ra còn có các thanh ghi SBUF(Serial Buffer ), BRL( Baud Rate Reload), SADEN (Slave Address Mark), SADDR(Slave Address)

 Lưu ý rằng các thanh ghi BDRCON, BRL, SADEN và SADDR chỉ có trong các phiên bản mới của MCS-51

Port nối tiếp của 8051 hoạt động với 4 chế độ khác nhau, được xác định bằng cách thiết lập giá trị cho các bit SM0 và SM1 trong thanh ghi SCON Trước khi tiến hành truyền dữ liệu, cần khởi tạo thanh ghi SCON đúng cách Trong số các chế độ này, có 3 chế độ cho phép truyền không đồng bộ, trong đó mỗi ký tự được gửi hoặc nhận sẽ đi kèm với một bit start và một bit stop, tạo thành một khung dữ liệu.

Để khởi tạo truyền dữ liệu kiểu 1, cần thiết lập 2 bit: SM0 và SM1 với giá trị 01 Đồng thời, bit cho phép thu REN phải được đặt là 1 và cờ ngắt truyền TI cũng cần được kích hoạt với giá trị 1 để sẵn sàng cho quá trình truyền.

Truyền dữ liệu nối tiếp của MCS51 có 4 kiểu hoạt động tùy thuộc theo 4 trạng thái của 2 bit SM0, SM1 được liệt kê như sau:

SM0 SM1 Chế độ Mô tả Tốc độ baud

0 0 0 Thanh ghi dịch Cố định( tần số dao động/12)

0 1 1 UAR T8 bit Thay đổi ( thiết lập bởi bộ định thời)

1 0 2 UAR T9 bit Cố định(tần số dao động/12 hoặc/64)

1 1 3 UAR T9 bit Thay đổi( thiết lập bởi bộ định thời)

- Thanh ghi scon sẽ thiết lập các kiểu hoạt động truyền dữ liệu khác nhau cho MCS51 Cấu trúc của thanh ghi Scon như bảng sau:

SM0 SM1 SM2 REN TB8 RB8 TI RI

Bit Ký hiệu Địa chỉ Mô tả hoạt động

Bit chọn kiểu truyền nối tiếp: bit thứ 0

Bit chọn kiểu truyền nối tiếp: bit thứ 1

Bit cho phép truyền kết nối nhiều vi xử lý ở mode 2 và 3; RI sẽ không tích cực nếu bit thứ 9 đã thu vào là 0

4 REN 9CH Bit cho phép nhận kí tự, REN = 1 sẽ cho phép nhận kí tự

3 TB8 9BH Dùng để lưu bit thứ 9 để truyền đi khi hoạt động ở mode

2 và 3, TB8 bằng 0 hay là do người lập trình thiết lập

2 RB8 9AH Dùng để lưu bit 9 nhận về khi hoạt động ở mode 2 và 3

1 TI 99H Cờ báo hiệu này lên mức 1 khi truyền xong 1 kí tự và xóa bởi người lập trình để sẵn sàng truyền kí tự tiếp theo

0 RI 98H Cờ báo hiệu này lên mức 1 khi nhận xong 1 kí tự và xóa bởi người lập trình để sẵn sàng nhận kí tự dữ liệu tiếp theo

2.1 Thanh ghi dịch 8 bit (chế độ 0)

Hình 10.3 Giản đồ thời gian

+ Để định cấu hình cho truyền dữ liệu nối tiếp ở kiểu 0 thì 2 bit SM1 SM0 = 00

Dữ liệu nối tiếp được nhận và truyền qua chân RxD, trong khi chân TxD được sử dụng để chuyển đổi xung clock Dữ liệu 8 bit luôn bắt đầu với bit có trọng số nhỏ nhất (LSB) Tốc độ Baud được thiết lập cố định tại một tần số nhất định.

112 tần số dao động thạch anh trên Chip

Khi thực hiện lệnh ghi dữ liệu lên thanh ghi sbuf, quá trình truyền dữ liệu bắt đầu Dữ liệu được truyền ra qua chân RxD, trong khi các xung nhịp được phát ra qua chân TxD Mỗi bit chỉ xuất hiện trên chân RxD trong một chu kỳ máy Trong mỗi chu kỳ, tín hiệu xung clock giảm xuống mức thấp tại thời điểm S3P1 và tăng lên mức cao tại thời điểm S6P1, như thể hiện trong giản đồ thời gian hình 10.3.

Biểu đồ thời gian của dữ liệu nối tiếp truyền vào vi điều khiển ở kiểu 0 như sau ( hình 10.4):

Hình 10.4 Biểu đồ thời gian truyền dữ liệu mod 0

Quá trình khởi động truyền dữ liệu bắt đầu khi bit REN được thiết lập thành 1 và cờ nhận RI được đặt thành 0 Nguyên tắc cơ bản là khởi tạo bit REN = 1 ở đầu chương trình để kích hoạt việc truyền dữ liệu, đồng thời xóa bit RI để sẵn sàng nhận dữ liệu Khi bit RI bị xóa, các xung clock sẽ được phát ra qua chân TxD, và khi chu kỳ máy tiếp theo bắt đầu, dữ liệu từ bên ngoài sẽ được dịch vào qua chân RxD.

Một ứng dụng cụ thể của mode 0 là mở rộng số lượng ngõ ra cho MCS51 Cách thực hiện là sử dụng một thanh ghi dịch từ nối tiếp thành song song, nối đến các đường TxD và RxD của MCS51, giúp mở rộng thêm 8 ngõ ra Nếu kết nối nhiều thanh ghi dịch theo chuỗi, số ngõ ra có thể được mở rộng hơn nữa.

Hình 10.5 Một ứng dụng kiểu 0 để tăng thêm ngõ ra bằng thanh ghi dịch

2.2 Chế độ UART 8 bit có tốc độ baud thay đổi ( chế độ 1)

Khởi tạo và truy xuất thanh ghi PORT nối tiếp

3.1 Bit điều khiển cho phép nhận dữ liệu (Receive Enable) Để cho phép thu dữ liệu thì chương trình phải làm cho bit REN = 1 và điều này được thực hiện ở đầu chương trình

Ta có thể khởi tạo cho phép truyền dữ liệu bằng lệnh :

Setb ren hoặc MOV SCON, # Xxx1xxxxb

Bit dữ liệu thứ 9 trong kiểu 2 và kiểu 3 cần được nạp vào bit TB8 thông qua phần mềm, yêu cầu lập trình viên thực hiện trước khi truyền dữ liệu Trong khi đó, bit dữ liệu thứ 9 của dữ liệu thu được sẽ tự động được đặt vào bit RB8.

Phần mềm có thể yêu cầu hoặc không yêu cầu bit dữ liệu thứ 9 trong quá trình truyền dữ liệu, tùy thuộc vào đặc tính của các thiết bị nối tiếp kết nối với nhau Bit dữ liệu thứ 9 đóng vai trò quan trọng trong việc truyền thông giữa nhiều vi xử lý.

3.3 Thêm vào bit chẵn lẻ Parity

Bit thứ 9 thường được sử dụng làm bit kiểm tra chẵn lẻ Trong mỗi chu kỳ máy, giá trị của bit P trong thanh ghi trạng thái PSW sẽ là 1 hoặc 0, tùy thuộc vào quá trình kiểm tra tính chẵn của 8 bit dữ liệu trong thanh ghi A.

Nếu hệ thống truyền dữ liệu yêu cầu 8 bit dữ liệu và 1 bit kiểm tra chẵn, thì các lệnh sau sẽ phát 8 bit từ thanh ghi A cùng với bit kiểm tra chẵn, tạo thành tổng cộng 9 bit.

MOV C,P ;chuyển cờ chẵn lẻ P sang cờ C

MOV TB8,C ;chuyển cờ C sang bit TB8 để chuẩn bị truyền đi

MOV SBUF,A ;truyền dữ liệu 8 bit trong A và bit thứ 9 trong TB8

Nếu kiểm tra lẻ được yêu cầu thì các lệnh trên được sửa lại là:

MOV C,P ;chuyển cờ chẵn lẻ P sang cờ C

CPL C ;nghịch đảo chẵn thành lẻ

MOV TB8,C ;chuyển cờ C sang bit TB8 để chuẩn bị truyền đi

MOV SBUF,A ;truyền dữ liệu 8 bit trong A và bit thứ 9 trong TB8 đi

Trong kiểu 1, ta có thể sử dụng bit kiểm tra chẵn lẻ, với 8 bit dữ liệu bao gồm 7 bit dữ liệu và 1 bit kiểm tra chẵn lẻ Để phát một mã ASCII 7 bit kèm theo 1 bit kiểm tra chẵn vào 8 bit, ta sử dụng lệnh: MOV C, P; đưa Parity chẵn vào C.

MOV ACC.7, C ; Đưa Parity chẳn vào bit MSB của A

MOV SBUF, A ; Gửi bit data cùng bit Parity chẵn

Cờ ngắt RI và cờ phát TI trong thanh ghi SCON đóng vai trò quan trọng trong việc truyền dữ liệu của MCS-51 Cả hai cờ này đều được thiết lập bởi phần cứng nhưng cần phải được xóa bởi phần mềm Cờ RI sẽ được thiết lập ở mức 1 khi quá trình nhận một ký tự hoàn tất, cho biết rằng thanh ghi đệm đã đầy Trạng thái của cờ RI có thể được kiểm tra qua phần mềm hoặc lập trình để tạo ra ngắt Để nhận một ký tự từ thiết bị kết nối với Port nối tiếp, chương trình cần chờ cho đến khi cờ RI được thiết lập.

RI = 1, sau đó xóa cờ RI và đọc ký tự từ thanh ghi SBUF Quá trình này được lập trình như sau :

JNB RI, WAIT :Kiểm tra RI xem có bằng 1 hay không Chờ nếu = 0

CLR RI :khi cờ RI = 1 thì đã nhận xong dữ liệu và xóa cờ RI

MOV A, SBUF :đọc ký tự nhận được từ thanh ghi Sbuf

Cờ TI ở mức 1 cho biết ký tự đã được phát xong và thanh ghi đệm sbuf đã rỗng Để gửi một ký tự đến thiết bị kết nối qua Port nối tiếp, cần kiểm tra xem Port đã sẵn sàng chưa Nếu ký tự trước vẫn đang được gửi, phải chờ cho đến khi quá trình gửi hoàn tất Các lệnh dưới đây được sử dụng để phát một ký tự trong thanh ghi A ra.

JNB TI, WAIT :Kiểm tra TI có bằng 1 hay không và chờ nếu bằng 0

CLR TI :Xóa cờ ngắt thu TI

MOV SBUF,A :Gởi nội dung trong thanh ghi A đi

Truyền thông đa xử lý (Multiprocessor Communications)

Chế độ 2 và 3 trong truyền thông đa xử lý có một dự trù đặc biệt, cho phép thu thập 9 bit dữ liệu, trong đó bit thứ 9 được lưu vào bit RB8 Việc truyền dữ liệu có thể được lập trình để ngắt chỉ xảy ra khi bit Stop được nhận và bit RB8 = 1 Để thực hiện điều này, cần set bit SM2 = 1 trong thanh ghi SCON Kiểu truyền thông này thường được áp dụng trong mạng sử dụng nhiều MCS51, được tổ chức theo cấu hình máy chủ và máy tớ.

Hình 10.8 Kết nối nhiều vi điều khiển

Trong cấu hình kết nối ở trên thì mỗi một vi xử lý tớ (Slave)sẽ có một địa chỉ duy nhất do chúng ta qui định

Khi bộ xử lý chủ cần truyền dữ liệu đến một bộ xử lý tớ, trước tiên, vi xử lý chủ phải gửi một byte địa chỉ để xác định bộ xử lý tớ mà nó muốn kết nối.

Byte địa chỉ và byte dữ liệu có sự khác biệt quan trọng ở bit thứ 9: trong byte địa chỉ, bit thứ 9 có giá trị bằng 1, trong khi đó, trong byte dữ liệu, bit thứ 9 có giá trị bằng 0.

Các vi xử lý tớ (Slave) nhận diện vi xử lý chủ (Master) thông qua byte địa chỉ Khi được phép giao tiếp, vi xử lý tớ sẽ xóa bit SM2 để bắt đầu nhận dữ liệu Ngược lại, các vi xử lý không được phép sẽ giữ nguyên bit SM2=1 để không nhận dữ liệu từ vi xử lý chủ Sau khi hoàn tất kết nối, vi xử lý tớ cần đặt lại bit SM2=1 để sẵn sàng cho các lần kết nối tiếp theo.

Sau khi hoàn tất việc trao đổi dữ liệu, vi xử lý cần truy xuất đến một vi xử lý khác bằng cách tạo ra một địa chỉ mới Vi xử lý tương ứng với địa chỉ đó sẽ được phép hoạt động theo cách đã trình bày trước đó.

Tốc độ baud

Truyền dữ liệu nối tiếp ở kiểu 0 và kiểu 2 có tốc độ truyền cố định Cụ thể, ở kiểu 0, tốc độ truyền đạt 112 lần số dao động trên Chip Khi sử dụng thạch anh 12 MHz, tốc độ truyền của kiểu 0 đạt 1 MHz.

Trong thanh ghi PCON, bit SMOD có vai trò quan trọng trong việc điều chỉnh tốc độ baud Mặc định, sau khi hệ thống được reset, bit SMOD sẽ là 0, cho phép các kiểu truyền dữ liệu hoạt động với tốc độ tiêu chuẩn Khi bit SMOD được đặt thành 1, tốc độ truyền dữ liệu sẽ tăng gấp đôi.

Trong kiểu 2, tốc độ truyền có thể được nâng gấp đôi từ giá trị mặc định 1/64 tần số dao động trên Chip (SMOD = 0) lên 1/32 tần số dao động trên Chip (SMOD = 1), như thể hiện trong hình 10.9.

Để thiết lập bit SMOD trong thanh ghi PCON mà không làm thay đổi các bit khác, cần thực hiện lệnh truy xuất bit, vì thanh ghi PCON không cho phép truy xuất trực tiếp.

Lệnh sau đây set bit SMOD để tăng gấp đôi tốc độ truyền:

OR PCON, #1000 0000b; bit Smod ở vị trí thứ 7

Hình 10.9 Thiết lập tốc độ Baud

Các tốc độ Baud trong kiểu 1 và kiểu 3 của MCS-51 được xác định bởi tốc độ tràn của Timer:

Timer hoạt động ở tần số cao, do đó cần chia cho 32 khi SMOD = 0 và chia cho 16 khi SMOD = 1 trước khi cung cấp xung clock, nhằm thiết lập tốc độ Baud cho Port nối tiếp.

-Tốc độ Baud ở kiểu 1 và 3 của MCS51 được xác định bởi tốc độ tràn của Timer

1 hoặc Timer 2, hoặc cả 2 như hình 10.9

5.1 Sử dụng bộ định thời 1 là xung clock tốc độ baud o Kỹ thuật thường dùng để tạo xung clock tốc độ baud là thiết lập timer 1 hoạt động ở chế độ 8bit tự nạp lại (chế độ định thời 2) và đặt giá trị nạp thích hợp vào thanh ghi TH1 để có tốc độ tràn đúng, từ đó tạo ra tốc độ baud Tốc độ baud =( Tốc độ tràn bộ định thời 1)/32

Ví dụ: Nếu tốc độ baud là 9600

 Tốc độ tràn của bộ định thới00*3207200Hz

 Nếu mạch dao động là 11.059MHz, xung clock của bộ định thời.059M/121583Hz, giá trị nạp choTH11583/307200=3

Tốcđộbaud Tần số thạch anh Giá trị nạp choTH1

Để khởi động port nối tiếp ở chế độ UART 8bit với tốc độ baud 9600, bạn cần viết một chuỗi lệnh sử dụng bộ định thời 1 để cung cấp xung clock cho tốc độ baud Với dao động thạch anh 11.059MHz, các cài đặt cần thiết sẽ đảm bảo port hoạt động chính xác.

- Chế độ 0: tốc độ baud cố định=1/12 tần số thạch anh

- Chế độ 2: tốc độ baud=1/32 tần số thạch anh khi SMOD=1 hay1/64 khi SMOD=0 (SMOD:nằm trong thanh ghi PCON)

Chế độ 1 và 3 của hệ thống xác định tốc độ baud dựa trên tốc độ tràn của timer 1 Đối với dòng vi điều khiển 89x52, timer 2 có thể được sử dụng để tạo tốc độ baud Trong các phiên bản vi điều khiển mới hơn, khả năng này cũng được hỗ trợ.

114 dùng bộ tạo tốc độ nội (INT_BRG–Internal Baud Rate Generator) Việc xác định nguồn tạo tốc độ baud mô tả như hình 10.9 và bảng sau:

TCLK RCLK TBCK RBCK Clock phát Clock thu

5.2 Tạo tốc độ baud bằng Timer1

Để tạo tốc độ baud bằng timer 1, cần thiết lập timer 1 ở chế độ 8 bit tự nạp lại Giá trị nạp ban đầu của timer 1, được lưu trong thanh ghi TH1, phụ thuộc vào tốc độ baud cần tạo theo công thức cụ thể.

Baud rate xF x x xbaud rate

   Đặt giá trị cho thanh ghi TH1 tùy thuộc vào tốc độ mong muốn theo bảng sau:

Bảng các giá trị nạp thông dụng trong truyền thông nối tiếp:

5.3 Tạo tốc độ baud bằng Timer2

Khi sử dụng Timer2 để thiết lập tốc độ baud, xung clock cho thu và phát có thể được tách riêng bằng cách sử dụng TCLK hoặc RCLK Xung clock còn lại sẽ được xác định bởi Timer1 Thêm vào đó, có thể tạo ngắt cho Timer2 bằng cách đặt bit EXEN2=1, với ngắt được kích hoạt khi có cạnh âm tại chân T2EX.

Hình 10.10.Tạo tốc độ baud bằng timer2 5.4 Bộ tạo tốc độ baud nội (INT_BRG–InternalBaudRate Renerator)

Hình 10.11 Bộ tạo tốc độ baud nội

 Giá trị nạp trong bộ tạo tốc độ nội chứa trong thanh ghi BRL và được xác định theo công thức sau:

Trong đó SMOD1 nằm trong thanh ghi PCON và SPD nằm trong thanh ghi

Bài 1 Điều khiển khối LED đơn :

Bài 2:Chương trình đếm 000 đến 255 dùng ngắt ngoài

Bài 3: Viết chương trình điều khiển 8 LED chớp tắt

Bài 4: Viết chương trình điều khiển 16 LED sáng dần?

Bài 5: Viết chương trình điều khiển động cơ bước?

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

+ Về kiến thức: Trình bày được cấu tạo và các chế độ làm việc của cổng truyền thông nối tiếp theo nội dung đã học

- Thực hiện cổng truyền thông nối tiếp đúng yêu cầu kỹ thuật

- Thực hiện thu phát dữ liệu nối tiếp bằng 8051 đạt yêu cầu kỹ thuật

- Thực hiện viết các chương trình theo yêu cầu cho trứoc

+ Năng lực tự chủ và trách nhiệm: Đánh giá phong cách, thái độ học tập

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

Đánh giá kỹ năng thực hành của từng sinh viên hoặc nhóm học viên là một phần quan trọng trong quá trình học tập, giúp đảm bảo rằng họ thực hiện công việc theo yêu cầu của giáo viên Tiêu chí đánh giá được xác định dựa trên các nội dung cụ thể, nhằm phản ánh đúng năng lực và sự tiến bộ của học viên.

- Tính thẩm mỹ của mạch điện

- Độ an toàn trên mạch điện

- Thời gian thực hiện công việc

- Độ chính xác theo yêu cầu kỹ thuật

+ Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác

NGẮT

Xử lý ngắt

Hình 11.4 minh họa các tín hiệu điều khiển ngắt, trong đó nổi bật là hai tín hiệu IT0 và IT1 Hai bit này có vai trò quan trọng trong việc lựa chọn nguyên nhân gây ra hai ngắt ngoài INTR0 và INTR1.

Nếu giá trị bằng 1, ngắt sẽ xảy ra tại sườn âm, còn nếu giá trị bằng 0, ngắt sẽ xảy ra tại sườn dương Khi một ngắt xuất hiện và được CPU chấp nhận, chương trình chính sẽ bị ngắt Các thao tác tiếp theo sẽ được thực hiện sau đó.

Hoàn tất việc thực thi lệnh hiện hành

Bộ đếm chương trình PC được cất vào stack

Trạng thái của ngắt hiện hành được lưu giữ lại

Các ngắt được chận lại ở mức ngắt

Bộ đếm chương trình PC nạp địa chỉ vector của trình phục vụ ngắt ISR để thực thi công việc của ngắt Quá trình thực thi ISR kết thúc khi gặp lệnh RETI, lệnh này phục hồi giá trị cũ của bộ đếm chương trình PC từ stack và khôi phục trạng thái của ngắt trước đó.

Chương trình con phục vụ ngắt cần đảm bảo không làm mất hoặc sai địa chỉ của PC đã lưu trong ngăn xếp Nếu điều này xảy ra, khi trở lại chương trình chính, CPU sẽ không tiếp tục thực hiện công việc của chương trình chính, dẫn đến việc không xác định được trạng thái và vị trí của CPU, từ đó mất quyền kiểm soát vi xử lý.

Trong vi điều khiển, bộ nhớ ngăn xếp được sử dụng như bộ nhớ RAM nội, giúp lưu trữ tạm thời dữ liệu Ngược lại, trong vi xử lý, bộ nhớ ngăn xếp có vai trò khác biệt, phục vụ cho các tác vụ xử lý.

Để sử dụng bộ nhớ ngoài, bạn cần khởi tạo bộ nhớ ngăn xếp trong vùng RAM để có thể ghi và đọc dữ liệu Nếu khởi tạo ở vùng EPROM hoặc nơi không thể ghi, địa chỉ và dữ liệu trong bộ nhớ ngăn xếp sẽ bị mất, dẫn đến sai sót trong chương trình Ngoài ra, trong lập trình, việc nhảy từ chương trình con sang chương trình chính để tiếp tục thực hiện là không nên, vì điều này có thể gây tràn bộ nhớ ngăn xếp và ghi đè lên dữ liệu khác, làm sai lệch chương trình.

Trong trường hợp này chúng ta sẽ thấy rằng chương trình chúng ta thực hiện đúng một vài lần và sau đó thì sai

Ngắt do bộ định thời 0 000BH

Ngắt do bộ định thời1 001BH

Ngắt do port nối tiếp 0023H

Ngắt do bộ định thời 2 002BH

Khi một ngắt được chấp nhận, giá trị được nạp cho bộ đếm chương trình (PC) gọi là vector ngắt, là địa chỉ bắt đầu của trình phục vụ ngắt tương ứng Vector reset hệ thống bắt đầu tại địa chỉ 0000H, và khi reset vi điều khiển, thanh ghi PC sẽ bằng 0000H, với chương trình chính bắt đầu tại địa chỉ này Để sử dụng yêu cầu ngắt, chương trình con phục vụ ngắt cần được viết đúng tại địa chỉ tương ứng, ví dụ như ngắt timer T0 phải được viết tại địa chỉ 000BH Do khoảng cách giữa các vector địa chỉ của các nguồn ngắt chỉ có vài ô nhớ, ví dụ vector ngắt INT0 tại 0003H và vector ngắt T0 tại 000BH chỉ cách nhau 9 ô nhớ, nếu chương trình phục vụ ngắt INT0 lớn hơn 9 byte, nó sẽ xung đột với vùng nhớ của ngắt T0 Giải pháp tốt nhất là tại địa chỉ 0003H, viết lệnh nhảy đến một vùng nhớ khác rộng hơn Nếu ngắt T0 và các ngắt khác không được sử dụng, có thể viết chương trình tại đó Chương trình chính luôn bắt đầu tại địa chỉ 0000H sau khi reset, và nếu có sử dụng ngắt, cần dùng lệnh nhảy tại địa chỉ 0000H để chuyển đến vùng nhớ khác rộng hơn để tiếp tục viết chương trình.

8051 có hai ngắt ngoài là INT0 và INT1, được kích hoạt bởi sự kiện mức logic 0 (điện áp thấp gần 0V) hoặc sườn xuống (chuyển từ mức cao xuống mức thấp) tại các chân ngắt tương ứng (P3.2 cho INT0 và P3.3 cho INT1) Kiểu ngắt được lựa chọn thông qua các bit IT (Interrupt Type) trong thanh ghi TCON, nơi 4 bit LSB (bit 0 3) được sử dụng cho ngắt ngoài Nếu bit ITx=1, ngắt ngoài sẽ được chọn theo sườn xuống; ngược lại, nếu bit ITx=0, ngắt ngoài sẽ theo mức thấp Các bit IE là cờ ngắt ngoài, chỉ có tác dụng khi kiểu ngắt được chọn là ngắt theo sườn xuống.

Khi ngắt theo sườn xuống được chọn, ngắt chỉ xảy ra một lần khi có sườn xuống của tín hiệu, và sẽ không có ngắt nào khác cho đến khi có sườn xuống tiếp theo Cờ ngắt IE sẽ được thiết lập khi có sườn xuống và tự động bị xóa khi CPU bắt đầu xử lý ngắt Ngược lại, nếu chọn kiểu ngắt theo mức thấp, ngắt sẽ xảy ra bất cứ khi nào tín hiệu tại chân ngắt ở mức thấp Nếu sau khi xử lý ngắt mà tín hiệu vẫn ở mức thấp, ngắt sẽ tiếp tục cho đến khi tín hiệu trở về mức cao, lúc này cờ ngắt IE không còn ý nghĩa Thông thường, kiểu ngắt hay được chọn là ngắt theo sườn xuống.

Thiết kế chương trình dùng ngắt

 Các bước khi thực hiện một ngắt

- Khi kích hoạt một ngắt bộ vi điều khiển đi qua các bước sau:

 Nó kết thúc lệnh đang thực hiện và lưu địa chỉ của lệnh kế tiếp (PC) vào ngăn xếp

 Nó cũng lưu tình trạng hiện tại của tất cả các ngắt vào bên trong (nghĩa là không lưu vào ngăn xếp)

 Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là bảng véctơ ngắt, nơi lưu giữ địa chỉ của một trình phục vụ ngắt

Bộ vi điều khiển nhận địa chỉ từ bảng véc tơ ngắt và nhảy đến đó để thực hiện trình phục vụ ngắt Quá trình này tiếp tục cho đến khi gặp lệnh cuối cùng của ISR là RETI, cho phép trở về từ ngắt.

Khi thực hiện lệnh RETI, bộ vi điều khiển sẽ quay trở về địa chỉ nơi nó đã bị ngắt Đầu tiên, nó lấy địa chỉ của bộ đếm chương trình (PC) từ ngăn xếp bằng cách kéo hai byte trên đỉnh ngăn xếp vào PC, sau đó bắt đầu thực hiện các lệnh từ địa chỉ đó.

Ở bước 5, cần lưu ý đến vai trò nhạy cảm của ngăn xếp, do đó, việc thao tác nội dung của ngăn xếp trong ISR cần được thực hiện cẩn thận Đặc biệt, trong ISR và các chương trình con CALL, số lần đẩy (Push) vào ngăn xếp và số lần lấy ra (Pop) từ ngăn xếp phải luôn bằng nhau.

 Thứ tự ưu tiên ngắt

Khi xảy ra nhiều ngắt đồng thời, hoặc khi một ngắt đang được thực hiện, ngắt có độ ưu tiên cao hơn sẽ được xử lý trước nếu có yêu cầu mở ngắt khác.

Có 3 cấp độ ưu tiên ngắt trong 8051:

Ngắt reset là loại ngắt có mức ưu tiên cao nhất, khi xảy ra, tất cả các ngắt khác và chương trình sẽ bị dừng lại, đưa vi điều khiển trở về chế độ khởi động ban đầu.

- Ngắt mức 1, chỉ có reset mới có thể cấm ngắt này

- Ngắt mức 0, các ngắt mức 1 và reset có thể cấm ngắt này

Việc đăt chọn mức ưu tiên ngắt là 1 hoặc 0 thông qua thanh ghi IP Việc xử lý ưu tiên ngắt của 8051 như sau:

Khi một ngắt có độ ưu tiên cao hơn xuất hiện trong lúc đang xử lý một ngắt có độ ưu tiên thấp, ngắt thấp sẽ ngay lập tức bị dừng lại để cho phép ngắt cao hơn được thực hiện.

- Nếu 2 ngắt cùng yêu cầu vào 1 thời điểm thì ngắt có mức ưu tiên hơn sẽ được xử lý trước

- Nếu 2 ngắt có cùng mức ưu tiên cùng yêu cầu vào 1 thời điểm thì thứ tự được chọn như sau:

Chương trình được thực thi độc lập có sử dụng ngắt như sau:

ORG 0000H ;điểm nhập sau khi reset

; các điểm nhập của các ISR

ORG0030H ;điểm nhập chương trình chính

MAIN: ; chương trình chính bắt đầu

3.1Các trình phục vụ ngắt kích thước nhỏ

Các trình phục vụ ngắt cần được khởi động gần đáy bộ nhớ chương trình tại các địa chỉ quy định Mặc dù chỉ có 8 byte giữa các điểm nhập của các trình phục vụ ngắt, dung lượng này thường đủ để thực hiện các công việc yêu cầu và quay trở về chương trình chính Điều này cho thấy rằng các trình phục vụ ngắt cho các ngắt tương ứng thường không dài quá 8 byte.

Nếu có nhiều ngắt được dùng ta phải cẩn thận để đảm bảo các ISR được bắt đầu đúng vị trí mà không tràn sang ISR kế

3.2Các trình phục vụ ngắt kích thước lớn

Nếu cần một trình phục vụ ngắt dài hơn 8 byte, cần di chuyển phương trình đến một vị trí khác trong bộ nhớ chương trình hoặc cho phép nó lấn qua điểm nhập của ISR tiếp theo Thông thường, ISR bắt đầu bằng một lệnh nhảy đến một vùng khác trong bộ nhớ chương trình, nơi ISR có thể được mở rộng nếu cần thiết.

Ngắt cổng nối tiếp

MCS-51 có hai nguồn ngắt từ cổng nối tiếp, bao gồm ngắt phát (TI) và ngắt thu (RI) Cả hai nguồn ngắt này sử dụng chung một địa chỉ ISR, do đó, khi chuyển đến ISR, các cờ ngắt không được xóa tự động bởi phần cứng Việc này cần phải được thực hiện bằng phần mềm, thông qua việc kiểm tra nguyên nhân ngắt (RI hay TI) và xóa bit cờ tương ứng.

Viết chương trình khởi động cổng nối tiếp ở chế độ UART 8 bit với tốc độ truyền

4800 bps Viết ISR cho cổng nối tiếp theo yêu cầu: truyền tuần tự các ký tự từ ‘A’ đến

Cổng nối tiếp 'Z' nhận và xuất ký tự từ P0 mỗi khi có dữ liệu đến, với tần số thạch anh là 11.0592 MHz.

Nội dung thanh ghi SCON:

Chương trình thực hiện như sau:

ORG 0023H ;Địa chỉ ISR của cổng nối tiếp

MOV TL1,#(-6) ; Tốc độ 4800 bps

MOV R7,#’A’ ; Ký tự truyền đầu tiên

MOV IE,#90h ; Cho phép ngắt tại công nối tiếp

SETB TI ;Cho phép truyền

JNB RI,TRANSMIT; Nếu không phải ngắt do nhận ký tự thì truyền

MOV A,SBUF ; Nhận ký tự

MOV SBUF,A ; Truyền ký tự

INC R7 ; Qua ký tự kế

CJNE R7,#’Z’+1, EXITE\SERIAL ; Nếu chưa truyền’Z’ thì

; tiếp tục truyền, ngược lại thì

MOV R7,#’A’ ; bắt đầu truyền từ ký tự ‘A’

Các cổng ngắt ngoài

- Ngắt ngoài xảy ra khi có mức thấp hoặc có cạnh âm trên chân /INT0 hoặc/INT1

Việc chọn các ngắt thuộc tác động cạnh hay các ngắt loại tác động mức được lập trình thông qua các bit IT0 và IT1của thanh ghi TCON

Để đảm bảo việc lấy mẫu chính xác, các chân ngắt ngoài cần được lấy mẫu một lần trong mỗi chu kỳ máy, vì vậy các ngõ vào này phải duy trì ít nhất 12 chu kỳ dao động.

Để đảm bảo việc phát hiện chuyển trạng thái, ngắt ngoài phải duy trì ở mức cao tối thiểu một chu kỳ và sau đó ở mức thấp tối thiểu một chu kỳ Các tín hiệu IE0 và IE1 sẽ tự động được xóa khi CPU trỏ tới trình phục vụ ngắt tương ứng.

Ngắt ngoài phải duy trì trạng thái tích cực cho đến khi yêu cầu ngắt thực sự được tạo ra Sau khi yêu cầu ngắt được thực hiện, nguyên nhân ngắt cần chuyển sang trạng thái thụ động trước khi phục vụ ngắt hoàn tất hoặc trước khi có ngắt mới được phát sinh.

Thông thường, một công việc được thực hiện trong trình phục vụ ngắt khiến cho nguyên nhân ngắt trả tín hiệu yêu cầu ngắt về trạng thái không tích cực.

6 Đồ thị thời gian của ngắt

Trong vi điều khiển 8051, thực tế chỉ có 5 ngắt dành cho người dùng, tuy nhiên, một số nhà sản xuất lại cung cấp thông tin cho rằng có tới 6 ngắt, bao gồm cả lệnh tái thiết lập RESET Các ngắt này được phân bố như sau:

RESET: Khi chân RESET được kích hoạt từ 8051 nhảy về địa chỉ 0000 Đây là địa chỉ bật lại nguồn

Gồm 2 ngắt dành cho các bộ điịnh thời: 1 cho timer0 và 1 cho Timer1 Địa chỉ của các ngắt này là 000B4 và 001B4 trong bảng vector ngắt dành cho Timer0 và Timer1 tương ứng

Các ngắt phần cứng bên ngoài chân 12 (P3.2) và 13 (P3.3) của cổng P3 tương ứng với INT0 và INT1 Những ngắt này còn được gọi là EX1 và EX2, với vị trí bộ nhớ trong bảng vector ngắt là 0003H cho INT0 và 0013H cho INT1.

Truyền thông nối tiếp có một ngắt thuộc về cả thu và phát Địa chỉ của ngắt này trong bảng vector ngắt là 0023H Đồ thị thời gian của ngắt

Các chân P3.2 và P3.3 thường sử dụng cho vào-ra khi các bít INT0 và INT1 trong thanh ghi IE không được kích hoạt Khi các ngắt phần cứng trong thanh ghi IE được kích hoạt, bộ vi điều khiển sẽ trích mẫu trên chân INTn với tín hiệu mức thấp một lần trong mỗi chu kỳ máy Theo dữ liệu từ nhà sản xuất, chân ngắt cần giữ ở mức thấp cho đến khi bắt đầu thực hiện trình phục vụ ngắt ISR; nếu chân INTn trở lại mức cao trước khi thực hiện ISR, sẽ không có ngắt nào xảy ra Tuy nhiên, trong quá trình kích hoạt ngắt theo mức thấp, chân INTn phải được đưa lên mức cao trước khi thực hiện lệnh RETI Nếu chân INTn vẫn ở mức thấp sau lệnh RETI, một ngắt khác sẽ được kích hoạt Do đó, để đảm bảo kích hoạt ngắt phần cứng tại các chân INTn, thời gian tồn tại tín hiệu mức thấp cần khoảng 4 chu trình máy và không được vượt quá.

Hình 11.5 Thời gian tối thiểu của ngắt theo mức thấp (XTAL = 11,0592MHz)

Trong các ngắt sườn, cần duy trì nguồn ngoài ở mức cao tối thiểu bằng một chu trình máy nữa Điều này nhằm đảm bảo bộ vi điều khiển có thể nhận diện sự chuyển dịch từ cao xuống thấp của sườn xung.

Các mức ưu tiên các ngắt khi cấp lại nguồn

Mức ưu tiên cao xuông thấp

Ngắt bộ định thời 0 TF0

Ngắt bộ định thời 1 TF1

Ngắt truyền thông nối tiếp (RI+TI)

Bài 1: Chương trình điều khiển sóng vuông tuần hoàn có tần số 10Hz (sử dụng ngắt

Timer) tại chân P0.0 và hiển thị mức logic tại chân này lên LED0 (LED0 được nối với P0.0)

Bài 2: Viết chương trình điều khiển đèn giao thông ở ngã tư?

Bài 3:Hãy chỉ ra những lệnh để a) cho phép ngắt nối tiếp ngắt Timer 0 và ngắt phần cứng ngoài1(EX1) vàb ) cấm (che) ngắt Timer0 sau đó c)trình bày cách cấm tất cả mọi ngắt chỉ bằng một lệnh duy nhất

Bài 4:Hãy viết chương trình nhân liên tục dữ liệu 8 bít ở cổng P0 và gửi nó đến cổng

Sử dụng bộ Timer0 để tạo ra sóng vuông chu kỳ 200us trên chân P2.1, với tần số của 8051 là XTAL = 11.0592MHz.

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

+ Về kiến thức: Trình bày được tác dụng thực tế của một hệ thống được điều khiển bằng tín hiệu ngắt theo nội dung đã học

- Thực hiện tổ chức ngắt và cơ chế thực hiện chương trình phục vụ ngắt của

8051 đúng yêu cầu kỹ thuật

- Thực hiện tổ chức ngắt đạt yêu cầu kỹ thuật

- Lắp ráp các mạch ứng dụng từng phần do giáo viên đề ra

- Thực hiện viết các chương trình theo yêu cầu cho trước

+ Năng lực tự chủ và trách nhiệm: Đánh giá phong cách, thái độ học tập

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

Đánh giá kỹ năng thực hành là một phần quan trọng trong quá trình học tập của sinh viên Mỗi sinh viên hoặc nhóm học viên cần thực hiện công việc theo yêu cầu của giáo viên Tiêu chí đánh giá sẽ dựa trên các nội dung cụ thể, giúp đảm bảo tính chính xác và công bằng trong quá trình đánh giá.

- Độ chính xác của công việc

- Tính thẩm mỹ của mạch điện

- Độ an toàn trên mạch điện

- Thời gian thực hiện công việc

- Độ chính xác theo yêu cầu kỹ thuật

+ Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác

BÀI 12: LẬP TRÌNH VÀ MÔ PHỎNG MỘT SỐ CHƯƠNG TRÌNH ỨNG

DỤNG Mã bài MĐ18-12 Giới thiệu:

Trong bài học này trình bày một số lập trình mô phỏng các chương trình ứng dụng dùng vi điều khiển trong lĩnh vực điện tử dân dụng

- Phân tích được yêu cầu của thuật toán đặt ra

- Viết đúng chương trình theo yêu cầu thuật toán

- Mô phỏng được mạch điện tử bằng phần mền Protus và sửa lỗi chương trình

- Sáng tạo trong học tập

1 Lập trình giao tiếp với 8 LED đơn

Sử dụng phần mềm Protues để thực hiện việc viết chương trình và biên dịch, kiểm tra lỗi cú pháp của chương trình

Bước 1: Khởi động phần mềm Protues

Bước 2: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình với đuôi “.ASM”

Bước 3: Viết chương trình điều khiển sau:

;CHUONG TRINH DIEU KHIEN 8 LED SANG TAT

Bước 4: Lưu chương trình trên vào máy tính

Bước 5: Thực hiện biên dịch và kiểm tra lỗi chương trình

Bước 6: Khởi động phần mềm ISIS 7 Professional (Protues 7.10)

Bước 7: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển 8 LED đơn nối với Port 0 như Hình 12.1

Bước 8: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 5)

Bước 9: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính

AD7 AD6 AD5 AD4 AD3 AD2 AD1

P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32

M A ẽCH ẹ I EÀ U K H I EÅ N L ED ẹ ễN

Hình Error! No text of specified style in document.1: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển

2 Lập trình giao tiếp với LED 7 đoạn

Sử dụng phần mềm Protues để thực hiện việc viết chương trình và biên dịch, kiểm tra lỗi cú pháp của chương trình

Bước 1: Khởi động phần mềm Protues

Bước 2: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình với đuôi “.ASM”

Bước 3: Viết chương trình điều khiển sau

;CHUONG TRINH DIEU KHIEN HIEN THI 00 -> 99 TREN LED 7 DOAN

;KET NOI: 2 LED ->PORT2, PORT3

MOV CHUC,#01 MOV DONVI,#05 TT: MOV A,DONVI

MOV A,CHUC MOVC A,@A+DPTR MOV P3,A

CALL DL CJNE DONVI,#1,M CJNE CHUC,#3,M1 JMP LL

JMP TT DL: MOV R3,#0FFH

Bước 4: Lưu chương trình trên vào máy tính

Bước 5: Thực hiện biên dịch và kiểm tra lỗi chương trình

Bước 6: Khởi động phần mềm ISIS 7 Professional (Protues 7.10)

Bước 7: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển LED 7 đoạn như Hình 12.2 dưới đây

P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32

Hình 12.2: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển

Bước 8: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 5)

Bước 9: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính

3 Lập trình giao tiếp với ma trận phím bấm

Sử dụng phần mềm Protues để thực hiện việc viết chương trình và biên dịch, kiểm tra lỗi cú pháp của chương trình

Bước 1: Khởi động phần mềm Protues

Bước 2: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình với đuôi “.ASM”

Bước 3: Viết chương trình điều khiển dưới đây vào máy tính

;CHUONG TRINH DIEU KHIEN BAN PHIM MA TRAN 4 X 4

;KET NOI: LED ->PORT1 (CO DEM DAO), KEYPAD ->PORT0

JC MP1 ;KIEM TRA CO NHAN PHIM (C = 1)

MOV A,#0FFH ;KHONG NHAN PHIM A = FFH

MP1: ;CO NHAN PHIM A = MA PHIM

MOV P1,A ;XUAT MA PHIM RA LED HIEN THI DANG SO BIN LJMP MAIN ;QUAY LAI KIEM TRA KEYPAD TIEP

SCANKEYPAD: ;CTC QUET BAN PHIM MA TRAN 4 X 4, CO CHONG DOI

MOV R3,#50 ;SO LAN LAP DE CHONG DOI

ACALL GETKEY ;GOI CTC QUET PHIM

JNC NOPRESSED ;C = 0 -> THOAT KHI KHONG CO PHIM NHAN DJNZ R3,BACK ;C = 1 -> CO PHIM NHAN, GIAM SO LAN LAP DE CHONG DOI

MOV A,#0EFH ;BAT DAU TAI COT 0

MOV R6,#4 ;R6 LAM BO DEM COT

MOV A,P0 ;DOC LAI TU PORT 1

ANL A,#0FH ;CACH LY CAC HANG

CJNE A,#0FH,KEYPRESSED ;HANG TICH CUC ?

CLR C ;KHONG CO PHIM DUOC NHAN HAY NHAN NHIEU

CLR C ;TRONG SO CUA COT

MOV A,R7 ;PHUC HOI MA QUET

MOV R5,#4 ;DUNG R5 LAM BO DEM

RRC A ;QUAY CHO DEN KHI = 0

JNC DONE ;THUC THI XONG KHI C = 0

INC R6 ;CONG 4 CHO DEN KHI TIM THAY HANG TICH CUC INC R6

Bước 4: Lưu chương trình trên vào máy tính

Bước 5: Thực hiện biên dịch và kiểm tra lỗi chương trình

Bước 6: Khởi động phần mềm ISIS 7 Professional (Protues 7.10)

Bước 7: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển bàn phím như Hình 12.3 dưới đây

AD0 AD1 AD2 AD3 AD4 AD5 AD6

AD7 AD6 AD5 AD4 AD3 AD2 AD1

P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32

M A ẽCH ẹ I EÀ U K H I EÅ N BA ỉ N PH Í M M A T R A Ä N 4 x 4

Hình 12.3: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển

Bước 8: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 5)

Bước 9: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính

4 Lập trình giao tiếp với LCD

Sử dụng phần mềm Protues để thực hiện việc viết chương trình và biên dịch, kiểm tra lỗi cú pháp của chương trình

Bước 1: Khởi động phần mềm Protues

Bước 2: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình với đuôi “.ASM”

Bước 4: Viết chương trình điều khiển dưới đây vào máy tính

;CHUONG TRINH DIEU KHIEN LCD HIEN THI 2 DONG CHU DUNG YEN

ACALL LCDINIT ;KHOI TAO LCD

ACALL DISP_FLINE ;HIEN THI DONG 1

ACALL DISP_SLINE ;HIEN THI DONG 2

LCDINIT: ;CTC KHOI TAO LCD

CLR RS ;RS = 0 - GUI LENH

CLR RW ;RW = 0 - WRITE LCD MODE

MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7

ACALL SENDCOMMAND ;GUI LENH RA LCD

MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7

ACALL SENDCOMMAND ;GUI LENH RA LCD

MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7

ACALL SENDCOMMAND ;GUI LENH RA LCD

MOV DATABUS,#0CH ;CODE = 0CH - CHO PHEP LCD HIEN THI

ACALL SENDCOMMAND ;GUI LENH RA LCD

MOV DATABUS,#01H ;CODE = 01H - XOA LCD

ACALL SENDCOMMAND ;GUI LENH RA LCD

MOV DATABUS,#06H ;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI

ACALL SENDCOMMAND ;GUI LENH RA LCD

SENDCOMMAND: ;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD

CLR RS ;RS = 0 - GUI LENH

SETB RS ;RS = 1 - GUI DU LIEU

PULSE_EN: ;TAO XUNG ENABLE DE CHUYEN THONG

TIN (COMMAND/DATA) VAO LCD

CLR RW ;RW = 0 - WRITE LCD MODE

SETB EN ;EN = 1 - XUNG ENABLE

;KIEM TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN

;MOV TH0,#HIGH(-2000) ;LENH NAY DUOC THAY THE CHO DOAN MA KIEM TRA DUOI DAY KHI

;MOV TL0,#LOW(-2000) ;CHAY CHUONG TRINH NAY TRONG PHAN MEM MO PHONG TOPVIEW

MOV DATABUS,#0FFH ;CAU HINH PORT 1 CHO CHE DO PORT NHAP

SETB RW ;RW = 1 - READ LCD MODE

CLR RS ;RS = 0 - GUI LENH

SETB EN ;EN = 1 - XUNG ENABLE

BUSY: ;BUSY = 0 -> HOAN TAT, BUSY = 1 -> DANG THUC HIEN

MOV A,DATABUS ;DOC DU LIEU TU LCD

JB ACC.7,BUSY ;KIEM TRA CO BUSY

BUSY2: ;KIEM TRA CO BAO BAN (BUSY FLAG) LAN THU HAI

MOV A,DATABUS ;DOC DU LIEU TU LCD

JB ACC.7,BUSY2 ;KIEM TRA CO BUSY LAN 2

CLR RW ;RW = 0 - WRITE LCD MODE (THOAT CHE DO

READ, TRO VE CHE DO WRITE)

DISP_FLINE: ;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM

MOV DATABUS,#80H ;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H

ACALL SENDCOMMAND ;GUI LENH RA LCD

MOV DPTR,#FLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD

ACALL WRITE ;GUI VUNG DU LIEU SANG LCD

DISP_SLINE: ;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM

MOV DATABUS,#0C0H ;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H

ACALL SENDCOMMAND ;GUI LENH RA LCD

MOV DPTR,#SLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD

ACALL WRITE ;GUI VUNG DU LIEU SANG LCD

WRITE: ;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H

MOV A,#0 ;OFFSET DAU TIEN TRONG VUNG DU LIEU

MOVC A,@A+DPTR ;LAY DU LIEU TU VUNG DU LIEU

CJNE A,#99H,WRITE_CONT ;KIEM TRA LAY HET DU LIEU TRONG VUNG DU LIEU - KET THUC LA 99H

WRITE_CONT: ;KHONG PHAI LA DU LIEU KET THUC -

CHUA LAY HET DU LIEU

MOV DATABUS,A ;CHUYEN DU LIEU CAN GUI RA PORT

ACALL SENDDATA ;GUI DU LIEU RA LCD

INC DPTR ;CHUYEN SANG DU LIEU KE TIEP

SJMP WRITE ;QUAY TRO VE DE GUI DU LIEU KE

FLINE_DATA: ;DU LIEU HIEN THI DONG 1

DB 99H ;MA KET THUC DONG (TU CHON)

SLINE_DATA: ;DU LIEU HIEN THI DONG 2

DB 99H ;MA KET THUC DONG (TU CHON)

Bước 4: Lưu chương trình trên vào máy tính

Bước 5: Thực hiện biên dịch và kiểm tra lỗi chương trình

Bước 6: Khởi động phần mềm ISIS 7 Professional (Protues 7.10)

Bước 7: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển LCD như Hình 12.4 dưới đây

AD0 AD1 AD2 AD3 AD4 AD5 AD6

AD7 AD6 AD5 AD4 AD3 AD2 AD1

P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32

Hình Error! No text of specified style in document 1: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển

Bước 8: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 5)

Bước 9: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính

5.Lập trình giao tiếp với động cơ bước

Sử dụng phần mềm Protues để thực hiện việc viết chương trình và biên dịch, kiểm tra lỗi cú pháp của chương trình

Bước 1: Khởi động phần mềm Protues

Bước 2: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình với đuôi “.ASM”

Bước 4: Viết chương trình điều khiển dưới đây vào máy tính

;CHUONG TRINH DIEU KHIEN DONG CO QUAY LIEN TUC 1 CHIEU-DIEU KHIEN KICH 1 CUON DAY

CALL DELAY MOV P1,#44H CALL DELAY MOV P1,#44H CALL DELAY MOV P1,#11H CALL DELAY JMP MAIN DELAY :

Bước 4: Lưu chương trình trên vào máy tính

Bước 5: Thực hiện biên dịch và kiểm tra lỗi chương trình

Bước 6: Khởi động phần mềm ISIS 7 Professional (Protues 7.10)

Bước 7: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển LCD như Hình 12.5 dưới đây

Hình Error! No text of specified style in document 5: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển.

Bước 8: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 5)

Bước 9: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính

6.Lập trình giao tiếp điều khiển van từ, xi lanh

Yêu cầu quy trình công nghệ như hình sau

Hệ thống nắn tròn niềng xe hoạt động dựa trên nguyên lý khi nhấn nút START SOL1, xilanh giữa sẽ di chuyển về phía trước, đẩy dàn khuôn trong ra Khi xilanh giữa chạm vào công tắc hành trình, tiếp điểm thường hở của công tắc sẽ đóng lại, cung cấp điện cho TIMER hoạt động.

Khi TIMER có điện, tiếp điểm thường đóng của TIMER sẽ cấp điện cho SOL2 điều khiển 4 xilanh ngoài đi vào ép niềng xe

Sau khi thời gian đã được đặt cho TIMER, các tiếp điểm của TIMER sẽ chuyển đổi trạng thái, ngắt điện R2 và đồng thời cấp điện cho R3 Điều này xảy ra nhờ tính chất của van đảo chiều.

Khi 140 đóng SOL2, hệ thống sẽ mất điện và điều khiển 4 xilanh quay về Khi R3 có điện, SOL1 sẽ mất điện và trở về trạng thái thường hở ban đầu của công tắc hành trình Lúc này, cả mạch trên và mạch dưới đều hở, để hệ thống hoạt động trở lại, cần nhấn nút START.

Bước 1: Khởi động phần mềm Protues

Bước 2: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình với đuôi “.ASM”

Bước 4: Viết chương trình điều khiển vào máy tính

Bước 4: Lưu chương trình trên vào máy tính

Bước 5: Thực hiện biên dịch và kiểm tra lỗi chương trình

Bước 6: Khởi động phần mềm ISIS 7 Professional (Protues 7.10)

Bước 7: Vẽ sơ đồ thiết kế mạch mô phỏng

Bước 8: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 5)

Bước 9: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính.

LẬP TRÌNH MÔ PHỎNG CHƯƠNG TRÌNH ỨNG DỤNG

Lập trình giao tiếp với LED 7 đoạn

Lập trình giao tiếp với ma trận phím bấm

4 Lập trình giao tiếp với LCD 3 0.25 2.75

5 Lập trình giao tiếp với động cơ 2.5 0.25 2.25

6 Lập trình giao tiếp điều khiển van từ, xi lanh 2.5 0.25 2.25

BÀI 1: TỔNG QUAN VỀ CÁC HỆ VI XỬ LÝ

Mã bài: MĐ18-01 Giới thiệu

Hiện nay, kỹ thuật vi xử lý đang được giảng dạy phổ biến tại các trường Đại học và Cao đẳng trên toàn quốc Tuy nhiên, lĩnh vực này vẫn chưa được khai thác triệt để trong các hệ thống điều khiển và đo lường của dây chuyền công nghiệp.

- Trình bày được một số hệ đếm, và các mã thường dùng trong hệ vi xử lý

- Tính toán, chuyển đổi được các phép toán nhị phân

- Trình bày được cách biểu diễn thông tin trong các hệ vi xử lý

- Rèn luyện tính tư duy, tác phong trong công nghiệp

1 Biểu diễn thông tin trong các hệ vi xử lý:

1.1 Mã hóa các thông tin không số

1.1.1 Mã hóa chữ và dữ liệu kiểu văn bản Đơn vị cơ sở của dữ liệu văn bản là chữ Chữ ở đây được hiểu theo nghĩa rộng, không chỉ là các chữ cái Latinh mà kể cả chữ số, các dấu chính tả, các dấu toán học, các kí hiệu để trình bày Mặt khác không phải dân tộc nào cũng dùng chữ Latinh nên đối với một số dân tộc có thể có những chữ riêng Chúng ta dùng thuật ngữ ký tự

(character) với ý nghĩa là một ký hiệu dùng trong văn bản

Khi sử dụng một vùng nhớ k bit để mã hóa một ký tự, tối đa chỉ có thể biểu diễn 2^k ký tự do chỉ có 2^k mã nhị phân khác nhau có thể tạo ra Điều này lý giải tại sao người Mỹ chỉ cần 7 bit để mã hóa các ký tự của họ; trong khi đó, để bao gồm các ký tự từ các ngôn ngữ Châu Âu, Hy Lạp hay Nhật Bản, cần phải sử dụng mã 16 bit.

Văn bản được hiểu là một chuỗi ký tự, ví dụ như nội dung của sách và bài thơ được lưu trữ trong máy tính Hầu hết các máy tính và môi trường lập trình hiện nay sử dụng một byte để mã hóa mỗi ký tự.

Nguyên tắc mã hóa giá trị sai bằng bit 0 và giá trị đúng bằng bit 1 thường ít được áp dụng ở mức bit, vì cơ chế địa chỉ hóa chủ yếu sử dụng ít nhất ở mức byte Do đó, một byte thường được sử dụng để mã hóa các giá trị logic.

Dữ liệu loại logic chỉ thể hiện hai trạng thái đối lập: đúng và sai, hoặc tồn tại và không tồn tại Thông tin kiểu logic bị ảnh hưởng bởi các phép toán so sánh, cũng như các phép toán logic như “và”, “hoặc” và phép phủ định “không”.

Nguyên tắc mã hóa giá trị sai bằng bit 0 và giá trị đúng bằng bit 1 thường ít được áp dụng ở mức bit, vì cơ chế địa chỉ hóa thường sử dụng ít nhất ở mức byte Do đó, một byte vẫn được dùng để mã hóa các giá trị logic.

1.2 Mã hóa các thông tin số:

Nếu dùng 1 byte (8 bit) để biểu diễn các số nguyên không dấu (số tự nhiên) thì ta có thể biểu diễn được 2n = 28 = 256 số từ 0 đến 255

Nếu dùng 1 byte để biểu diễn các số nguyên có dấu thì có thể biểu diễn được

Số nguyên được biểu diễn trong hệ nhị phân 2n = 28, cho phép 256 giá trị từ -128 đến 127 Khoảng số nguyên này bao gồm -128 đến 127 do cần 1 bit để biểu diễn dấu, với bit MSB (Most Significant Bit) được sử dụng cho mục đích này.

Trong hệ thống số, bit cao nhất (MSB) được sử dụng để phân biệt số âm và số dương: MSB = 1 cho số âm và MSB = 0 cho số dương Số dương lớn nhất với MSB = 0 là 0111 1111, tương đương với 127 Đối với số âm, cách biểu diễn phổ biến nhất là kiểu số bù hai, trong đó số âm nhỏ nhất được biểu diễn là 1000.

1.3 Biểu diễn dữ liệu số trong máy tính:

Để đạt hiệu quả cao trong việc xử lý, lưu trữ và truyền thông tin, việc tổ chức và biểu diễn thông tin trong máy tính điện tử một cách hợp lý là rất cần thiết Dữ liệu, được hiểu là hình thức biểu diễn thông tin, chính là các thông tin đã được mã hóa dưới dạng nhị phân trong máy tính.

Dữ liệu - thông tin được máy tính xử lý có thể có các dạng khác nhau

Hình 1.1 Phân loại các dạng dữ liệu cơ bản

Máy tính có khả năng thực hiện các phép tính với số liệu, xử lý thông tin văn bản và logic, cũng như quản lý các nội dung đa phương tiện như âm thanh và hình ảnh Ngoài ra, máy tính còn có thể xử lý và quản lý tri thức một cách hiệu quả.

Thông tin về một đối tượng có thể rất phức tạp và được thể hiện qua nhiều loại dữ liệu khác nhau, như tên và nơi sinh là văn bản, ngày sinh và lương là số, và ảnh chân dung là hình ảnh Để lưu trữ trong máy tính, tất cả dữ liệu, dù là số hay phi số, đều được mã hóa bằng mã nhị phân Điều này cho thấy mọi dữ liệu, dù có bản chất khác nhau, đều được số hóa.

1.4 Bản chất vật lý của thông tin trong các hệ vi xử lý Đối với bộ nhớ trong, các thông tin sau khi mã hóa dưới dạng nhị phân được đưa vào bộ nhớ theo quy ước Mỗi ngăn của ô nhớ sẽ lưu giữ một trong hai trạng thái được quy ước là một trong hai bit 0 hoặc 1

Khi sử dụng chiều của từ thông để mã hóa, sẽ không thể phân biệt các bit giống nhau đứng liền nhau Thông thường, các bit được ghi theo kiểu điều tần, với các kiểu biến thiên của từ trường được sử dụng để thể hiện chúng, thay vì dựa vào chiều của từ thông.

Đĩa từ chứa 12 vùng nhiễm, và cách ghi dữ liệu trên đĩa này rất phức tạp Ngoài việc lưu trữ dữ liệu, đĩa còn ghi nhận thông tin địa chỉ và các thông tin đồng bộ, giúp việc đọc thông tin trở nên chính xác hơn.

2 Cấu trúc của hệ vi xử lý và máy vi tính:

2.1 Lịch sử phát triển các trung tâm vi xử lý:

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

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

TÀI LIỆU LIÊN QUAN