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

Giáo trình Kỹ thuật vi điều khiển (Nghề Điện tử dân dụng): Phần 1 - CĐ nghề Vĩnh Long

145 25 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

Định dạng
Số trang 145
Dung lượng 2,95 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

(NB) Giáo trình Kỹ thuật vi điều khiển (Nghề Điện tử dân dụng): Phần 1 do CĐ nghề Vĩnh Long biên soạn nhằm trình bày sơ lược về lịch sử và hướng phát triển của vi điều khiển, cấu trúc họ vi điều khiển 8051, tập lệnh 8051 và bộ định thời. Mời các bạn tham khảo!

Trang 1

ỦY BAN NHÂN DÂN TỈNH VĨNH LONG

TRƯỜNG CAO ĐẲNG NGHỀ VĨNH LONG

GIÁO TRÌNH

MÔ ĐUN: KỸ THUẬT VI ĐIỀU KHIỂN

NGHỀ: ĐIỆN TỬ DÂN DỤNG

TRÌNH ĐỘ: TRUNG CẤP

(Ban hành theo Quyết định số 171 /QĐ – CĐNVL ngày 14 tháng 8 năm 2017

của Hiệu trưởng trường Cao đẳng nghề Vĩnh Long)

(Lưu hành nội bộ) NĂM 2017

Trang 2

ỦY BAN NHÂN DÂN TỈNH VĨNH LONG

TRƯỜNG CAO ĐẲNG NGHỀ VĨNH LONG

Tác giả biên soạn: ThS Trương Nguyễn Thịnh Cương

Trang 3

LỜI MỞ ĐẦU



Quyển sách đề cập đến các vấn đề căn bản liên quan đến chip họ 8051, như cấu trúc phần cứng, nhiệm vụ của các chân trong chip họ 8051, sơ đồ mạch điện, tập lệnh, cùng các hoạt động đặc trưng của các chip vi điều khiển: hoạt động định thời, hoạt động port nối tiếp và hoạt động ngắt

Các vấn đề về lập trình hợp ngữ và cấu trúc chương trình, giúp cho người đọc dể dàng tiếp cận Các thí dụ trong các chương trình minh họa một cách rõ ràng, đồng thời cũng giúp người đọc dể dàng tiếp cận và lập trình theo ý riêng của mình

Quyển sách này là tài liệu tổng hợp từ nhiều nguồn sách khác nhau, nên không thể không thiếu sót về nội dung lẫn chính tả mong các học sinh đóng góp để quyển sách được hoàn thiện hơn

Trang 4

MỤC LỤC



BÀI 1: SƠ LƯỢC VỀ LỊCH SỬ VÀ HƯỚNG PHÁT TRIỂN CỦA VI ĐIỀU KHIỂN1

1 Lịch sử phát triển 1

2 Vi điều khiển 1

2.1.Nguyên lý cấu tạo 1

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

2.3 Tổ chức bộ nhớ ngoài 3

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

4 Hướng phát triển 4

Câu hỏi ôn tập 4

BÀI 2: CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051 5

1 Tổng quan 5

2 Sơ đồ chân 6

3 Cấu trúc Port I/O 7

4 Tổ chức bộ nhớ 10

4.1.Vùng RAM đa năng 12

4.2.Vùng RAM địa chỉ bit 13

4.3 Các dãy thanh ghi 13

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

5.1.Từ trạng thái chương trình PSW 15

5.2.Thanh ghi B 16

5.3.Con trỏ Stack 16

5.4.Con trỏ dữ liệu DPTR 16

5.5 Các thanh ghi Port 16

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

5.7.Các thanh ghi của Port nối tiếp 17

5.8.Các thanh ghi ngắt 17

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

6 Bộ nhớ ngoài 17

6.1.Truy xuất bộ nhớ chương trình ngoài 17

6.2.Truy xuất bộ nhớ dữ liệu ngoài 18

6.3 Giải mã địa chỉ 18

7 Các cải tiến của 8032/8052 19

8 Hoạt động Reset 20

9 Thực hành ứng dụng 21

Câu hỏi ôn tập 21

Trang 5

BÀI 3: TẬP LỆNH 8051 22

1 Mở đầu 22

2 Các cách định địa chỉ 22

3 Các nhóm lệnh 24

3.1 Nhóm lệnh số học 24

3.2 Nhóm lệnh logic 36

3.3 Nhóm lệnh truyền dữ liệu 47

3.5.Nhóm lệnh rẽ nhánh chương trình 71

4 Bài tập 86

Câu hỏi ôn tập 99

BÀI 4: BỘ ĐỊNH THỜI 100

1 Mở đầu 100

2 Thanh ghi SFR của timer 102

2.1.Thanh ghi chế độ TMOD 102

2.2 Thanh ghi điều khiển TCON 105

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

3.1.Chế độ Timer 13 bit 106

3.2.Chế độ Timer 16 bit 107

3.4.Chế độ tách biệt Timer 108

4 Nguồn cung cấp xung cho Timer 110

4.1.Chức năng định thời 110

4.2.Chức năng đếm sự kiện 111

5 Khởi động, dừng, điều khiển Timer 112

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

7 Timer 2 của 8052 114

Câu hỏi ôn tập 139

BÀI 5: CỔNG NỐI TIẾP 140

1 Mở đầu 140

2.Thanh ghi điều khiển 141

3 Chế độ làm việc 141

3.1.Thanh ghi dịch 8 bit 144

3.2 Chế độ UART 8 bit có tốc độ baud thay đổi 146

3.3.UART 9 bit với tốc độ baud cố định 148

3.4.Chế độ UART với tốc độ baud cố định 149

4 Khởi tạo và truy suất thanh ghi PORT nối tiếp 149

5 Truyền thông đa xử lý 152

6 Tốc độ BAUD 153

Trang 6

7 Bài tập 153

Câu hỏi ôn tập 186

BÀI 6: NGẮT 188

1 Mở đầu 188

2 Tổ chức ngắt của 8051 190

3 Xử lý ngắt 190

4 Thiết kế chương trình dùng ngắt 193

5 Ngắt cổng nối tiếp 196

6 Các cổng ngắt ngoài 201

7 Đồ thị thời gian của ngắt 207

8 Bài tập 207

Câu hỏi ôn tập 216

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

1 Mở đầu 224

2 Hoạt động của ASSEMBLER 225

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

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

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

6 Hoạt động liên kết 234

7 MACRO 237

8 Bài tập 242

Câu hỏi ôn tập 243

TÀI LIỆU THAM KHẢO 244

Trang 7

1

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

CỦA VI ĐIỀU KHIỂN

Mục tiêu

- Trình bày được cấu trúc chung của vi điều khiển

- Phát biểu được các ứng dụng của vi điều khiển và hướng phát triển của vi điều khiển

- 1976 Intel giới thiệu bộ vi điều khiển (microcontroller)

8748 8748 chứa trên 17,000 transistor bao gồm một CPU, 1 Kbyte EPROM, 64 byte Ram, 27 chân xuất nhập và một bộ định thời 8 bit 1

- 1980 Intel công bố chip 8051, bộ vi điều khiển đầu tiên của họ vi điều khiển MCS-51 8051 chứa trên 60,000 transistor bao gồm 4Kbyte ROM, 128 byte Ram, 32 đường xuất nhập, 1 port nối tiếp và 2 bộ địn thời 16 bit

2.1.Nguyên lý cấu tạo

Hình 1-2 Sơ đồ khối một máy tính cổ điển

Trang 8

Bảng 3-2 Các thanh ghi chức năng đặc biệt

Trang 9

3

Các thanh ghi có thể định địa chỉ bit sẽ có địa chỉ bit bắt đầu và địa chỉ byte trùng nhau Ví dụ như: thanh ghi P0 có địa chỉ byte là 80h và có địa chỉ bit bắt đầu từ 80h (ứng với P0.0) đến 87h (ứng với P0.7) Chức năng các thanh ghi này sẽ mô tả trong phần sau

a RAM nội:

Chia thành các vùng phân biệt: vùng RAM đa dụng (30h – 7Fh), vùng RAM có thể định địa chỉ bit (20h – 2Fh) và các bank thanh ghi (00h – 1Fh) Bảng 3-3 Địa chỉ RAM nội 8051

b RAM đa dụng:

RAM đa dụng có 80 byte từ địa chỉ 30h – 7Fh có thể truy xuất mỗi lần 8 bit bằng cách dùng chế độ địa chỉ trực tiếp hay gián tiếp Các vùng địa chỉ thấp từ 00h – 2Fh cũng có thể sử dụng cho mục đich như trên ngoài các chức năng đề cập như phần sau

c RAM có thể định địa chỉ bit:

Vùng địa chỉ từ 20h – 2Fh gồm 16 byte (= 128 bit) có thể thực hiện giống như vùng RAM đa dụng (mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh

xử lý bit Vùng RAM này có các địa chỉ bit bắt đầu tại giá trị 00h và kết thúc tại 7Fh Như vậy, địa chỉ bắt đầu 20h (gồm 8 bit) có địa chỉ bit từ 00h – 07h; địa chỉ kết thúc 2Fh có địa chỉ bit từ 78h – Fh

d Các bank thanh ghi:

Vùng địa chỉ từ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h- 07h, bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18h – 1Fh Các bank thanh ghi này được đại diện bằng các thanh ghi từ R0 đến R7 Sau khi khởi động hệ thống thì bank thanh ghi được sử dụng là bank 0

Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truy xuất bởi các thanh ghi R0 đến R7 Việc thay đổi bank thanh ghi có thể thực hiện thông qua thanh ghi từ trạng thái chương trình (PSW) Các bank thanh ghi này cũng

có thể truy xuất bình thường như vùng RAM đa dụng đã nói ở trên

+ Nhà thông minh: Cửa tự động Khóa số

+Tự động điều tiết ánh sáng thông minh (bật/tắt đèn theo thời gian, theo cường độ ánh sáng, )

Trong quảng cáo: Các loại biển quảng cáo nháy chữ Quảng cáo ma trận LED Trong các sản phẩm công nghiệp:

Trang 10

4

+ Điều khiển động cơ

+ Điều khiển số (PID, mờ, )

4 Hướng phát triển

- Trong các sản phẩm dân dụng: Nhà thông minh: Cửa tự động Khóa số Tự động điều tiết ánh sáng thông minh (bật/tắt đèn theo thời gian, theo cường độ ánh sáng, ) Điều khiển các thiết bị từ xa (qua điều khiển, qua tiếng vỗ tay, ) Điều tiết hơi ẩm, điều tiết nhiệt độ, điều tiết không khí, gió Hệ thống vệ sinh thông minh,

- Trong quảng cáo: Các loại biển quảng cáo nháy chữ Quảng cáo ma trận LED (một màu, 3 màu, đa màu) Điều khiển máy cuốn bạt quảng cáo,

- Các máy móc dân dụng Máy điều tiết độ ẩm cho vườn cây Buồng ấp trứng gà/vịt Đồng hồ số, đồng hồ số có điều khiển theo thời gian

- Các sản phẩm giải trí Máy nghe nhạc Máy chơi game Đầu thu kỹ thuật số, đầu thu set-top-box,

- Trong các thiết bị y tế: Máy móc thiết bị hỗ trợ: máy đo nhịp tim, máy đo đường huyết, máy đo huyết áp, điện tim đồ, điện não đồ,… Máy cắt/mài kính Máy chụp chiếu (city, X-quang, )

Câu hỏi ôn tập

1 Trình bày nguyên lý của vi điều khiển?

2 Trình bày các kiểu cấu trúc bộ nhớ

Trang 11

5

BÀI 2: CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051

Mục tiêu

- Mô tả được cấu trúc họ vi điều khiển chuẩn công nghiệp

- Thực hiện truy xuất bộ nhớ dữ liệu, bộ nhớ chương trình đúng qui trình

kỹ thuật

- Thực hiện đúng kỹ thuật phương pháp mở rộng bộ nhớ ngoài

- Trình bày được nguyên lý hoạt động của mạch reset

Các hệ thống điều khiển trong công nghiệp sử dụng các vi xử lý 8 bit để điều khiển như hệ thống điện của xe hơi, hệ thống điều hòa, hệ thống điều khiển các dây chuyền sản xuất,…

Khi sử dụng vi xử lý cần phải thiết kế một hệ thống gồm có:

Yêu cầu điều khiển càng cao thì hệ thống càng phức tạp và nếu yêu cầu điều khiển có đơn giản ví dụ chỉ cần đóng mở 1 đèn led theo một thời gian yêu cầu nào đó thì hệ thống vi xử lý cũng phải có đầy đủ các khối trên

Để kết nối các khối trên tạo thành một hệ thống vi xử lý đòi hỏi người thiết kế phải rất hiểu biết về tất cả các thành phần vi xử lý, bộ nhớ, các thiết bị ngoại vi Hệ thống tạo ra khá phức tạp , chiếm nhiều không gian, mạch in, và vấn đề chính là đòi hỏi người thiết kế, người sử dụng hiểu thật rõ về hệ thống Một lý do chính nữa là vi

xử lý thừơng xử lý dữ liệu theo byte hoặc word trong khi đó các đối tượng điều khiển trong công nghiệp thường điều khiển theo bit

Trang 12

6

Chính vì sự phức tạp nên các nhà chế tạo đã tích hợp một ít bộ nhớ và một số các thiết bị ngoại vi cùng với vi xử lý tạo thành một IC gọi là vi điều khiển – Microcontroller

Khi vi điều khiển ra đời đã mang lại sự tiện lợi là dễ dàng sử dụng trong điều khiển công nghiệp, việc sử dụng vi điều khiển không đòi hỏi người sử dụng phải hiểu biết một lượng kiến thức quá nhiều như người sử dụng vi xử lý – dĩ nhiên người sử dụng hiểu biết càng nhiều thì càng tốt nhưng đối với người bắt đầu thì việc sử dụng vi

xử lý là điều rất phức tạp trong khi đó mong muốn là sử dụng được ngay

Các phần tiếp theo chúng ta sẽ khảo sát vi điều khiển để thấy rõ sự tiện lợi trong vấn đề điều khiển trong công nghiệp

Có rất nhiều hãng chế tạo được vi điều khiển, hãng sản xuất nổi tiếng là ATMEL Hãng Intel là nhà thiết kế Có thể truy xuất để lấy tài liệu của hãng bằng địa chỉ

2 Sơ đồ chân

Sơ đồ chân của vi điều khiển 89C51 được trình bày ở hình 3-2

Vi điều khiển 89C51 có tất cả 40 chân Trong đó có 24 chân có tác dụng kép (có nghĩa là 1 chân có 2 chức năng), mỗi đường có thể hoạt động như đường xuất nhập điều khiển IO [input output] hoặc là thành phần của các bus dữ liệu và bus địa chỉ để tải địa chỉ và dữ liệu khi giao tiếp với bộ nhớ ngoài

Trang 13

7

3 Cấu trúc Port I/O

➢ Port 0:

Port 0 là port có 2 chức năng với số thứ tự chân 32 – 39

Trong các hệ thống điều khiển đơn giản sử dụng bộ nhớ bên trong không dùng bộ nhớ mở rộng bên ngoài thì port 0 được dùng làm các đường điều khiển IO (Input- Output)

Trong các hệ thống điều khiển lớn sử dụng bộ nhớ mở rộng bên ngoài thì port 0

có chức năng là bus địa chỉ và bus dữ liệu AD7 - AD0 (Address: địa chỉ, data: dữ liệu)

➢ Port 1:

Port 1 với số thứ tự chân 1- 8 Port1 chỉ có 1 chức năng dùng làm các đường điều khiển xuất nhập IO, port 1 không có chức năng khác

➢ Port 2:

Port 2 là port có 2 chức năng với số thứ tự chân 21 – 28

Trong các hệ thống điều khiển đơn giản sử dụng bộ nhớ bên trong không dùng bộ nhớ mở rộng bên ngoài thì port 2 được dùng làm các đường điều khiển IO (Input- Output)

Trang 14

8

Trong các hệ thống điều khiển lớn sử dụng bộ nhớ mở rộng bên ngoài thì port 2

có chức năng là bus địa chỉ cao A8 - A15

➢ Port 3:

Port 3 là port có 2 chức năng với số thứ tự chân 10 -17 Các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của 89C51 như ở bảng sau:

- Các ngõ tín hiệu điều khiển:

➢ Ngõ tín hiệu PSEN (Program store enable):

PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình

mở rộng thường nối đến chân OE ( output enable hoặc RD) của Eprom cho phép đọc các byte mã lệnh

Khi có giao tiếp với bộ nhớ chương trình bên ngoài thì mới dùng đến PSEN, nếu không có giao tiếp thì chân PSEN bỏ trống PSEN

( PSEN ở mức thấp trong thời gian vi điều khiển 89C51 lấy lệnh Các mã lệnh của chương trình đọc từ Eprom qua bus dữ liệu và được chốt vào thanh ghi lệnh bên trong 89C51 để giải mã lệnh Khi 89C51 thi hành chương trình trong EPROM nội thì PSEN ở mức logic 1)

➢ Ngõ tín hiệu điều khiển ALE (Address Latch Enable ) :

Khi vi điều khiển 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus tải địa chỉ và bus dữ liệu [AD7 – AD0] do đó phải tách các đường dữ liệu và địa chỉ Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt Xem hình 3-3

Trang 15

Trong chế độ lập trình cho bộ nhớ nội của vi điều khiển thì chân ALE được dùng làm ngõ vào nhận xung lập trình từ bên ngoài để lập trình cho bộ nhớ flash rom trong 89C51

Ở hình 3-3 chỉ là minh hoạ kết nối vi điều khiển (89C52) với bộ nhớ EPROM ngoại để thấy vai trò của tín hiệu ALE, các đường còn lại của vi điều khiển có thể dùng để kết nối điều khiển các đối tượng khác

➢ Ngõ tín hiệu EA (External Access):

Tín hiệu vào EA ở chân 31 thường nối lên mức 1 hoặc mức 0

Nếu nối EA lên mức logic 1 (+5v) thì vi điều khiển sẽ thi hành chương trình từ

Trang 16

10

điều khiển Khi reset thì tín hiệu reset phải ở mức cao ít nhất là 2 chu kỳ máy, khi đó các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống Trạng thái của tất cả các thanh ghi trong 89C51 sau khi reset hệ thống được tóm tắt như sau:

Thanh ghi quan trọng nhất là thanh ghi bộ đếm chương trình PC = 0000H Sau khi reset vi điều khiển luô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 nên các chương trình viết cho vi điều khiển luôn bắt đầu viết tại địa chỉ 0000H

Nội dung của RAM trên chip không bị thay đổi bởi tác động của ngõ vào reset [có nghĩa là vi điều khiển đang sử dụng các thanh ghi để lưu trữ dữ liệu nhưng nếu vi điều khiển bị reset thì dữ liệu trong các thanh ghi vẫn không đổi]

Các ngõ vào bộ dao động Xtal1, Xtal2:

Bộ dao động được được tích hợp bên trong 89C51, khi sử dụng 89C51 người thiết kế chỉ cần kết nối thêm tụ thạch anh và các tụ như hình vẽ trong sơ đồ hình 3-3 Tần số tụ thạch anh thường sử dụng cho 89C51 là 12Mhz ÷ 24Mhz

4 Tổ chức bộ nhớ

Vi điều khiển 89C51 có bộ nhớ nội bên trong và có thêm khả năng giao tiếp với

bộ nhớ bên ngoài nếu bộ nhớ bên trong không đủ khả năng lưu trữ chương trình

Bộ nhớ nội bên trong gồm có 2 loại bộ nhớ: bộ nhớ dữ liệu và bộ chương trình

Bộ nhớ dữ liệu có 256 byte, bộ nhớ chương trình có dung lượng 4kbyte [89C52 có 8 kbyte, 89W55 có 16kbyte]

Trang 17

11

Bộ nhớ mở rộng bên ngoài cũng được chia ra làm 2 loại bộ nhớ: bộ nhớ dữ liệu

và bộ nhớ chương trình Khả năng giao tiếp là 64kbyte cho mỗi loại Hình 3-8 minh họa khả năng giao tiếp bộ nhớ của vi điều khiển 89C51

Bộ nhớ mở rộng bên ngoài và bộ nhớ chương trình bên trong không có gì đặc biệt – chỉ có chức năng lưu trữ dữ liệu và mã chương trình nên không cần phải khảo sát

Bộ nhớ chương trình bên trong của vi điều khiển thuộc loại bộ nhớ Flash rom cho phép xóa bằng xung điện và lập trình lại

Bộ nhớ ram nội bên trong là một bộ nhớ đặc biệt người sử dụng vi điều khiển cần phải nắm rõ các tổ chức và các chức năng đặc biệt của bộ nhớ này

RAM bên trong 89C51 được phân chia như sau:

➢ Các bank thanh ghi có địa chỉ từ 00H đến 1FH

➢ RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH

➢ RAM đa dụng từ 30H đến 7FH

➢ Các thanh ghi chức năng đặc biệt từ 80H đến FFH

Trang 18

12

4.1.Vùng RAM đa năng

Vùng nhớ ram đa dụng gồm có 80 byte có địa chỉ từ 30H đến 7FH – vùng nhớ này không có gì đặc biệt so với 2 vùng nhớ trên Vùng nhớ bank thanh ghi 32 byte từ 00H đến 1FH cũng có thể dùng làm vùng nhớ ram đa dụng mặc dù các các ô nhớ này

đã có chức năng như đã trình bày

Trang 19

4.2.Vùng RAM địa chỉ bit

Vi điều khiển 89C51 có 210 ô nhớ bit có thể truy xuất từng bit, trong đó có 128 bit nằm ở các các ô nhớ byte có địa chỉ từ 20H đến 2FH và các bit còn lại chứa trong nhóm thanh ghi có chức năng đặc biệt

Các ô nhớ cho phép truy xuất từng bit và các lệnh xử lý bit là một thế mạnh của

vi điều khiển Các bit có thể được đặt, xóa, AND, OR bằng 1 lệnh duy nhất trong khi

đó để xử lý các bit thì vi xử lý vẫn có thể xử lý được nhưng phải sử dụng rất nhiều lệnh để đạt được cùng một kết quả vì vi xử lý thừơng xử lý byte

Các port cũng có thể truy xuất được từng bit

128 ô nhớ bit cho phép truy xuất từng bit và cũng có thể truy xuất byte phụ thuộc vào lệnh được dùng là lệnh xử bit hay lệnh xử lý byte Chú ý địa chỉ của ô nhớ byte và bit trùng nhau

Người lập trình dùng vùng nhớ này để lưu trữ dữ liệu phục vụ cho việc xử lý dữ liệu byte hoặc bit Các dữ liệu xử lý bit nên lưu vào vùng nhớ này

Chú ý: các ô nhớ nào mà chia ra làm 8 và có các con số bên trong là các ô nhớ vừa cho truy xuất byte và cả truy xuất bit Những ô nhớ còn lại thì không thể truy xuất bit

4.3 Các dãy thanh ghi

32 byte thấp của bộ nhớ nội được dành cho 4 bank thanh ghi

Bộ lệnh 89C51 hổ trợ thêm 8 thanh ghi có tên là R0 đến R7 và theo mặc định sau khi reset hệ thống thì các thanh ghi R0 đến R7 được gán cho 8 ô nhớ có địa chỉ từ 00H đến 07H được minh họa bởi hình 3-10, khi đó bank 0 có 2 cách truy xuất bằng địa chỉ trực tiếp và bằng thanh ghi R

Các lệnh dùng các thanh ghi R0 đến R7 sẽ có số lượng byte mã lệnh ít hơn và thời gian thực hiện lệnh nhanh hơn so với các lệnh có chức năng tương ứng nếu dùng kiểu địa chỉ trực tiếp

Các dữ liệu được dùng thường xuyên nên lưu trữ ở một trong các thanh ghi này

Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truy xuất bởi các thanh ghi R0 đến R7, để chuyển đổi việc truy xuất các bank thanh ghi

ta phải thay đổi các bit chọn bank trong thanh ghi trạng thái

Trang 20

đó và vẫn sử dụng các thanh ghi R0 đến R7 để lưu trữ cho việc sử lý dữ liệu mà không làm ảnh hưởng đến các dữ liệu R0 đến R7 trước đây và không cần phải thực hiện công việc cất dữ liệu thì cách nhanh nhất là bạn gán nhóm thanh ghi R0 đến R7 cho bank1

là xong Tương tự bạn có thể mở thêm hai chương trình nữa và gán cho các bank 3 và

4 Nếu bạn chưa hiểu thì cứ tiếp tục sau này sẽ hiểu

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

Các thanh ghi nội của 89C51 được truy xuất ngầm định bởi bộ lệnh

Các thanh ghi trong 89C51 được định dạng như một phần của RAM trên chip vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình và thanh ghi lưu trữ mã lệnh vì các thanh ghi này đã có chức năng cố định) Cũng như các thanh ghi R0 đến R7, vi điều khiển 89C51 có 21 thanh ghi có chức năng đặc biệt nằm ở vùng trên của RAM nội có địa chỉ từ 80H đến FFH

Chú ý: 128 ô nhớ có địa chỉ từ 80H đến FFH thì chỉ có 21 thanh ghi có chức năng đặc biệt được xác định các địa chỉ – còn các ô nhớ còn lại thì chưa thiết lập và trong

Trang 21

- Cờ nhớ CY (carry flag) có hai công dụng

+ Công dụng truyền thống trong các phép toán số học được set bằng 1

Ví dụ: Nếu thanh A có chứa nội dung FFH, sau khi thực hiện lên sau cờ nhớ được set bằng 1

ADD A, # 1

Lúc đó A có nội dung là 00H, cờ CY được set bằng 1

Trang 22

16

+ Cờ nhớ CY còn là thanh chứa logic được dùng như một thanh ghi 1 bit đối với các lệnh logic thao tác trên các bit

Ví dụ: AND bit 25H với cờ nhớ CY

ANL C, 25H ; AND bit ở địa chỉ 25h với cờ nhớ

Con trỏ stack sp (stack pointer) là 1 thanh ghi 8 bit ở địa chỉ 81H

Các lệnh liên quan đến stack bao gồm lệnh cất vào stack và lệnh lấy ra khỏi stack Cất vào stack làm tăng SP, Lấy dữ liệu ra khỏi stack làm giảm SP

Vùng Stack của 8051 được lưu giữ trong RAM nội

Nếu ta không khởi động SP, nội dung mặc định của thanh ghi này là 07H

5.4.Con trỏ dữ liệu DPTR

Con trỏ dữ liệu DPTR(data pointer) dùng để truy xuất bộ nhớ ngoài chương trình hoặc bộ nhớ ngoài

DPTR là thanh ghi 16 bit có địa chỉ 82H(DPL, byte thấp), 83H(DPH, byte cao)

Ví dụ: Ba lệnh sau ghi 55h vào RAM ngoài ở địa chỉ 1000H

MOV A, #55H

MOV DPTR, #1000H

MOV @DPTR, A

5.5 Các thanh ghi Port

Các Port xuất nhập của 8051, bao gồm

Port 0 tại địa chỉ 80H

Port 1 tại địa chỉ 90H

Port 2 tại địa chỉ A0H

Port 3 tại địa chỉ B0H

Các port 0, 2, 3 không được dùng để xuất nhập nếu sử dụng bộ nhớ ngoài

P1.2 đến P1.7 luôn luôn là các đường xuất nhập

Tất cả các port được định địa chỉ từng bit, do đó có thể thực hiện lệnh setb hoặc clr

Ví dụ

SETB P1.7

CLR P1.7

Trang 23

17

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

8051 có hai bộ đếm/định thời(timer/counter) 16 bit để định khoảng thời gian hoặc để đếm sự kiện

Bộ định thời 0 có địa chỉ 8AH(TL0, byte thấp) và 8CH(TH0, byte cao)

Bộ định thời 1 có địa chỉ 8BH(TL1, byte thấp) và 8DH(TH1, byte cao)

Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOM

ở địa chỉ 89H và thanh ghi điều khiển TCON ở địa chỉ 88H

5.7.Các thanh ghi của Port nối tiếp

Bên trong 8051 có một port nối tiếp để truyền thông với các thiết bị nối tiếp, như thiết bị đầu cuối hoặc modem hoặc để giao tiếp các IC khác có mạch giao tiếp nối tiếp Một thanh ghi được gọi là bộ đệm dữ liệu nối tiếp SBUF ở địa chỉ 99H lưu trữ truyền dữ liệu đi và nhận về

Các chế độ hoạt động khác được lập trình thông qua thanh ghi điều khiển port nối tiếp SCON ở địa chỉ 98H Hoạt động port nối tiếp sẽ mô tả sau

5.8.Các thanh ghi ngắt

8051 có một cấu trúc ngắt với hai mức ưu tiên và 5 nguyên nhân ngắt Các ngắt

bị vô hiệu hóa sau khi reset hệ thống và sau đó được cho phép bằng cách ghi vào thanh ghi cho phép IE ở địa chỉ A8H

Mức ưu tiên ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP ở địa chỉ B8H Các ngắt sẽ đề cập chi tiết sau

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

Thanh ghi PCON (Power Control: Điều khiển nguồn) không có bit định vị Nó ở địa chỉ 87H chứa nhiều bit điều khiển Thanh ghi PCON được tóm tắt như sau:

Bit 7 (SMOD) cho phép tăng gấp đôi tốc độ truyền dữ liệu nối tiếp (tốc độ baud) khi SMOD = 1

Bit 6, 5, 4 không có địa chỉ

Bit 3, 2 (GF1, GF0) cho phép người lập trình dùng với mục đích riêng

Bit 1 (PD) dùng để quy định chế độ nguồn giảm

Bit 0 (IDL) dùng để quy định chế độ nghỉ

6.1.Truy xuất bộ nhớ chương trình ngoài

Trang 24

6.2.Truy xuất bộ nhớ dữ liệu ngoài

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

WR (chân P3.7 và P3.6)

6.3 Giải mã địa chỉ

Trang 25

19

Trong các ứng dụng dựa trên AT89C51, ngoài giao tiếp bộ nhớ dỡ liệu, vi điều khiển còng thực hiện giao tiếp với các thiết bị khác như bàn phím, led, động cơ, … Các thiết bị này có thể giao tiếp trực tiếp thông qua các Port Tuy nhiên, khi số lượng các thiết bị lớn, các Port sẽ không đủ để thực hiện điều khiển Giải pháp đưa ra là xem các thiết bị này giống như bộ nhớ dữ liệu Khi đó, cần phải thực hiện quá trình giải mã địa chỉ để phân biệt các thiết bị ngoại vi khác nhau Quá trình giải mã địa chỉ thường được thực hiện thông qua các IC giải mã như 74139 (2 -> 4), 74138 ( 3 -> 8), 74154 (4 ->16) Ngõ ra của các IC giải mã sẽ được đưa tới chân chọn chip của RAM hay bộ đệm khi điều khiển ngoại vi

7 Các cải tiến của 8032/8052

Trang 26

20

8 Hoạt động Reset

Trang 27

21

9 Thực hành ứng dụng

1 Khảo sát chip 8051, giải thích nhiệm vụ từng chân trên chip

2 Cho biết nhiệm vụ mạch reset

3 Liệt kê các thanh ghi chức năng đặc biệt

Câu hỏi ôn tập

1 Nêu cấu trúc của port I/0

2 Trình bày các thanh ghi chức năng đặc biệt

Trang 28

22

BÀI 3: TẬP LỆNH 8051

Mục tiêu

- Phân biệt được được các kiểu định địa chỉ và dữ liệu

- Trình bày được đặc tính và công dụng của từng lệnh trong 8051

- Xác định được độ lớn và thời gian thực hiện chương trình

- Kết hợp được các lệnh riêng lẻ để thưc hiện thao tác viết chương trình

Nội dung

1 Mở đầu

Lập trình cho vi điều khiển cũng tương tự như lập trình cho máy tính, bản chất là

ta gia lệnh cho vi điều khiển thực hiện 1 danh sách các lệnh cơ bản được sắp xếp theo một trình tự nào đó để có thể hoàn thành một nhiệm vụ đề ra Và tất cả những lệnh mà

vi điều khiển có thể hiểu được gọi là tập lệnh Các vi điều khiển tương thích với 8051

+ Định địa chỉ thanh ghi

Kiểu này thường dùng cho các lệnh xử lý dữ liệu, luôn lưu trong các thanh ghi.(R0 – R7)

Ví dụ MOV A, R1 : copy nội dung thanh ghi R1 vào thanh ghi A

+ Kiểu định địa chỉ trực tiếp

Kiểu này thường được dùng để truy xuất dữ liệu của ô nhớ bất kỳ nào trong

256 byte bộ nhớ RAM nội của vi điều khiển 8951

Ví dụ: MOV A, 05H : copy nội dung ô nhớ 05H vào thanh ghi A

+ Định địa chỉ gián tiếp

Kiểu định địa chỉ gián tiếp được tượng trưng bởi ký hiệu @ và được đặt trước thanh ghi R0, R1 hay DPTR

Trang 29

23

R0 và R1 có thể hoạt động như một thanh ghi con trỏ, nội dung của nó cho biết địa chỉ của một ô nhớ trong Ram nội mà dữ liệu sẽ ghi hoặc sẽ đọc Còn DPTR dùng để truy xuất ô nhớ ngoại

Ví dụ: MOV A, @R1 : Copy nội dung ô nhớ có địa chỉ trong thanh ghi R1 vào thanh ghi A

Ví dụ: Mov A, #30H; nạp dữ liệu là con số 30H vào thanh ghi A

+ Định địa chỉ tương đối

Kiểu định địa chỉ tương đối này sử dụng với những lệnh nhảy Nơi nhảy có địa chỉ bằng địa chỉ đang lưu trong thanh ghi PC cộng với 1 giá trị 8 bit có giá trị

từ -128 đến +127, nên vi điều khiển có thể nhảy lùi hoặc nhảy tới

Nơi nhảy thường được xác định bởi nhãn(label)

Định địa chỉ tương đối có ưu điểm là mã lệnh cố định, nhưng khuyết điểm là chỉ nhảy ngắn trong phạm vi -128 - +127, nếu nơi nhảy xa hơn lệnh này không đáp ứng xảy ra lỗi

Ví dụ: SJMP X1; nhảy đến nhãn X1 nằm trong tầm 256 byte

+ Định địa chỉ tuyệt đối

Kiểu định địa chỉ tuyệt đối dùng với các lệnh ACALL, AJMP

Định địa chỉ tuyệt đối có ưu điểm là mã lệnh ngắn(2byte), nhưng khuyết điểm là mã lệnh thay đổi, giới hạn phạm vi nơi nhảy đến không quá 2kbyte

Ví dụ: AJMP X1; nhảy đến nhãn có tên X1, trong tầm 2kbyte

+ Định địa chỉ dài

Kiểu định địa chỉ dài được dùng với lệnh LCALL, LJMP

Ưu điểm có thể gọi 1 chương trình con hoặc có thể nhảy đến bất kỳ vùng nhớ nào vùng nhớ 64k

Ví dụ: LJMP X1; nhảy đến nhãn X1 nằm trong tầm 64kbyte

+ Định địa chỉ chỉ số

Kiểu định địa chỉ chỉ số “ dùng một thanh ghi cơ bản: là bộ đếm chương trình PC hoặc bộ đếm dữ liệu DPTR” kết hợp với “ một giá trị lệnh(offset) còn gọi là giá trị tương đối (thường lưu trong thanh ghi) để tạo ra một địa chỉ của ô nhớ cần truy xuất hoặc là địa chỉ của nơi nhảy đến

Ví dụ: MOVX A, @A+ DPTR; lấy dữ liệu trong ô nhớ có địa chỉ bằng DPTR + A

Trang 30

❖ Mô tả: Cộng nội dung của thanh ghi A (A) với nội dung của một

byte có địa chỉ được chỉ ra trong lệnh (src-byte), và sau đó đặt kết quả

vào thanh ghi A Các cờ bị ảnh hưởng (xem chi tiết trong Bảng 3.3.1)

• Cờ CY = 1 nếu có nhớ từ bit 7

• Cờ AC = 1 nếu có nhớ từ bit 3

• Cờ OV = 1 nếu có nhớ từ bit 6 nhưng không có nhớ từ bit 7 hoặc

nếu có nhớ từ bit 7 nhưng không có nhớ từ bit 6

• Khi cộng hai số nguyên không dấu và có dấu:

▪ Số không dấu: CY = 1 Phép toán có nhớ

▪ Số có dấu: CY = 1  Số dương = Số âm + Số âm

 Số âm = Số dương + Số dương

ADD A, direct

Số chu kỳ 1

Mã lệnh 00100101 aaaaaaaa Hoạt động (A)  (A) + (direct)

ADD A, @Ri

Số chu kỳ 1

Mã lệnh 0010011i Hoạt động (A)  (A) + ((Ri))

ADD A, #data

Số chu kỳ 1

Mã lệnh 00100100 dddddddd Hoạt động (A)  (A) + #data

Trang 31

❖ Chức năng: Cộng có cờ nhớ (ADD with Carry)

❖ Mô tả: Cộng đồng thời nội dung của thanh ghi A (A) với nội dung của byte có địa chỉ được chỉ ra trong lệnh (src-byte) cùng với cờ nhớ (CY),

và sau đó đặt kết quả vào thanh ghi A Các cờ bị ảnh hưởng (xem chi tiết trong Bảng 3.3.1)

• Cờ CY = 1 nếu có nhớ từ bit 7

• Cờ AC = 1 nếu có nhớ từ bit 3

• Cờ OV = 1 nếu có nhớ từ bit 6 nhưng không có nhớ từ bit 7 hoặc

nếu có nhớ từ bit 7 nhưng không có nhớ từ bit 6

• Khi cộng hai số nguyên không dấu và có dấu:

Trang 32

26

▪ Số không dấu: CY = 1 Phép toán có nhớ

▪ Số có dấu: CY = 1 Số dương = Số âm + Số âm

 Số âm = Số dương + Số dương

ADDC A, direct

Số chu kỳ 1

Mã lệnh 00110101 aaaaaaaa Hoạt động (A)  (A) + (C) + (direct)

ADDC A,@Ri

Số chu kỳ 1

Mã lệnh 0011011i Hoạt động (A)  (A) + (C) + ((Ri))

ADDC A, #data

Số chu kỳ 1

Mã lệnh 00110100 dddddddd Hoạt động (A)  (A) + (C) + # data

Ví dụ: Giả sử cho trước (A) = C3H, (R0) = 47H, (P1) = (90H) = AAH, (47H) =

Trang 33

❖ Chức năng: Trừ có số mượn (SUBtract with Borrow)

❖ Mô tả: Trừ nội dung của thanh ghi A (A) với nội dung của byte có địa chỉ được chỉ ra trong lệnh (src-byte) cùng với cờ nhớ (CY), và cất kết

quả vào thanh ghi A Các cờ bị ảnh hưởng (xem chi tiết trong Bảng 3.3.1)

• Cờ CY = 1 nếu có mượn cho bit 7

• Cờ AC = 1 nếu có mượn cho bit 3

• Cờ OV = 1 nếu có mượn cho bit 6 nhưng không có mượn cho bit

7 hoặc nếu có mượn cho bit 7 nhưng không có mượn cho bit 6

• Khi cộng hai số nguyên không dấu và có dấu:

▪ Số không dấu: CY = 1 Phép toán có mượn

▪ Số có dấu: CY = 1 Số dương = Số âm – Số dương

 Số âm = Số dương – Số âm

SUBB A, direct

Trang 34

28

Mã lệnh 10010101 aaaaaaaa Hoạt động (A)  (A) – (C) – (direct)

SUBB A, @Ri

Số chu kỳ 1

Mã lệnh 1001011i Hoạt động (A)  (A) – (C) – ((Ri))

SUBB A, #data

Số chu kỳ 1

Hoạt động (A)  (A) – (C) – #data

Ví dụ: Giả sử cho trước (A) = 83H, (R0) = 78H, (P1) = (90H) = AAH, (78H) =

Trang 35

29

❖ Mô tả: Tăng nội dung của byte có địa chỉ được chỉ ra trong lệnh (byte)

thêm 1 Các cờ không bị ảnh hưởng (xem chi tiết trong Bảng 3.3.1)

❖ Lưu ý: Khi lệnh này được dùng để thay đổi giá trị của một port xuất thì

giá trị được dùng làm dữ liệu ban đầu của port sẽ được lấy từ bộ chốt dữ liệu xuất, mà không phải được lấy từ các chân nhập

INC Rn

Số chu kỳ 1

Mã lệnh 00001rrr Hoạt động (Rn)  (Rn) + 1

INC direct

Số chu kỳ 1

Mã lệnh 00000101 aaaaaaaa Hoạt động (direct)  (direct) + 1

INC @Ri

Số chu kỳ 1

Mã lệnh 0000011i Hoạt động ((Ri))  ((Ri)) + 1

Ví dụ: Giả sử cho trước (A) = C3H, (R0) = 69H, (P1) = (90H) = AAH, (69H) =

Trang 36

❖ Chức năng: Tăng con trỏ dữ liệu (INCrement Data PoinTeR)

❖ Mô tả: Tăng nội dung của thanh ghi con trỏ dữ liệu 16-bit thêm 1 Các

cờ không bị ảnh hưởng (xem chi tiết trong Bảng 3.3.1)

Hoạt động (DPTR)  (DPTR) + 1

Ví dụ 1: Giả sử cho trước (DPTR) = 1234H

 Sau khi thực thi lệnh INC DPTR thì ta có kết quả như sau:

(DPTR) = 1235H với (DPH) = 12H và (DPL) = 35H

Ví dụ 2: Giả sử cho trước (DPH) = 12H và (DPL) = FFH

 Sau khi thực thi lệnh INC DPTR thì ta có kết quả như sau:

(DPTR) = 1300H với (DPH) = 13H và (DPL) = 00H

❖ Lưu ý: Không có lệnh giãm nội dung của thanh ghi DPTR (lệnh DEC

DPTR là lệnh sai) Nếu muốn giãm nội dung của thanh ghi DPTR thì ta phải viết một đoạn chương trình con để thực hiện điều này Chương trình con thực hiện việc giãm thanh ghi DPTR được minh họa như sau:

DEC_DPTR:

PUSH ACC ; Lưu tạm giá trị ACC

DEC DPL ; Giãm byte thấp của DPTR

MOV A, DPL ; So sánh byte thấp của DPTR

CJNE A,#0FFH, SKIP ; với FFH

DEC DPH ; Giãm byte cao của DPTR

SKIP:

Trang 37

31

POP ACC ; Phục hồi giá trị ACC

RET

- Lệnh DEC byte

❖ Chức năng: Giãm bớt 1 (DECrement)

❖ Mô tả: Giãm nội dung của byte có địa chỉ được chỉ ra trong lệnh (byte)

bớt 1 Các cờ không bị ảnh hưởng (xem chi tiết trong Bảng 3.3.1)

❖ Lưu ý: Khi lệnh này được dùng để thay đổi giá trị của một port xuất thì

giá trị được dùng làm dữ liệu ban đầu của port sẽ được lấy từ bộ chốt dữ liệu xuất, mà không phải được lấy từ các chân nhập

DEC Rn

Số chu kỳ 1

Mã lệnh 00011rrr Hoạt động (Rn)  (Rn) – 1

DEC direct

Số chu kỳ 1

Mã lệnh 00010101 aaaaaaaa Hoạt động (direct)  (direct) – 1

DEC @Ri

Số chu kỳ 1

Mã lệnh 0001011i Hoạt động ((Ri))  ((Ri)) – 1

Ví dụ: Giả sử cho trước (A) = C3H, (R0) = 60H, (P1) = (90H) = AAH, (60H) =

Trang 38

❖ Chức năng: Nhân (MULtiply)

❖ Mô tả: Nhân các số nguyên không dấu 8-bit chứa trong thanh ghi A và thanh ghi B Tích số là một giá trị 16 bit, byte thấp (8 bit thấp) được cất trong thanh ghi A còn byte cao (8 bit cao) được cất trong thanh ghi B Nếu tích số lớn hơn 255 (0FFH) thì cờ tràn OV = 1 Cờ nhớ CY luôn luôn bị xóa (xem chi tiết trong Bảng 3.3.1)

Hoạt động (B)  HIGH BYTE OF (A)  (B)

(A)  LOW BYTE OF (A)  (B)

Ví dụ 1: Giả sử cho trước (A) = 02H, (B) = 7CH

 Sau khi thực thi lệnh MUL AB thì ta có kết quả như sau:

(B) = 00H, (A) = F8H, cờ CY = 0, cờ OV = 0

Ví dụ 2: Giả sử cho trước (A) = C3H, (B) = AAH

Sau khi thực thi lệnh MUL AB thì ta có kết quả như sau:

(B) = 81H, (A) = 7EH, cờ CY = 0, cờ OV = 1

- Lệnh DIV AB

❖ Chức năng: Chia (DIVide)

Trang 39

33

❖ Mô tả: Chia số nguyên không dấu 8-bit chứa trong thanh ghi A cho số nguyên không dấu 8-bit chứa trong thanh ghi B Thương số được cất trong thanh ghi A còn số dư được cất trong thanh ghi B Cờ CY và cờ

OV bị xoá Nếu ban đầu B chứa 00H, giá trị trả về trong thanh ghi A và thanh ghi B không được xác định và cờ OV = 1 Cờ CY bị xóa trong mọi trường hợp (xem chi tiết trong Bảng 3.3.1)

Ví dụ 1: Giả sử cho trước (A) = C3H, (B) = 0AH

 Sau khi thực thi lệnh DIV AB thì ta có kết quả như sau:

(B) = 05H, (A) = 13H, cờ CY = 0, cờ OV = 0

Ví dụ 2: Giả sử cho trước (A) = 00H, (B) = 0AH

 Sau khi thực thi lệnh DIV AB thì ta có kết quả như sau:

(B) = 00H, (A) = 00H, cờ CY = 0, cờ OV = 0

Ví dụ 3: Giả sử cho trước (A) = C3H, (B) = 00H

 Sau khi thực thi lệnh DIV AB thì ta có kết quả như sau:

(B) = yyH, (A) = xxH, cờ CY = 0, cờ OV = 1

- Lệnh DA A

❖ Chức năng: Hiệu chỉnh thập phân nội dung của thanh ghi A đối với phép cộng (Decimal–Adjust Accumulator for Addition)

❖ Mô tả: Hiệu chỉnh giá trị 8–bit trong thanh ghi A (giá trị này là kết quả

phép cộng hai toán hạng có dạng BCD nén trước đó) để tạo ra hai digit 4 bit Phép cộng được thực hiện bởi lệnh ADD hoặc ADDC, lệnh DA A không áp dụng cho phép trừ SUBB)

Trang 40

34

• Nếu cờ AC = 1 hoặc nếu 4 bit thấp của thanh ghi A có giá trị lớn hơn

"9" (xxxx1010 – xxxx1111), thì "6"được cộng với nội dung của thanh ghi A để tạo ra số BCD ở 4 bit thấp Sau khi cộng, cờ CY = 1 nếu có

số nhớ từ 4 bit thấp chuyển đến tất cả 4 bit cao

• Nếu cờ CY = 1 hoặc nếu 4 bit cao của thanh ghi A có giá trị lớn hơn

“9” (1010xxxx – 1111xxxx), thì "6"được cộng với 4 bit cao để tạo ra

số BCD ở 4 bit cao Sau khi cộng cờ CY = 1 nếu có số nhớ từ 4 bit cao nhưng cờ CY không bị xóa Vậy thì cờ CY chỉ ra rằng tổng của 2 toán hạng BCD ban đầu lớn hơn 99 Cờ OV không bị ảnh hưởng

• Tất cả sự kiện trên chỉ xảy ra trong một chu kỳ máy Lệnh này thực hiện phép biến đổi thập phân bằng cách cộng 00H, 06H, 60H hay 66H với nội dung của thanh ghi A tùy thuộc vào nội dung ban đầu của thanh ghi A và các điều kiện của từ trạng thái chương trình PSW

❖ Lưu ý: DA A không thể đơn giản biến đổi số HEX trong thanh ghi A

thành số dạng BCD, DA A cũng không áp dụng cho phép trừ thập phân

Hoạt động Giả sử nội dung của thanh ghi A là BCD

IF [[(A3 – A0) > 9] OR [(AC) = 1]]

THEN (A3 – A0)  (A3 – A0) + 6

AND

IF [[(A7 – A4) > 9] OR [(C) = 1]]

THEN (A7 – A4)  (A7 – A4) + 6

Ví dụ 1: Giả sử cho trước (A) = 56H → biểu diễn BCD của số 56

(R3) = 67H → biểu diễn BCD của số 67

 Sau khi thực thi chuỗi lệnh: ADD A, R3

DA A

thì ta có kết quả như sau:

Cờ CY=1 và (A)=23 → biểu diễn BCD của số 123 (56+67)

Ngày đăng: 19/01/2022, 10:15

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm