Tín hiệu PSEN ở mức Logic 0 trong suất thời gian tìm nạp lệnh, các mã nhị phân của chương trình hay mã thao tác Opcode được đọc từ EPROM qua BUS dữ liệu và được chốt vào thanh ghi IR của
Trang 1
Luận văn tốt nghiệp
cáo trong vi điều khiển họ
8051”
Trang 2
Đề tài thiết kế Hệ Thống Quảng Cáo
CHƯƠNG I TỔNG QUAN VỀ HỌ VI XỬ LÝ 8051
I NHỮNG ĐẶC ĐIỂM CƠ BẢN HỌ VI XỬ LÝ 8051
1.Tóm tắt về lịch sử của 8051
Vào năm 1981, hãng Intel giới thiệu một số bộ vi điều khiển được gọi là
8051 Bộ vi điều khiển này có 128 byte RAM, 4K byte ROM, hai bộ định thời, một cổng nối tiếp và 4 cổng 8 bit Tất cả đều được tích hợp trên một
chíp Lúc bấy giờ, bộ vi điều khiển như vậy được coi là một “hệ thống trên chíp” 8051 là một bộ xử lý 8 bit, tức là CPU chỉ có thể làm việc với 8 bit
dữ liệu Dữ liệu lớn hơn 8 bit được chia ra thành các dữ liệu 8 bit để xử lý
8051 có tất cả 4 cổng I/O mỗi cổng rộng 8 bit, có thể có một ROM trên chíp cực đại là 64 K byte Tuy nhiên, lúc đó các nhà sản xuất đã cho xuất xưởng chỉ với 4K byte ROM trên chíp 8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác sản xuất và bán bất kỳ dạng biến thể nào của 8051 mà họ thích với điều kiện họ phải để mã chương trình tương thích với 8051 Từ đó dẫn đến sự ra đời nhiều phiên bản của 8051 với các tốc độ khác nhau Tuy nhiên, điều quan trọng là mặc dù có nhiều biến thể của 8051, như khác nhau về tốc độ và dung lượng nhớ ROM trên chíp, nhưng tất cả các lệnh đều tương thích với 8051 ban đầu Điều này có nghĩa
Trang 3là nếu ta viết chương trình của mình cho một phiên bản nào đó thì nó cũng
sẽ chạy với mọi phiên bản bất kỳ khác mà không phân biệt nó từ hãng sản xuất nào
2 Bộ ví điều khiển 8051
Bộ vi điều khiển 8051 là thành viên đầu tiên của họ 8051 Hãng Intel
ký hiệu nó như là MCS51
Bảng 1.1 Các đặc tính của 8051 đầu tiên
3 Sơ đồ khối chung của họ vi điều khiển 8051
Interrupt control : Điều khiển ngắt
Other registers : Các thanh ghi khác
128 Byte RAM : RAM 128 Byte
Trang 4I/O ports: Các ports vào/ ra
Serial port: port nối tiếp
Address/data : địa chỉ/ dữ liệu
Hình 1.1 Bố trí bên trong của sơ đồ khối 8051
INT 1 INT 0
CPU
Oscillator Bus control
EA RST
ALE PSEN
RXD TXD
P 0 P 1 P 2 P 3 Address/Data
Other registers 128 ByteRAM
128 Byte RAM (8032/8052) ROM
0K - 8031/8032 4K - 8051 8K - 8052
Timer 0 Timer 1
Timer 2 (8032/8052)
T 0
T 1
T 2
T 2 EX
Trang 5Bộ vi điều khiển 8052 là một thành viên khác của họ 8051, 8052 có
tất cả các đặc tính chuẩn của 8051 ngoài ra nó có thêm 128 byte RAM và
một bộ định thời nữa Hay nói cách khác là 8052 có 256 byte RAM 3 bộ
định thời và có 8K byte ROM trên chíp thay vì 4K byte như 8051
ROM trên chíp 4K byte 8K byte
RAM 128 byte 256 byte 128 byte
Như nhìn thấy từ bảng 1.2 thì 8051 là tập con của 8052, do vậy tất cả
mọi chương trình viết cho 8051 đều chạy trên 8052 nhưng điều ngược lại là
không đúng
2 Bộ vi điều khiển 8031:
Một thành viên khác nữa của 8051 là chíp 8031 Chíp này thường
được coi như là 8051 không có ROM trên chíp vì nó có OK byte ROM trên
chíp Để sử dụng chíp này ta phải bổ xung ROM ngoài cho nó ROM ngoài
phải chứa chương trình mà 8031 sẽ nạp và thực hiện So với 8051 mà
chương trình được chứa trong ROM trên chíp bị giới hạn bởi 4K byte, còn
ROM ngoài chứa chương trinh được gắn vào 8031 thì có thể lớn đến 64K
byte Khi bổ xung cổng, như vậy chỉ còn lại 2 cổng để thao tác Để giải
Trang 6với bộ nhớ và cổng vào - ra chẳng hạn với chíp 8255 Ngoài ra còn có các phiên bản khác nhau về tốc độ của 8031 từ các hãng sản xuất khác nhau
3 Các bộ vi điều khiển 8051 từ các hãng khác nhau
Mặc dù 8051 là thành viên phổi biến nhất của họ 8051 nhưng chúng
ta sẽ thấy nó trong kho linh kiện Đó là do 8051 có dưới nhiều dạng kiểu
bộ nhớ khác nhau như UV - PROM, Flash và NV - RAM mà chúng đều có
số đăng ký linh kiện khác nhau Phiên bản UV-PROM của 8051 là 8751 Phiên bản Flash ROM được bán bởi nhiều hãng khác nhau chẳng hạn của Atmel corp với tên gọi là AT89C51 còn phiên bản NV-RAM của 8051 do Dalas Semi Conductor cung cấp thì được gọi là DS5000 Ngoài ra còn có phiên bản OTP (khả trình một lần) của 8051 được sản xuất bởi rất nhiều hãng
3.1 Bộ vi điều khiển 8751
Chíp 8751 chỉ có 4K byte bộ nhớ UV-EPROM trên chíp Để sử dụng chíp này để phát triển yêu cầu truy cập đến một bộ đốt PROM cũng như bộ xoá UV- EPROM để xoá nội dung của bộ nhớ UV-EPROM bên trong 8751 trước khi ta có thể lập trình lại nó Do một thực tế là ROM trên chíp đối với
8751 là UV-EPROM nên cần phải mất 20 phút để xoá 8751 trước khi nó có thể được lập trình trở lại Điều này đã dẫn đến nhiều nhà sản xuất giới thiệu các phiên bản FLASH ROM và UV-RAM của 8051 Ngoài ra còn có nhiều phiên bản với các tốc độ khác nhau của 8751 từ nhiều hãng khác nhau
3.2 Bộ vi điều khiển AT8951 từ Atmel Corporation
Chíp 8051 phổ biến này có ROM trên chíp ở dạng bộ nhớ Flash Điều này là lý tưởng đối với những phát triển nhanh vì bộ nhớ Flash có thể được xoá trong vài giây trong tương quan so với 20 phút hoặc hơn mà 8751 yêu cầu Vì lý do này mà AT89C51 để phát triển một hệ thống dựa trên bộ
Trang 7vi điều khiển yêu cầu một bộ đốt ROM mà có hỗ trợ bộ nhớ Flash Tuy nhiên lại không yêu cầu bộ xoá ROM Lưu ý rằng trong bộ nhớ Flash ta phải xoá toàn bộ nội dung của ROM nhằm để lập trình lại cho nó Việc xoá
bộ nhớ Flash được thực hiện bởi chính bộ đốt PROM và đây chính là lý do tại sao lại không cần đến bộ xoá Để loại trừ nhu cầu đối với một bộ đốt PROM hãng Atmel đang nghiên cứu một phiên bản của AT 89C51 có thể được lập trình qua cổng truyền thông COM của máy tính IBM PC
Số linh kiện ROM RAM Chân I/O Timer Ngắt Vcc Đóng vỏ
AT89C1051 1K 64 15 1 3 3V 20 AT89C2051 2K 128 15 2 6 3V 20
Bảng 1.3: Các phiên bản của 8051 từ Atmel (Flash ROM)
Chữ C trong ký hiệu AT89C51 là CMOS
Cũng có những phiên bản đóng vỏ và tốc độ khác nhau của những sản phẩm trên đây xem bảng 1.4 Ví dụ để ý rằng chữ “C” đứng trước số 51 trong AT 89C51 -12PC là ký hiệu cho CMOS “12” ký hiệu cho 12 MHZ và
“P” là kiểu đóng vỏ DIP và chữ “C” cuối cùng là ký hiệu cho thương mại (ngược với chữ “M” là quân sự ) Thông thường AT89C51 - 12PC rất lý tưởng cho các dự án của học sinh, sinh viên
Mã linh kiện Tốc độ Số chân Đóng vỏ Mục đích
AT89C51-12PC 42MHZ 40 DTP Thương mại
Bảng 1.4: Các phiên bản 8051 với tốc độ khác nhau của Atmel
Trang 8Một phiên bản phổ biến khác nữa của 8051 là DS5000 của hãng Dallas Semiconductor Bộ nhớ ROM trên chíp của DS5000 ở dưới dạng NV-RAM Khả năng đọc/ ghi của nó cho phép chương trình được nạp vào ROM trên chíp trong khi nó vẫn ở trong hệ thống (không cần phải lấy ra) Điều này còn có thể được thực hiện thông qua cổng nối tiếp của máy tính IBM PC Việc nạp chương trình trong hệ thống (in-system) của DS5000 thông qua cổng nối tiếp của PC làm cho nó trở thành một hệ thống phát triển tại chỗ lý tưởng Một ưu việt của NV-RAM là khả năng thay đổi nội dung của ROM theo từng byte tại một thời điểm Điều này tương phản với
bộ nhớ Flash và EPROM mà bộ nhớ của chúng phải được xoá sạch trước khi lập trình lại cho chúng
40
40
40
40
Bảng 1.5: Các phiên bản 8051 từ hãng Dallas Semiconductor
Chữ “T” đứng sau 5000 là có đồng hồ thời gian thực
Lưu ý rằng đồng hồ thời gian thực RTC là khác với bộ định thời Timer RTC tạo và giữ thời gian l phút giờ, ngày, tháng - năm kể cả khi tắt nguồn
Còn có nhiều phiên bản DS5000 với những tốc độ và kiểu đóng gói khác nhau Ví dụ DS5000-8-8 có 8K NV-RAM và tốc độ 8MHZ Thông thường DS5000-8-12 hoặc DS5000T-8-12 là lý tưởng đối với các dự án của sinh viên
Trang 912MHz 8MHz 8MHz (with RTC) 12MHz
12MHz (with RTC)
Bảng 1.6: Một số thành viên của họ 8051
3.4 Phiên bản OTP của 8051
Các phiên bản OTP của 8051 là các chíp 8051 có thể lập trình được
một lần và được cung cấp từ nhiều hãng sản xuất khác nhau Các phiên bản
Flash và NV-RAM thường được dùng để phát triển sản phẩm mẫu Khi một
sản phẩm được thiết kế và được hoàn thiện tuyệt đối thì phiên bản OTP
của 8051 được dùng để sản hàng loạt vì giá thành một đơn vị sản phẩm sẽ
rẻ hơn
3.5 Họ 8051 từ Hãng Philips
Một nhà sản xuất chính của họ 8051 khác nữa là Philips Corporation
Thật vậy, hãng này có một dải lựa chọn rộng lớn cho các bộ vi điều khiển
họ 8051 Nhiều sản phẩm của hãng đã có kèm theo các đặc tính như các bộ
chuyển đổi ADC, DAC, cổng I/0 mở rộng và cả các phiên bản OTP và
Flash
Trang 10
CHƯƠNG II GIỚI THIỆU VI ĐIỀU KHIỂN AT89C51
1 Sơ Đồ Khối Của Vi Điều Khiển AT89C51
P1.0 - P1.7
PORT 1 LATCH ALU
PORT 1 DRIVE
P0.0 - P0.7
PORT 0 DRIVE
RAM ADD REGISTER
OSC
TIMING AND CONTROL
PSW
B REGISTER
TMP2 ACC
RAM GND
Vcc
P3.0 - P3.7
PORT 2 LATCH PORT 0
LATCH
INTERRUPT SERIAL PORT AND TIMER BLOCKS
PORT 3 LATCH
PORT 3 DRIVE
TMP1
STACK POINTER FLASH
DPTR
PROGRAM COUNTER
PC INCREMENTER BUFFER
PROGRAM ADDRESS REGISTER
P2.0 - P2.7
PORT 0 DRIVE
Trang 11Hình 2.1: Sơ Đồ Khối Của Vi Điều Khiển AT89C51
2 Đặc Tính Của AT89C51
Chíp AT89C51 chứa trên 60000 Transistor bao gồm 4Kbyte ROM, 128Byte RAM, 32 đường xuất nhập, 1 Port nối tiếp và 2 bộ định thời 16 bit Một số lượng mạch đáng chú ý trong IC đơn Các thành viên mới được thêm vào cho họ MCS-51 và các biến thể này gần như có gấp đôi các đặc trưng này Tập đoàn Seimens, nguồn sản xuất thứ hai các bộ vi điều khiển thuộc họ MCS-50 cung cấp Chíp SAB80515, một cải tiến của 8051 chứa trong một vỏ 68 chân, có 6 Port xuất nhập 8-bit, 13 nguồn tạo ra ngắt và một bộ biến đổi A/D 8-bit với 8 kênh ngõ vào Họ 8051 là một trong những
bộ vi điều khiển 8-bit mạnh và linh hoạt nhất, đã trở thành bộ vi điều khiển hàng đầu trong những năm gần đây
- Cụ thể vi điều khiển AT89C51 là 1 IC có tích hợp trên đó hệ vi xử lí
- Có thể lập trình được qua cổng nối tiếp
- 210 bit được địa chỉ hoá
- Giao tiếp nối tiếp
Trang 123 Sơ đồ chân và chức năng các chân của Chíp AT89C51
Hình 2.2: Sơ đồ chân và chức năng các chân của Chíp AT89C51
12345678910111213141516171819
222324
272625
2829
34
3031
3332
35363738
4039
Trang 13- PORT 0 : Nằm trên các chân từ 32 đến 39 có 2 công dụng Trong
các thiết kế có tối thiểu thành phần thì Port 0 được sử dụng làm nhiệm vụ xuất/nhập Trong các thiết kế lớn hơn có bộ nhớ ngoài, Port 0 trở thành Bus địa chỉ và Bus dữ liệu đa hợp
- PORT 1 : Nằm trên các chân 1 đến 8, chỉ có một cộng dụng là để
gao tiếp với thiết bị ngoài khi có yêu cầu
- PORT 2 : Nằm trên các chân 21 đến 28 có 2 công dụng hoặc làm
nhiệm vụ xuất/nhập hoặc là Byte địa chỉ cao của BUS địa chỉ 16 bit cho các thiết kế có nhiều hơn 256Byte bộ nhớ dữ liệu ngoài
- PORT 3 : Nằm trên các chân 10 đến 17 có 2 công dụng một là
chức năng xuất/nhập bình thường còn khi không hoạt động xuất nhập các chân của PORT 3 có nhiều chức năng riêng Cụ thể các chức năng của các chân ở PORT 3 như sau :
Bảng 2.1: Các chức năng của PORT 3
Trang 14- Chân cho phép bộ nhớ chương trình PSEN
8051 Cung cấp cho ta 4 tín hiệu điều khiển BUS Tín hiệu cho phép
bộ nhớ chương trình PSEN (Program Store Enable) là tín hiệu xuất trên chân 29 Đây là tín hiệu điều khiển cho phép ta truy xuất bộ nhớ chương trình ngoài Chân này thường được nối với chân cho phép xuất OE ( Output Enable) của EPROM hoặc ROM để cho phép đọc các Byte lệnh
Tín hiệu PSEN ở mức Logic 0 trong suất thời gian tìm nạp lệnh, các
mã nhị phân của chương trình hay mã thao tác (Opcode) được đọc từ EPROM qua BUS dữ liệu và được chốt vào thanh ghi IR của 8051 để được giải mã
Khi thực thi một chương trình chứa ở ROM nội PSEN được duy trì
ở mức Logic tích cực 1
- Chân cho phép chốt địa chỉ ALE
Chân này nằm trên chân 30 của 8051 là chân xuất tín hiệu cho phép chốt địa chỉ ALE (Address Latch Enable) để giải đa hợp Bus dữ liệu và Bus địa chỉ Khi Port 0 được sử dụng làm Bus địa chỉ/dữ liệu đa hợp chân ALE xuất tín hiệu để chôt địa chỉ ( Byte thấp của địa chỉ 16bit) vào một thanh ghi ngoài trong suốt 1/2 đầu chu kỳ bộ nhớ Sau khi điều này đã được thực hiện các chân của Port 0 sẽ xuất nhập dữ liệu hợp lệ trong suốt 1/2 thứ
2 của chu kỳ bộ nhớ
Tín hiệu ALE có tần số bằng 1/6 tần số của mạch dao động bên trong
vi điều khiển và có thể được dùng làm xung Clock cho phần còn lại của hệ thống Nếu mạch dao động có tần số 12MHz, tín hiệu ALE có tần số 2MHz Ngoại lệ duy nhất là trong thời gian thực thi lệnh MOVX, một xung ALE sẽ bị bỏ qua Chân ALE còn được dùng để nhận xung ngõ vào lập
Trang 15trình cho EPROM trên CHIP đối với các phiên bản của 8051 có EPROM này
- Chân truy xuất ngoài EA
Ngõ vào này ở chân 31 có thể được nối với nguồn +5V (Logic 1) hoặc GND (Logic 0) Nếu chân này nối lên 5V , 8051/8052 thực thi chương trình trong ROM nội( chương trình nhỏ hơn 4K/8K) Nếu chân này nối với GND( và chân PSEN cũng ở mức Logic 0), chương trình cần thực thi chứa ở bộ nhớ ngoài Đối với 8031/8032 chân EA phải ở mức Logic 0
vì chúng không có bộ nhớ chương trình trên CHIP Nếu chân EA ở mức Logic 0 đối với 8051/8052, ROM nội bên trong CHIP được vô hiệu hoá và chương trình cần thực thi chứa ở EPROM bên ngoài
Các phiên bản EPROM của 8051 còn sử dụng chân EA làm chân nhận điện áp cấp nguồn 21VPP cho việc lập trình EPROM nội ( Nạp EPROM)
- Chân RESET ( RST)
Ngõ vào RST ở chân 9 là ngõ vào xoá chính (Master reset) của 8051 dùng để thiết lập lại trạng thái ban đầu cho hệ thống hay còn gọi tắt là Reset hệ thống Khi ngõ vào này được treo ở mức Logic 1 tối thiểu hai chu
kỳ máy , các thanh ghi bên trong của 8051 được nạp các giá trị thích hợp cho việc khởi động lại hệ thống
- Các chân thạch anh XTAL 1 và XTAL 2
Nằm trên chân 18 và 19 của CHIP, 2 chân này được dùng để nối với thạch anh ngoài nhằm tái tạo dao động và xác định tần số làm việc cho mạch dao động ở bên trong CHIP Kết hợp với thạch anh có thêm 2 tụ gốm
Trang 16để ổn định tần số dao động Tần số danh định của thạch anh là 12MHz cho hầu hết các CHIP của họ MCS - 51
Hình 2.3: Mạch dao động Thạch Anh XTAL 1 và XTAL 2
Hoặc ta cũng có thể dùng một nguồn xung CLOCK TTL để tạo dao động cho 8051 như mạch sau :
IC 1 8051
IC 1 8051
Trang 17- Sơ đồ cấu trúc bên trong của chân PORT xuất/nhập như sau :
Hình 2.5: Cấu trúc của PORT In/Out
Việc ghi đến 1 chân của Port sẽ nạp dư liệu vào bộ chốt của Port, ngõ ra Q của bộ chốt điều khiển một Transistor trường và Transistor này nối với chân của Port Khả năng phân chia đầu ra (Fan - out) của các Port
1, 2 và 3 là 4 tải vi mạch TTL loại Schottky công suất thấp (LS) còn của Port 0 là 8 tải loại LS
Lưu ý là điện trở kéo lên (Pull Up) không có ở Port 0 ( trừ khi port này làm nhiệm vụ của Port địa chỉ dữ liệu đa hợp) Do vậy phải nối thêm một điện trở kéo lên bên ngoài cho Port 0
Giá trị điện trở này phụ thuộc vào đặc tính ngõ vào của thành phần ghép nối với chân của Port
Ở đây ta thấy có 2 khả năng " Đọc bộ chốt" và "Đọc chân port" Các lệnh yêu cầu thao tác đọc - sửa - ghi, đọc bộ chốt để tránh nhầm mức điện áp do
sự hiểu nhầm điện áp do sự kiện dòng tải tăng Các lệnh nhập một Bit của Port, đọc chân port Trong trường hợp này bộ chốt của port phải chứa 1 nếu không FET sẽ được kích bão hoà và điều này kéo ngõ ra xuống mức thấp Việc Reset hệ thống sẽ set tất cả các bộ chốt port Do vậy các chân port có thể được dùng làm các ngõ nhập mà không cần phải SET các bộ chốt port
V DD
Q D
Write
to Latch
Read latch
Read pin
Interrnal Pull-up
Port Latch
Porrt pin
8051 Internal bus
Trang 18P1.5) Chõn Port khụng thể làm nhiệm vụ tiếp theo là ngừ nhập trừ khi trước tiờn ta phải SET bộ chốt ( như SETB P1.5)
5 Tổ chức bộ nhớ
7F 77 6F 67 5F 56 4F 47 3F 37 2F 27 1F 17 0F 07
7E 76 6E 66 5E 56 4E 46 3E 36 2E 26 1E 16 0E 06
7D 75 6D 65 5D 55 4D 45 3D 35 2D 25 1D 15 0D 05
7C 74 6C 64 5C 54 4C 44 3C 34 2C 24 1C 14 0C 04
7B 73 6B 63 5B 53 4B 43 3B 33 2B 23 1B 13 0B 03
7A 72 6A 62 5A 52 4A 42 3A 32 2A 22 1A 12 0A 02
79 71 69 61 59 51 49 41 39 31 29 21 19 11 09 01
78 70 68 60 58 50 48 40 38 30 28 20 18 10 08 00
Not bit addressable Not bit addressable Not bit addressable Not bit addressable Not bit addressable
8F 8E 8D 8C 8B 8A 89 88
97 96 95 94 83 92 91 90 9F 9E 9D 9C 9B 9A 99 98 Not bit addressable
Thanh ghi chức năng đặc biệ t
A7 A6 A5 A4 A3 A2 A1 A0
AF AE AD AC AB AA A9 A8 B7 B6 B5 B4 B3 B2 B1 B0
BF BE BD BC BB BA B9 B8 D7 D6 D5 D4 D3 D2 D1 D0 E7 E6 E5 E4 E3 E2 E1 E0
EF EE ED EC EB EA E9 E8
Not bit addressable
80 81 82 83 87 88 89 8A 8B 8C 8D 90 98 99 A0 A8 B0 B8 D0 E0 F0 FF
P0 SP DPL DPH PCON TCON TMOD TL0 TL1 TH0 TH1 P1 SCON SBUF P2 IE P3 IP PSW ACC B
Địa
chỉ
Byte
Địa chỉ Bit( Bit Address )
Địa chỉ Byte
Địa chỉ Bit( Bit Address )
Trang 19Hình 2.6: Tổ chức bộ nhớ RAM
Bộ nhớ bên trong 89C51 bao gồm ROM và RAM
RAM bao gồm nhiều thành phần : Phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các thanh ghi (BANK) và các thanh ghi chức năng đặc biệt ( Special Funtion Registers)
AT89C50 có bộ nhớ theo cấu trúc : Có những vùng nhớ riêng biệt cho chương trình và dữ liệu Chương trình và dữ liệu có thể chứa bên trong AT89C51 nhưng AT89C51 vẫn có thể kết nối với 64K Byte bộ nhớ chương trình và 64KByte bộ nhớ dữ liệu mở rộng
RAM bên trong AT89C51 được phân chia như sau :
- Các 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
- RAM đa dụng
Mọi địa chỉ trong vùng RAM đa dụng đều có thể được truy xuất tự
do dùng kiểu địa chỉ trực tiếp hay gián tiếp
Hoặc truy xuất dùng cách địa chỉ gián tiếp qua R0 hay R1
- RAM có thể truy xuất từng bit
AT89C51 chứa 210 bit được địa chỉ hoá từng bit, trong đó 128 bit chứa ở các địa chỉ từ 20H đến 2FH, các bit còn lại chứa trong nhóm thanh ghi chức năng đặc biệt
Trang 20Ý tưởng truy xuất từng bit bằng phần mềm là một đặc tính mạnh của
vi điều khiển nói chung Các bit có thể được đặt, xoá, nhân, cộng với 1 lệnh đơn Ngoài ra các Port cũng có thể truy xuất được từng bit làm đơn giản phần mềm xuất nhập từng bit
- Các thanh ghi (BANK)
Bộ lệnh AT89C51 hỗ trợ 8 thanh ghi có tên là từ R0 đến R7 và theo mặc định ( sau khi RESET hệ thống ), các thanh ghi này ở các địa chỉ 00H đến 07F Lệnh sau đây sẽ đọc nội dung ở địa chỉ 05H vào thanh ghi tích luỹ
- Các thanh ghi có chức năng đặc biệt
AT89C51 có 21 thanh ghi chức năng đặc biệt ( SFR : Special Function Register) ở vùng trên của RAM nội từ địa chỉ 80H đến FFH
Tất cả 128 địa chỉ từ 80H đến FFH không được định nghĩa, chỉ có 21 thanh ghi chức năng năng đặc biệt được định nghĩa sẵn các địa chỉ
Trang 21- Thanh ghi trạng thái chương trình
Thanh ghi trạng thái chương trình PSW (Program Status Word) ở địa chỉ D0H chứa các bit trạng thái như bảng sau :
Bảng 2.2: Bảng Thanh ghi trạng thái chương trình
+ Cờ nhớ : C = 1 Nếu phép toán cộng có tràn hoặc phép toán trừ có mượn
Trang 22+ Cờ nhớ phụ : Khi cộng các số BCD, cờ nhớ phụ AC = 1 Nếu kết quả 4 bit thấp trong khoảng 0AH đến 0FH, ngược lại AC = 0
+ Cờ 0 : Cờ 0 là cờ đa dụng dành cho các ứng dụng của người dùng
+ Các bit chọn Bank thanh ghi truy xuất :
Các bit chọn Bank thanh ghi (RS0 và RS1) xác định Bank thanh ghi được truy xuất Chúng được xoá sau khi RESET hệ thống và được thay đổi bằng phần mềm nếu cần
Lệnh sau cho phép Bank thanh ghi 3 và di chuyển nội dung của thanh ghi R7 (địa chỉ byte 1Fh) vào thanh ghi A :
dư trong B Thanh ghi cũng có thể xem như thanh ghi đệm đa dụng
- Con trỏ ngăn xếp
Con trỏ ngăn xếp SP là một thanh ghi 8 bit ở địa chỉ 18H Nó chứa địa chỉ của Byte dữ liệu hiện hành trên đỉnh của ngăn xếp Các lệnh trên ngăn xếp bao gồm các lệnh cất dữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi ngăn xếp Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ liệu và lệnh lấy dữ liệu ra khỏi ngăn xếp Lệnh cất dữ liệu vào ngăn xếp sẽ làm giảm SP Ngăn xếp của 89C51 được cất giữ trong RAM nội và giới hạn các
Trang 23địa chỉ có thể truy xuất bằng các địa chỉ gián tiếp, chúng là 128Byte đầu của AT89C51
Để khởi động SP với ngăn xếp bắt đầu tại địa chỉ 60H, ta dùng lệnh sau :
MOV SP,#5FH
Nếu không dùng lệnh khởi động SP hoặc khi RESET lại AT89C51 thì SP sẽ bắt đầu tại địa chỉ mặc định là 07H và dữ liệu đầu tiên sẽ được cất vào ô nhớ ngăn xếp có địa chỉ là 08H Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu hoặc truy xuất ngầm bằng lệnh gọi chương trình con ACALL, LCALL và các lệnh trở về RET, RETI để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết thúc chương trình con
- Con trỏ dữ liệu DPRT ( Data Pointer)
Con trỏ DPTR được dùng để truy xuất bộ nhớ ngoài, DPTR là một thanh ghi 16bit ở địa chỉ 28H (DPL , Byte thấp) và 83H ( DPH , Byte cao)
Ba lệnh sau sẽ ghi 55H vào RAM ngoài ở địa chỉ 1000H
sử dụng kiểu định địa chỉ gián tiếp di chuyển giá trị 55H chứa trong A đến RAM ngoài tại địc chỉ chứa trong DPTR (1000H)
- Các thanh ghi PORT
Trang 24Các Port xuất nhập của 89C51 bao gồm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ 90H, Port 2 tại địa chỉ A0H và 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 thêm bộ nhớ ngoài hoặc nếu có một số đặc tính đặc biệt của 89C51 được sử dụng ( như là ngắt, Port nối tiếp ).P1.2 đến P1.7, ngược lại, luôn luôn là các đường xuất nhập đa mục đích hợp lệ
Tất cả các Port đều được định địa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh
Thí dụ ta có một động cơ một cuộn dây và một mạch kích dùng Transistor nối tới bit 7 của Port 1, động cơ có thể ngưng hay chạy chỉ nhờ vào
Hinh 2.7: Một lệnh đơn của 8051
SETB P1.7 sẽ làm động cơ chạy và lệnh CLR P1.7 làm động cơ ngưng
Interrnal Pull-up
Port
Latch
Porrt pin 1.7
c¬ +B +5V
Trang 25Các lệnh trên sử dụng toán tử (dot) để định chỉ 1 bit trong 1Byte cho phép định địa chỉ từng bit
Trình dịch hợp ngữ thực hiện biến đổi dạng ký hiệu thành địa chỉ thực tế nghĩa là 2 lệnh sau sẽ tương đương
CLR P.17 tương đương với lệnh CLR 97H.
- Các thanh ghi định thời (Timer)
AT89C51 chưa 2 bộ định thời 2 bộ định thời/ đếm 16bit được dùng cho việc định thời hoặc đếm sự kiện Timer 0 ở địa chỉ 8AH (TL0 : Byte thấp)
và 8CH (TH0 : Byte cao) Timer 1 ở địa chỉ 8BH (TL0 : Byte thấp) và 8DH ( TH1 : Byte cao) Việc khởi động Timer được SET bởi TIMER Mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển
Timer (TCON) ở địa chỉ 88H, chỉ có TCON được địa chỉ hoá từng bit
- Các thanh ghi nối tiếp
AT89C51 chứa một Port nối tiếp dành cho việc trao đổi thông tin với các thiết bị nối tiếp như máy tính, Modem hoặc giao tiếp nối tiếp với các IC khác Một thanh ghi gọi là bộ đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả 2 dữ liệu truyền và dữ liệu nhận Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF Các mode vận hành khác nhau được lập trình ghi điều khiển port nối tiếp SCON ở địa chỉ 98H
- Các thanh ghi ngắt
Thực tế ở 8051 chỉ có 5 ngắt dành cho người dùng, song nhiều tài liệu kỹ thuật của các nhà sản xuất vẫn nói rằng có 6 ngắt vì họ tính cả lệnh reset bố trí sáu ngắt của 8051 như sau:
-Reset: khi chân reset được kích hoạt thì 8051 nhảy về địa chỉ 0000
Trang 26-Hai ngắt dành cho bộ định thời time 0 và time 1, đia chỉ ở bảng vector
ngắt của hai ngắt này tương ứng với time 0 và time 1 là 000B4 và 001B4
Hai ngắt phần cứng dành cho các thiết bị bên ngoài nối tới chân 12 (P3.2)
và 13 (P3.2) của cổng P3 là INTO và INT1 tương ứng Các ngắt ngoài cũng
còn được gọi là EX1 và EX2 Vị trí nhớ trong bảng vector ngắt của hai ngắt
INT0 và INT1 này là 0003H và 0013H
Truyền thông nối tiếp có một ngắt cho cả thu lẫn phát, địa chỉ nủa
ngắt này trong bảng vector ngắt 0023H
ORG 0 ; Địa chỉ bắt đầu của ROM khi khơi động lại
LJMP MAIN ;bỏ qua bảng vector ngắt
;……… Chương trình khởi động lại
Trang 27Khi reset thì tất cả mọi ngắt bị cấm, có nghĩa là không có ngắt nào được bộ
vi điều khiển đáp ứng nếu chúng được kích hoạt các ngắt phải được cho phép bằng phần mềm để bộ vi điều khiển có thể đáp ứng được Có một thanh ghi được gọi là cho phép ngắt IE (Interrup Enable), chịu trách nhiệm
về việc cho phép ngắt và cấm các ngắt IE là thanh ghi có thể định địa chỉ bit
Thanh ghi cho phét ngắt IE
Bảng 2.4: Thanh ghi cho phét ngắt IE
- Các bước thực hiện khi cho phép một ngắt
• Để cho phép 1 ngắt, trình tự thực hiện các bước như sau
• bit D7 của thanh ghi IE là EA phải được bật lên cao cho phép các bit còn lại của thanh ghi có hiệu lực
D7 D0
EA ET2 ES ET1 EX1 ET0 EX0
EA IE.7 Nếu EA=0 thì không ngắt nào được báo nhận
Nếu EA=1 thì từng nguồn ngắt sẽ được mở hoặc cấm bằng cách bật hoặc xóa bit cho phét tương ứng
IE.6 Dự phòng cho tương lại
ET2 IE.5 Cho phép hoặc cấm ngắt chàn hoặc thu của timer 2 (89C52)
ES IE.4 Cho phép hoặc cấm cổng nối tiếp
ET1 IE.3 Cho phép hoặc cấm ngắt tràn của time 1
EX1 IE.2 Cho phép hoặc cấm ngắt ngoài 1
ET0 IE.1 Cho phép hoặc cấm ngắt tràn của time 0
EX0 IE.0 Cho phép hoặc cấm ngắt ngoài 0
* Các bit này có thể dùng ở các bộ vi điều khiển có đặc tính mới trong tương lai
Trang 28• Nếu EA=1 thì tất cả mọi ngắt đều được phép và sẽ được đáp ứng nếu các bit tương ứng của các ngắt này trong IE có mức cao
• Nếu EA=0 thì không có ngắt nào được đáp ứng cho dù bit tương ứng trong IE có giá trị cao
- Thanh ghi điều khiển công suất
Thanh ghi điều khiển công suất (PCON) ở địa chỉ 87H chứa các bit điều khiển
Hình 2.8: Mạch RESET
INTEL 89C51
R1 10KΩ
R2
100Ω
C1 10/16 + 5V
RESET
Trang 29Bảng giá trị của các thanh ghi sau khi RESET hệ thống :
0xx00000B Các thanh ghi định
00H SCON 00H SBUF 00H
Bảng 2.5: Bảng giá trị của các thanh ghi sau khi RESET hệ thống
6 Hoạt Động Của Thanh Ghi TIME
AT89C51 có hai timer 16 bit, mỗi timer có bốn cách làm việc Người ta sử dụng các timer để:
• Định khoảng thời gian
Trang 30• Tạo tốc độ baud port nối tiếp trong 89C51
Trong các ứng dụng định khoảng time, người ta lập trình timer ở những khoảng đều đặn và đặt cờ tràn timer Cờ được dùng để đồng bộ hóa chương trình để thực hiện một tác động như kiểm tra trạng thái của các ngõ vào hoặc gửi sự kiện ra các ngõ ra Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của timer để đo thời gian trôi qua giữa hai sự kiện (Vi dụ đo độ rộng xung)
Truy xuất các timer của AT89C51 dùng sáu thanh ghi chức năng đặc biệt cho trong bảng sau:
bit
Các Thanh nghi chức năng của timer trong 8031
Bảng 2.6: Các Thanh nghi chức năng của timer trong 8031
Thanh Ghi Chế Độ Timer (TMOD):
Cả hai bộ định thời timer 0 và timer 1 đều dùng chung một thanh nghi được gọi là TMOD để thiết lập các chế độ làm việc khác nhau của bộ định thời Thanh ghi TMOD là thanh nghi 8 bít gồm có 4 bít dành cho bộ timer0 và 4 bít dành cho timer 1 Trong đó hai bít thấp của chúng dung để
Trang 31thiết lập chế độ của bộ định thời, còn 2 bít cao dùng để xác định phép toán Dưới đây chung ta sẽ tìm hiểu về các phét toán
Trang 32Thanh Ghi Điều Khiển Timer (TCON)
Thanh nghi TCON chứa các bít trạng thái và các bít điều khiển cho timer 1, timer 0
Bít Ký
hiệu
TCON 7 TF1 8FH Cơ bản tràn timer 1 Đặt bởi phần cứng khi
được xóa bở phần mềm, hoặc phần cứng khi
ử lý chỉ đến chương trình phục vụ ngắt TCON 6 TR1 8EH Bít điều khiển timer 1 chạy đặt xóa bằng
mềm để cho timể chạy ngừng
khi phát hiện một cạnh xuống ở INT1 xóa phần mềm hoạc phần cứng khi CPU chỉ đến
ng trình phục vụ ngắt
mềm để ngắt ngoài tich cực cạnh xuống thấp
Trang 33TCON 1 IE0 89H Cờ cạnh ngắt 0 bên ngoài
Bảng 2.8: Các thanh nghi chức năng của timer trong 8031
Chúng ta đã biết công dụng của các cờ TR0 và TR1 để bật/tắt các bộ định thời Các bít này thuộc thanh ghi điều khiển bộ định thời TCON (Time Control) Đây là thanh ghi 8 bít như bảng trên giời thiệu, bốn bít cao dùng
để lưu các TF, TR cho cả timer 0 và time 1 Còn bốn bít thấp được thiết lập dành cho điều khiển bít ngắt Cũng cần lưu ý rằng thanh ghi TCON là thanh nghi có thể định địa chỉ bít được lên hoàn toàn có thể thay các lệnh như “SETB TR1” và “CLR TR1” bằng các lệnh tương ứng như “SET TCON.6” và CLR TCON.6”, xem bảng sau
Đôi vơi timer 0
SETB TR0 = SETB TCON.4 SETB TR0 = CLR TCON.4 SETB TF0 = SETB TCON.5 CLR TF0 = CLR TCON.5
Đôi với Timer 1
SETB TR1 = SETB TCON.6 CLR TR1 = CLR TCON.6 SETB TF1 = SETB TCON.7 CLR TF1 = CLR TCON.7
Bảng 2.9: Các lệnh tương ứng đối với thanh ghi điều khiển bộ định thời
Khởi Động Và Truy Xuất Thanh Ghi Timer
Thông thường các thanh ghi được khởi động một lần đầu ở chương trinh để đặt ở chế độ làm việc đúng Sau đó trong thân chương trình, các thanh ghi
Trang 34timer được cho chạy, dừng các bít được kiểm tra và xóa, các thanh ghi timer được đọc và cập nhật… theo dõi hỏi các ứng dụng
TMOD là thanh ghi thứ nhất được khởi động vì nó đặt chế độ hoạt động
Ví dụ, các lệnh sau khởi động timer 1 như timer 16 bít (Chế độ 1) có xung nhịp từ bộ dao động trên chíp cho việc định khoảng thời gian
MOV TMOD, #1B
Lệnh này sẽ đặt M1 = 1 và M0 = 0 cho chế độ 1, C/T=0 và Gate = 0 cho xung nhịp nội và xóa các bít chế độ Timer 0 Dĩ nhiên, timer không thật sự bắt đầu định thời cho đến khi bít điều khiển chạy TR1 được đặt lên 1
Nếu cần số đếm ban đầu, các thanh ghi TL1/TH1 cũng phải được khởi động, một khoảng 100µm có thể được khởi động bằng các khơi động giá trị cho TH1/TL1 là FF9CH
MOV TL1 , #9CH MOV TH1 , #0FFH Rồi timer được cho chạy bằng cách đặt bít điều khiển chạy như sau:
Cờ báo tràn được tự động đặt lên một sau 100µm Phần mềm có thể đời trong 100µm bằng cách dùng lệnh rẽ nhánh có điều kiện nhẩy đến chính nó trong khi cờ bào tràn chưa được lên 1:
WAIT: JNB TF1, WAIT Khi timer tràn, cần dừng timer và xóa cờ báo tràn trong phần mềm
CLR TR1 CLR TF1
7 Bộ Đếm Chương Trình Và Không Gian ROM Của 8051
Trang 35Một thanh ghi quan trọng khác của 8051 là bộ đếm chương trình Bộ đếm chương trình có nhiệm vụ trỏ đến địa chỉ của lệnh kế tiếp cần được thực hiện mỗi khi CPU nhận mã lệnh từ bộ nhớ ROM, thì bộ đếm chương trình tăng lên để trỏ đến lệnh kế tiếp Bộ đếm chương trình 8051 rộng 16bít, điều đó có nghĩa là, 8051 có thể truy cập được địa chỉ chương trình
từ 0000 đến FFFFH, tổng cộng là 64Kb Tuy nhiên không phải thành viên nào của 8051 cũng có đủ 64Kb ROM/Chíp Vấn đề tiếp theo là, khi 8051 được bật nguồn thì địa chỉ khởi đầu được bắt đầu từ đâu?
Địa chỉ bắt đầu khi 8051 được bật nguồn
Mỗi họ vi điều khiển khi được bật nguồn đều được bắt đầu từ những địa chỉ khác nhau Đối với 8051 địa chỉ bắt đầu từ 0000 Bật nguồn
có nghĩa là cấp điện áp Vcc đến chân reset, nói cách khác khi 8051 được cấp nguồn, thì bộ đếm chương trình có giá trị 0000 điều naỳ có nghĩa nó sẽ thực hiện mã lệnh đầu tiên được lưu ở ROM 0000 Tại sao lại ở vị trí này của bộ nhớ ROM? Đó là nhờ chỉ dẫn ORG ở chương trình nguồn Dưới đây
là toàn bộ trình tự hoạt động của bộ đếm chương trình trong quá trình nhận
và thực thi một chương trình mẫu
Mã Chương trinh Ở ROM
Để hiểu rõ hơn về bộ đếm chương trình, ta sẽ xem xét hoạt động của
bộ đếm chương trình mỗi khi nhận và thực hiện lệnh Ta khảo sát một tệp liệt kê của chương trình mẫu được lưu ở ROM Như có thể thấy mã lệnh và toán hạng của từng lệnh được liệt kể ở bên trái của tệp liệt kê
Trang 36Bảng 2.11: Nội dung ROM
Sau khi chương trình được nạp vào ROM của họ 8051, như AT89C51 thì mã lệnh và toán hạng được đặt luôn bắt đầu từ địa chỉ 0000
Nội dung ROM của chương trinh trên
được giới thiệu ở bảng sau Tại địa chỉ 0000 có
mã 7D là mà lệnh chuyển một giá trị vào thanh
ghi R5, còn địa chỉ 0001, chứa toán hạng (Giá trị
250000) Cần được chuyển vào R5 Do vậy lệnh
“MOV R5 #25H” có mã lệnh là “7D25” trong
đó 7D là mã lệnh còn 25 là toán hạng Tương tự
mã máy “7F 34” được ghi ở địa chỉ 0002 và 0003
biêu diễn mà lệnh và toán hạng của lệnh “MOV
R7, #34H” cũng như vậy, mã máy “74 00” tại địa
chỉ 0004 và 0005 là biểu diễn lệnh “MOV A, #0”
Trang 37Trình Tự Thực Hiện Chương Trình
Giả sử chương trình trên đã được ghi vào ROM của 8051 thì trình tự
các bước hoạt động khi được cấp nguồn như sau:
• Khi 8051 được bật nguồn bộ đếm chương trình PC có nội dung 0000
và bắt đầu
• Nạp mã lệnh đầu tiên từ vị trí nhớ đầu tiên 0000 của ROM chương
trình Đối với chương trình nêu trên đó là mã 7D(Chuyển một toán
hạng vào R5) Khi thực hiện
• Mã lệnh CPU nhận giá trị 25 và chuyển vào R5 Đến đây việc thực
hiện một lệnh được kết thúc Sau đó bộ đếm chương trình được tăng
lên để trỏ tới ô nhớ 0002 (PC = 0002), tại đây có chứa mã 7Flà mã của
lệnh chuyển một toán hạng vào R7 “MOV R7” ,…
Khi thực hiện mã lệnh 7F thì giá trị 34H được chuyển vào R7 sau đó
PC được tăng lên 0004
• Ô nhớ 0004 chứa mã lệnh của lệnh “MOV A, #0”, lệnh này được
thựchiện và sau đó PC được tăng lên 2 đơn vi: PC = 0006, lưy ý tất cả
các lệnh nêu trên đều là các lệnh 2byte
• Với PC= 0006, bộ đếm chương trình trỏ tới vị trí kế kiếplà : “ADD A,
R5” Đây là lệnh 1 byte, sau khi thực hiện lệnh PC = 0007
• Ngăn nhớ 0007 chứa mã 2F là mã lệnh của “ADD A,R7” Đây là lệnh
1Byte sau khi thực hiện PC được tăng lên 0008 quá trình này cứ tiếp
tục cho đến khi tất cả mọi lệnh đều được nhận và thực hiện Do bộ
đếm chương trình có ý nghĩa và có cách thức làm việc như vậy lên ở
một số bộ vi xử lý, đặc biệt là dòng Intel X86, bộ đếm chương trình
còn được gọi là con trỏ lệnh IP
Trang 38Điểm cần chú ý là không có thành viên nào của họ 8051 có thể truy cập được trên 64kb mã lệnh, vì bộ đếm chương trình của 8051 là 16bit (Dải địa chỉ từ 0000 đến FFFFH)
Điểm lưu ý số 2 là lệnh đâu tiên của Rom chương trình đều đặt ở
0000, còn lệnh cuối cùng phục thuộc vào dung lượng của ROM/Chíp của mỗi thành viên của họ 8051 Như vậy 8751 và AT98C51 với 4 kb ROM thì dải địa chỉ sẽ từ 0000 đến 0FFFH do đó, ngăn nhớ đầu tiên có địa chỉ 0000
và ngăn nhớ cuối cùng có địa chi 0FFFH
Với 4k byte không gian nhớ ROM trên Chíp ta có 4096 byte bằng 1000H ở dạng Hexa (4*1024 = 4096D = 1000H) Bộ nhớ này được sắp xếp trong các ngăn nhớ từ 0000 đến 0FFFH Lưy ý không luôn là ngăn nhớ đầu tiên
Với 32K byte nhớ ta có 32768 byte (32*1024 ) Chuyển 32768 về số hexa ta nhận được 8000H
0FFF
1FFF
7FFF
Trang 39Hình 2.9: Dải địa chỉ của ROM trên Chip của một số thành viên họ 8051
Trang 40CHƯƠNG III CÁC CHẾ ĐỘ ĐỊNH ĐỊA CHỈ CỦA 8051
CPU có thể truy cập dữ liệu theo nhiều cách khác nhau Dữ liệu có thể ở trong một thanh ghi hoặc trong bộ nhớ hoặc được cho như một giá trị tức thời các cách truy cập dữ liệu khác nhau được gọi là các chế độ đánh địa chỉ Phần này chúng ta bàn luận về các chế độ đánh địa chỉ của 8051
Các chế độ đánh địa chỉ khác nhau của bộ vi xử lý được xác định như nó được thiết kế và do vậy khi lập trình không thể đánh địa chỉ khác nhau là:
1 tức thời 2 Theo thanh ghi 3 Trực tiếp
4 gián tiếp qua thanh ghi 5 Theo chỉ số
I CÁC CHẾ ĐỘ ĐỊNH ĐỊA CHỈ TỨC THỜI VÀ THEO THANH GHI
1 Chế độ đánh địa chỉ tức thời
Trong chế độ đánh địa chỉ này, toán hạng nguồn là một hằng số và như tên gọi, của nó thì khi một lệnh được hợp dịch toán hạng đi tức thi ngay sau mã lệnh Lưu ý rằng trước dữ liệu tức thời phải được đặt dấu
‘’(#)’’ chế độ đánh địa chỉ này có thể được dùng để nạp thông tin vào bất
kỳ thanh ghi nào kể cả thanh ghi con trỏ dữ liệu DPTR
DPTR là 16 bit nó cũng có thể được truy cập như 2 thanh ghi 8 bit DPH và DPL trong đó DPH là byte cao và DPL là byte thấp
2 chế độ đánh địa chỉ theo thanh ghi:
Chế độ đánh địa chỉ theo thanh ghi là sử dụng các thanh ghi để dữ liệu cần được thao tác các ví dụ về đánh địa chỉ theo thanh ghi như sau: