Các bộ vi điều khiển thuộc họ mcs51. Bộ vi điều khiển MCS - 51. Sơ đồ khối, ALU, bộ nhớ dữ liệu Lập trình mcs 51

  • 06.11.2021

UDC 681,5, 681.325,5 (075,8)

BBK 32.973.202-018.2 i 73

Shcherbina A.N.Máy tính, hệ thống và mạng. Bộ vi điều khiển và bộ vi xử lý trong hệ thống điều khiển: cheb. trợ cấp / A.N. Shcherbina, P.A. Nechaev- SPb .: Từ Bách khoa. Đại học, 2012.-226 tr.

Tương ứng với nội dung của tiêu chuẩn giáo dục nhà nước đối với các lĩnh vực đào tạo và các chuyên ngành trong lĩnh vực quản lý về hệ thống kỹ thuật, điện và kỹ thuật điện và nội dung của chương trình giảng dạy mẫu mực cho môn học "Máy tính, hệ thống và mạng".

Các vấn đề cơ bản của tổ chức hợp lý của hệ thống vi xử lý được xem xét trên ví dụ về kiến ​​trúc cơ bản của họ vi điều khiển MCS-51 của Intel. Mô tả công nghệ lập trình vi điều khiển bằng ngôn ngữ Assembler và SI.

Nó có thể hữu ích cho sinh viên và giáo viên của các cơ sở kỹ thuật cao hơn, các chuyên gia về tự động hóa các quy trình công nghệ và thiết bị sản xuất, cũng như cho các kỹ sư thiết kế hệ thống vi xử lý.

Đồng thời tuân thủ nội dung tiêu chuẩn giáo dục của nhà nước về các ngành "Vi điều khiển và vi xử lý trong hệ thống điều khiển" và "Thiết bị điện tử tự động hóa" đào tạo cử nhân, kỹ sư và thạc sĩ theo hướng 140400 "Điện và kỹ thuật điện".

Tái bản theo quyết định của Hội đồng Biên tập và Xuất bản

Đại học Bách khoa Bang St.

© Shcherbina A. N., Nechaev P. A., 2012

© Bang Saint Petersburg

Đại học Bách khoa, 2012

ISBN 978-5-7422-3553-8


Giới thiệu .. 7

Chương 1. Kiến trúc của họ MCS51. mười

1.1 Đặc điểm chung 10

1.2 Sơ đồ khối 11



1.3 Mục đích của các kết luận của vi điều khiển 8051 15

1.4 Tổ chức bộ nhớ 17

1.4.1 Bộ nhớ chương trình (ROM) 18

1.4.2 Bộ nhớ dữ liệu (RAM) 19

1.4.3 Các thanh ghi của các chức năng đặc biệt. hai mươi

1.4.4 Thanh ghi cờ (PSW) 23

1.5 Thiết bị điều khiển và đồng bộ hóa 26

1.6 Bố trí các cổng I / O 27

1.6.1 Thông tin chung. 27

1.6.2 Các chức năng thay thế. 27

1.7. Bộ định thời / Bộ đếm cho vi điều khiển 8051. 28

1.7.1. Cấu trúc bộ đếm thời gian. 28

1.7.2 Các phương thức hoạt động của bộ đếm thời gian. ba mươi

1.8. Cổng nối tiếp 32

1.8.1. Cấu trúc cổng nối tiếp. 32

1.8.2. Điều khiển thu phát / thanh ghi trạng thái SCON .. 34

1.8.3. Thanh ghi điều khiển công suất PCON .. 36

1.9. Hệ thống ngắt 37

1.9.1. Cấu trúc hệ thống ngắt. 37

1.9.2 Thực hiện các thường trình ngắt. 40

Chương 2. Các tính năng của vi điều khiển 80C51GB .. 42

2.1 Tính năng 42

2.2 Cổng I / O P0-P5 43

2.2.1 Chức năng của các cổng đầu vào - đầu ra. 43

2.2.2 Ghi vào cổng .. 46

2.3 Các tính năng của hệ thống ngắt 8XC51GB .. 49

Bật / tắt ngắt. 50

Quản lý mức độ ưu tiên ngắt. 51

Ngắt bên ngoài. 54

2.3. Nút ADC 56

2.4. Cơ quan giám sát phần cứng 61

2.5. Đồng hồ phát hiện lỗi 63

2.6. Ma trận bộ đếm lập trình RSA 64

2.6.1. Cấu trúc của PCA .. 64

2.6.2. Thanh ghi chế độ bộ đếm PCA (CMOD) 66

2.6.3. Thanh ghi điều khiển bộ đếm PCA (CON) 67

2.6.4. So sánh / cam kết các mô-đun. 68

2.7. Cổng nối tiếp mở rộng 76

2.8. Bộ hẹn giờ / Bộ đếm 79

Sơ đồ chân của nhóm vi điều khiển 8XC51GB .. 86

Chương 3. Lập trình MK 8051GB .. 89

3.1. Mô hình lập trình 89

3.2 Các kiểu dữ liệu 93

3.3 Các phương pháp xử lý dữ liệu 93

3.4 Hệ thống lệnh 95

3.4.1 Đặc điểm chung. 95

3.4.2 Các loại lệnh. 96

3.4.3 Các loại toán hạng. 97

3.4.4 Các lệnh truyền dữ liệu vi điều khiển. 98

3.4.5 Các lệnh cho các phép toán số học 8051.101

3.4.6 Các lệnh hoạt động logic của vi điều khiển 8051.104

3.4.7 Các lệnh cho hoạt động với các bit của vi điều khiển 8051.106

3.5 Chương trình gỡ lỗi 111

Chương 4. Ngôn ngữ lập trình ASM-51. 112

4.2 Viết chương trình văn bản 113

4.3 Bảng chữ cái của ngôn ngữ. 114

4.4 Định danh. 115

4,5 Các số 117

4.6 Chỉ thị 118

4.7 Thực hiện các chương trình con bằng ngôn ngữ ASM51 122

4.7.1 Cấu trúc của một thủ tục chương trình con trong ngôn ngữ ASM51. 122

4.7.2 Truyền tham số biến cho chương trình con. 123

4.7.3 Thực hiện các chức năng của chương trình con trong ngôn ngữ ASM51. 123

4.7.4 Thực hiện các quy trình xử lý ngắt trong ngôn ngữ ASM51. 124

4.8 Lập trình có cấu trúc trong hợp ngữ. 125

4.9 Các tính năng của việc phát các chương trình đa mô-đun. 126

4.10 Sử dụng các phân đoạn 128

4.10.1 Tách bộ nhớ MK thành các phân đoạn .. 128

4.10.2 Các phân đoạn bộ nhớ tuyệt đối. 129

4.10.2 Các phân đoạn bộ nhớ có thể định vị lại. 131

Chương 5. Ngôn ngữ lập trình С-51. 134

5.1 Đặc điểm chung của ngôn ngữ 134

5.3 Cấu trúc chương trình С-51 136

5.3. Các yếu tố của ngôn ngữ lập trình C-51 138

5.3.1. Ký hiệu .. 138

5.3.2. Đơn vị từ vựng, dấu phân cách và việc sử dụng dấu cách. 141

5.3.3 Định danh .. 142

5.3.4 Từ khóa. 143

5.3.5 Hằng số .. 143

5.4. Biểu thức trong toán tử ngôn ngữ 146

lập trình C-51 146

5.5. Ưu tiên cho Hoạt động 148

5.6. Các toán tử của ngôn ngữ lập trình C-51 149

5.6.1. Các toán tử khai báo. 150

5.6.2 Các toán tử thực thi .. 150

5.6.3 Toán tử gán. 151

5.6.4 Toán tử điều kiện. 151

5.6.5 Toán tử có cấu trúc (). 152

5.6.6 Toán tử vòng lặp cho. 152

5.6.7 Toán tử của vòng lặp với việc kiểm tra điều kiện cho đến phần thân của vòng lặp while. 153

5.6.8 Toán tử của vòng lặp với việc kiểm tra điều kiện sau phần thân của vòng lặp do while. 154

5.6.9 Ngắt người vận hành. 155

5.6.10 Người vận hành tiếp tục. 155

5.6.11 Người điều khiển công tắc lựa chọn. 155

5.6.12 Toán tử của goto nhánh không điều kiện. 157

5.6.13 Biểu thức toán tử. 158

5.6.14 Toán tử trả về từ chương trình con trả về. 158

5.6.15 Câu lệnh rỗng. 158

5,7. Khai báo biến trong ngôn ngữ lập trình C-51. 159

5.7.1. Sự định nghĩa biến. 159

5.7.3 Các kiểu dữ liệu số nguyên. 161

5.7.4 Số dấu chấm động. 162

5.7.5 Các biến của kiểu liệt kê. 162

5.7.6. Khai báo mảng trong ngôn ngữ lập trình C-51. 164

5.7.7. Cấu trúc .. 165

5.7.8. Kết hợp (hỗn hợp) 166

5,8. Sử dụng con trỏ trong C-51 167

5.8.1. Khai báo con trỏ. 167

5.8.2. Con trỏ không định kiểu. 168

5.8.3. Con trỏ phụ thuộc bộ nhớ. 169

5,9. Khai báo các loại biến mới 169

5.10. Khởi tạo dữ liệu 170

5.11. Sử dụng chương trình con trong ngôn ngữ lập trình C-51. 170

5.11.1. Định nghĩa các chương trình con. 171

5.11.2. Các tham số của chương trình con. 173

5.11.3. Khai báo trước các chương trình con. 174

5.11.4 Gọi các chương trình con .. 176

5.11.5 Lệnh gọi đệ quy của các chương trình con. 176

5.11.6 Các quy trình xử lý ngắt. 177

5.11.7 Phạm vi của các biến và chương trình con.178

5.12. Các chương trình đa phương thức 179

Chương 6. Chuẩn bị các chương trình trong môi trường phát triển tích hợp Keil μVision2. 182

6.1 Tạo dự án bằng ngôn ngữ ASM-51 182

6.2 Ví dụ về việc tạo một dự án bằng ngôn ngữ C cho bộ điều khiển đào tạo trong môi trường phát triển tích hợp Keil μVision2 188

Chương 7. Mô tả bộ điều khiển đào tạo .. 199

7.1. Cấu trúc bộ điều khiển 199

7.2. Không gian địa chỉ 200

7.2.1. Cấp phát bộ nhớ. 200

7.2.2 Bộ nhớ ngoài. 201

7.2.3. Bộ nhớ dữ liệu trong. 202

7.3. Ánh xạ cổng I / O 202

7.4. Cổng nối tiếp ……………………………… ... 203

7,5. Làm việc với LCD 205

7.6. Bảng điều khiển ………………………………………………… 213

PHỤ LỤC P2 CẤU TRÚC CỦA BÁO CÁO LAO ĐỘNG …… ..217

Phụ lục A3 Các mã hướng dẫn máy. 217

Tài liệu tham khảo ... 224


Giới thiệu

Trong sự phát triển của các chuyên ngành liên quan đến tự động hóa các quá trình công nghệ và sản xuất, việc nghiên cứu vi điều khiển là một trong những mảng quan trọng.

Không ngừng phát triển và xuất hiện ngày càng nhiều vi điều khiển và vi xử lý 16 và 32-bit trên thế giới, nhưng thị phần lớn nhất của thị trường vi xử lý thế giới vẫn thuộc về các thiết bị 8-bit. Theo tất cả các dự báo của các công ty phân tích trong tương lai gần, vị trí hàng đầu của vi điều khiển 8-bit trên thị trường thế giới sẽ vẫn được duy trì.

Hiện tại, trong số tất cả các bộ vi điều khiển 8-bit, họ MCS-51 chắc chắn dẫn đầu về số lượng chủng loại và số lượng các công ty sản xuất các sửa đổi của nó. Nó lấy tên từ đại diện đầu tiên của họ này - vi điều khiển 8051. Một bộ thiết bị ngoại vi thành công, sự lựa chọn linh hoạt của bộ nhớ chương trình bên ngoài hoặc bên trong và giá cả hợp lý đã đảm bảo thành công của bộ vi điều khiển này trên thị trường.

Ưu điểm của dòng MCS-51:

· Kiến trúc, là một tiêu chuẩn trên thực tế;

· Bề rộng phi thường của gia đình và sự đa dạng của các khả năng;

· Có sẵn các phiên bản bộ vi xử lý hiệu suất cao và mở rộng;

· Một số lượng đáng kể các phát triển phần mềm và phần cứng có sẵn miễn phí;

· Dễ dàng lập trình phần cứng, bao gồm cả lập trình trong mạch;

· Chi phí thấp và sẵn có của các chip cơ bản;

Sẵn có các phiên bản chuyên biệt của bộ điều khiển cho các điều kiện sử dụng đặc biệt

· Có sẵn các phiên bản bộ điều khiển với mức độ nhiễu điện từ thấp hơn;

· Được biết đến rộng rãi trong số các nhà phát triển thế hệ cũ, cả trên thế giới và các nước SNG;

· Hỗ trợ về kiến ​​trúc bởi các tổ chức giáo dục hàng đầu thế giới.

Và cuối cùng là ưu điểm chính: đã nắm vững con chip cơ bản của gia đình, bạn có thể dễ dàng bắt tay vào làm việc với những “quái vật” điện toán như vi điều khiển Cygnal, Dallas Semiconductor, Analog Devices, Texas Instruments.

Họ MCS-51 bao gồm nhiều loại vi mạch từ vi điều khiển đơn giản nhất đến phức tạp nhất. Ngày nay có hơn 200 sửa đổi của họ vi điều khiển 8051, được sản xuất bởi gần 20 công ty. Mỗi năm, ngày càng có nhiều biến thể của các đại diện của họ này xuất hiện.

Các hướng phát triển chính là:

· Tăng hiệu suất (tăng tần số xung nhịp và thiết kế lại kiến ​​trúc);

· Giảm điện áp cung cấp và tiêu thụ điện năng;

· Tăng dung lượng RAM và bộ nhớ FLASH trên chip với khả năng lập trình trong mạch;

· Đưa các thiết bị phức tạp như hệ thống điều khiển ổ đĩa, giao diện CAN và USB, v.v. vào ngoại vi vi điều khiển.

Các bộ vi điều khiển thuộc họ MCS-51 cho phép bạn thực hiện cả nhiệm vụ điều khiển cho các thiết bị khác nhau và thực hiện các nút mạch tương tự riêng lẻ. Tất cả các vi mạch của họ này hoạt động với cùng một tập lệnh. Hầu hết chúng được làm trong các trường hợp giống hệt nhau với cùng một sơ đồ chân (đánh số các chân cho vỏ). Điều này làm cho nó có thể sử dụng vi mạch của các nhà sản xuất khác nhau cho thiết bị đã phát triển mà không làm thay đổi sơ đồ mạch của thiết bị và chương trình.

Các nhà sản xuất chính của các giống cây thuộc họ thứ 51 trên thế giới là Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems và một số hãng khác.

Đặc điểm của các bộ vi điều khiển tương tự thuộc họ MCS-51 (Intel 8XC51FA, 8XC51GB, 80C152) với các khả năng mở rộng được đưa ra trong Bảng. TRONG 1.

Bảng B.1

RAM ROM PCA ADC WDT T / C Sau khi sanh. Kênh truyền hình Đặc thù
Atmel: AT89C2051
- - - - UART Flash 2 Kb
AT89C4051 - - - - UART Flash 4Kb
AT89S4D12 128 nghìn - - - UART, SPI Flash 4Kb
Chất bán dẫn DALLAS: DS5000FP
- - - + UART Bộ tải Bootstrap
DS5001FP - - - + UART Bộ tải Bootstrap
DS8xC520 16 nghìn - - + 2xUART 2 DPTR
SIEMENS: C505C
16 nghìn - + + UART, CÓ THỂ 8 DPTR
C515C 64 nghìn - + + UART + SSC + CÓ THỂ 4 PWM, 8 DPTR
Philips: * 89C51RA +
- + - + UART 2 DPTR, 4 lv. ngắt, hết giờ, Flash 8K
P51XAG1x 8 nghìn - - + 2 UART
Intel: 8xC51RA
8 nghìn - + + UART 4 cấp độ IRQ, hết giờ
8XC196KC 64 nghìn 16 nghìn - + - UART 3 PWM
80C196KB 64 nghìn 8 nghìn - + - UART PWM

Chương 1. Kiến trúc của họ MCS51

Bộ vi điều khiển chip đơn MCS-51 8 bit đã trở nên rất phổ biến trong các bộ điều khiển vi xử lý do kiến ​​trúc được thiết kế tốt của chúng. Kiến trúc của vi điều khiển là một tập hợp các tài nguyên phần cứng bên trong và bên ngoài có thể truy cập được bằng phần mềm và một tập hợp các hướng dẫn. Kiến trúc của dòng MCS-51 phần lớn được xác định trước bởi mục đích của nó - việc xây dựng các thiết bị kỹ thuật số nhỏ gọn và giá rẻ. Các bộ vi điều khiển thực hiện tất cả các chức năng của một máy vi tính sử dụng một vi mạch duy nhất được gọi là máy tính một chip (OEVM).

Intel đã phát hành khoảng 50 mẫu dựa trên lõi hoạt động của vi điều khiển Intel 8051. Đồng thời, nhiều hãng khác như Atmel, Philips đã bắt đầu sản xuất vi điều khiển của riêng họ phát triển theo tiêu chuẩn MCS-51.

Đặc điểm chung

Các đặc điểm chính của gia đình:

· Khối xử lý trung tâm (CPU) 8-bit, tập trung vào việc điều khiển các thiết bị điều hành;

· CPU có một mạch tích hợp để nhân và chia số phần cứng 8-bit;

· Sự hiện diện trong tập lệnh của một số lượng lớn các hoạt động để làm việc với các bit có thể định địa chỉ trực tiếp làm cho chúng ta có thể nói về một bộ xử lý để làm việc với dữ liệu bit (bộ xử lý boolean);

· Bộ nhớ chương trình bên trong (nằm trên chip) của loại được che giấu hoặc được lập trình lại, đối với các tinh thể khác nhau có thể tích từ 4 đến 32 Kb, trong một số phiên bản, nó không có;

· Không ít hơn 128 byte RAM dữ liệu thường trú, được sử dụng để tổ chức, đăng ký ngân hàng, ngăn xếp và lưu trữ dữ liệu người dùng;

· Ít nhất 32 đường giao diện hai chiều (cổng), được cấu hình riêng cho thông tin đầu vào hoặc đầu ra;

· Hai bộ đếm / bộ định thời đa chế độ 16 bit được sử dụng để đếm các sự kiện bên ngoài, sắp xếp thời gian trễ và đồng hồ cho cổng giao tiếp;

· Bộ thu phát không đồng bộ song công hai chiều (UART), được thiết kế để tổ chức các kênh giao tiếp giữa vi điều khiển và các thiết bị bên ngoài với một loạt các tốc độ truyền dữ liệu. Có các công cụ để tích hợp phần cứng và phần mềm của vi điều khiển vào một hệ thống được kết nối;

· Hệ thống ngắt ưu tiên hai mức hỗ trợ ít nhất 5 vectơ ngắt từ 4 nguồn sự kiện bên trong và 2 nguồn bên ngoài;

· Tích hợp bộ tạo xung nhịp.

Sơ đồ cấu trúc

Sơ đồ cấu trúc của bộ điều khiển được thể hiện trong hình 1.1 và bao gồm các đơn vị chức năng chính sau: đơn vị điều khiển, đơn vị logic số học, bộ đếm thời gian / bộ đếm, giao diện nối tiếp và bộ ngắt, bộ đếm chương trình, bộ nhớ dữ liệu và bộ nhớ chương trình. Trao đổi hai chiều được thực hiện bằng cách sử dụng đường cao tốc dữ liệu 8 bit nội bộ. Hầu hết tất cả các đại diện của họ MCS-51 được xây dựng theo sơ đồ này. Các vi mạch khác nhau của họ này chỉ khác nhau ở các thanh ghi mục đích đặc biệt (bao gồm cả số lượng cổng).

Bộ điều khiển và định thời- được thiết kế để tạo ra các tín hiệu đồng bộ hóa và điều khiển đảm bảo sự phối hợp hoạt động chung của các đơn vị OEVM trong tất cả các chế độ hoạt động được phép của nó. Bộ phận điều khiển bao gồm:

một thiết bị để hình thành các khoảng thời gian;

I / O logic;

đăng ký các lệnh;

sổ đăng ký kiểm soát tiêu thụ điện;

bộ giải mã các lệnh, logic điều khiển máy tính.

Lúa gạo. 1.1. Sơ đồ khối của bộ điều khiển I8051.

Thiết bị định hình khe thời gian nhằm mục đích hình thành và phát hành các tín hiệu đồng bộ nội bộ của các pha, đồng hồ và chu kỳ. Số chu kỳ máy xác định khoảng thời gian thực hiện lệnh. Hầu hết tất cả các lệnh OEVM được thực hiện trong một hoặc hai chu kỳ máy, ngoại trừ các lệnh nhân và chia, thời gian thực hiện là bốn chu kỳ máy. Hãy ký hiệu tần số của dao động chính bằng F g Thời gian của chu kỳ máy là 12 / F g hoặc 12 chu kỳ của tín hiệu của dao động chính. Logic đầu vào - đầu ra được thiết kế để nhận và phát tín hiệu cung cấp trao đổi thông tin với các thiết bị bên ngoài thông qua các cổng đầu vào / đầu ra P0-P3.

Đăng ký lệnh nhằm mục đích ghi và lưu trữ mã hoạt động 8 bit của lệnh đang được thực thi. Mã hoạt động, với sự trợ giúp của bộ giải mã lệnh và logic điều khiển máy tính, được chuyển đổi thành một chương trình vi mô để thực hiện lệnh.

Đăng ký kiểm soát tiêu thụ (PCON) cho phép bạn dừng vi điều khiển để giảm tiêu thụ điện năng và giảm mức độ nhiễu từ vi điều khiển. Có thể giảm thêm mức tiêu thụ điện năng và giảm tiếng ồn bằng cách dừng bộ dao động chính của bộ vi điều khiển. Điều này có thể đạt được bằng cách lật một chút trong PCON thanh ghi điều khiển tiêu thụ. Đối với n-MOS (sê-ri 1816 hoặc IC nước ngoài không có chữ "c" ở giữa), Thanh ghi điều khiển tiêu thụ PCON chỉ chứa một bit để điều khiển tốc độ truyền của cổng nối tiếp SMOD và không có bit điều khiển công suất.

Đơn vị logic số học (ALU) là một thiết bị tám bit song song thực hiện các phép toán số học và logic. ALU bao gồm:

thanh ghi tích lũy, thanh ghi giữ TMP1 và TMP2;

ROM của hằng số;

bộ cộng;

thanh ghi bổ sung (thanh ghi B);

pin (ACC);

thanh ghi trạng thái chương trình (PSW).

Đăng ký bộ tích lũy và thanh ghi giữ- các thanh ghi tám bit dùng để nhận và lưu trữ các toán hạng trong suốt thời gian hoạt động trên chúng. Các thanh ghi này không thể truy cập theo chương trình.

Hằng số ROM cung cấp việc tạo mã hiệu chỉnh để biểu diễn dữ liệu thập phân-nhị phân, mã mặt nạ cho các phép toán bit và mã hằng số.

Bộ cộng tám bit song song là một mạch kiểu tổ hợp với mang tuần tự, được thiết kế để thực hiện các phép tính số học cộng, trừ và các phép tính logic của phép cộng, nhân, bất bình đẳng và trùng.

Đăng ký B- một thanh ghi tám bit được sử dụng trong các phép toán nhân và chia. Đối với các hướng dẫn khác, nó có thể được xem như một sổ đăng ký siêu hoạt động bổ sung.

Ắc quy- một thanh ghi tám bit được thiết kế để nhận và lưu trữ kết quả thu được khi thực hiện các phép toán số học-lôgic hoặc các phép toán dịch chuyển

Giao diện nối tiếp và khối ngắt (PIP) nhằm mục đích tổ chức đầu vào-đầu ra của các luồng thông tin tuần tự và tổ chức hệ thống ngắt chương trình. Khối bao gồm:

Bộ đệm PIP;

kiểm soát logic;

sổ đăng ký kiểm soát;

bộ đệm máy phát;

bộ đệm máy thu;

bộ thu phát cổng nối tiếp;

thanh ghi ưu tiên ngắt;

thanh ghi cho phép ngắt;

logic xử lý cờ ngắt và mạch tạo véc tơ.

Bộ đếm chương trìnhđược thiết kế để tạo thành địa chỉ 16 bit hiện tại của bộ nhớ chương trình trong và địa chỉ 8/16 bit của bộ nhớ chương trình ngoài. Bộ đếm lệnh bao gồm bộ đệm PC 16 bit, thanh ghi PC và mạch tăng (tăng nội dung lên 1).

Bộ nhớ dữ liệu (RAM) nhằm mục đích lưu trữ tạm thời thông tin được sử dụng trong quá trình thực hiện chương trình.

Cổng P0, P1, P2, P3 là các cổng đầu vào - đầu ra bán hai chiều và được thiết kế để đảm bảo trao đổi thông tin giữa máy tính và các thiết bị bên ngoài, tạo thành 32 đường đầu vào - đầu ra.

Đăng ký trạng thái chương trình (PSW) nhằm mục đích lưu trữ thông tin về trạng thái của ALU trong quá trình thực thi chương trình.

Bộ nhớ chương trình (EPROM)được dùng để lưu trữ các chương trình và là bộ nhớ chỉ đọc (ROM). Các microcircuits khác nhau sử dụng mặt nạ, có thể xóa được tia cực tím hoặc ROM FLASH.

Thanh ghi con trỏ dữ liệu (DPTR)được thiết kế để lưu trữ địa chỉ 16 bit của bộ nhớ dữ liệu ngoài.

Con trỏ ngăn xếp (SP) là một thanh ghi tám bit được thiết kế để tổ chức một vùng đặc biệt của bộ nhớ dữ liệu (ngăn xếp), trong đó bất kỳ ô nhớ nào cũng có thể được lưu trữ tạm thời.

1.3 Gán chân của vi điều khiển 8051(hình 1.2)

· U ss - điện thế của dây chung ("đất");

· U cc - điện áp nguồn chính +5 V;

· X1, X2 - dây dẫn để kết nối bộ cộng hưởng thạch anh;

RST - đầu vào thiết lập lại chung của vi điều khiển;

· PSEN - quyền của bộ nhớ chương trình bên ngoài, chỉ được cấp khi truy cập ROM bên ngoài;

· ALE - nhấp nháy của địa chỉ bộ nhớ ngoài;

· ЕА - vô hiệu hóa bộ nhớ chương trình bên trong; mức 0 tại đầu vào này buộc vi điều khiển chỉ thực thi chương trình từ ROM bên ngoài; bỏ qua nội bộ (nếu sau này có sẵn);

Lúa gạo. 1.2. Gán chân 8051.

· P1 - cổng vào / ra tám chiều bán hướng tám bit, mỗi bit của cổng có thể được lập trình cho cả đầu vào và đầu ra của thông tin, bất kể trạng thái của các bit khác;

P2 - một cổng bán hai chiều tám bit, tương tự như P1, các chân của cổng này được sử dụng để cấp thông tin địa chỉ khi truy cập chương trình bên ngoài hoặc bộ nhớ dữ liệu (nếu cổng này là định địa chỉ 16 bit). Ngoài ra, các chân của cổng được sử dụng trong quá trình lập trình để nhập các bit bậc cao của địa chỉ vào vi điều khiển;

РЗ - một cổng tám chiều bán hướng tám bit, tương tự như P1, các chân của cổng này có thể thực hiện một số chức năng thay thế được sử dụng trong quá trình hoạt động của bộ định thời, cổng đầu vào-đầu ra nối tiếp, bộ điều khiển ngắt và chương trình bên ngoài và bộ nhớ dữ liệu;

· P0 - một cổng thông tin đầu vào - đầu ra hai chiều tám bit được ghép kênh, thông qua cổng này tại các thời điểm khác nhau, byte bậc thấp của địa chỉ và dữ liệu được xuất ra.

Tổ chức bộ nhớ

Toàn bộ dòng MCS-51 có kiến ​​trúc Harvard, nghĩa là, các không gian địa chỉ riêng biệt cho chương trình và bộ nhớ dữ liệu. Cấu trúc bộ nhớ được thể hiện trong Hình. 1.3.

Dung lượng bộ nhớ chương trình bên trong (thường trú) (ROM, EPROM hoặc OTP ROM) nằm trên chip, tùy thuộc vào loại vi mạch, có thể là 0 (ROMless), 4K (đế chết), 8K, 16K hoặc 32K. Nếu cần, người dùng có thể mở rộng bộ nhớ chương trình bằng cách cài đặt ROM bên ngoài. Quyền truy cập vào ROM bên trong hoặc bên ngoài được xác định bởi giá trị của tín hiệu tại chân EA (Truy cập bên ngoài):

EA = V cc (điện áp cung cấp) - quyền truy cập vào ROM bên trong;

EA = V ss (điện thế mặt đất) - truy cập vào ROM bên ngoài.

Đối với các tinh thể không có ROM (ROMless), chân EA phải được kết nối vĩnh viễn với V ss.

Lúa gạo. 1.3. Tổ chức bộ nhớ của họ MCS-51

Nhấp nháy đọc ROM bên ngoài - (Program Store Enable) được tạo ra khi truy cập bộ nhớ chương trình bên ngoài và không hoạt động trong quá trình truy cập ROM nằm trên chip. Khu vực của các địa chỉ thấp hơn của bộ nhớ chương trình được sử dụng bởi hệ thống ngắt. Kiến trúc của chip 8051 cơ bản cung cấp hỗ trợ cho năm nguồn ngắt:

· Hai ngắt bên ngoài;

· Hai ngắt từ bộ định thời;

· Ngắt từ cổng nối tiếp.

Trong bộ lễ phục. 1.4 hiển thị bản đồ của vùng dưới của bộ nhớ chương trình.

Lúa gạo. 1.4. Bản đồ bộ nhớ chương trình thấp hơn

Bộ nhớ chương trình (ROM)

Trong các bộ vi điều khiển thuộc họ 8051, bộ nhớ chương trình và bộ nhớ dữ liệu là các thiết bị độc lập và độc lập, được đánh địa chỉ bằng các lệnh và tín hiệu điều khiển khác nhau.

Bộ nhớ chương trình tích hợp nằm trên chip của vi điều khiển 8051 là 4 KB (trong họ lên đến 32). Khi truy cập bộ nhớ chương trình bên ngoài, tất cả các bộ vi điều khiển thuộc họ 8051 luôn sử dụng địa chỉ 16 bit, địa chỉ này cung cấp cho chúng quyền truy cập vào 64 KB ROM. Bộ vi điều khiển truy cập bộ nhớ chương trình khi đọc opcode và toán hạng (sử dụng bộ đếm lệnh PC), cũng như khi thực hiện các lệnh sao chép một byte từ bộ nhớ chương trình vào pin. Khi các lệnh sao chép dữ liệu được thực hiện, việc định địa chỉ của ô nhớ chương trình mà từ đó dữ liệu sẽ được đọc có thể được thực hiện bằng cách sử dụng cả bộ đếm PC và thanh ghi con trỏ dữ liệu DPTR hai byte đặc biệt.

Bộ nhớ dữ liệu (RAM)

Bộ nhớ dữ liệu trên chip là 128 byte. Bộ nhớ dữ liệu ngoài có thể lên đến 64KB. 32 byte đầu tiên được tổ chức thành bốn ngân hàng thanh ghi đa năng, được chỉ định tương ứng là ngân hàng 0 - ngân hàng 3. Mỗi byte bao gồm tám thanh ghi R0 - R7. Bất cứ lúc nào, chương trình cũng có sẵn, với việc định địa chỉ thanh ghi, chỉ có một ngân hàng thanh ghi, số lượng thanh ghi này được chứa trong bit thứ ba và thứ tư của từ trạng thái của chương trình PSW.

Địa chỉ vùng bit bộ nhớ vi điều khiển 8051

Bảng 1.1

Byte địa chỉ (Hex) Địa chỉ từng bit
D7 D6 D5 D4 D3 D2 D1 D0
2F 7F 7E 7D 7C 7B 7A
2E
2D 6F 6E 6D 6C 6B 6A
2C
2B 5F 5E 5D 5C 5B 5A
2A
4F 4E 4D 4C 4B 4A
3F 3E 3D 3C 3B 3A
2F 2E 2D 2C 2B 2A
1F 1E 1D 1C 1B 1A
0F 0E 0D 0C 0B 0A
20h

Không gian địa chỉ còn lại có thể được nhà phát triển định cấu hình theo quyết định của mình: nó có thể chứa các vùng dữ liệu người dùng, hệ thống và ngăn xếp. Các ô nhớ dữ liệu có thể được truy cập theo hai cách. Cách đầu tiên là định địa chỉ trực tiếp cho một ô nhớ. Trong trường hợp này, địa chỉ ô là toán hạng của lệnh tương ứng. Phương pháp thứ hai là định địa chỉ gián tiếp bằng cách sử dụng các thanh ghi con trỏ R0 hoặc R1: trước khi thực hiện lệnh tương ứng, địa chỉ của ô cần định địa chỉ phải được nhập vào một trong số chúng.

Để truy cập bộ nhớ dữ liệu ngoài, chỉ sử dụng địa chỉ gián tiếp bằng cách sử dụng thanh ghi R0 và R1 hoặc sử dụng thanh ghi con trỏ DPTR 16-bit.

Một phần của bộ nhớ dữ liệu là một vùng bit, trong đó, với sự trợ giúp của các lệnh bit đặc biệt, có thể giải quyết từng bit của ô nhớ. Địa chỉ của các bit có thể định địa chỉ trực tiếp cũng có thể được viết là (ByteAddress). (Bit). Sự tương ứng của hai phương pháp địa chỉ này có thể được xác định từ Bảng. 1.1.

Hệ thống lệnh OMEVM cung cấp khả năng xử lý dữ liệu tuyệt vời, cung cấp khả năng thực hiện các phép toán logic, số học, cũng như điều khiển thời gian thực. Xử lý dữ liệu theo chiều bit, tetrad (4 bit), byte (8 bit) và 16 bit được thực hiện. Họ LSI MCS-51 - 8-bit ОМЭВМ: ROM, RAM, thanh ghi mục đích đặc biệt, ALU và các bus bên ngoài có tổ chức byte. Dữ liệu byte kép chỉ được sử dụng bởi Thanh ghi con trỏ (DPTR) và Bộ đếm lệnh (PC). Cần lưu ý rằng thanh ghi con trỏ dữ liệu có thể được sử dụng như một thanh ghi DPTR hai byte hoặc hai thanh ghi mục đích đặc biệt một byte DPH và DPL. Bộ đếm lệnh luôn được sử dụng như một thanh ghi hai byte. Bộ lệnh OMEVM có 42 ký hiệu lệnh dễ nhớ để cụ thể hóa 33 chức năng của hệ thống này. Cú pháp cho hầu hết các lệnh hợp ngữ bao gồm một hàm ghi nhớ, theo sau là các toán hạng chỉ ra các phương thức đánh địa chỉ và kiểu dữ liệu. Các kiểu dữ liệu hoặc chế độ địa chỉ khác nhau được xác định bởi các toán hạng đã đặt, không phải bởi những thay đổi trong ký hiệu ghi nhớ. Hệ thống lệnh có thể được chia theo điều kiện thành năm nhóm:
  • Các lệnh số học;
  • Các lệnh logic;
  • Các lệnh truyền dữ liệu;
  • Các lệnh của bộ xử lý bit;
  • Các lệnh chuyển nhánh và điều khiển.
Tồn tại các kiểu địa chỉ sau của toán hạng nguồn:
  • Đăng ký địa chỉ
  • Địa chỉ trực tiếp
  • Địa chỉ đăng ký gián tiếp
  • Địa chỉ trực tiếp
  • Định địa chỉ thanh ghi gián tiếp bằng tổng của thanh ghi cơ sở và chỉ mục
Hướng dẫn số học Tập lệnh bao gồm các phép toán số học sau: cộng, cộng với cờ mang, trừ có mượn, tăng, giảm, so sánh, sửa số thập phân, nhân và chia. Trong ALU, các phép toán được thực hiện trên các số nguyên không dấu. Trong các phép toán có hai toán hạng: cộng (ADD), cộng và mang (ADDC), và trừ và vay (SUBB), bộ tích lũy là toán hạng đầu tiên và nhận kết quả của phép toán. Toán hạng thứ hai có thể là một thanh ghi công việc của ngân hàng thanh ghi công việc đã chọn, một thanh ghi bộ nhớ dữ liệu nội bộ với thanh ghi gián tiếp và định địa chỉ trực tiếp, hoặc các byte dữ liệu trực tiếp. Các hoạt động này ảnh hưởng đến các cờ: hoàn thành, mang, mang trung gian và cờ chẵn lẻ trong từ trạng thái bộ xử lý (PSW). Việc sử dụng chữ số mang cho phép bạn cải thiện đáng kể độ chính xác của các phép toán cộng (ADDC) và trừ (SUBB). Các phép toán cộng và trừ dựa trên dấu hiệu có thể được thực hiện bằng cách lập trình điều khiển cờ tràn (OV) của thanh ghi PSW. Cờ mang (AC) trung gian cung cấp số học BCD. Các hoạt động tăng và giảm không ảnh hưởng đến cờ. Các hoạt động so sánh không ảnh hưởng đến toán hạng đích hoặc nguồn, nhưng chúng ảnh hưởng đến các cờ mang. Có ba phép toán số học chỉ được thực hiện trên pin: hai lệnh để kiểm tra nội dung của pin A (JZ, JNZ) và lệnh sửa số thập phân khi thêm mã nhị phân-thập phân. Trong quá trình nhân, nội dung của bộ tích lũy A được nhân với nội dung của thanh ghi B và kết quả được đặt như sau: byte thấp trong thanh ghi B, byte cao trong thanh ghi A. Các lệnh logic với các biến byte Hệ thống lệnh cho phép bạn để thực hiện các phép toán logic: "VÀ", "HOẶC", "ĐỘC QUYỀN HOẶC" trên thanh ghi bộ tích lũy (A) và byte nguồn. Toán hạng thứ hai (byte nguồn) có thể là một thanh ghi công việc trong ngân hàng thanh ghi công việc đã chọn; một thanh ghi RAM bên trong được định địa chỉ bằng cách sử dụng địa chỉ gián tiếp thanh ghi; các ô địa chỉ trực tiếp của RAM bên trong và các thanh ghi mục đích đặc biệt; giá trị tức thì. Các hoạt động logic này có thể được thực hiện trên bất kỳ thanh ghi địa chỉ trực tiếp nào của RAM bên trong hoặc thanh ghi mục đích đặc biệt bằng cách sử dụng nội dung của bộ tích lũy A hoặc dữ liệu trực tiếp làm toán hạng thứ hai. Có những hoạt động logic chỉ được thực hiện trên pin: đặt lại và đảo ngược tất cả tám bit của A; chuyển dịch theo chu kỳ sang trái và phải; chuyển theo chu kỳ sang trái và sang phải, có tính đến cờ thực hiện; hoán đổi vị trí của các tetrad cao cấp và cơ sở (nibls) bên trong pin. Lệnh truyền dữ liệu Các bảng ký hiệu (mã) được nhúng trong ROM chương trình có thể được chọn bằng cách sử dụng các lệnh truyền dữ liệu sử dụng địa chỉ gián tiếp. Byte hằng có thể được chuyển đến bộ tích lũy từ ô nhớ chương trình, được đánh địa chỉ bằng tổng của thanh ghi cơ sở (PC hoặc DPTR) và thanh ghi chỉ mục (nội dung của A). Ví dụ, điều này cung cấp một phương tiện thuận tiện để thực hiện một thuật toán để chuyển đổi mã ASCII sang mã bảy đoạn. Bất kỳ ô nào trong khối 256 byte của RAM dữ liệu ngoài có thể được chọn bằng cách sử dụng địa chỉ thanh ghi gián tiếp thông qua các thanh ghi con trỏ R0 hoặc R1 (ngân hàng thanh ghi làm việc được chọn). Một vị trí trong không gian địa chỉ RAM ngoài 64KB cũng có thể được chọn bằng cách sử dụng địa chỉ gián tiếp thanh ghi thông qua thanh ghi con trỏ dữ liệu DPTR. Các lệnh chuyển giữa các thanh ghi địa chỉ trực tiếp cho phép bạn nhập giá trị từ một cổng vào ô RAM bên trong mà không cần sử dụng thanh ghi công việc hoặc pin. Trong một bộ xử lý logic, bất kỳ bit có thể chuyển tiếp địa chỉ nào cũng có thể được đặt trong một bit mang và ngược lại. Nội dung của bộ tích lũy có thể được trao đổi với nội dung của các thanh ghi làm việc (của ngân hàng đã chọn) và với nội dung của các ô RAM bên trong được đánh địa chỉ bằng cách định địa chỉ thanh ghi gián tiếp, cũng như với nội dung của các ô có địa chỉ trực tiếp của RAM bên trong và với nội dung của các thanh ghi mục đích đặc biệt. Nibl nhỏ (bit 3-0) của nội dung bộ tích lũy có thể được trao đổi với nibl nhỏ của nội dung của các ô RAM bên trong, được chọn bằng cách sử dụng địa chỉ gián tiếp thanh ghi. Hướng dẫn bộ xử lý bit Bộ xử lý bit là một phần của họ MCS51 của kiến ​​trúc MCU và có thể được xem như một bộ xử lý bit độc lập. Bộ xử lý bit thực thi một tập hợp các lệnh, có RAM định địa chỉ bit riêng và I / O của riêng nó. Các lệnh bit cung cấp địa chỉ trực tiếp của 128 bit (0-127) trong mười sáu ô của RAM bên trong (các ô có địa chỉ 20H-2FH) và định địa chỉ bit trực tiếp của các thanh ghi mục đích đặc biệt có địa chỉ là bội số của tám. Mỗi bit có thể định địa chỉ riêng lẻ có thể được đặt thành "1", xóa thành "0", đảo ngược, được kiểm tra. Các chuyển đổi có thể được thực hiện: nếu bit được thiết lập; nếu bit không được đặt; quá trình chuyển đổi, nếu một bit được thiết lập, với việc xóa bit này; bit có thể được ghi đè lên (từ) bit mang. Các phép toán logic "VÀ", "HOẶC" có thể được thực hiện giữa bất kỳ bit nào có thể địa chỉ trực tiếp và cờ mang, trong đó kết quả được nhập vào bit của cờ mang. Các hướng dẫn xử lý theo bit cung cấp việc thực hiện các chức năng phức tạp của logic tổ hợp và tối ưu hóa các chương trình người dùng. Các lệnh phân nhánh và chuyển điều khiển Không gian địa chỉ bộ nhớ chương trình không có tổ chức phân trang, cho phép bạn tự do di chuyển các đoạn chương trình trong không gian địa chỉ mà không cần tải lại (thay đổi) số trang. Di chuyển các đoạn chương trình riêng lẻ cung cấp khả năng sử dụng các mô-đun chương trình có thể định vị lại bởi các chương trình khác nhau. Lệnh gọi chương trình con và nhánh 16 bit cho phép bạn chuyển đến bất kỳ điểm nào trong không gian địa chỉ bộ nhớ chương trình 64 KB. Các bước nhảy 11 bit và lệnh gọi chương trình con cung cấp các bước nhảy trong một đơn vị chương trình 2 KB. Trong hệ thống lệnh có các lệnh cho bước nhảy có điều kiện và không điều kiện liên quan đến địa chỉ bắt đầu của chương trình tiếp theo trong phạm vi từ (РС) -128 đến (ЗС) +127. Các lệnh để kiểm tra các bit riêng lẻ cho phép chuyển đổi có điều kiện về trạng thái "0" hoặc "1" của các bit được địa chỉ trực tiếp. Hướng dẫn kiểm tra nội dung pin (đối với không / khác không) cho phép nhảy có điều kiện đối với nội dung của A. Các bước nhảy thanh ghi gián tiếp trong hệ thống lệnh cung cấp sự phân nhánh liên quan đến thanh ghi cơ sở (nội dung DPTR hoặc PC) với độ lệch nằm trong Tích lũy A. Định địa chỉ thanh ghi Định địa chỉ thanh ghi được sử dụng để truy cập tám thanh ghi công việc của ngân hàng thanh ghi công việc đã chọn (có thể chọn cùng một thanh ghi bằng cách sử dụng địa chỉ trực tiếp và định địa chỉ thanh ghi gián tiếp như các ô bình thường trong RAM dữ liệu bên trong). Định địa chỉ thanh ghi được sử dụng để truy cập các thanh ghi A, B, AB (thanh ghi kép), DPTR và cờ mang C. Sử dụng định địa chỉ thanh ghi cho phép bạn nhận được các lệnh địa chỉ trực tiếp ba byte tương đương hai byte. Định địa chỉ trực tiếp Định địa chỉ byte trực tiếp được sử dụng để truy cập các vị trí bộ nhớ dữ liệu bên trong (RAM) (0-127) và các thanh ghi mục đích đặc biệt. Định địa chỉ chuyển tiếp bit được sử dụng để chỉ 128 bit có thể định địa chỉ riêng biệt nằm ở các vị trí địa chỉ 20H-2FH và tới các bit có thể định địa chỉ riêng biệt của các thanh ghi mục đích đặc biệt. Bit quan trọng nhất trong số byte của mã địa chỉ trực tiếp chọn một trong hai nhóm các bit có thể định địa chỉ riêng biệt nằm trong RAM hoặc các thanh ghi đặc biệt. Các bit được định địa chỉ trực tiếp có địa chỉ 0-127 (00H-7FH) nằm trong một khối gồm 16 ô RAM bên trong có địa chỉ 20H-2FH. Các ô được chỉ định được đánh số tuần tự từ bit quan trọng nhất của byte ít quan trọng nhất đến bit quan trọng nhất của byte quan trọng nhất. Các bit địa chỉ riêng biệt trong thanh ghi mục đích đặc biệt được đánh số như sau: năm bit quan trọng nhất của địa chỉ khớp với năm bit quan trọng nhất của chính thanh ghi và ba bit ít quan trọng nhất xác định vị trí của ibt riêng lẻ trong thanh ghi. Định địa chỉ thanh ghi gián tiếp Định địa chỉ thanh ghi gián tiếp được sử dụng để chỉ các ô của RAM dữ liệu bên trong. Thanh ghi R10, R1 của ngân hàng thanh ghi đã chọn được sử dụng làm thanh ghi con trỏ. Các lệnh PUSH và POP sử dụng nội dung của con trỏ ngăn xếp (SP). Định địa chỉ thanh ghi gián tiếp cũng được sử dụng để truy cập bộ nhớ dữ liệu ngoài. Trong trường hợp này, sử dụng thanh ghi con trỏ R0 và R1 (ngân hàng thanh ghi làm việc đã chọn), một ô được chọn từ một khối 256 byte của bộ nhớ dữ liệu ngoài. Số khối được đặt trước bởi nội dung của cổng P2. Con trỏ dữ liệu 16-bit (DPTR) có thể được sử dụng để truy cập bất kỳ vị trí nào trong không gian địa chỉ của bộ nhớ dữ liệu ngoài lên đến 64KB. Định địa chỉ trực tiếp Định địa chỉ trực tiếp cho phép bạn chọn các hằng số từ không gian địa chỉ bộ nhớ chương trình được chỉ định rõ ràng trong lệnh. Định địa chỉ thanh ghi gián tiếp bằng tổng của thanh ghi cơ sở và chỉ mục Định địa chỉ thanh ghi gián tiếp theo tổng: thanh ghi cơ sở cộng với thanh ghi chỉ mục (nội dung của bộ tích lũy A) giúp dễ dàng xem các bảng được nối cứng vào bộ nhớ chương trình. Bất kỳ byte nào từ bảng có thể được chọn tại một địa chỉ được xác định bằng tổng nội dung DPTR hoặc PC và nội dung A. Bảng ký hiệu và ký hiệu được sử dụng trong hệ thống lệnh
Ký hiệu, ký hiệu Cuộc hẹn
MỘT Ắc quy
Rn Sổ đăng ký của ngân hàng đăng ký hiện được chọn
NS Số lượng thanh ghi đã tải được chỉ định trong lệnh
trực tiếp Địa chỉ ô dữ liệu nội bộ 8 bit có thể định địa chỉ trực tiếp, có thể là ô RAM dữ liệu nội bộ (0-127) hoặc SFR (128-255)
@Rr Ô 8 bit dữ liệu nội bộ có thể định địa chỉ gián tiếp
dữ liệu8 Dữ liệu trực tiếp 8 bit chuyển đến CPC
dữ liệuH Các bit quan trọng nhất (15-8) của dữ liệu 16 bit trực tiếp
dataL Các bit ít quan trọng nhất (7-0) của dữ liệu 16 bit trực tiếp
addr11 Địa chỉ đích 11 bit
addrL Các bit ít quan trọng nhất của địa chỉ đích
disp8 Độ lệch byte 8 bit với dấu m
chút Bit có thể định địa chỉ trực tiếp có địa chỉ chứa CPC nằm trong dữ liệu nội bộ RAM hoặc SFR
a15, a14 ... a0 Các bit địa chỉ đích
(NS) Nội dung của nguyên tố X
((NS)) Nội dung tại địa chỉ được lưu trữ trong phần tử X
(X) [M] Khử M của nguyên tố X
+ - * / VÀ HOẶC XOR / X Các phép toán: cộng trừ nhân chia phép nhân logic (phép toán AND) phép cộng logic (phép toán OR) phép cộng môđun 2 (trừ OR) nghịch đảo của phần tử X

Các kỹ năng ghi nhớ hàm được kết hợp duy nhất với sự kết hợp cụ thể của các phương pháp đánh địa chỉ và kiểu dữ liệu. Tổng cộng có 111 sự kết hợp như vậy trong hệ thống chỉ huy. Bảng cung cấp danh sách các lệnh, được sắp xếp theo thứ tự bảng chữ cái.

Kỹ thuật ghi nhớ Hàm số Cờ
Lệnh ACALL Lời gọi chương trình con tuyệt đối
THÊM Đội A,<байт-источник> Thêm vào AC, C, OV
ADDC Đội A,<байт-источник> Mang gấp AC, C, OV
Nhóm AJMP Sự chuyển đổi tuyệt đối
Đội ANL<байт-назначения>, <байт-источникa> Logic "VÀ"
Nhóm ANL C,<байт-источникa> Logic "AND" cho các bit biến đổi
Đội CJNE<байт-назначения>, <байт-источник>, <смещение> So sánh và nhảy nếu không bằng NS
CLR Một lệnh Đặt lại pin
Lệnh CLR Giải tỏa một chút C, bit
CPL Đội A Đảo ngược của ak umul ora
Nhóm CPL Đảo ngược bit C, bit
Đội DA A Hiệu chỉnh số thập phân của bộ tích điện cho bộ đồ giường NS
Nhóm DEC<байт> Giảm dần
DIV AB Đội Phân công C, OV
Đội DJNZ<байт>, <смещение> Giảm dần và chuyển đổi nếu không phải là 0
Đội INC<байт> Tăng
Nhóm INC DPTR Gia số con trỏ dữ liệu
Nhóm JB , Nhảy nếu bit được đặt
Nhóm JBC , Nhảy nếu một bit được thiết lập và xóa bit đó
Nhóm JC Nhảy nếu mang được đặt
Lệnh JMP @ A + DPTR Chuyển tiếp gián tiếp
Nhóm JNB , Nhảy nếu bit không được đặt
Nhóm JNC Nhảy nếu mang chưa được đặt
Đội JNZ Nhảy nếu nội dung pin khác 0
Đội JZ Nhảy nếu nội dung của bộ tích lũy là 0
Lệnh LCALL Cuộc gọi dài
Đội LJMP Vượt qua dài
Lệnh MOV<байт-назначения>, <байт-источника> Gửi biến byte
Lệnh MOV<бит-назначения>, <бит-источника> Gửi dữ liệu bit NS
Lệnh MOV DPTR, # data16 Tải con trỏ dữ liệu với 16 bit không đổi
Lệnh MOVC A, @ A + ( ) Gửi byte từ bộ nhớ chương trình
Lệnh MOVX<байт приемника>, <байт источника> Gửi dữ liệu đến bộ nhớ ngoài (từ bộ nhớ ngoài)
Đội MUL AB Phép nhân C, OV
Lệnh NOP Không hoạt động máy tính
Đội ORL<байт-назначения>, <байт-источникa> Logic "HOẶC" cho byte biến
Nhóm ORL C,<бит источникa> Logic "HOẶC" cho các bit biến đổi NS
Lệnh POP Đọc từ ngăn xếp
Lệnh PUSH Xếp chồng
Lệnh RET Quay lại từ một chương trình con
Đội RETI Trở lại sau một thời gian gián đoạn
RL A Đội Chuyển nội dung pin sang trái
RLC Đội A Chuyển nội dung pin sang trái qua cờ mang
Đội RR A Chuyển nội dung pin sang bên phải
RRC A Đội Di chuyển nội dung của pin sang bên phải thông qua cờ mang NS
Lệnh SETB Đặt bit NS
Nhóm SJMP<метка> Nhảy ngắn
SUBB A đội,<байт источника> Phép trừ với một khoản vay AC, C, OV
SWAP A Lệnh Trao đổi máy tính xách tay bên trong pin
Đội XCH A,<байт> Trao đổi nội dung của bộ tích lũy với byte biến
XCHD Đội A, @ R1 Trao đổi sổ ghi chép
Lệnh XRL<байт-назначения>, <байт-источникa> Logic ĐỘC QUYỀN HOẶC cho byte biến

Các vi điều khiển thuộc họ MCS-51 được xây dựng theo kiến ​​trúc Harvard, trong đó bộ nhớ chương trình và bộ nhớ dữ liệu được phân vùng, có không gian địa chỉ và cách truy cập riêng.

Bộ nhớ chương trình


Kích thước bộ nhớ tối đa là 64K byte, trong đó bộ nhớ 4K, 8K, 16K hoặc 32K byte (Bảng 7.3.1) nằm trên khuôn, phần còn lại nằm ngoài khuôn.
Với điện áp ở đầu cuối EA = V CC cả bộ nhớ trong và bộ nhớ ngoài đều được sử dụng, với EA = V CC = 0 - chỉ bộ nhớ ngoài.
Bảng 7.3.1 cho thấy địa chỉ bộ nhớ chương trình cho các trường hợp được chỉ định.
Vùng bộ nhớ chương trình thấp hơn được cấp phát để bắt đầu hoạt động của vi điều khiển (địa chỉ bắt đầu 0000h sau khi đặt lại) và để xử lý các ngắt (các địa chỉ ngắt được định vị với khoảng cách 8 byte: 0003h, 000Bh, 0013h, v.v.).


Bộ nhớ chương trình ở chế độ chỉ đọc và khi được truy cập:

● đến bộ nhớ ngoài chương trình, tín hiệu ¯PSEN được tạo ra và địa chỉ 16 bit luôn được hình thành.
Byte thấp của địa chỉ được truyền qua cổng P0 trong nửa đầu của chu kỳ máy và được cố định ở cạnh của nét nháy ALE trong thanh ghi.
Trong nửa sau của chu kỳ, cổng P0 được sử dụng để nhập một byte dữ liệu từ bộ nhớ ngoài vào MC.
Byte bậc cao của địa chỉ được truyền qua cổng P2 trong toàn bộ thời gian truy cập bộ nhớ (Hình.7.1.11);

● đến bộ nhớ trong tín hiệu đọc không được tạo ra và các chu kỳ trao đổi trên bus vi điều khiển bên trong được sử dụng.

Bộ nhớ dữ liệu

Bộ nhớ trong dữ liệu có thể được chia theo điều kiện thành ba khối (Bảng 7.3.2).

Bộ nhớ trong luôn được định địa chỉ bởi một byte, bộ nhớ này chỉ địa chỉ 256 vị trí bộ nhớ.
Do đó, như có thể thấy trong Bảng 7.3.2, để định địa chỉ cho các ô 8 bit phía trên của RAM bên trong và các thanh ghi của các chức năng đặc biệt SFR, chiếm cùng một không gian địa chỉ, các lệnh sử dụng các phương pháp định địa chỉ khác nhau: gián tiếp và thẳng.

Đặc điểm của tổ chức vùng dưới của RAM bên trongđược phản ánh trong bảng 7.3.3.

32 byte RAM bên trong thấp với địa chỉ 00h.
1Fh được nhóm trong bốn ngân hàng với tám thanh ghi mỗi ngân hàng (R0.R7).
16 byte RAM tiếp theo với địa chỉ 20h.
2Fh đại diện cho một vùng bộ nhớ có kích thước 8 × 16 = 128 bit, cho phép truy cập từng bit riêng lẻ.
Để chọn địa chỉ của sổ đăng ký ngân hàng, tên của nó là R0 được sử dụng.
R7, để chọn một ngân hàng - các bit RS0, RS1 của thanh ghi từ trạng thái PSW.

Địa chỉ bit

Địa chỉ bitđược cho trong Bảng 7.3.3.

Địa chỉ được thực hiện trực tiếpđường.

Danh sách tất cả các thanh ghi của các chức năng đặc biệt SFR với địa chỉ của chúng được đưa ra trong Bảng 7.2.2.
Để rõ ràng, trong bảng 7.3.

4 chương trình đăng ký bản đồ địa chỉSFR trong số các vi mạch được coi là thuộc họ MCS-51.
Địa chỉ SFR được xác định bằng sự kết hợp của số cột và số dòng trong ký hiệu thập lục phân.

Ví dụ, thanh ghi CMOD có địa chỉ D9h.

Đối với thanh ghi SFR có địa chỉ kết thúc bằng 0h hoặc 8h (chúng được in đậm), ngoài byte cho phép bitwiseđịa chỉ.

Trong trường hợp này, địa chỉ của bit chiếm bit thứ N trong thanh ghi được định nghĩa là XXh + ​​0Nh, trong đó XXh là địa chỉ của thanh ghi SFR, N = 0,7.
Địa chỉ bit trong vùng này nằm trong khoảng từ 80H đến FFH.
Ví dụ, địa chỉ bit của bộ tích lũy ACC nằm trong dải E0h-E7h.

Bộ nhớ ngoài dữ liệu (lên đến 64 KB) được tạo bởi các chip nhớ bổ sung được kết nối với MC.
Để làm việc với bộ nhớ dữ liệu ngoài, các lệnh đặc biệt được sử dụng, do đó không gian địa chỉ của bộ nhớ ngoài và bộ nhớ trong không trùng lặp và do đó, cả hai loại bộ nhớ dữ liệu có thể được sử dụng đồng thời.

Để truy cập các ô của bộ nhớ dữ liệu ngoài được sử dụng (Hình 7.1.8):
● lệnh với địa chỉ gián tiếp;
● tín hiệu để đọc ¯RD và ghi ¯WR;
● cổng P0 để truyền byte địa chỉ ít quan trọng nhất và nhận / truyền byte dữ liệu;
● Cổng P2 để truyền byte bậc cao của địa chỉ.
Các phương pháp giải quyết.
Hệ thống lệnh sử dụng:
● địa chỉ trực tiếp, gián tiếp, thanh ghi, thanh ghi gián tiếp, trực tiếp và chỉ mục (địa chỉ gián tiếp bằng tổng các thanh ghi cơ sở và chỉ mục) toán hạng nguồn;
● địa chỉ đăng ký trực tiếp, đăng ký và đăng ký gián tiếp toán hạng đích.
Sự kết hợp của các phương pháp này (định địa chỉ) cung cấp 21 chế độ định địa chỉ.
Bảng này và các bảng hệ thống lệnh sau sử dụng ký hiệu sau:

Địa chỉ trực tiếp.

Với phương pháp định địa chỉ này, vị trí của byte hoặc bit dữ liệu được xác định bởi địa chỉ 8 bit của byte lệnh thứ hai (và thứ ba).
Định địa chỉ trực tiếp chỉ được sử dụng để truy cập bộ nhớ dữ liệu bên trong (128 byte RAM thấp hơn) và các thanh ghi chức năng đặc biệt.

Đăng ký địa chỉ.


Phương thức định địa chỉ này cung cấp quyền truy cập vào dữ liệu được lưu trữ trong một trong tám thanh ghi R0.
R7 của ngân hàng thanh ghi làm việc hiện tại.
Nó cũng có thể được sử dụng để truy cập các thanh ghi A, B, AB (thanh ghi kép), thanh ghi con trỏ DPTR và cờ mang C.
Địa chỉ của các thanh ghi này được nhúng trong mã hoạt động, do đó làm giảm số byte lệnh.

Định địa chỉ thanh ghi gián tiếp.


Trong trường hợp này, địa chỉ của dữ liệu được lưu trữ trong một thanh ghi con trỏ, vị trí của nó được xác định bởi mã hoạt động.
Phương pháp đánh địa chỉ này được sử dụng để truy cập RAM ngoài và nửa trên của RAM trong.
Thanh ghi-con trỏ địa chỉ 8 bit có thể là thanh ghi R0, R1 của ngân hàng thanh ghi làm việc đã chọn hoặc con trỏ ngăn xếp SP; đối với địa chỉ 16 bit, chỉ thanh ghi con trỏ dữ liệu DPTR được sử dụng.

Địa chỉ trực tiếp.


Với phương pháp định địa chỉ này, dữ liệu được chỉ ra trực tiếp trong lệnh và nằm trong byte thứ hai (hoặc trong byte thứ hai và thứ ba) của lệnh, tức là
không cần địa chỉ bộ nhớ.
Ví dụ, bằng lệnh MOV A, # 50, số 50 được nạp vào bộ tích lũy A.

Lập chỉ mục địa chỉ.


Phương pháp này là định địa chỉ thanh ghi gián tiếp, trong đó địa chỉ byte dữ liệu được xác định là tổng nội dung của thanh ghi cơ sở (DPTR hoặc PC) và chỉ mục (A).
Đường chỉ được sử dụng để truy cập vào bộ nhớ chương trình và chỉ ở chế độ đọc; nó giúp bạn dễ dàng xem các bảng được gắn cứng vào bộ nhớ chương trình.

Cấu trúc lệnh.

Độ dài của một lệnh là một (49 lệnh), hai (45 lệnh) hoặc ba (17 lệnh) byte.
Byte đầu tiên của lệnh luôn chứa opcode (OP), trong khi byte thứ hai và thứ ba là địa chỉ của toán hạng hoặc giá trị dữ liệu tức thì.

Các bit riêng lẻ, tetrads, byte và các từ byte kép có thể được sử dụng làm toán hạng.
Có 13 loại lệnh, được thể hiện trong Bảng 7.3.5:

● A, PC, SP, DPTR, Rn (n = 0, 7) - bộ tích lũy, bộ đếm lệnh, con trỏ ngăn xếp, thanh ghi con trỏ dữ liệu và thanh ghi ngân hàng hiện tại;
● Rm (m = 0, 1) - thanh ghi của ngân hàng hiện tại được sử dụng để định địa chỉ gián tiếp;
● trực tiếp - địa chỉ 8 bit của toán hạng được đánh địa chỉ trực tiếp;
● bit - địa chỉ của bit được đánh địa chỉ trực tiếp;
● rel - địa chỉ tương đối của quá trình chuyển đổi;
● addr11, addr16 - địa chỉ tuyệt đối 11- và 16-bit của quá trình chuyển đổi;
● # data8, # data16 - dữ liệu trực tiếp (toán hạng) có độ dài 8 và 16 bit;
● A10, A9, A0 - các bit riêng lẻ của địa chỉ 11 bit;
● (.) - nội dung của ô nhớ tại địa chỉ được chỉ định trong ngoặc;
● SB, MB - byte cao và byte thấp của toán hạng 16 bit.

Thông tin chung về hệ thống chỉ huy.

Hệ thống lệnh cung cấp khả năng tuyệt vời để xử lý dữ liệu dưới dạng bit, sổ ghi chép, byte, từ byte kép, cũng như điều khiển thời gian thực.
Ngôn ngữ trình hợp dịch macro ASM51 được sử dụng để mô tả các lệnh. Cú pháp của hầu hết các lệnh bao gồm ký hiệu dễ nhớ (viết tắt) của thao tác sẽ được thực hiện, theo sau là các toán hạng.
Toán hạng được sử dụng để chỉ ra các phương pháp đánh địa chỉ và kiểu dữ liệu khác nhau.

Đặc biệt, từ viết tắt MOV có 18 lệnh khác nhau được thiết kế để xử lý ba loại dữ liệu (bit, byte, địa chỉ) trong các không gian địa chỉ khác nhau.
Bộ lệnh có 42 ký hiệu ghi nhớ 111 loại lệnh để cụ thể hóa 33 chức năng của MK.

Trong số 111 lệnh, 64 lệnh được thực hiện trong một chu kỳ máy, 45 lệnh trong hai chu kỳ và chỉ có hai lệnh (MUL - phép nhân và DIV - phép chia) được thực hiện trong 4 chu kỳ. Ở tần số xung nhịp 12 MHz, khoảng thời gian của một chu kỳ máy (12 chu kỳ xung nhịp) là 1 μs. Qua tính năng chức năng các đội có thể được chia thành năm nhóm. Dưới đây là mô tả các lệnh của mỗi nhóm, được trình bày dưới dạng bảng. Đối với tính gọn nhẹ của các bảng, chúng ta hãy chọn ra một nhóm lệnh (Bảng 7.3.6), việc thực thi chúng ảnh hưởng(được đánh dấu +) về trạng thái của cờ thanh ghi trạng thái từ PSW.

Các lệnh truyền dữ liệu

Các lệnh chuyển có thể được chia thành các nhóm con riêng biệt.
Các lệnh truyền và trao đổi dữ liệu giữa các ô của bộ nhớ trong(Bảng 7.3.7).

Các lệnh 1-16, có đích MOV dễ nhớ, src, dành cho chuyển tiếp byte hoặc hai byte (lệnh 16) dữ liệu từ nguồn src đến đích đích, trong khi:
● để chỉ ra nguồn(src) bốn phương thức định địa chỉ được sử dụng: register (lệnh 2-4, 6, 8), trực tiếp (lệnh 1, 7, 9, 11), gián tiếp (lệnh 5, 10) và trực tiếp (lệnh 12-16);
● để chỉ ra người nhận(đích) ba phương thức được sử dụng: đăng ký (lệnh 1, 3 ... 5, 9, 12, 14, 16), trực tiếp (lệnh 2, 7, 8, 10, 13), gián tiếp (lệnh 6, 11, 15).

Đội 17-20 cung cấp trao đổi thông tin giữa hai ô của bộ nhớ dữ liệu trong (hoặc truyền hai chiều).
Khi các lệnh XCH được thực thi, các byte được trao đổi và các lệnh XCHD được trao đổi với các toán hạng byte thấp hơn.

Một trong các ô luôn là bộ tích lũy A. Là một ô khác, khi trao đổi byte, một trong các thanh ghi Rn của ngân hàng hiện tại được sử dụng, A cũng là ô có thể địa chỉ trực tiếp hoặc gián tiếp của bộ nhớ trong; khi trao đổi tetrads - chỉ một ô có thể địa chỉ gián tiếp của bộ nhớ trong.

Vì trong tất cả các MCU, ngăn xếp được đặt trong RAM bên trong, nhóm con này bao gồm lệnh(20, 21) truy cập ngăn xếp PUSH src, POP đích.
Các lệnh này chỉ sử dụng phương pháp định địa chỉ trực tiếp, ghi một byte vào ngăn xếp hoặc khôi phục nó từ ngăn xếp.
Cần lưu ý rằng trong những MCU không có 128 byte trên trong RAM, việc tăng ngăn xếp vượt quá 128 byte sẽ dẫn đến mất dữ liệu.

Các lệnh truyền dữ liệu giữa bộ nhớ dữ liệu bên trong và bên ngoài(Bảng 7.3.8).

Các lệnh này chỉ sử dụng cách định địa chỉ gián tiếp, trong khi địa chỉ một byte có thể được đặt ở P0 hoặc R1 của ngân hàng thanh ghi hiện tại, và địa chỉ hai byte có thể được đặt trong thanh ghi con trỏ dữ liệu DPRT.
Trong bất kỳ quyền truy cập nào vào bộ nhớ ngoài, pin A đóng vai trò bộ thu hoặc nguồn của toán hạng trong bộ nhớ trong.

Hướng dẫn truyền dữ liệu từ bộ nhớ chương trình(Bảng 7.3.9).

Các lệnh này dùng để đọc bảng từ bộ nhớ chương trình.

Lệnh MOVC A, @ A + DPTR được sử dụng để tham chiếu đến một bảng có số lượng đầu vào từ 0 đến 255.

Số lượng mục nhập bảng được yêu cầu được tải vào bộ tích lũy và thanh ghi DPTR được đặt thành điểm bắt đầu của bảng. Một tính năng khác biệt của lệnh khác là PC bộ đếm chương trình được sử dụng như một con trỏ cơ sở và bảng được truy cập từ một chương trình con. Đầu tiên, số lượng điểm nhập bắt buộc được nạp vào bộ tích lũy, sau đó chương trình con được gọi bằng lệnh MOVC A, @ A + PC. Bảng có thể có 255 đầu vào với các số từ 1 đến 255, vì 0 được sử dụng cho địa chỉ của lệnh RET của lối ra chương trình con.

Các lệnh xử lý dữ liệu số học. Tất cả các lệnh số học được thực hiện trên các số nguyên không dấu. Các phép toán trên hai toán hạng(Bảng 7.3.10). Trong hoạt động bổ sung CỘNG, bổ sung mang theo ADDC và khấu trừ khoản vay SUBB:

● nguồn của một toán hạng 8 bit và người nhận kết quả là bộ tích lũy;
● nguồn của toán hạng khác là một trong các thanh ghi làm việc Rn (n = 0-7) của ngân hàng hiện tại, hoặc trực tiếp trực tiếp hoặc gián tiếp @Rm (m = 0, 1) vị trí bộ nhớ có thể định địa chỉ của RAM hoặc dữ liệu trực tiếp #data.

Hoạt động phép nhân MUL và phân công Các DIV được thực hiện trên nội dung của thanh ghi A và B. Khi nhân, 8 bit cao hơn của kết quả được ghi vào thanh ghi B, 8 bit thấp hơn được ghi vào thanh ghi A.
Nếu sản phẩm lớn hơn 255, cờ tràn OV được đặt; mang cờ C luôn luôn được xóa. Lệnh DIV chia toán hạng 8 bit của bộ tích lũy A cho toán hạng 8 bit của thanh ghi B.
Trong quá trình phân chia, thương số (bit quan trọng nhất) được ghi vào thanh ghi trong A, phần còn lại (bit quan trọng nhất) - trong B. Các cờ mang C và tràn OV bị xóa.
Nỗ lực chia cho 0 đặt cờ tràn OV. Phép toán phân chia được sử dụng phổ biến hơn cho các ca và chuyển đổi cơ sở.

Khi một số nhị phân chia cho 2 N, nó sẽ bị dịch chuyển N bit sang trái.
Các bit phụ được chuyển sang thanh ghi B.

Các phép toán trên toán hạng byte đơn(Bảng 7.3.11).

Lệnh DA được sử dụng để thực hiện các hoạt động BCD. Các lệnh INC, DEC cho phép tương ứng tăng hoặc giảm nội dung của ô nhớ.
Chúng áp dụng cho nội dung của bộ tích lũy A, một trong các thanh ghi làm việc Rn, hoặc một ô nhớ được đánh địa chỉ trực tiếp và gián tiếp.
Hoạt động tăng dần cũng áp dụng cho nội dung của thanh ghi con trỏ DPTR 16-bit.

Các lệnh boolean.

Hoạt động kép

(Bảng 7.3.12).

Các lệnh AML, ORL, XRL cho phép thực hiện ba phép toán lôgic hai chỗ trên các toán hạng 8 bit: ANL - phép nhân lôgic (AND), ORL - phép cộng lôgic (OR), XRL - phép nhân lôgic OR (XOR).
Các phép toán được thực hiện trên các bit riêng lẻ của các toán hạng. Nguồn của một trong các toán hạng và đồng thời là nơi nhận kết quả là một bộ tích lũy (A) hoặc một ô nhớ có thể định địa chỉ trực tiếp (trực tiếp).
Đối với nguồn của toán hạng khác, một thanh ghi, phương pháp định địa chỉ trực tiếp, gián tiếp hoặc trực tiếp được sử dụng.

Hoạt động đơn lẻ

(Bảng 7.3.13).
Nhóm này cũng bao gồm một số hoạt động một chỗ trên nội dung của bộ tích lũy A: bù trừ (CLR), bổ sung hoặc đảo ngược logic (CPL), dịch chuyển tuần hoàn và mở rộng theo chu kỳ 1 bit sang phải (RL, RLC) và sang trái ( RR, RRC), trao đổi tetrads hoặc dịch chuyển theo chu kỳ của một byte bằng 4 bit (SWAP), A cũng là một hoạt động trống (NOP), do đó trạng thái của tất cả các thanh ghi MC (ngoại trừ bộ đếm chương trình) không thay đổi .

Kiểm soát các lệnh chuyển

Lệnh nhảy vô điều kiện

(Bảng 7.3.14).

Các lệnh 1-3 chỉ khác nhau về định dạng của địa chỉ đích.

Lệnh LJMP (L - Long) thực hiện một bước nhảy vô điều kiện "dài" đến địa chỉ addr16 được chỉ định, tải bộ đếm PC với byte lệnh thứ hai và thứ ba.
Lệnh cung cấp một bước nhảy đến bất kỳ điểm nào trong không gian địa chỉ byte 64K.

Lệnh AJMP (A - Absolute) cung cấp một bước nhảy "tuyệt đối" đến một địa chỉ trong trang 2K byte, địa chỉ bắt đầu của địa chỉ này được đặt bởi năm bit quan trọng nhất của bộ đếm chương trình PC (ở phần đầu, nội dung PC là tăng 2).

Lệnh SJMP (S - Short) cho phép một bước nhảy không điều kiện "ngắn" tới địa chỉ, được tính bằng cách thêm rel offset có dấu trong byte thứ hai của lệnh với nội dung của bộ đếm PC, trước đó đã tăng lên 2.

Địa chỉ bước nhảy nằm trong -128 + 127 byte so với địa chỉ lệnh.
Để chuyển đến bất kỳ điểm nào khác trong không gian địa chỉ 64 kilobyte, cũng có thể sử dụng lệnh 4 với địa chỉ @ A + DPTR gián tiếp.
Trong trường hợp này, nội dung của A được hiểu là số nguyên không dấu.

Hoạt động rỗng (NOP), do đó trạng thái của tất cả các thanh ghi bộ vi xử lý (ngoại trừ bộ đếm chương trình) không thay đổi.

Các lệnh rẽ nhánh có điều kiện

(Bảng 7.3.15).

Với sự trợ giúp của các lệnh JZ và JNZ, một bước nhảy được thực hiện nếu nội dung của bộ tích lũy tương ứng bằng hoặc không bằng 0.
Địa chỉ bước nhảy được tính bằng cách thêm rel offset dấu tương đối vào nội dung của bộ đếm lệnh PC sau khi thêm số 2 (độ dài lệnh tính bằng byte) vào nó.

Nội dung của pin vẫn không thay đổi.
Các lệnh không ảnh hưởng đến cờ.

Các lệnh CJNE (3-6) được sử dụng để thực hiện một bước nhảy có điều kiện dựa trên kết quả của việc so sánh hai toán hạng 8 bit, vị trí của toán hạng này được chỉ định trong các lệnh.
Nếu giá trị của chúng không bằng nhau, một nhánh được tạo ra.

Địa chỉ bước nhảy được tính bằng cách thêm rel offset với nội dung của bộ đếm PC, trước đó đã tăng lên 3.
Nếu không, lệnh tiếp theo được thực hiện.

Cột Thuật toán hiển thị ảnh hưởng của các giá trị của các toán hạng 8 bit được so sánh trên cờ mang C.
Các lệnh DJNZ (7) được thiết kế để tổ chức các vòng lặp chương trình.

Thanh ghi Rn hoặc vị trí có thể định địa chỉ trực tiếp là bộ đếm lặp lại vòng lặp và phần bù rel (trong byte lệnh thứ hai và thứ ba) là địa chỉ tương đối của bước nhảy đến đầu vòng lặp.
Khi các lệnh được thực hiện, nội dung của bộ đếm sẽ giảm đi một và được kiểm tra bằng không.
Nếu nội dung của bộ đếm không bằng 0, quá trình chuyển đổi về đầu chu kỳ được thực hiện.
Nếu không, lệnh sau sẽ được thực thi.

Địa chỉ bước nhảy được tính bằng cách thêm độ lệch vào nội dung bộ đếm, trước đó đã tăng độ dài của lệnh (bằng 2 hoặc 3).
Cờ lệnh không bị ảnh hưởng.

Các lệnh để gọi các chương trình con và quay trở lại từ các chương trình

(Bảng 7.3.16).
Lệnh LCALL "lệnh gọi dài" và "lệnh gọi tuyệt đối" ACALL gọi chương trình con ở địa chỉ đã chỉ định một cách vô điều kiện.

Sự khác biệt giữa các lệnh này và các lệnh nhảy không điều kiện được thảo luận ở trên là chúng lưu trữ địa chỉ trả về (nội dung của bộ đếm) cho chương trình chính trên ngăn xếp.
Lệnh trả về từ chương trình con RET khôi phục giá trị của nội dung của bộ đếm lệnh từ ngăn xếp và lệnh RETI cũng cho phép ngắt ở mức dịch vụ.

Định địa chỉ tương đối được sử dụng rộng rãi trong các lệnh truyền điều khiển, hỗ trợ các mô-đun chương trình có thể thay đổi vị trí.
Một rel offset có dấu 8 bit hoạt động như một địa chỉ tương đối, cung cấp sự phân nhánh từ vị trí hiện tại của bộ đếm PC theo cả hai hướng ± 127 byte.

Để chuyển đến bất kỳ điểm nào khác trong không gian địa chỉ 64K byte, có thể sử dụng địa chỉ addr16 trực tiếp hoặc địa chỉ @ A + DPTR gián tiếp.
Trong trường hợp thứ hai, nội dung của A được hiểu là số nguyên không dấu.

Một biến thể của addr11 địa chỉ trực tiếp ngắn trong trang hiện tại dài 2K byte đã được giới thiệu để tương thích với kiến ​​trúc MK48.

Tất cả các kiểu địa chỉ này chỉ có thể được áp dụng cho hoạt động rẽ nhánh và đối với hoạt động cuộc gọi, chỉ cho phép các phương thức định địa chỉ trực tiếp addr16 và addr11 nội bộ.
Trong tất cả các hoạt động có điều kiện, chỉ có thể sử dụng địa chỉ tương đối.

Khi MK51 nhận ra một yêu cầu ngắt, nó tạo ra một trong các lệnh như LCALL addr16, lệnh này tự động đảm bảo rằng địa chỉ trả về được lưu trữ trên ngăn xếp.
Tuy nhiên, không giống như MK48, MK51 không có thông tin trạng thái tự động lưu.

Trong trường hợp này, logic ngắt sẽ ngừng phản hồi các yêu cầu của mức đã được chấp nhận cho dịch vụ.
Để hạ mức ngắt, lệnh quay trở lại từ ngắt RETI được sử dụng, lệnh này, ngoài hoạt động tương đương với RET, bao gồm cả hoạt động cho phép ngắt của mức này.
Các phép toán JZ, JNZ cũng thuộc các phép toán điều kiện tiêu chuẩn MK51.
Tuy nhiên, có một hoạt động mới "So sánh và Đi" CJNE.

Đối với lệnh này, toán hạng trước tiên được so sánh theo quy tắc trừ các số nguyên với một hằng số và phù hợp với kết quả của phép so sánh, cờ CY được đặt. Sau đó, trong trường hợp không khớp với một hằng số, phân nhánh là đã thực hiện. Bằng cách so sánh bộ tích lũy, thanh ghi hoặc ô nhớ với một chuỗi các hằng số, chúng tôi có được một cách thuận tiện để kiểm tra các sự trùng hợp, chẳng hạn, để xác định các trường hợp đặc biệt.

Trên thực tế, lệnh CJNE là một thành viên của toán tử ngôn ngữ cấp cao CASE.

Nhóm DJNZ đã được phát triển thêm.
Giờ đây, người lập trình với tư cách là một bộ đếm không chỉ có thể sử dụng một trong các thanh ghi đang làm việc Rn, mà còn sử dụng bất kỳ ô nhớ DSEG nào.

Các lệnh hoạt động trên bit.

Nhóm này bao gồm 12 lệnh cho phép bạn thực hiện các hoạt động trên một hoặc hai bit (đặt lại, đặt, đảo ngược bit, A cũng logic AND và OR), và 5 lệnh được thiết kế để thực hiện các bước nhảy có điều kiện (Bảng 7.3.17).

Các hướng dẫn cung cấp địa chỉ trực tiếp của 128 bit nằm trong sáu đến mười một ô của RAM bên trong với địa chỉ 20h.
2Fh (Bảng 7.3.3) và 128 bit nằm trong các thanh ghi mục đích đặc biệt có địa chỉ là bội số của tám (được tô đậm trong Bảng 7.3.4).

Khi thực hiện các hoạt động trên hai toán hạng một bit, flip-flop của thanh ghi PSW, nơi lưu giữ cờ mang C (Bảng 7.1.2), được sử dụng như một bộ tích lũy logic.

Các lệnh MOV (1,2) thực hiện chuyến hàng các bit từ một ô bit có thể địa chỉ trực tiếp của RAM bên trong đến flip-flop C hoặc ngược lại.
Các lệnh CRL (3, 4), SETB (5, 6) tương ứng bãi rác bằng không hoặc củng cố trong một mang cờ C hoặc bit được chỉ định.
Với sự trợ giúp của các lệnh CPL, ANL, ORL (7-12), các phép toán logic của đảo ngược, cộng và nhân được thực hiện.

Nhóm này cũng bao gồm các lệnh (13-17) để thực hiện các hoạt động rẽ nhánh có điều kiện với một rel offset 8 bit tương đối.
Quá trình chuyển đổi có thể được thực hiện cả khi đặt cờ bit hoặc cờ mang (lệnh 13, 16) và khi nó bị xóa (lệnh 14, 17).

Lệnh JBC, ngoài việc di chuyển đến địa chỉ được tính toán, khi điều kiện (bit) = 1 được đáp ứng, sẽ đặt lại bit này về không.
Khi thực hiện các lệnh rẽ nhánh có điều kiện, địa chỉ bước nhảy được tính sau khi thêm các số 3 hoặc 2 vào nội dung bộ đếm (phản ánh số byte trong lệnh).

Intel là tổ tiên của kiến ​​trúc họ MCS-51, lấy tên từ đại diện đầu tiên của họ này - vi điều khiển 8051, được phát hành vào năm 1980 dựa trên công nghệ n-MOS. Một bộ thiết bị ngoại vi thành công, sự lựa chọn linh hoạt của bộ nhớ chương trình bên ngoài hoặc bên trong và giá cả hợp lý đã đảm bảo cho bộ vi điều khiển này thành công trên thị trường. Về mặt công nghệ, vi điều khiển 8051 là một sản phẩm rất phức tạp vào thời đó - 128 nghìn bóng bán dẫn được sử dụng trong tinh thể, nhiều gấp 4 lần số bóng bán dẫn trong bộ vi xử lý 16-bit 8086. Bộ vi điều khiển này vẫn là cốt lõi của họ MCS-51 cho đến ngày nay.

Các phần tử chính của kiến ​​trúc cơ bản của họ (kiến trúc của vi điều khiển 8051) là:

ALU 8-bit;

4 ngân hàng thanh ghi, 8 trong mỗi thanh ghi;

Bộ nhớ chương trình nội bộ (thường trú) 4 Kbyte, thuộc loại ROM hoặc EPROM (8751);

Bộ nhớ dữ liệu nội bộ (thường trú) 128 byte;

21 thanh ghi các chức năng đặc biệt;

Bộ xử lý Boolean;

Hai bộ hẹn giờ / bộ đếm 16 bit

Bộ điều khiển cổng nối tiếp (UART);

Bộ điều khiển ngắt với hai mức ưu tiên;

Bốn cổng I / O 8 bit, hai trong số đó được sử dụng như một bus địa chỉ / dữ liệu để truy cập chương trình bên ngoài và bộ nhớ dữ liệu;

Tích hợp bộ tạo xung nhịp.

Sau đó, bộ vi điều khiển 8052 được phát hành, được phân biệt bởi số lượng chương trình thường trú và bộ nhớ dữ liệu tăng lên, được giới thiệu bởi bộ đếm thời gian thứ ba và theo đó, bộ điều khiển ngắt mở rộng.

Bước cơ bản tiếp theo trong quá trình phát triển MCS-51 là chuyển giao công nghệ sản xuất sang CMOS (sửa đổi 8xC51). Điều này làm cho nó có thể thực hiện các chế độ Idl (nhàn rỗi) và Power Down (giảm tiêu thụ), đảm bảo giảm đáng kể mức tiêu thụ điện của tinh thể và mở ra con đường sử dụng vi điều khiển trong các ứng dụng dễ bay hơi, chẳng hạn như trong các thiết bị chạy bằng pin độc lập.

Và giai đoạn quan trọng cuối cùng trong quá trình phát triển MK 8051 của Intel là việc phát hành các bộ vi điều khiển 8xC51FA / FB / FC và 8xC51RA / RB / RC, thường được gọi tắt là 8xC51Fx và 8xC51Rx. Đặc điểm phân biệt chính của nhóm tinh thể này là chúng có bộ đếm thời gian / bộ đếm chuyên dụng (PCA). Ngoài ra, các bộ vi điều khiển 8xC51Rx còn chứa một bộ định thời cơ quan giám sát (WDT). Chúng ta hãy xem xét kỹ hơn kiến ​​trúc và chức năng của PCA.

PCA bao gồm:

Bộ định thời / bộ đếm 16 bit;

Năm mô-đun lấy mẫu và so sánh 16-bit, mỗi mô-đun được kết nối với đường dây riêng của cổng I / O của bộ vi điều khiển.

Bộ đếm thời gian / bộ đếm phục vụ tất cả năm mô-đun mẫu và so sánh, có thể được lập trình để thực hiện một trong các chức năng sau:

Lấy mẫu 16-bit của giá trị bộ định thời trên cạnh dương của tín hiệu bên ngoài;

Lấy mẫu 16-bit của giá trị bộ định thời trên cạnh âm của tín hiệu bên ngoài;

Lấy mẫu 16-bit của giá trị bộ định thời trên bất kỳ cạnh nào của tín hiệu bên ngoài;

Bộ định thời lập trình 16 bit;

Thiết bị đầu ra tốc độ cao 16-bit;

PWM 8 bit.

Tất cả các chức năng trên được thực hiện trong PCA ở cấp phần cứng và không tải bộ xử lý trung tâm. Điều này giúp tăng thông lượng tổng thể, cải thiện độ chính xác của các phép đo và xử lý tín hiệu, đồng thời giảm thời gian phản hồi của bộ vi điều khiển đối với các sự kiện bên ngoài, điều này đặc biệt quan trọng đối với các hệ thống thời gian thực. PCA được triển khai trong 8xC51Fx (8xC51Rx) hóa ra là như vậy

Chỉ định

Tối đa tần số (MHz)

ROM / EPROM (byte)

quầy giao dịch

Thật may mắn là kiến ​​trúc của các bộ vi điều khiển này đã trở thành một tiêu chuẩn công nghiệp, và bản thân PCA đã được tái tạo nhiều lần trong các sửa đổi khác nhau của MK 8051.

Một số đặc điểm của một số vi điều khiển MCS-51 do Intel sản xuất được trình bày trong Bảng 1.1.

Các điểm nghẽn ban đầu của kiến ​​trúc MCS-51 là ALU dựa trên pin 8-bit và thực thi lệnh tương đối chậm (các lệnh nhanh nhất yêu cầu 12

Bảng 1.1

đầu ra đầu vào

ADC, đầu vào x bit

ngoại vi,

đặc thù

Hố u. (V)

Tùy chọn điện áp thấp

4 cấp độ IRQ, hết giờ

4 cấp độ IRQ, hết giờ

Phiên bản điện áp thấp 8xC51Fx

4 cấp độ IRQ, hết giờ

4 cấp độ IRQ, hết giờ

4 cấp độ IRQ, hết giờ

tần số đồng hồ chu kỳ (tần số đồng hồ MK)). Điều này hạn chế việc sử dụng các bộ vi điều khiển thuộc dòng họ trong các ứng dụng đòi hỏi hiệu suất cao hơn và các phép tính phức tạp (16 và 32-bit). Một vấn đề cấp bách là hiện đại hóa cơ bản kiến ​​trúc MCS-51. Vấn đề hiện đại hóa rất phức tạp bởi thực tế là vào đầu những năm 90, rất nhiều sự phát triển trong lĩnh vực phần mềm và phần cứng của họ MCS-51 đã được tạo ra, liên quan đến một trong những nhiệm vụ chính là thiết kế kiến trúc mới là việc triển khai khả năng tương thích phần cứng và phần mềm với các phát triển dựa trên MCS -51.

Để giải quyết vấn đề này, một nhóm chuyên gia chung của Intel và Philips đã được thành lập, nhưng về sau con đường của hai công ty này lại đi theo những hướng riêng. Kết quả là vào năm 1995, hai họ khác nhau đáng kể đã xuất hiện: MCS-251/151 cho Intel và MCS-51XA cho Philips (xem tiểu mục 1.2).

Đặc điểm chính của kiến ​​trúc MCS-251:

Không gian địa chỉ tuyến tính 24 bit để định địa chỉ cho bộ nhớ lên đến 16 MB;

Một kiến ​​trúc thanh ghi cho phép các thanh ghi được truy cập dưới dạng byte, từ và từ kép;

Chế độ định địa chỉ trang để tăng tốc độ truy xuất các lệnh từ bộ nhớ chương trình bên ngoài;

Hàng đợi hướng dẫn;

Tập lệnh mở rộng bao gồm các phép toán số học và logic 16 bit;

Không gian địa chỉ mở rộng của ngăn xếp (lên đến 64 KB);

Thực hiện lệnh nhanh nhất trong 2 chu kỳ đồng hồ.

Bộ lệnh MCS-251 bao gồm hai bộ lệnh - bộ thứ nhất là bản sao của bộ lệnh MCS-51 và bộ thứ hai bao gồm các lệnh mở rộng tận dụng lợi thế của kiến ​​trúc MCS-251. Trước khi sử dụng bộ vi điều khiển, nó phải được định cấu hình, tức là với sự trợ giúp của lập trình viên, "ghi" các bit cấu hình xác định tập lệnh nào sẽ hoạt động sau khi khởi động. Nếu bạn cài đặt bộ hướng dẫn đầu tiên, thì họ MCS-251 sẽ tương thích với MCS-51 ở cấp mã nhị phân. Chế độ này được gọi là Chế độ nhị phân. Nếu ban đầu bạn cài đặt một bộ hướng dẫn mở rộng (Chế độ nguồn), thì các chương trình được viết cho MCS-51 sẽ yêu cầu biên dịch lại trên nhiều phương tiện cho MCS-251. Chế độ Nguồn cho phép bạn tận dụng tối đa kiến ​​trúc MCS-251 và đạt được hiệu suất cao nhất.

Đối với người dùng có định hướng sử dụng vi điều khiển MCS-251 như một sự thay thế cơ học cho MCS-51, Intel sản xuất vi điều khiển MCS-151, đã được lập trình ở trạng thái Chế độ nhị phân.

Một số đặc điểm của một số vi điều khiển MCS-251/151 được trình bày trong Bảng 1.1.

Hiện tại, Intel, nhắm vào thị trường bộ xử lý Pentium, đang loại bỏ dần việc sản xuất tinh thể MCS-51. Nói chung, đối với một nhà phát triển cụ thể, điều này có thể không được chú ý, trừ khi anh ta sử dụng bộ vi điều khiển 8xC51GB và 80C152Jx, không có bản sao chính xác trong số các sản phẩm của các công ty khác. Đối với tất cả các vi điều khiển khác thuộc họ MCS-51, tất cả chúng đều đã được các công ty khác sao chép nhiều lần.

Trạng thái hệ thống ngắt được thăm dò ở cuối mỗi chu kỳ máy trong pha S5P2, ngoại trừ lệnh RETI và bất kỳ lệnh nào tham chiếu đến thanh ghi IE và IP. Từ thời điểm sửa yêu cầu ngắt đến khi sửa chữa ngắt, tần số fOSC mất từ ​​38 đến 86 khoảng thời gian, tùy thuộc vào giai đoạn của yêu cầu và số chu kỳ máy của lệnh trong đó yêu cầu được nhận.

Khi ngắt được thực hiện trong phần cứng, lệnh LCALL addr16 được thực thi, lệnh này đảm bảo lưu trữ trong ngăn xếp trạng thái hiện tại của bộ đếm chương trình (lưu trữ địa chỉ trả về) và đi đến địa chỉ bắt đầu addr16 của thủ tục dịch vụ tương ứng. Mỗi nguồn yêu cầu ngắt có

địa chỉ bắt đầu (vectơ ngắt):

Ngắt ngoài INT0.

Bộ định thời / bộ đếm ngắt TC0.

Ngắt ngoài INT1.

Bộ định thời / bộ đếm ngắt TC1.

Cổng nối tiếp ngắt.

2.7. Phương thức địa chỉ và hệ thống lệnh của họ MCS-51

Hệ thống lệnh của họ MCS-51 tập trung vào việc tổ chức dữ liệu nhập - xuất dữ liệu linh hoạt thông qua các cổng đa năng P0 ... P3 và xử lý thông tin sơ cấp. Đặc biệt chú ý đến các hoạt động với bit và chuyển giao quyền điều khiển theo giá trị của chúng. Các lệnh thực hiện các thao tác như vậy tạo thành một nhóm lớn và cùng với phần cứng tương ứng, tạo thành cái gọi là "bộ xử lý Boolean" trong kiến ​​trúc MCS-51.

Tập lệnh cung cấp cho người lập trình khả năng sử dụng hầu hết các thao tác với một tập hợp đầy đủ các phương pháp đánh địa chỉ và tài nguyên phần cứng có sẵn phần mềm.

2.7.1. Các phương pháp giải quyết

Mỗi lệnh cho bộ xử lý biết hoạt động cần thực hiện và các phương pháp truy cập các toán hạng. Mã lệnh có một số trường có mục đích chức năng cụ thể. Các trường quan trọng nhất của bất kỳ lệnh nào là mã hoạt động (CPC), xác định hành động của lệnh và phần địa chỉ. Các trường của phần địa chỉ chứa thông tin về địa chỉ của các toán hạng và kết quả của hoạt động, và trong một số trường hợp là thông tin về địa chỉ của lệnh tiếp theo.

Nếu địa chỉ trỏ đến số ô nhớ chứa toán hạng hoặc nơi nó được ghi, thì nó được gọi là địa chỉ trực tiếp.

Các phương thức định địa chỉ là một tập hợp các cơ chế để truy cập các toán hạng. Một số trong số chúng đơn giản, dẫn đến định dạng lệnh nhỏ gọn và truy cập nhanh vào toán hạng, nhưng có một số lượng tài nguyên sẵn có hạn chế. Những người khác cho phép bạn hoạt động với tất cả các tài nguyên có sẵn trong hệ thống, nhưng lệnh này hóa ra dài, trên

đầu vào và thực hiện tốn nhiều thời gian. Tập hợp các phương pháp địa chỉ trong mỗi tập lệnh là sự kết hợp thỏa hiệp của các cơ chế địa chỉ đã biết được các kiến ​​trúc sư lựa chọn dựa trên tập hợp các nhiệm vụ cần giải quyết.

Dưới đây là các phương pháp định địa chỉ chính được sử dụng trong họ lệnh MCS-51.

Địa chỉ ngầm... Lệnh không chứa hướng dẫn rõ ràng về địa chỉ của toán hạng tham gia vào hoạt động hoặc địa chỉ mà tại đó kết quả của hoạt động được đặt, nhưng địa chỉ này được ngụ ý. Trong các lệnh, bộ tích lũy thường được định địa chỉ ngầm là bộ nhận kết quả của một phép toán. Ví dụ, kết quả của việc thêm nội dung của bộ tích lũy (A) và thanh ghi R1 của ngân hàng dữ liệu hiện tại với lệnh ADD A, R1 được ghi vào bộ tích lũy có địa chỉ ngầm. Toàn bộ lệnh được chỉ định chiếm một byte trong bộ nhớ, trong khi địa chỉ của chỉ bộ tích lũy (8Eh của vùng SFR) mới chứa một byte.

Địa chỉ trực tiếp... Trường địa chỉ lệnh chứa

Địa chỉ không phải là địa chỉ của toán hạng, mà là chính toán hạng. Địa chỉ trực tiếp được biểu thị bằng ký tự đặc biệt # phía trước số. Ví dụ: với lệnh MOV A, # 15h, số thập lục phân 15 (byte thứ hai của lệnh) được tải vào bộ tích lũy. Trong hệ thống lệnh, địa chỉ trực tiếp được chỉ định là #data, trong đó dữ liệu là một số

(dữ liệu = 00h ... FFh).

Địa chỉ trực tiếp... Trường địa chỉ lệnh chỉ ra địa chỉ trực tiếp của ô nhớ dữ liệu mà toán hạng được đặt hoặc nơi nó được ghi. Ví dụ, với lệnh MOV A, 15h, nội dung của ô DSEG có địa chỉ 15h được tải vào bộ tích lũy. Ô bộ nhớ có thể được định địa chỉ trực tiếp, trong khi bộ tích lũy là ẩn. Tùy thuộc vào vị trí của toán hạng được định địa chỉ, địa chỉ trực tiếp được chia thành thanh ghi trực tiếp và tuyệt đối.

Địa chỉ đăng ký trực tiếp... Trường địa chỉ lệnh chứa địa chỉ trực tiếp của thanh ghi của ngân hàng thanh ghi hiện tại. Có tám thanh ghi trong mỗi ngân hàng và một địa chỉ chuyển tiếp ba bit được yêu cầu để giải quyết chúng. Trong ghi nhớ các lệnh, thanh ghi địa chỉ được ký hiệu là Rn, trong đó n = 0 ... 7. Tất cả các trường lệnh đều nằm gọn trong một byte. Đây được gọi là địa chỉ ngắn. Ví dụ: MOV R4, R1.

Địa chỉ tuyệt đối trực tiếp cho phép bạn tham chiếu đến bất kỳ ô DSEG và vùng SFR nào. Địa chỉ trực tiếp trong trường hợp này có một byte và lệnh có hai byte. Trong hệ thống lệnh, byte địa chỉ trực tiếp được chỉ định bằng từ trực tiếp (direct = 00h… FFh). Ví dụ, lệnh MOV 80h, R2 (hoặc MOV P0, R2) tải nội dung của thanh ghi R2 của ngân hàng dữ liệu hiện tại vào cổng P0 (vị trí 80h của vùng SFR). Nếu cả hai toán hạng đều có địa chỉ tuyệt đối trực tiếp, thì lệnh sẽ trở thành ba byte (Ví dụ: MOV 80h, 15h).

Giải quyết gián tiếp... Trường địa chỉ chứa địa chỉ của ô nhớ chứa địa chỉ trực tiếp của toán hạng. Trong hệ thống lệnh, ký hiệu đặc biệt @ chỉ định địa chỉ gián tiếp. Bất động sản

thanh ghi R0 và R1 (@Ri, i = 0,1) của mỗi ngân hàng thanh ghi có địa chỉ trực tiếp. Ví dụ, nếu nội dung của thanh ghi R1 của ngân hàng thanh ghi hiện tại là 15h, thì lệnh MOV A, @ R1 sẽ thực hiện hành động tương tự như lệnh trên MOV A, 15h - nó sẽ tải nội dung của vị trí bộ nhớ DSEG. 15h vào bộ tích lũy. Tuy nhiên, lệnh MOV A, @ R1 là byte đơn, nhưng quan trọng nhất là có thể lập trình thay đổi địa chỉ bằng cách thay đổi nội dung của thanh ghi R1.

Địa chỉ tương đối... Với địa chỉ tương đối, địa chỉ trực tiếp được hình thành bằng cách thêm địa chỉ cơ sở với trường địa chỉ lệnh. Nội dung của bộ đếm chương trình được sử dụng làm địa chỉ cơ sở và trường địa chỉ lệnh là một rel (tương đối) bù đắp tám bit. Số rel được lệnh giải thích là một số nguyên có dấu, được biểu diễn trong phần bù của hai. Phạm vi của bản trình bày của nó là (-128 ... + 127). Khi xác định số rel, hãy nhớ rằng bộ đếm chương trình trỏ đến lệnh tiếp theo sẽ được thực hiện. Định địa chỉ tương đối được sử dụng rộng rãi trong các lệnh truyền điều khiển, cho phép bạn tạo các mô-đun chương trình có thể thay đổi vị trí. Các lệnh chuyển điều khiển có định địa chỉ tương đối cho phép tổ chức phân nhánh so với vị trí hiện tại của bộ đếm chương trình PC theo cả hai hướng bởi (-128 ... + 127) byte.

Trong các chương trình hợp ngữ, bạn có thể chỉ định nhãn để chuyển đến trong trường offset. Theo kết quả của quá trình dịch, trình hợp dịch sẽ tính toán giá trị bù đắp nếu nó không vượt quá (-128 ... + 127). Nếu không, một thông báo lỗi sẽ được hiển thị.

Địa chỉ cơ bảnđại diện cho một kiểu xưng hô tương đối. Địa chỉ trực tiếp trong trường hợp này được hình thành bằng cách thêm địa chỉ được chỉ định trong lệnh với nội dung của thanh ghi cơ sở, nơi lưu trữ địa chỉ cơ sở. Chức năng của thanh ghi cơ bản trong họ MCS-51 là thanh ghi con trỏ dữ liệu DPTR hoặc bộ đếm chương trình PC. Kiểu địa chỉ này đặc biệt hữu ích khi xử lý bảng và mảng dữ liệu. Trong các lệnh MOVC A, @ A + DPTR và MOVC A, @ A + PC, địa chỉ chuyển tiếp 16 bit được hình thành dưới dạng tổng nội dung của DPTR và A hoặc PC và A.

Địa chỉ trang... Khi phân trang được sử dụng, bộ nhớ được chia thành một loạt các trang có độ dài bằng nhau. Các trang được đánh địa chỉ bằng một thanh ghi trang riêng biệt và các ô nhớ trong trang được đánh địa chỉ bằng địa chỉ có trong lệnh. Địa chỉ trực tiếp được hình thành bằng cách ghép (nối) địa chỉ của các trang và địa chỉ của ô nhớ trong trang. Trong lệnh MOVX A, @ Ri, cổng P2 (byte địa chỉ cao) thực hiện chức năng của thanh ghi trang và nội dung của thanh ghi Ri (byte thấp địa chỉ) đặt địa chỉ trong trang. Trong trường hợp này, bộ nhớ được chia thành 256 trang gồm 256 ô trong mỗi trang.

Địa chỉ ngăn xếp Nó được sử dụng trong các lệnh không định địa chỉ và là sự kết hợp của các phương pháp đánh địa chỉ tự động tăng dần và tự động giảm dần, hoạt động trên nguyên tắc LIFO (L ast I nput - F irst O utput) - "cuối cùng vào - ra trước". Ngăn xếp nằm trong DSEG và phát triển theo hướng tăng dần địa chỉ. Địa chỉ của đỉnh ngăn xếp được chứa trong con trỏ ngăn xếp SP. Khi một byte được ghi vào ngăn xếp, nội dung SP được tăng lên trước tiên, và sau đó việc ghi được thực hiện tới địa chỉ này. Khi đọc một byte từ ngăn xếp, nó sẽ đọc đầu tiên tại địa chỉ mà SP chỉ đến, sau đó giảm SP. Khi sử dụng ngăn xếp, cần lưu ý rằng độ sâu của ngăn xếp (số lượng ô nhớ tối đa mà ngăn xếp chiếm giữ) không được kiểm soát bởi phần cứng. Với sự gia tăng quá mức trong ngăn xếp, các ô nhớ không dành cho nó có thể bị chiếm dụng do mất thông tin trong chúng. Ngăn xếp phần cứng được sử dụng để lưu trữ địa chỉ trả về khi sửa chữa ngắt.

2.7.2. Bộ lệnh gia đình MCS-51

Hệ thống lệnh được trình bày trong các bảng A2.1 ... A2.6 của Phụ lục 2. Các bảng cho biết tên lệnh, ghi nhớ của nó, mã thao tác nhị phân, ảnh hưởng của lệnh được thực hiện trên các cờ C, OV , AC và P, độ dài của lệnh tính bằng byte (B) và thời gian thực hiện trong chu kỳ máy (C), cũng như nội dung của phép biến đổi được thực hiện bởi lệnh. Dấu phẩy được dùng làm dấu phân cách cho các trường địa chỉ trong các lệnh. Để cải thiện khả năng đọc, bạn có thể thêm dấu cách sau dấu phẩy nếu trình hợp dịch đang được sử dụng hỗ trợ chúng.

Toàn bộ tập lệnh có thể được chia thành 5 nhóm: phép toán truyền dữ liệu, phép toán số học, phép toán logic, phép toán bit và phép toán truyền điều khiển.

Nhóm lệnh cho các hoạt động truyền dữ liệu(bảng A2.1) với-

giữ MOV (truyền dữ liệu giữa DSEG và RSEG), MOVC (giữa CSEG và A), MOVX (giữa XSEG và A), các lệnh truy cập ngăn xếp PUSH và POP, và hai lệnh trao đổi XCH và XCHD. Tất cả các lệnh truyền dữ liệu, nhận pin, đặt cờ chẵn lẻ P của nội dung pin và các lệnh địa chỉ trực tiếp, nhận thanh ghi PSW, thay đổi tất cả các cờ. Dung lượng nhất là lệnh MOV, sử dụng bốn phương pháp định địa chỉ: đăng ký trực tiếp (A, Rn, DPTR), trực tiếp (direct), gián tiếp (@Ri), trực tiếp (#data, # data16). Toán hạng thứ hai của lệnh là nguồn, toán hạng đầu tiên là đích. Có ba phương pháp định địa chỉ (ngoại trừ trực tiếp) để chỉ ra đích và cả bốn phương pháp để chỉ ra nguồn. Lệnh chuyển trực tiếp MOV ba byte, trực tiếp giữa hai vị trí bộ nhớ bất kỳ (DSEG và SFR), bao gồm cả RSEG. Để trao đổi với RSEG, các định dạng hai và một byte đặc biệt được cung cấp:

Lệnh MOV DPTR đặc biệt, # data16, tải con trỏ DPTR 16 bit với dữ liệu16.

Lệnh MOVC cho phép bạn đọc thông tin từ bộ nhớ chương trình CSEG không phải vào thanh ghi lệnh của thiết bị điều khiển mà vào pin của thiết bị vận hành. Lệnh sử dụng hai phương pháp định địa chỉ: dựa trên DPTR và tương đối với PC. Trong cả hai trường hợp, phần bù số nguyên không dấu (chỉ số) được lưu trữ trong bộ tích lũy. Pin cũng đóng vai trò là bộ nhận kết quả. Lệnh cho phép bạn thực hiện chuyển mã nhanh giữa các bảng.

Bộ nhớ ngoài được truy cập bằng lệnh MOVX. Việc trao đổi được thực hiện theo byte giữa pin và XSEG bên ngoài. Ô XSEG có thể được định địa chỉ theo hai cách: gián tiếp qua con trỏ DPTR 16-bit và phân trang gián tiếp qua con trỏ Ri 8-bit, i = 0,1. Trong trường hợp sau, thanh ghi P2 được sử dụng làm thanh ghi trang.

Các lệnh PUSH và POP không được giải nén cung cấp truyền dữ liệu

giữa DSEG, RSEG và SFR.

Lệnh trao đổi XCH cung cấp trao đổi byte hai chiều và lệnh XCHD cung cấp bốn toán hạng byte ít quan trọng nhất.

Nhóm lệnh số học(bảng A2.2) co-

nắm giữ các hướng dẫn về phép cộng ADD, phép cộng với ADDC mang, phép trừ với SUBB mượn, tăng và giảm một INC và DEC, phép cộng BCD định dạng đóng gói, phép nhân MUL và phép chia DIV. Các phép toán được thực hiện trên các số nguyên không dấu. Trong các phép toán cộng và trừ, bộ tích lũy là toán hạng đầu tiên và bộ nhận kết quả. Thanh ghi trực tiếp, địa chỉ tuyệt đối trực tiếp, địa chỉ trực tiếp và gián tiếp được sử dụng để xác định toán hạng thứ hai. Các hoạt động INC và DEC áp dụng cho một bộ tích lũy, một thanh ghi có thể định địa chỉ trực tiếp hoặc một vị trí bộ nhớ có thể định địa chỉ trực tiếp hoặc gián tiếp. Ngoài ra, phép toán INC áp dụng cho nội dung của thanh ghi con trỏ DPTR 16-bit.

Các phép toán nhân và chia số nguyên không dấu liên quan đến bộ tích lũy và thanh ghi B. Trong phép nhân, giá trị 8 bit của A được nhân với giá trị 8 bit của B và kết quả 16 bit được ghi vào cặp BA. Trong trường hợp này, đăng ký B lưu trữ phần trên của sản phẩm. Cờ OV được đặt nếu tích lớn hơn 255. Khi giá trị 8 bit A được chia cho giá trị 8 bit B, thương được ghi cho A và phần còn lại được ghi cho B. 0 đặt cờ tràn OV.

Lệnh hiệu chỉnh số thập phân của bộ tích lũy DA được đặt sau lệnh thêm. Các điều khoản phải được thể hiện bằng mã BCD. Hiệu chỉnh được thực hiện một cách tiêu chuẩn.

Nhóm lệnh cho các hoạt động logic(bảng A2.3 ) chứa ba phép toán điển hình: ANL - logic AND, ORL - logic OR, XRL - OR loại trừ logic. Nguồn của toán hạng đầu tiên

hoặc bộ tích lũy A hoặc phục vụ ô nhớ địa chỉ trực tiếp. Toán hạng thứ hai được xác định bởi một trong bốn phương pháp định địa chỉ cơ bản. Nhóm cũng bao gồm hoạt động đơn lẻ trên nội dung của bộ tích lũy: CLR - rõ ràng, CPL - đảo ngược, và cả RL, RLC, RR và RRC - hoạt động của các dịch chuyển theo chu kỳ và mở rộng sang phải và sang trái. Điều này cũng bao gồm hoạt động trao đổi sổ ghi chép trong bộ tích lũy SWAP, có thể được hiểu là sự dịch chuyển theo chu kỳ của một byte bằng bốn chữ số.

Nhóm lệnh hoạt động bit(bảng A2.6) chứa co-

các lệnh SETB - đặt một bit thành 1, CLR - đặt lại một bit thành 0, CPL - đảo ngược bit, ANL và ORL - logic AND và OR logic của nội dung cờ C và bit được định địa chỉ trực tiếp, MOV - chuyển bit.

V các phép toán bit, cờ C hoạt động như một bộ tích lũy boolean. Các toán hạng là nội dung của cờ C hoặc bit địa chỉ trực tiếp của vùng BSEG. Các phép toán ANL và ORL có thể sử dụng nội dung của một bit (bit) có thể định địa chỉ trực tiếp hoặc đảo ngược nội dung (/ bit).

V nhóm này cũng bao gồm các lệnh để phân nhánh có điều kiện với Relay bù 8-bit. Một bước nhảy có điều kiện có thể được thực hiện với cả bit set (lệnh JB) và bit xóa (lệnh JNB). Đặc biệt lưu ý là lệnh JBC, khi bit được đặt, sẽ thực hiện phân nhánh và đồng thời xóa bit về 0.

Nhóm lệnh chuyển điều khiển(bảng A2.4 và A2.5) với-

giữ các lệnh nhảy không điều kiện AJMP, LJMP, SJMP, JMP, lệnh nhảy có điều kiện JZ, JNZ, CJNE, gọi ACALL, LCALL, trả về RET, RETI và sửa đổi với lệnh nhảy có điều kiện DJNZ. Một lệnh NOP trống cũng được bao gồm.

V Định địa chỉ tương đối được sử dụng rộng rãi trong các lệnh truyền điều khiển, cho phép bạn tạo các mô-đun chương trình có thể thay đổi vị trí. Địa chỉ tương đối là Rel offset 8 bit là byte có dấu cung cấp bước nhảy (–128… +127) byte so với vị trí PC hiện tại. Có thể sử dụng địa chỉ addr16 trực tiếp hoặc địa chỉ @ A + DPTR gián tiếp để chuyển đến bất kỳ điểm nào khác trong không gian địa chỉ 64K. Trong trường hợp thứ hai, nội dung của A được hiểu là số nguyên không dấu. Biến thể địa chỉ trực tiếp ngắn addr11 trong trang hiện tại 2KB đã được giới thiệu để tương thích với họ MCS-48.

Tất cả các kiểu địa chỉ này được sử dụng trong hướng dẫn nhảy. Chỉ phương thức định địa chỉ trực tiếp addr16 và intrapage addr11 được sử dụng trong lệnh gọi. Tất cả các lệnh có điều kiện chỉ sử dụng địa chỉ tương đối.

Khi bộ vi điều khiển nhận ra yêu cầu ngắt, nó tạo ra lệnh LCALL addr16, lệnh này tự động đảm bảo rằng địa chỉ trả về được lưu trữ trong ngăn xếp. Thông tin trạng thái chương trình (nội dung thanh ghi PSW) không được lưu tự động. Trong đó