Chân này thường được nối với chân cho phép xuất OE OutputEnable 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
Trang 1MỞ ĐẦU
Cùng với sự phát triển đi lên các doanh nghiệp thuộc nhiều thành phần,trong mọi lĩnh vực rất cần một chỗ đứng trên thị trường, đặc biệt là vấn đềquảng bá sản phẩm của mình để tăng tính cạnh tranh Trong đó một hìnhthức đóng vai trò hết sức quan trọng cho sự thành công đối với doanhnghiệp chính là nhờ vào quảng cáo
Hiện nay có rất nhiều hình thức quảng cáo khác nhau như quảng cáo bằngpha nô áp phic, biển kẻ vẽ, đề can… Một trong số những hình thức có hiệuquả nhất và đang được sử dụng rộng rãi đó là thông tin quảng cáo bằngbảng điện tử Để làm được một bảng điện tử chúng ta có thể dùng vi xử lý,dùng IC rời, dùng EPROM, dùng vi điều khiển, hay điều khiển bằng máytính Trong Đồ án tốt nghiệp này em xin trình bày thiết kế Hệ ThốngQuảng Cáo sử dụng vi điều khiển AT89C51
Trong quá trình học tập ở trường và đặc biệt thời gian thiết kế Đồ án tốtnghiệp Đây là dịp có điều kiện tốt nhất để em có thể tìm hiểu về vi điềukhiển AT89C51 cũng như họ vi điều khiển 8051 Được sự hướng dẫn vàđặc biệt quan tâm của thầy Phạm Mạnh Hùng do đó mà em đã chọn đề tài
thiết kế Hệ Thống Quảng Cáo.
Em xin chân thành cảm ơn thầy Phạm Mạnh Hùng cùng các thầy cô trong khoa ĐTVT đã tận tình hướng dẫn em hoàn thành đồ án tốt nghiệp này.
Trang 2CHƯƠ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
là 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
Trang 3Bả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
Timer 2, 1 , 0 : Bộ định thời 2 , 1 , 0
CPU : Đơn vị điều khiển trung tâm
Oscillator : Mạch dao động
Bus control: Điều khiển Bus
I/O ports: Các ports vào/ ra
Serial port: port nối tiếp
Address/data : địa chỉ/ dữ liệu
Trang 4Control
Timer 2 ( 8032,8052) Timer 1
Timer 0 Serial port
INT 1 INT 0
CPU
Oscillator Bus control
EA RST
ALE PSEN
I/O Port SERIALPORT
RXD TXD
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)
Bộ 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
Trang 5Đặc tính 8051 8052 8031
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ênchíp Để sử dụng chíp này ta phải bổ xung ROM ngoài cho nó ROM ngoàiphả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ònROM ngoài chứa chương trinh được gắn vào 8031 thì có thể lớn đến 64Kbyte Khi bổ xung cổng, như vậy chỉ còn lại 2 cổng để thao tác Để giảiquyết vấn đề này ta có thể bổ xung cổng vào - ra cho 8031 Phối phép 8031vớ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ácphiê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ó
Trang 6số đăng ký linh kiện khác nhau Phiên bản UV-PROM của 8051 là 8751Phiên bản Flash ROM được bán bởi nhiều hãng khác nhau chẳng hạn củaAtmel corp với tên gọi là AT89C51 còn phiên bản NV-RAM của 8051 doDalas 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ềuhã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ụngchí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 8751trướ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ệucác phiên bản FLASH ROM và UV-RAM của 8051 Ngoài ra còn có nhiềuphiê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à 8751yêu cầu Vì lý do này mà AT89C51 để phát triển một hệ thống dựa trên bộ
vi điều khiển yêu cầu một bộ đốt ROM mà có hỗ trợ bộ nhớ Flash Tuynhiên lại không yêu cầu bộ xoá ROM Lưu ý rằng trong bộ nhớ Flash taphả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ý dotại sao lại không cần đến bộ xoá Để loại trừ nhu cầu đối với một bộ đốtPROM 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
Trang 7Bả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ữngsản phẩm trên đây xem bảng 1.4 Ví dụ để ý rằng chữ “C” đứng trước số 51trong 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
Bảng 1.4: Các phiên bản 8051 với tốc độ khác nhau của Atmel
3.3 Bộ vi điều khiển DS5000 từ hãng Dallas Semiconductor.
Một phiên bản phổ biến khác nữa của 8051 là DS5000 của hãngDallas Semiconductor Bộ nhớ ROM trên chíp của DS5000 ở dưới dạngNV-RAM Khả năng đọc/ ghi của nó cho phép chương trình được nạp vàoROM 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ínhIBM PC Việc nạp chương trình trong hệ thống (in-system) của DS5000thông qua cổng nối tiếp của PC làm cho nó trở thành một hệ thống pháttriển tại chỗ lý tưởng Một ưu việt của NV-RAM là khả năng thay đổi nộidung 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ướckhi lập trình lại cho chúng
Trang 8Mã linh kiện ROM RAM Chân I/O Timer Ngắt Vcc Đóng vỏ
128128128128
32323232
2222
6666
5V5V5V5V
40404040
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ờiTimer RTC tạo và giữ thời gian l phút giờ, ngày, tháng - năm kể cả khi tắtnguồn
Còn có nhiều phiên bản DS5000 với những tốc độ và kiểu đóng góikhác nhau Ví dụ DS5000-8-8 có 8K NV-RAM và tốc độ 8MHZ Thôngthường DS5000-8-12 hoặc DS5000T-8-12 là lý tưởng đối với các dự áncủa sinh viên
8MHz 12MHz 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 đượcmộ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
Trang 9Flash và NV-RAM thường được dùng để phát triển sản phẩm mẫu Khi mộtsản phẩm được thiết kế và được hoàn thiện tuyệt đối thì phiên bản OTPcủa 8051 được dùng để sản hàng loạt vì giá thành một đơn vị sản phẩm sẽ
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
Hình 2.1: Sơ Đồ Khối Của Vi Điều Khiển AT89C51
Trang 112 Đặ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 16bit Một số lượng mạch đáng chú ý trong IC đơn Các thành viên mới đượcthêm vào cho họ MCS-51 và các biến thể này gần như có gấp đôi các đặctrưng này Tập đoàn Seimens, nguồn sản xuất thứ hai các bộ vi điều khiểnthuộc họ MCS-50 cung cấp Chíp SAB80515, một cải tiến của 8051 chứatrong 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ểnhà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 chocá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ácchâ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ácchân ở PORT 3 như sau :
P 3.0 RxD B0H Nhận dữ liệu của Port nối tiếp
P 3.1 TxD B1H Phát dữ liệu của Port nối tiếp
P 3.3 INT 1 B3H Ngõ vào ngắt ngoài 1
P 3.4 T 0 B4H Ngõ vào của bộ định thời/đếm 0
P 3.5 T 1 B5H Ngõ vào của bộ định thời/đếm 1
P 3.6 WR B6H Điều khiển ghi bộ nhớ dữ liệu ngoài
P 3.7 RD B7H Điều khiển đọc bộ nhớ dữ liệu ngoài
Bảng 2.1: Các chức năng của PORT 3
- 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ênchân 29 Đây là tín hiệu điều khiển cho phép ta truy xuất bộ nhớ chương
Trang 14trình ngoài Chân này thường được nối với chân cho phép xuất OE ( OutputEnable) 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 để đượcgiả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épchố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ânALE xuất tín hiệu để chôt địa chỉ ( Byte thấp của địa chỉ 16bit) vào mộtthanh ghi ngoài trong suốt 1/2 đầu chu kỳ bộ nhớ Sau khi điều này đã đượcthự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 xungALE sẽ bị bỏ qua Chân ALE còn được dùng để nhận xung ngõ vào lậptrình cho EPROM trên CHIP đối với các phiên bản của 8051 có EPROMnà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
Trang 15chương trình trong ROM nội( chương trình nhỏ hơn 4K/8K) Nếu chân nàynối với GND( và chân PSEN cũng ở mức Logic 0), chương trình cần thựcthi 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ứcLogic 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ânnhận điện áp cấp nguồn 21VPP cho việc lập trình EPROM nội ( NạpEPROM)
- Chân RESET ( RST).
Ngõ vào RST ở chân 9 là ngõ vào xoá chính (Master reset) của 8051dù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ợpcho 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ớithạch anh ngoài nhằm tái tạo dao động và xác định tần số làm việc chomạch dao động ở bên trong CHIP Kết hợp với thạch anh có thêm 2 tụ gốm
để ổn định tần số dao động Tần số danh định của thạch anh là 12MHz chohầu hết các CHIP của họ MCS - 51
Trang 16IC 1 8051
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
4 Cấu trúc của PORT In/Out.
- Sơ đồ cấu trúc bên trong của chân PORT xuất/nhập như sau :
Trang 17V DD
Q D Write
to Latch
Read latch InterrnalPull-up Readpin
Port Latch
Porrt pin
8051 Internal bus
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àynố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ủaPort 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àmnhiệ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ệntrở 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épnố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ệnhyê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ủaPort, đọc chân port Trong trường hợp này bộ chốt của port phải chứa 1 nếukhô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 portmột cách tường minh Tuy nhiên nếu một bộ chốt port bị xoá (như CLRP1.5) Chân Port không thể làm nhiệm vụ tiếp theo là ngõ nhập trừ khitrước tiên ta phải SET bộ chốt ( như SETB P1.5)
Trang 185 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
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 )
8
8
8 8
Trang 19RAM 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 đặcbiệt ( Special Funtion Registers).
AT89C50 có bộ nhớ theo cấu trúc : Có những vùng nhớ riêng biệtcho chương trình và dữ liệu Chương trình và dữ liệu có thể chứa bên trongAT89C51 nhưng AT89C51 vẫn có thể kết nối với 64K Byte bộ nhớ chươngtrì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 bitchứa ở các địa chỉ từ 20H đến 2FH, các bit còn lại chứa trong nhóm thanhghi chức năng đặc biệt
Ý 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 1lệnh đơn Ngoài ra các Port cũng có thể truy xuất được từng bit làm đơngiản phần mềm xuất nhập từng bit
- Các thanh ghi (BANK).
Trang 20Bộ lệnh AT89C51 hỗ trợ 8 thanh ghi có tên là từ R0 đến R7 và theomặ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 FunctionRegister) ở 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 thanhghi chức năng năng đặc biệt được định nghĩa sẵn các địa chỉ
- Thanh ghi trạng thái chương trình.
Thanh ghi trạng thái chương trình PSW (Program Status Word) ở địachỉ D0H chứa các bit trạng thái như bảng sau :
Trang 21PSW 4 RS1 D4H Bit 1 chọn Bank thanh ghi.
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
+ 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 đổibằ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 ghiR7 (địa chỉ byte 1Fh) vào thanh ghi A :
Trang 22SETB RS1SETB RS0MOV A,R7
- Thanh ghi B.
Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi tích luỹ A chocác phép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trụ không dấu8bit trong A và B rồi trả kết quả về 16bit trong A (Byte thấp) và B (Bytecao) Lệnh DIV AB sẽ chia A cho B rồi trả kết quả nguyên trong A và phần
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ếpbao 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ănxế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àmgiảm SP Ngăn xếp của 89C51 được cất giữ trong RAM nội và giới hạn cácđịa chỉ có thể truy xuất bằng các địa chỉ gián tiếp, chúng là 128Byte đầucủ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 AT89C51thì SP sẽ bắt đầu tại địa chỉ mặc định là 07H và dữ liệu đầu tiên sẽ được cấtvào ô nhớ ngăn xếp có địa chỉ là 08H Ngăn xếp được truy xuất trực tiếpbằ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 truyxuất ngầm bằng lệnh gọi chương trình con ACALL, LCALL và các lệnhtrở về RET, RETI để lưu trữ giá trị của bộ đếm chương trình khi bắt đầuthực hiện chương trình con và lấy lại khi kết thúc chương trình con
Trang 23- Con trỏ dữ liệu DPRT ( Data Pointer).
Con trỏ DPTR được dùng để truy xuất bộ nhớ ngoài, DPTR là mộtthanh 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 đếnRAM ngoài tại địc chỉ chứa trong DPTR (1000H)
- Các thanh ghi PORT.
Các Port xuất nhập của 89C51 bao gồm Port 0 tại địa chỉ 80H, Port 1tại địa chỉ 90H, Port 2 tại địa chỉ A0H và Port 3 tại địa chỉ B0H các Port0,2,3 không được dùng để xuất nhập nếu sử dụng thêm bộ nhớ ngoài hoặcnếu có một số đặc tính đặc biệt của 89C51 được sử dụng ( như là ngắt, Portnối tiếp ).P1.2 đến P1.7, ngược lại, luôn luôn là các đường xuất nhập đamụ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áckhả 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ùngTransistor nối tới bit 7 của Port 1, động cơ có thể ngưng hay chạy chỉ nhờvào
Trang 24+B +5V
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
Cá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 choviệ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.
Trang 25AT89C51 chứa một Port nối tiếp dành cho việc trao đổi thông tin với cácthiế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 ICkhá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ênSBUF, khi nhận dữ liệu thì đọc SBUF Các mode vận hành khác nhau đượclậ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
-Hai ngắt dành cho bộ định thời time 0 và time 1, đia chỉ ở bảng vectorngắt của hai ngắt này tương ứng với time 0 và time 1 là 000B4 và 001B4Hai 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ũngcòn được gọi là EX1 và EX2 Vị trí nhớ trong bảng vector ngắt của hai ngắtINT0 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ủangắt này trong bảng vector ngắt 0023H
Trang 26ORG 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
Khi 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 chophép bằng phần mềm để bộ vi điều khiển có thể đáp ứng được Có mộtthanh 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
D7 D0
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ấmbằ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
Trang 27tương lai
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 bitcòn lại của thanh ghi có hiệu lực
• Nếu EA=1 thì tất cả mọi ngắt đều được phép và sẽ được đáp ứng nếucá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 ứngtrong 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
- Tín hiệu RESET.
AT89C51 có ngõ vào RESET (RST) tác động ở mức cao trong khoảng thờigian 2 chu kỳ sau đó xuống mức thấp để AT89C51 bắt đầu làm việc RST
Trang 28có thể kích tay bằng một phím nhấn thường mở sơ đồ mạch RESET nhưhình sau:
Thanh ghi quan trọng nhất là thanh ghi bộ đếm chương trình PC đượcRESET tại địa chỉ 0000H Nội dung của RAM trong chíp không bị thay đổibởi tác động của ngõ vào RESET
INTEL 89C51
+ 5V
RESET
H×nh 1a : M¹ch RESET cho 89C51
Hình 2.8: Mạch RESET
Bảng giá trị của các thanh ghi sau khi RESET hệ thống :
Trang 29SCON 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
• Đếm sự kiện
• 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óachươ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ệctạ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 đặcbiệt cho trong bảng sau:
bit
Các Thanh nghi chức năng của timer trong 8031
Trang 30Bả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 thanhnghi đượ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 đểthiế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 31Tóm tắt thanh nghi chức năng TMOD
Bảng 2.7: Tóm tắt thanh nghi chức năng TMOD
Thanh 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
hiệu
TCON 7 TF1 8FH Cơ bản tràn timer 1 Đặt bởi phần cứng khi
tràn, được xóa bở phần mềm, hoặc phần cứng khi
bộ xử lý chỉ đến chương trình phục vụ ngắtTCON 6 TR1 8EH Bít điều khiển timer 1 chạy đặt xóa bằng
phần mềm để cho timể chạy ngừngTCON 5 TF0 8DH Cờ báo tràn timer 0
TCON 4 TR0 8CH Bít điều khiển timer 0 chạy
TCON 3 IE1 8BH Cớ cạnh ngắt 1 bên ngoài Đặt bởi phần
cứng khi phát hiện một cạnh xuống ở INT1 xóabằng phần mềm hoạc phần cứng khi CPU chỉ đếnchương trình phục vụ ngắt
TCON 2 IT1 8AH Cờ kiểu ngắt 1 bên ngoài đặt xóa bằng
phần mềm để ngắt ngoài tich cực cạnh xuốngmức thấp
TCON 1 IE0 89H Cờ cạnh ngắt 0 bên ngoài
Trang 32TCON 0 IT0 88H 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 (TimeControl) Đâ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ếtlậ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ệnhnhư “SETB TR1” và “CLR TR1” bằng các lệnh tương ứng như “SETTCON.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 ghitimer được cho chạy, dừng các bít được kiểm tra và xóa, các thanh ghitimer đượ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ó xungnhịp từ bộ dao động trên chíp cho việc định khoảng thời gian
MOV TMOD, #1B
Trang 33Lệnh này sẽ đặt M1 = 1 và M0 = 0 cho chế độ 1, C/T=0 và Gate = 0 choxung 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 , #9CHMOV TH1 , #0FFHRồi timer được cho chạy bằng cách đặt bít điều khiển chạy như sau:
SETB TR1
Cờ báo tràn được tự động đặt lên một sau 100µm Phần mềm có thể đờitrong 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, WAITKhi 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
Mộ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 đượcthực hiện mỗi khi CPU nhận mã lệnh từ bộ nhớ ROM, thì bộ đếm chươngtrình tăng lên để trỏ đến lệnh kế tiếp Bộ đếm chương trình 8051 rộng16bí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ênnà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?
Trang 34Đị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 đượccấ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àycủ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ệpliệ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ê
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ó
Bảng 2.10: Mã Chương trình Ở ROM
Trang 35mã 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à 0003biê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” ônhớ 0006 có mã 2D là mã lệnh của “ADD A, R5”, còn ô nhớ 007 có nộidung 2F là mã lệnh của “ADD A, R7” mã lệnh của lệnh “ADD A, #12H”được đặt ở ô nhớ 0008 và toán hạng 12H được đặt ở ô nhớ 0009 Ô nhớ000A có mã lệnh của lệnh SJMP và địa chỉ đích của nó được đặt ở ô nhớ000B
• Mã lệnh CPU nhận giá trị 25 và chuyển vào R5 Đến đây việc thựchiện một lệnh được kết thúc Sau đó bộ đếm chương trình được tănglên để trỏ tới ô nhớ 0002 (PC = 0002), tại đây có chứa mã 7Flà mã củalệ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
Trang 36• Ô nhớ 0004 chứa mã lệnh của lệnh “MOV A, #0”, lệnh này đượcthự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ệnh1Byte sau khi thực hiện PC được tăng lên 0008 quá trình này cứ tiếptụ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ìnhcòn được gọi là con trỏ lệnh IP
Bản Đồ Nhớ ROM của họ 8051
Điểm cần chú ý là không có thành viên nào của họ 8051 có thể truycậ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ủamỗ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ằng1000H ở dạng Hexa (4*1024 = 4096D = 1000H) Bộ nhớ này được sắp xếptrong các ngăn nhớ từ 0000 đến 0FFFH Lưy ý không luôn là ngăn nhớ đầutiên
Với 32K byte nhớ ta có 32768 byte (32*1024 ) Chuyển 32768 về số hexa ta nhận được 8000H
Trang 37Hình 2.9: Dải địa chỉ của ROM trên Chip của một số thành viên họ 8051
0FFF
1FFF
7FFF
Trang 38CHƯƠ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 địnhnhư nó được thiết kế và do vậy khi lập trình không thể đánh địa chỉ khácnhau 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 thingay 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 bitDPH 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:Các thanh ghi nguồn và đích phải phù hợp về kích thước
Trang 39Hay nói cách khác, nếu viết “ MOV DPTR, A” sẽ cho một lỗi vìnguồn là thanh ghi 8 bit và đích lại là thanh ghi 16 bit
Để ý rằng ta có thể chuyển dữ liệu giữa thanh ghi tích luỹ A và thanhghi Rn (n từ 0 đến 7) nhưng việc chuyển dữ liệu giữa các thanh ghi Rn thìkhông được phép Ví dụ, lệnh “MOV R4, R7” là không hợp lệ
Trong hai chế độ đánh địa chỉ đầu tiên, các toán hạng có thể hoặc ởbên trong thanh ghi hoặc được gắn liền với lệnh Trong hầu hết các chươngtrình dữ liệu cần được xử lý thường ở trong một số ngăn của bộ nhớ RAMhoặc trong ROM Rất nhiều cách để truy cập dữ liệu này mà phần tiếp theo
• Các ngăn nhớ từ 20H đến 2FH được dành cho không gian đánh địa
chỉ theo bit để lưu các dữ liệu 1 bit
• Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích
thước 1byte
Mặc dù toàn bộ byte của bộ nhớ RAM có thể được truy cập bằng chế
độ đánh địa chỉ trực tiếp, nhưng chế độ này thường được sử dụng nhất đểtruy cập các ngăn nhớ RAM từ 30H đến 7FH Đây là do một thực tế là cácngăn nhớ dành cho băng được truy cập bằng thanh ghi theo các tên gọi củachúng là R0 - R7 còn các ngăn nhớ khác của RAM thì không có tên nhưvậy Trong chế độ đánh địa chỉ trực tiếp thì dữ liệu ở trong một ngăn nhớ
Trang 40RAM mà địa chỉ của nó được biết và địa chỉ này được cho như là mộtphần của lệnh Khác với chế độ đánh địa chỉ tức thì mà toán hạng tự nóđược cấp với lệnh dấu (#) là sự phân biệt giữa hai chế độ đánh địa chỉ
Như đã nói ở trước thì các ngăn nhớ trừ 0 đến 7 của RAM được cấpcho bằng 0 của các thanh ghi R0 - R7 Các thanh ghi này có thể được truycập theo 2 cách như sau:
MOV A, R4 MOVA, 4 Hai lệnh này giống nhau đều sao nội dung thanh ghi R4 vào A
MOV A, 7;
MOV A,R7Hai lệnh này đều như nhau là sao nội dung R7 vào thanh ghi A
Mặc dù sử dụng các tên R0 - R7 dễ hơn các địa chỉ bộ nhớ của chúngnhưng các ngăn nhớ 30H đến 7FH của RAM không thể được truy cập theobất kỳ cách nào khác là theo địa chỉ của chúng vì chúng không có tên
2 Các thanh ghi SFSR và các địa chỉ của chúng.
Trong các thanh ghi được nói đến từ trước đến giờ ta thấy rằng các thanhghi R0 - R7 là một phần trong 128 byte của bộ nhớ RAM Vậy còn cácthanh ghi A, B, PSW và DPTR là một bộ phận của nhóm các thanh ghinhìn chung được gọi là các thanh ghi đặc biệt SFR (Special FuntionRegister) Có rất nhiều thanh ghi với chức năng đặc biệt và chúng được sửdụng rất rộng rãi mà ta sẽ trình bày ở các chương sáu Các thanh ghi FR cóthể được truy cập theo tên của chúng (mà dễ hơn rất nhiều) hoặc theo cácđịa chỉ của chúng Ví dụ địa chỉ của thanh ghi A là EOH và thanh ghi B làFOH những cặp lệnh có cùng ý nghĩa dưới đây: