Hỡnh 3-8
Chip AT89C51 cú cỏc tớn hiệu điều khiển cần phải lưu ý như sau:
• Tớn hiệu vào /EA trờn chõn 31 thường đặt lờn mức cao ( +5V) hoặc mức thấp (GND). Nếu ở mức cao, 8951 thi hành chương trỡnh từ ROM nội trong khoảng địa chỉ thấp (4K hoặc tối đa 8k đối với 89C52). Nếu ở mức thấp, chương trỡnh được thi hành từ bộ nhớ mở rộng (tối đa đến 64Kbyte). Ngoài ra người ta cũn dựng /EA làm chõn cấp điện ỏp 12V khi lập trỡnh EEPROM trong 8051.
Chõn PSEN (Program store enable):
PSEN là chõn tớn hiệu ra trờn chõn 29. Nú là tớn hiệu điều khiển cho phộp chương trỡnh mở rộng, PSEN thường được nối đến chõn /OE (Output Enable) của một EPROM hoặc ROM để cho phộp đọc cỏc bytes mó lệnh.
Hóy nhớ rằng : bỡnh thường chõn /PSEN sẽ được thả trống ( No Connect).Chỉ khi nào cho /EA ở mức thấp thỡ lỳc đú:
/PSEN sẽ ở mức thấp trong thời gian lấy lệnh. Cỏc mó nhị phõn của chương trỡnh được lấy từ EPROM qua bus dữ liệu và được chốt vào thanh ghi lệnh của 8951 để giải mó lệnh. /PSEN ở mức thụ động (mức cao) nếu thi hành chương trỡnh trong ROM nội của 8951.
CÁC CHÂN NGUỒN:
AT89C51 hoạt động ở nguồn đơn +5V. Vcc được nối vào chõn 40, và Vss (GND) được nối vào chõn 20.
95 3.2.3 Cổng vào/ra
Tất cả cỏc vi điều khiển 8051 đều cú 4 cổng vào/ra 8 bit cú thể thiết lập như cổng vào hoặc rạ Như vậy cú tất cả 32 chõn I/O cho phộp vi điều khiển cú thể kết nối với cỏc thiết bị ngoại vị
Hỡnh 3-10
Chõn vào/ra (I/O)
Hỡnh trờn mụ tả sơ đồ đơn giản của mạch bờn trong cỏc chõn vi điều khiển trừ cổng P0 là khụng cú điện trở kộo lờn (pull-up).
Hỡnh 3-11
Chõn ra
Một mức logic 0 đặt vào bit của thanh ghi P làm cho transistor mở, nối chõn tương ứng với đất.
Hỡnh 3-12
Chõn vào
Một bit 1 đặt vào một bit của thanh ghi cổng, transistor đúng và chõn tương ứng được nối với nguồn Vcc qua trở kộo lờn.
97
Port 0
Port 0 là port cú 2 chức năng ở cỏc chõn 32 – 39 của AT89C51:
- Chức năng I/O (xuất/nhập): dựng cho cỏc thiết kế nhỏ. Tuy nhiờn, khi dựng chức năng này thỡ Port 0 phải dựng thờm cỏc điện trở kộo lờn (pull-up), giỏ trị của điện trở phụ thuộc vào thành phần kết nối với Port. - Khi dựng làm ngừ vào, Port 0 phải được set mức logic 1 trước đú.
- Chức năng địa chỉ / dữ liệu đa hợp: khi dựng cỏc thiết kế lớn, đũi hỏi phải sử dụng bộ nhớ ngoài thỡ Port 0 vừa là bus dữ liệu (8 bit) vừa là bus địa chỉ (8 bit thấp).
Ngoài ra khi lập trỡnh cho AT89C51, Port 0 cũn dựng để nhận mó khi lập trỡnh và xuất mó khi kiểm tra (quỏ trỡnh kiểm tra đũi hỏi phải cú điện trở kộo lờn).
Port 1:
Port1 (chõn 1 – 8) chỉ cú một chức năng là I/O, khụng dựng cho mục đớch khỏc (chỉ trong 8032/8052/8952 thỡ dựng thờm P1.0 và P1.1 cho bộ định thời thứ 3). Tại Port 1 đó cú điện trở kộo lờn nờn khụng cần thờm điện trở ngoàị
Port 1 cú khả năng kộo được 4 ngừ TTL và cũn dựng làm 8 bit địa chỉ thấp trong quỏ trỡnh lập trỡnh hay kiểm trạ
Khi dựng làm ngừ vào, Port 1 phải được set mức logic 1 trước đú.
Port 2:
Port 2 (chõn 21 – 28) là port cú 2 chức năng: - Chức năng I/O (xuất / nhập)
- Chức năng địa chỉ: dựng làm 8 bit địa chỉ cao khi cần bộ nhớ ngoài cú địa chỉ 16 bit. Khi đú, Port 2 khụng được dựng cho mục đớch I/Ọ
- Khi dựng làm ngừ vào, Port 2 phải được set mức logic 1 trước đú.
- Khi lập trỡnh, Port 2 dựng làm 8 bit địa chỉ cao hay một số tớn hiệu điều khiển.
Port 3:
Port 3 (chõn 10 – 17) là port cú 2 chức năng:
- Chức năng I/Ọ Khi dựng làm ngừ vào, Port 3 phải được set mức logic 1 trước đú.
- Chức năng khỏc: mụ tả như bảng 1.1
Bảng 1.1: Chức năng cỏc chõn của Port 3
Bit Tờn Chức năng
P3.0 RxD Ngừ vào port nối tiếp P3.1 TxD Ngừ ra port nối tiếp P3.2 INT0 Ngắt ngoài 0
P3.3 INT1 Ngắt ngoài 1
P3.4 T0 Ngừ vào của bộ định thời 0 P3.5 T1 Ngừ vào của bộ định thời 1
P3.6 WR Tớn hiệu điều khiển ghi dữ liệu lờn bộ nhớ ngoàị P3.7 RD Tớn hiệu điều khiển đọc từ bộ nhớ dữ liệu ngoàị
Cỏc chõn nguồn:
Chõn 40: VCC = 5V ± 20% Chõn 20: GND
/PSEN (Program Store Enable):
/PSEN (chõn 29) cho phộp đọc bộ nhớ chương trỡnh mở rộng đối với cỏc ứng dụng sử dụng ROM ngoài, thường được nối đến chõn /OC (Output Control) của ROM để đọc cỏc byte mó lệnh. /PSEN sẽ ở mức logic 0 trong thời gian AT89C51 lấy lệnh.Trong quỏ trỡnh này, / PSEN sẽ tớch cực 2 lần trong 1 chu kỳ mỏỵ
Mó lệnh của chương trỡnh được đọc từ ROM thụng qua bus dữ liệu (Port0) và bus địa chỉ (Port0 + Port2).
Khi 8051 thi hành chương trỡnh trong ROM nội, PSEN sẽ ở mức logic 1.
ALE/ PROG (Ađress Latch Enable / Program):
ALE/ PROG (chõn 30) cho phộp tỏch cỏc đường địa chỉ và dữ liệu tại Port 0 khi truy xuất bộ nhớ ngoàị ALE thường nối với chõn Clock của IC chốt (74373, 74573).
Cỏc xung tớn hiệu ALE cú tốc độ bằng 1/6 lần tần số dao động trờn chip và cú thể được dựng làm tớn hiệu clock cho cỏc phần khỏc của hệ thống. Xung này cú thể cấm bằng cỏch set bit 0 của SFR tại địa chỉ 8Eh lờn 1. Khi đú, ALE chỉ cú tỏc dụng khi dựng lệnh MOVX hay MOVC. Ngoài ra, chõn này cũn được dựng làm ngừ vào xung lập trỡnh cho ROM nội ( /PROG ).
EA /VPP (External Access) :
EA (chõn 31) dựng để cho phộp thực thi chương trỡnh từ ROM ngoàị Khi nối chõn 31 với Vcc, AT89C51 sẽ thực thi chương trỡnh từ ROM nội (tối đa 8KB), ngược lại thỡ thực thi từ ROM ngoài (tối đa 64KB).
Ngoài ra, chõn /EA được lấy làm chõn cấp nguồn 12V khi lập trỡnh cho ROM.
RST (Reset):
RST (chõn 9) cho phộp reset AT89C51 khi ngừ vào tớn hiệu đưa lờn mức 1 trong ớt nhất là 2 chu kỳ mỏỵ
99 Ngừ vào và ngừ ra bộ dao động, khi sử dụng cú thể chỉ cần kết nối thờm thạch anh và cỏc tụ như hỡnh vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho AT89C51 là 12Mhz.
Giỏ trị C1, C2 = 30 pF ± 10 pF
Hỡnh 3-13 – Sơ đồ kết nối thạch anh
3.2.4 Tổ chức bộ nhớ 8051
Hỡnh 3-14 - Cỏc vựng nhớ trong AT89C51
Bộ nhớ của họ MCS-51 cú thể chia thành 2 phần: bộ nhớ trong và bộ nhớ ngoàị Bộ nhớ trong bao gồm 4 KB ROM và 128 byte RAM (256 byte trong 8052). Cỏc byte RAM cú địa chỉ từ 00h – 7Fh và cỏc thanh ghi chức năng đặc biệt (SFR) cú địa chỉ từ 80h – 0FFh cú thể truy xuất trực tiếp. Đối với 8052, 128 byte RAM cao (địa chỉ từ 80h – 0FFh) khụng thể truy xuất trực tiếp mà chỉ cú thể truy xuất giỏn tiếp (xem thờm trong phần tập lệnh).
Bộ nhớ ngoài bao gồm bộ nhớ chương trỡnh (điều khiển đọc bằng tớn hiệu PSEN ) và bộ nhớ dữ liệu (điều khiển bằng tớn hiệu RD hay WR để cho phộp đọc hay ghi dữ liệu). Do số đường địa chỉ của MCS-51 là 16 bit (Port 0
Bộ nhớ chương trỡnh 64 KB 0000h – FFFFh Điều khiển bằng PSEN
Bộ nhớ dữ liệu 64 KB 0000h – FFFFh Điều khiển bằng RD và WR ROM 4KB 0000h – 0FFFh RAM 128 byte 00h – 7Fh SFR 80h – 0FFh Bộ nhớ trong Bộ nhớ ngoài
chứa 8 bit thấp và Port 2 chứa 8 bit cao) nờn bộ nhớ ngoài cú thể giải mó tối đa là 64KB.
3.2.4.1 Tổ chức bộ nhớ trong
Bộ nhớ trong của MCS-51 gồm ROM và RAM. RAM bao gồm nhiều vựng cú mục đớch khỏc nhau: vựng RAM đa dụng (địa chỉ byte từ 30h – 7Fh và cú thờm vựng 80h – 0FFh ứng với 8052), vựng cú thể địa chỉ húa từng bit (địa chỉ byte từ 20h – 2Fh, gồm 128 bit được định địa chỉ bit từ 00h – 7Fh), cỏc bank thanh ghi (từ 00h – 1Fh) và cỏc thanh ghi chức năng đặc biệt (từ 80h – 0FFh).
Cỏc thanh ghi chức năng đặc biệt (SFR – Special Function Registers):
Bảng 1.2 – Cỏc thanh ghi chức năng đặc biệt
Địa chỉ byte Cú thể định địa chỉ bit Khụng định địa chỉ bit F8h F0h B E8h E0h ACC D8h D0h PSW
C8h (T2CON) (RCAP2L) (RCAP2H) (TL2) (TH2)
C0h
B8h IP SADEN
B0h P3
A8h IE SAĐR
A0h P2
98h SCON SBUF BRL BDRCON
90h P1
88h TCON TMOD TL0 TH0 TL1 TH1 AUXR CKCON
80h P0 SP DPL DPH PCON
Cỏc thanh ghi cú thể định địa chỉ bit sẽ cú địa chỉ bit bắt đầu và địa chỉ byte trựng nhaụ Vớ dụ như: thanh ghi P0 cú địa chỉ byte là 80h và cú địa chỉ bit
101
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 saụ
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).
Địa chỉ byte Địa chỉ bit Chức năng
7F Vựng RAM đa dụng 30 2F 7F 7E 7D 7C 7B 7A 79 78 Vựng cú thể định địa chỉ bit 2E 77 76 75 74 73 72 71 70 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 2B 5F 5E 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50 29 4F 4E 4D 4C 4B 4A 49 48 28 47 46 45 44 43 42 41 40 27 3F 3E 3D 3C 3B 3A 39 38 26 37 36 35 34 33 32 31 30 25 2F 2E 2D 2C 2B 2A 29 28 24 27 26 25 24 23 22 21 20 23 1F 1E 1D 1C 1B 1A 19 18 22 17 16 15 14 13 12 11 10 21 0F 0E 0D 0C 0B 0A 09 08 20 07 06 05 04 03 02 01 00 1F 18 Bank 3
Cỏc bank thanh ghi 17
10 Bank 2
1F
08 Bank 1
07
00 Bank thanh ghi 0 ( mặc định cho R0-R7)
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 saụ
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.
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. 3.2.4.2 Tổ chức bộ nhớ ngoài
MCS-51 cú bộ nhớ theo cấu trỳc Harvard: phõn biệt bộ nhớ chương trỡnh và dữ liệụ Chương trỡnh và dữ liệu cú thể chứa bờn trong nhưng vẫn cú thể kết nối với 64KB chương trỡnh và 64KB dữ liệụ Bộ nhớ chương trỡnh được truy xuất thụng qua chõn PSEN cũn bộ nhớ dữ liệu đươc truy xuất thụng qua chõn WR
hay RD .
Lưu ý rằng việc truy xuất bộ nhớ chương trỡnh luụn luụn sử dụng địa chỉ 16 bit cũn bộ nhớ dữ liệu cú thể là 8 bit hay 16 bit tuỳ theo cõu lệnh sử dụng. Khi dựng bộ nhớ dữ liệu 8 bit thỡ cú thể dựng Port 2 như là Port I/O thụng thường cũn khi dựng ở chế độ 16 bit thỡ Port 2 chỉ dựng làm cỏc bit địa chỉ caọ
Port 0 được dựng làm địa chỉ thấp/ dữ liệu đa hợp. Tớn hiệu ALE để tỏch byte địa chỉ và đưa vào bộ chốt ngoàị
Trong chu kỳ ghi, byte dữ liệu sẽ tồn tại ở Port 0 vừa trước khi /WR tớch cực và được giữ cho đến khi /WR khụng tớch cực.Trong chu kỳ đọc, byte nhận được chấp nhận vừa trước khi /RD khụng tớch cực.
Bộ nhớ chương trỡnh ngoài được xử lý 1 trong 2 điều kiện sau: - Tớn hiệu /EA tớch cực ( = 0).
- Giỏ trị của bộ đếm chương trỡnh (PC – Program Counter) lớn hơn kớch thước bộ nhớ.
103 PCH: Program Counter High – PCL: Program Counter Low
DPH: Data Pointer High – DPL: Data Pointer Low
Hỡnh 3-15 – Thực thi bộ nhớ chương trỡnh ngoài
Bộ nhớ chương trỡnh ngoài:
Quỏ trỡnh thực thi lệnh khi dựng bộ nhớ chương trỡnh ngoài cú thể mụ tả như hỡnh 1.7. Trong quỏ trỡnh này, Port 0 và Port 2 khụng cũn là cỏc Port xuất nhập mà chứa địa chỉ và dữ liệụ Sơ đồ kết nối với bộ nhớ chương trỡnh ngoài mụ tả như hỡnh 1.8.
Trong một chu kỳ mỏy, tớn hiệu ALE tớch cực 2 lần. Lần thứ nhất cho phộp 74HC573 mở cổng chốt địa chỉ byte thấp, khi ALE xuống 0 thỡ byte thấp và byte cao của bộ đếm chương trỡnh đều cú nhưng ROM chưa xuất vỡ PSEN
chưa tớch cực, khi tớn hiệu ALE lờn 1 trở lại thỡ Port 0 đó cú dữ liệu là mó lệnh. ALE tớch cực lần thứ hai
được giải thớch tương tự và byte 2 được đọc từ bộ nhớ chương trỡnh. Nếu lệnh đang thực thi là lệnh 1 byte thỡ CPU chỉ đọc Opcode, cũn byte thứ hai bỏ quạ
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). Sơ đồ kết nối với bộ nhớ dữ liệu ngoài mụ tả như hỡnh 1.9.
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).
Bộ nhớ chương trỡnh và dữ liệu dựng chung:
Trong cỏc ứng dụng phỏt triển phần mềm xõy dựng dựa trờn AT89C51, ROM sẽ được lập trỡnh nhiều lần nờn dễ làm hư hỏng ROM. Một giải phỏp đặt ra là sử dụng RAM để chứa cỏc chương trỡnh tạm thờị Khi đú, RAM vừa là bộ nhớ chương trỡnh vừa là bộ nhớ dữ liệụ Yờu cầu này cú thể thực hiện bằng cỏch kết hợp chõn RD và chõn PSEN thụng qua cổng AND. Khi thực hiện đọc mà lệnh, chõn PSEN tớch cực cho phộp đọc từ RAM và khi đọc dữ liệu, chõn RD sẽ tớch cực. Sơ đồ kờt nối mụ tả như hỡnh 1.10.
Giải mó địa chỉ
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ũn 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ệụ 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 nhaụ
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 vị
3.2.5 Cỏc thanh ghi chức năng đặc biệt (SFRs - Special Function Registers)
Thanh ghi tớch luỹ (Accumulator)
Thanh ghi tớch luỹ là thanh ghi sử dụng nhiều nhất trong AT89C51, được ký hiệu trong cõu lệnh là A. Ngoài ra, trong cỏc lệnh xử lý bit, thanh ghi tớch luỹ được ký hiệu là ACC.
Thanh ghi tớch luỹ cú thể truy xuất trực tiếp thụng qua địa chỉ E0h (byte) hay truy xuất từng bit thụng qua địa chỉ bit từ E0h đến E7h.
VD: Cõu lệnh: MOV A,#1 MOV 0E0h,#1 cú cựng kết quả. Hay: SETB ACC.4 SETB 0E4h cũng tương tự. Thanh ghi B
105 Thanh ghi B dựng cho cỏc phộp toỏn nhõn, chia và cú thể dựng như một thanh ghi tạm, chứa cỏc kết quả trung gian.