Tải bản đầy đủ (.doc) (133 trang)

BÁO CÁO BÀI TẬP LỚN MÔN VI XỬ LÝ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.15 MB, 133 trang )

báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
Phần I:
Tổng quan về các thiết bị Vi Xử Lý
Chơng 1 :
Giới thiệu chung về chíp AT89C51
I. Giới thiệu AT89C51
AT89C51 là một bộ vi xử lý 8 bit, loại CMOS, có tốc độ cao và công
suất thấp với bộ nhớ Flash có thể lập trình đợc. Nó đợc sản xuất với công
nghệ bộ nhớ không bay hơi mật độ cao của hãng Atmel, và tơng thích với họ
MCS-51
TM
về chân ra và tập lệnh.

Sơ đồ khối của AT89C51
1
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
AT89C51 có các đặc trng cơ bản nh sau: 4 K byte Flash, 128 byte
RAM, 32 đờng xuất nhập, hai bộ định thời/đếm 16-bit, một cấu trúc ngắt hai
mức u tiên và 5 nguyên nhân ngắt, một port nối tiếp song công, mạch dao
động và tạo xung clock trên chip. AT89C51 đợc thiết kế với logic tĩnh cho
hoạt động có tần số giảm xuống 0 vaứ hỗ trợ hai chế độ tiết kiệm năng lợng
đợc lựa chọn bằng phần mềm. Chế độ nghỉ dừng CPU trong khi vẫn cho phép
RAM, các bộ định thời/đếm, port nối tiếp và hệ thống ngắt tiếp tục hoạt
động. Chế độ nguồn giảm duy trì nội dung của RAM nhng không cho mạch
dao động cung cấp xung clock nhằm vô hiệu hoá các hoạt động khác của
chip cho đến khi có reset cứng tiếp theo.
I.1 Mô tả các chân
Các cấu hình chân ra của AT89C51
2
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
Nh vậy AT89C51 có tất cả 40 chân với các chức năng nh sau:


- Vcc (40)
Chân cung cấp điện (5V)
- GND (20)
Chân nối đất (0V)
- Port 0 (32-39)
Port 0 là port xuất nhập 8-bit hai chiều. Port 0 còn đợc cấu hình làm
bus địa chỉ (byte thấp) và bus dữ liệu đa hợp trong khi truy xuất bộ nhớ dữ
liệu ngoài và bộ nhớ chơng trình ngoài. Port 0 cũng nhận các byte mã trong
khi lập trình cho Flash và xuất các byte mã trong khi kiểm tra chơng trình
(Các điện trở kéo lên bên ngoài đợc cần đến trong khi kiểm tra chơng trình).
- Port 1(1-8)
Port 1 là port xuất nhập 8-bit hai chiều. Port 1 cũng nhận byte địa chỉ
thấp trong thời gian lập trình cho Flash.
- Port 2 (21-28)
Port 2 là port xuất nhập 8-bit hai chiều. Port 2 tạo ra các byte cao của
bus địa chỉ trong thời gian tìm nạp lệnh từ bộ nhớ chơng trình ngoài và trong
thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng các địa chỉ 16-bit. Trong
thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng các địa chỉ 8-bit, Port 2
phát các nội dung của thanh ghi chức năng đặc biệt P2. Port 2 cũng nhận các
bít địa chỉ cao và vài tín hiệu điều khiển trong thời gian lập trình cho Flash
và kiểm tra chơng trình.
- Port 3 (10-17)
Port 3 là Port xuất nhập 8-bit hai chiều. Port 3 cũng còn làm các chức
năng khác của AT89C51. Các chức năng này đợc liệt kê nh sau:

Chân 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õ vào ngắt ngoài 0
P3.3
INT1
Ngõ vào ngắt ngoài 1
P3.4 T0 Ngõ vào bên ngoài của bộ định thời 1
P3.5 T1 Ngõ vào bên ngoài của bộ định thời 0
P3.6
WR
Điều khiển ghi bộ nhớ dữ liệu ngoài
P3.7
RD
Điều khiển đọc bộ nhớ dữ liệu ngoài
Port 3 cũng nhận một vài tín hiệu điều khiển cho việc lập trình Flash và
kiểm tra chơng trình.
3
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45
- RST (9)
Ngâ vµo reset. Møc cao trªn ch©n nµy trong 2 chu kú m¸y trong khi
bé dao ®éng ®ang hoat ®éng sÏ reset AT89C51.
M¹ch reset t¸c ®éng b»ng tay vµ tù ®éng reset khi khëi ®éng m¸y
- ALE/
PROG
(30)
ALE là một xung ngõ ra để chốt byte thấp của đòa chỉ trong khi truy xuất
bộ nhớ ngoài. Chân này cũng làm ngõ vào xung lập trình (
PROG
) trong thời
gian lập trình cho Flash.
Khi hoạt động bình thường, xung ngõ ra ALE lu«n có tần sốä không đổi là
1/6 tần số của mạch dao động, có thể được dùng cho các mụch đích đònh thời từ

bên ngoài vµ tạo xung clock. Tuy nhiên, lưu ý là một xung ALE sẽ bò bỏ qua
trong mỗi một chu kỳ truy xuất bộ nhớ dữ liệu ngoài.
Khi cần, hoạt động ALE có thể được vô hiệu hoá bằng cách set bit 0 của
thanh ghi chức năng đặc biệt có đòa chỉ 8Eh. Khi bit này được set, ALE chỉ tích
cực trong thời gan thực hiện lệnh MOVX hoặc MOVC. Ngược lại, chân này sẽ
được kéo lên cao. Việc set bit không cho phép hoạt động chốt byte thấp của đòa
chỉ sẽ không có tác dụng nếu bộ vi điều khiển đang ở chế độ thực thi chương
trình ngoài.
-
PSEN
(29)
PSEN
(Program Store Enable) là xung điều khiển truy xuất bộ nhớ
chương trình ngoài. Khi AT89C52 đang thực thi chương trình từ bộ nhớ chương
trình ngoài,
PSEN
được kích hoạt hai lần mỗi chu kỳ máy, nhưng hai hoạt động
PSEN
sẽ bò bỏ qua mỗi khi truy cập bộ nhớ dữ liệu ngoài.
-
EA
/Vpp (31)
4
RST
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45

EA
(External Access Enable) là chân cho phép truy xuất bộ nhớ
chương trình ngoài (bắt đầu từ đòa chỉ từ 0000H đến FFFFH).
EA

= 0 cho phép truy xuất bộ nhớ chương trình ngoài, ngỵc l¹i
EA
=1 sẽ
thực thi chương trình bên trong chip
Tuy nhiên, lưu ý rằng nếu bit khoá 1 (lock-bit 1) được lập trình,
EA
sẽ
được chốt bên trong khi reset.
Chân này cũng nhận điện áp cho phép lập trình Vpp=12V khi lập trình
Flash (khi đó ®iƯn áp lập trình 12V được chọn).
- XTAL1 và XTAL2
XTAL1 và XTAL2 là hai ngõ vào và ra của một bộ khuếch đại đảo của
mạch dao động, được cấu hình để dùng như một bộ dao động trên chip.

Không có yêu cầu nào về chu kỳ nhiệm vụ của tín hiệu xung clock bên
ngoài do tín hiệu này phải qua một flip-flop chia hai trước khi đến mạch tạo
xung clock bên trong, tuy nhiên các chi tiết kỹ thuật về thời gian mức thấp và
mức cao, điện áp cực tiểu và cực đại cần phải được xem xét.
I.2 C¸c chÕ ®é ®Ỉc biƯt
I.2.1 ChÕ ®é nghØ
Trong chế độ nghỉ, CPU tự đi vào trạng thái ngủ trong khi tất cả các
ngoại vi bên trong chip vẫn tích cực. Chế độ này được điều khiển bởi phần
mềm. Nội dung của RAM trên chip và của tất cả các thanh ghi chức năng đặc
biệt vẫn không đổi trong khi thời gian tồn tại chế độ này. Chế độ nghỉ có thể
được kết thúc bởi một ngắt bất kỳ nào được phép hoặc bằng cách reset cứng.
Ta cần lưu ý rằng khi chế độ nghỉ được kết thúc bởi một reset cứng,
chip vi điều khiển sẽ tiếp tục bình thường việc thực thi chương trình từ nơi
chương trình bò tạm dừng, trong vòng 2 chu kỳ máy trước khi giải thuật reset
mềm nẵm quyền điều khiển.
5

b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45
Ở chế độ nghỉ, phần cứng trên chip cẫm truy xuất RAM nội nhưng cho
phép truy xuất các chân của các port. Để tránh khả năng có một thao tác ghi
không mong muốn đến một chân port khi chế độ nghỉ kết thúc bằng reset, lệnh
tiếp theo yêu cầu chế độ nghỉ không nên là lệnh ghi đến chân port hoặc đến bộ
nhớ ngoài.
I.2.2 ChÕ ®é ngn gi¶m
Trong chế độ này, mạch dao động ngừng hoạt động và lệnh yêu cầu chế
độ nguồn giảm là lệnh sau cùng được thực thi. RAM trên chip và các thanh ghi
chức năng đặc biệt vẫn duy trì các giá trò của chúng cho đến khi chế độ nguồn
giảm kết thúc. Chỉ có một cách ra khỏi chế độ nguồn giảm, đó là reset cứng.
Việc reset sẽ xác đònh lại các thanh ghi chức năng đặc biệt nhưng không
làm thay đổi RAM trên chip. Việc reset không nên xảy ra (chân reset ở mức
tích cực) trước khi Vcc được khôi phục lại mức điện áp bình thường và phải kéo
dài trạng thái tích cực của chân reset đủ lâu để cho phép mạch dao động hoạt
động trở lại và đạt trạng thái ổn đònh.
Trạng thái của các chân trong thời gian tồn tại chế độ nghỉ va chế độ
nguồn giảm được cho trong bảng sau:
Chế độ
Bộ nhớ
Chương trình
ALE PSEN PORT O PORT 1 PORT 2 PORT 3
Nghỉ Bên trong 1 1 Dữ liệu Dữ liệu Dữ liệu Dữ liệu
Nghỉ Bên ngoài 1 1 Thả nổi Dữ liệu Dữ liệu Dữ liệu
Nguồn Bên trong 0 0 Dữ liệu Dữ liệu Dữ liệu Dữ liệu
Bên ngoài 0 0 Thả nổi Dữ liệu Dữ liệu Dữ liệu
I.3 C¸c bÝt kho¸ bé nhí ch¬ng tr×nh
Trên chip có ba bit khoá, các bít này có thể không cho phép lập trình
hoặc cho phép lập trình, các bit này cho ta thêm một số đặc trưng nữa của
AT89C51 như sau.

6
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45
Khi bit khoá 1 LB1 được lập trình, mức logic ở chân
EA
được lấy mẫu
và được chốt trong khi reset. Nếu việc cấp nguồn cho chip không có công dụng
reset, mạch chốt được khởi động bằng một giá trò ngẫu nhiên và giá trò này
được duy trì cho đến khi có tác động reset. Điều cần thiết là giá trò được chốt
của
EA
phải phù hợp vơi mức logic hiện hành ở chân này.
Các bit khóa chương trình Loại bảo vệ
Chế
độ
LB1 LB2 LB3
1 U U U Không có đặc trưng khóa chương trình
2 P U U Các lệnh MOVC được thực thi từ bộ nhớ
chương trình ngoài không được phép tìm
nạp lệnh từ bộ nhớ nội,
EA
được lấy mẫu
và được chốt khi reset, hơn nữa việc lập
trình trên Flash bò cấm
3 P P U Như chế độ 2, cấm thêm việc kiểm tra
chương trình
4 P P P Như chế độ 3, cấm thêm việc thực thi
chương trình ngoài

7
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45

Ch¬ng 2:
bé nhí ngoµi (RAM, ROM) - c¸ch ghÐp víi VXL
I.4 Tỉ chøc bé nhí
AT89C51 có không gian bộ nhớ riêng cho chương trình và dữ liệu, cả hai
đều được đặt bên trong chip, ngoài ra ta có thể mở rộng bộ nhớ chương trình và
bộ nhớ dữ liệu bằng cách sử dụng các chip nhớ bên ngoài.
Kh«ng gian nhí ch¬ng tr×nh cđa AT89C51
B¶n th©n bªn trong chip vi ®iỊu khiĨn cã dung lỵng bé nhí ch¬ng tr×nh lµ
4K cã ®Þa chØ b¾t ®Çu tõ 0000h ®Õn 0FFFh. Khi më réng bé nhí ch¬ng tr×nh ngoµi
th× bé nhí bªn trong chip kh«ng ®ỵc sư dơng vµ kh«ng gian nhí ch¬ng tr×nh ngoµi
cã thĨ më réng tèi ®a tíi 64K b¾t ®Çu tõ ®Þa chØ 0000h tíi FFFFh.
Tóm tắt các không gian nhớ dữ liệu trong IC AT89C51
8
Bộ nhớ
chương
trình
được chọn
qua PSEN
FFFF
0000
Bộ nhớ
dữ liệu
được chọn
qua WR
và RD
FFFF
0000
FF
00
Bộ nhớ trên chip

Bộ nhớ mở rộng
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45
Hình vẽ trên cho ta thấy cấu trúc của không gian nhớ của AT89C51,
trong đó không gian nhớ nội được chia thành các dãy thanh ghi (00h-1Fh), vùng
RAM đònh đòa chỉ bit(20h-2Fh), vùng RAM đa mục đích (30h-7Fh) và các thanh
ghi chức năng đặc biệt(80h-FFh).
Bộ nhớ dữ liệu trên chip AT89C51
9
7F 7E
7D 7C 7B 7A
79
78
2F
77
76 75 74 73 72 71 70
2E
6F
6E
6D 6C 6B 6A
69
68
2D
67 66 65 64 63 62 61 60
2C
5F
5E
5D 5C 5B 5A
59
58
2B

57
56 55 54 53 52 51 50
2A
4F 4E
4D 4C 4B 4A
49
48
29
47
46 45 44 43 42 41 40
28
3F 3E
3D 3C 3B 3A
39
38
27
37
36 35 34 33 32 31 30
26
2F 2E
2D 2C 2B 2A
29
28
25
27
26 25 24 23 22 21 20
24
1F 1E
1D 1C 1B 1A
19 18

23
17
16 15 14 13 12 11 10
22
0F
0E
0D 0C 0B 0A
09
08
21
07 06 05 04 03 02 07
1
00
20
Bank 3
1F
18
Bank 217
10
Bank 10F
08
Bank thanh ghi 0
(mặc đònh cho R0-R7)
07
00
RAM đa dụng
7F
30
RAM
Đòa chỉ bit

Đòa chỉ
byte
87 86 85 84 83 82 81 80
80
P0
không được đòa chỉ hóa bit
81
SP
không được đòa chỉ hóa bit
82
DPL
không được đòa chỉ hóa bit
83
DPH
không được đòa chỉ hóa bit
87
PCON
8F 8E
8D 8C 8B 8A
89 88
88
TCON
không được đòa chỉ hóa bit
89
TMOD
không được đòa chỉ hóa bit
8A
TL0
không được đòa chỉ hóa bit
8B

TL1
không được đòa chỉ hóa bit
8C
TH0
97 96 95 94 93 92 91 90
90
P1
9F 9E
9D 9C 9B 9A
99 98
98
SCON
không được đòa chỉ hóa bit
99
SBUF
A7 A6 A5 A4 A3 A2 A1 A0
A0
P2
AF – – A
C
A
B
A
A
A9 A8
A8
IE
– – – BC BB BA B9 B8
B8
IP

E7 E6 E5 E4 E3 E2 E1 E0
E0
ACC
D7 D6 D5 D4 D3 D2 – D0
D0
PSW
B7 B6 B5 B4 B3 B2 B1 B0
B0
P3
F7 F6 F5 F4 F3 F2 F1 F0
F0
B
CÁC THANH GHI CHỨC NĂNG ĐẶC BIỆT
Đòa chỉ
byte
Đòa chỉ bit
không được đòa chỉ hóa bit
8D
TH1
FF
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45
II. Ghép nối với bộ nhớ ngoài
Các bộ vi điều khiển rất hiếm khi đước sử dụng giống như các CPU
trong các hệ máy tính, thay vào đó chúng được dùng làm thành phần trung tâm
trong các thiết kế hướng điều khiển, trong đó bộ nhớ có dung lượng giới hạn,
khắc phục nhược điểm này các bộ vi điều khiển đều được thiết kế để có khả
năng mở rộng các tài nguyên (bộ nhớ, I/O, .v.v. .).
Trong phần giới thiệu về AT89C51 ta thấy chỉ có 2 port 0 và port 2 làm
chức năng bus đòa chỉ vì vậy AT89C51 có thể mở rộng tối đa 64K bộ nhớ
chương trình và 64K bộ nhớ dữ liệu ngoài.

Để tiết kiệm các chân cho phép ta đóng gói bộ vi điều khiển trong vỏ 40
chân nên port 0 vừa là bus dữ liệu (D0-D7) vừa là bus đòa chỉ (A0-A7), kiểu
sắp xếp này được gọi là sắp xếp đa hợp.
Sắp xếp đa hợp hoạt động như sau: trong nửa chu kỳ đầu của chu kỳ bộ
nhớ, byte thấp của đòa chỉ được cung cấp bởi port 0 và được chốt nhờ tín hiệu
ALE. Trong nửa sau của chu kỳ bộ nhớ, port 0 được sử dụng làm bus dữ liệu
và dữ liệu được đọc hay ghi.
Ta sử dụng IC 73HC373 làm mạch chốt dữ liệu, giữ cho byte thấp của
bus đòa chỉ ổn đònh trong cả chu kỳ bộ nhớ
II.1 Bé nhí b¸n dÉn.
Cã hai lo¹i chÝnh lµ RAM vµ ROM. Riªng víi RAM l¹i cã 2 lo¹i lµ SRAM
(RAM tÜnh) vµ DRAM (RAM ®éng).
- Bé nhí chØ cã thĨ ®äc ROM (Read-Only-Memory) lµ lo¹i cã néi dung ®ỵc
viÕt s½n mét lÇn khi chÕ t¹o vµ ®ỵc gi÷ m·i cè ®Þnh (non volatile).
10
V+
Tin hiƯu
®Þa chØ
C¸c d©y bit (j cét)
C¸c d©y tõ
(i hµng)
1
1 1
1

0

0
0


0
0

g¶i

hµng
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
Tại các điểm vắt chéo nhau trên một ma trận các dây dẫn hàng (từ số liệu) và
cột (bit số liệu) nh hình vẽ trên nếu có diode thì sẽ mang thông tin là 0, các điểm
không chứa diode sẽ mang thông tin là 1. Khi đầu ra bộ giải mã địa chỉ ở mức thấp
chọn một hàng thì ở đầu ra các dây bit phản ánh các giá trị đợc lu trữ trong chip
nhớ. Trong hình vẽ trên lu trữ 3 từ nhớ là 010, 101 và 001.
Các chip PROM (Programmable) cho phép ngời lập trình có thể ghi thông tin
đợc 1 lần. Đó là loại ROM mà khi sản xuất, tất cả các điểm vắt chéo đều đặt một
một cầu chì nối tiếp với diode hoặc transistor. Khi cần ghi thông tin với mức logic
1 ở điểm vắt chéo nào chỉ cần cho dòng đủ lớn đi qua làm cháy đứt cầu chì tơng
ứng ở điểm đó.
Các chip nhớ EPROM (Erasable PROM) cho phép xóa đợc bằng tia cực tím và
EEPROM (Electricaly EPROM) cho phép xóa bằng điện.
Trong các chip nhớ này các transistor MOS cửa nổi đợc chế tạo theo công nghệ
FAMOST (Floating gate avalanche injection MOS transistor) nằm ở các điểm vắt
chéo trong ma trân các dây từ và dây bit. Trong ô nhớ này cực cửa đợc nối với đ-
ờng từ, cực máng nối với đờng bit và cực nguồn đợc nối với nguồn chuẩn (nguồn
cho mức logic 1). Nếu cửa nổi có các điện tử trong đó với điện tích âm, chúng sẽ
ngăn trờng điện điều kiển của cực cửa điều khiển và dù dây từ có đợc kích họat thì
cúng không thể phát ra trờng đủ mạnh với cực cửa điều kiển để làm thông
transistor. Lúc này đờng bit không đợc nối với nguồn chuẩn và ô nhớ coi nh giữ
giá trị 0. Việc nạp các điện tử vào vùng cửa nổi, tức là tạo ra các ô nhớ có giá trị 0,
đợc thực hiện bởi các xung điện có độ dài cỡ 50ms và độ lớn +20Vkhi đặt vào giữa
cực cửa và máng. Để xóa các thông tin, tức là làm mất các điện tích điện tử trong

vùng cửa nổi ta chiếu tia UV vào chip nhớ. Các điện tử sẽ hấp thụ năng lợng nhảy
lên các mức cao, và rời cửa nổi nh cách mà chúng đã thâm nhập vào đó. Với
EEPROM việc nạp điện tử tơng tự nh EPROM. Để xóa EEPROM, một lớp kênh
màng mỏng oxit giữa vùng cửa nổi trải xuống dới đế và cực máng đóng vai trò
quan trọng. Các lớp cách điện là không lý tởng, các điện tử có thể thấm qua lớp
phân cách với một xác suất thấp. Xác suất này sẽ tăng lên khi bề dày của lớp giảm
đi và điện thế giữa hai điện cực ở hai mặt tăng lên. Muốn phóng các điện tích trong
vùng cửa nổi, một điện thế (-20V) đợc đặt vào cực cửa điều khiển và cực máng.
Lúc này các điện tử âm trong cửa nổi đợc chảy về cực máng qua kênh màng mỏng
oxit và số liệu lu trữ đợc xóa.
Flash memory tơng tự nh EEPROM nhng Flash memory xóa tất cả tong
một lần trong khi EEPROM phải xóa từng bit một.
- Các chip RAM (Random Access Memory) là loại bộ nhớ có thể ghi/đọc đ-
ợc. Đây là loại bộ nhớ không cố định (volatile) tức là thông tin lu trữ trong nó
sẽ bị mất đi khi cắt nguồn điện nuôi. RAM bán dẫn có hai loại là SRAM
(Static RAM-Ram tĩnh) và DRAM (Dinamic RAM-Ram động).
Một ô nhớ SRAM lu trữ thông tin bởi trạng thái của một mạch lật (Flip-
flop) với đầu ra của nó ở một trong hai mức logic thấp. Thuật ngữ tĩnh chỉ ra
rằng khi nguồn nuôi cha bị cắt thì nội dung ô nhớ vẫn đợc giữ nguyên. Trong
khi đó, bộ nhớ DRAM lu trữ thông tin bằng mức điện áp trên một tụ điện có
11
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45
®iƯn dung C. Lỵng ®iƯn tÝch trªn tơ biÕn ®ỉi theo thêi gian do sù phãng hay n¹p
®iƯn qua c¸c ®iƯn trë khãa (cã gi¸ trÞ kh«ng thĨ b»ng v« cïng). V× vËy tht
ng÷ ‘®éng’ hµm ý r»ng mỈc dï cha c¾t ngn nu«i nhng vÉn ph¶i thêng xuyªn
phơc håi th«ng tin trong DRAM. Qu¸ tr×nh håi phơc ®ỵc gäi lµ ‘lµm t¬i’ « nhí.
Một vi mạch nhớ thường có cấu trúc bao gồm: nhóm tín hiệu đòa chỉ,
nhóm tín hiệu dữ liệu (data output/input), tín hiệu chọn vỏ, tín hiệu điều
khiển đọc/ghi
Mét sè hä IC nhí th«ng dơng:

Rom: Hä 28/27XXX (EPROMs) : 2704 (512K.8bit); 2708 (1K.8bit); 2716
(2K.8bit); 2732 (4K.8bit); 2764 (8K.8bit); 27128 (16K.8bit); 27256 (32K.8bit);
27512 (64K.8bit); 271024 (128K.8bit)
SRAM: TMS4016 (2K.8bit); 62256 (32K.8bit)
DRAM: TMS4464 (64K.4bit), 41256 (256K.1bit)
v.v. . .
HiƯn nay cßn cã bé nhí EPROM ghÐp nèi víi vi xư lý theo kiĨu nèi tiÕp (SÏ ®Ị
cËp tíi ë phÇn sau)
Cấu trúc tổng quát một vi mạch nhớ
12
Tín
hiệu
đòa
chỉ
A
1
D
0
A
2
D
2
A
3
D
3
.
.

.

.
A
n
D
m
WECSOE
Vào/ra
dữ
liệu
Chân
chọn vỏ
Đọc
Ghi
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45
Mỗi một mạch nhớ được phối ghép với chip cần phải được chip quy
chiếu tới một cách chính xác khi thực hiện các thao tác ghi/đọc. Điều đó có
nghóa là mỗi mạch nhớ phải được gán một vùng riêng biệt có đòa chỉ xác đònh
nằm trong không gian đòa chỉ tổng thể của bộ nhớ. Việc gán đòa chỉ cụ thể cho
mạch nhớ được thực hiện nhờ một xung chọn vỏ lấy từ mạch giải mã đòa chỉ.

Sơ đồ tổng quát ghép nối bộ nhớ ngoài với AT89C51
II.2 GhÐp nèi t¨ng dung lỵng bé nhí.
Các vi mạch nhớ có dung lượng cố đònh ví dơ 4K, 8K . v.v. . Vì vậy ta
phải ghép nối các vi mạch nhớ này một cách thích hợp để có được một bộ nhớ
ngoài theo đúng yêu cầu thiết kế. Có hai cách ghép nối chính để tăng dung
lượng bộ nhớ là ghép nối theo hàng dọc (tăng đầu vào đòa chỉ) và ghép nối
theo hàng ngang (tăng đầu ra dữ liệu).
- Ghép nối theo hàng ngang (tăng số bit dữ liệu)
Giả sử ta có một IC nhớ có dung lượng là 2
n

.m bit, muốn có một bộ nhớ
có dung lượng 2
n
.(km) bit ta ghép k IC nhớ 2
n
.m bit lµ ®ỵc víi ®iỊu kiƯn c¸c tÝn
hiƯu chän vá CS trªn k IC nhí ®ã ph¶i ®ỵc kÝch ho¹t ®ång thêi.
13
Tín hiệu điều khiển
AT89C51
Bộ
nhớù
A0-A7
Port 0 D0-D7
EA
74HC373
ALE
Port 2 A8-A15
O
G
D
k.m bit
. . .
Tín hiệu đk ghi/đọc
IC1
2
n
.m
ICk
2

n
.m
IC2
2
n
.m
Address Bus (A0-An-1)

CS
b¸o c¸o bµi tËp lín m«n Vi xư lý - nhãm I - Líp §T11.K45
- Ghép nối theo hàng dọc (tăng số bit đòa chỉ)
Giả sử ta có một IC nhớ có dung lượng 2
n
.m bit, muốn có một bộ nhớ có
dung lượng 2
n+k
.m bit ta ghép 2
k
IC nhớ 2
n
.m bit víi bé gi¶i m· ®Þa chØ cã k ®êng
®Þa chØ vµo chän 1 trong sè 2
k

®êng ra.
II.3 LËp tr×nh
Để vi xử lý có thể nhận biết và làm việc với bộ nhớ ngoài, khi lập trình
ta cần khởi tạo các giá trò các thủ tục cần thiết để giao tiếp với bộ nhớ ngoài.
Ví dụ đònh nghóa các chân điều khiển, thiết lập các chương trình con ghi đọc dữ
liệu .v.v . .

14
A
0
– A
n-1
A
0
– A
n+k-1
A
n
– A
n+k-1
y
2
k-1
y
1
y
0
Chọn vỏû
Tín hiệu đk ghi đọc
.
.
.
.
IC 1
2
n
.m

CE
IC 2
2
n
.m
CE
IC 2
k
2
n
.m
CE
Mạch
giải mã
đòa chỉ
m bit
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
Vớ duù gheựp noỏi AT89C51 vụựi SRAM 6264 (8Kx8)
15
b¸o c¸o bµi tËp lín m«n Vi xö lý - nhãm I - Líp §T11.K45
Chöông trình:
; Truy xuat bo nho du lieu ngoai su dung cong vao ra
SRAM_DATA DATA 30h ; SRAM Data
UART_BUSY BIT 00h ; UART Busy Flag
; Khoi tao
SRAM_ADDR EQU 0000h ; tu 0000 toi 1FFF voi 6264 ( 8Kx8)
;
; Dinh nghia cac chan
DATA_PORT EQU P0
LO_ADDR_PORT EQU P1

HI_ADDR_PORT EQU P2
SRAM_CS EQU P3.5
SRAM_WR EQU P3.6
SRAM_RD EQU P3.7
;
PROG EQU 0000h
ORG PROG+0000h
SJMP START
;Bang vecto ngat
ORG PROG+0003h
LCALL INT0_ISR ; Ngat ngoai 0
RETI
ORG PROG+000Bh
LCALL T0_ISR ; Ngat bo dinh thoi 0
RETI
ORG PROG+0013h
LCALL INT1_ISR ; Ngat ngoai 1
RETI
ORG PROG+001Bh
LCALL T1_ISR ; Ngat bo dinh thoi 1
RETI
ORG PROG+0023h
LCALL UART_ISR ; Ngat port noi tiep
RETI
;
ORG PROG+0030h ; Bat dau chuong trinh chinh
START:
MOV PCON,#10000000b ; Tang gap doi toc do baud
MOV TMOD,#00100001b ; Bo dinh thoi 1 o che do 2,Bo dinh thoi0 o che do 1
MOV TH1, #0FFh ; Toc do baud = 57600 bps voi thach anh 11.0592 (Byte cao bo dinh

thoi 1)
MOV SCON,#01010000b ; Che do 1 port noi tiep (khoi dong port noi tiep)
SETB ES ; Cho phep ngat do port noi tiep(IE.4)
SETB EA ; Cho phep ngat(IE.7)
SETB TR1 ; Khoi dong bo dinh thoi 1(TCON)
CLR UART_BUSY
; Vi du ghi bang chu cai A,B,C . . . vao RAM
MOV DPTR,#SRAM_ADDR
MOV SRAM_DATA,#'A'
Lap1: MOV A,SRAM_DATA
CALL SRAM_WRITE
16
b¸o c¸o bµi tËp lín m«n Vi xö lý - nhãm I - Líp §T11.K45
INC SRAM_DATA
MOV A,SRAM_DATA
CJNE A,#'Z'+1,INC_SRAM_ADDR
MOV SRAM_DATA,#'A'
INC_SRAM_ADDR:
INC DPTR
MOV A,DPH
CJNE A,#20h,Lap1
; Doc byte tu RAM ra roi gui toi port noi tiep
MOV DPTR,#SRAM_ADDR
Lap2: CALL SRAM_READ
MOV SRAM_DATA,A
WAIT_UART:
JB UART_BUSY,WAIT_UART
SETB UART_BUSY
MOV SBUF,SRAM_DATA
INC DPTR

MOV A,DPH
CJNE A,#20h,lap2
DONE: SJMP DONE
;
INT0_ISR:
RET
T0_ISR:
RET
INT1_ISR:
RET
T1_ISR:
RET
UART_ISR:
JB RI,RECEIVED
TRANSMITTED:
CLR UART_BUSY
CLR TI
RET
RECEIVED:
CLR RI
RET
; Thu tuc doc RAM
SRAM_READ:
MOV LO_ADDR_PORT,DPL
MOV HI_ADDR_PORT,DPH
MOV DATA_PORT,#0FFh
CLR SRAM_CS
CLR SRAM_RD
MOV A,DATA_PORT
SETB SRAM_RD

SETB SRAM_CS
RET
; Thu tuc ghi RAM
SRAM_WRITE:
MOV LO_ADDR_PORT,DPL
MOV HI_ADDR_PORT,DPH
CLR SRAM_CS
MOV DATA_PORT,A ; Thanh ghi A chua du lieu can ghi vao RAM
17
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
ngoai
CLR SRAM_WR
SETB SRAM_WR
SETB SRAM_CS
RET
END
II.4 Giới thiệu bộ nhớ EEPROM nối tiếp
Hiện nay bộ nhớ EEPROM trao đổi dữ liệu theo kiểu nối tiếp đợc ứng
dụng rất nhiều trong thực tế.
Để minh họa ta hãy xét một IC nhớ cụ thể loại này, đó là IC AT24C64 (64K
x 8) .
18
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
Mô tả hoạt động:
- Xung đồng hồ và truyền dữ liệu : Chân SDA bình thờng đợc kéo lên mức
cao với vai trò là thiết bị ngoài. Dữ liệu ở chân SDA đợc thay đổi khi
SCL ơ mức thấp. Nếu tín hiệu ở chân SDA thay đổi khi SCl ở mức cao sẽ
chỉ ra bít báo hiệu bắt đầu hay kết thúc việc trao đổi dữ liệu.
- Bít bắt đầu: Tín hiệu ở chân SDA chuyển từ cao xuống thấp khi SCl ở
mức cao sẽ là điều kiện để bắt đầu quá trình truyền dữ liệu

- Bít kết thúc: Tín hiệu ở chân SDA chuyển từ thấp lên cao khi SCl ở mức
cao là điều kiện báo hiệu kết thúc quá trình truyền dữ liệu.
- Bít báo hiệu chấp nhận trao đổi: Tất cả các địa chỉ và dữ liệu (8 bít) đều
truyền nối tiếp. EEPROM sẽ gửi bít 0 ở bít thứ 9 để xác nhận là đã nhận
đợc mỗi từ (8 bit)
Địa chỉ để xác định EEPROM gồm 8 bit trong đó 4 bít đâu đợc cố định
nh hình vẽ. Các bít A
0
, A
1
, A
2
sẽ đợc nối với đất nếu chỉ có một IC nhớ đợc
ghép nối với vi xử lý, nếu có nhiều IC nhớ thì các bit trên sẽ quy định vùng
nhớ cho mỗi IC nhớ. Bít cuối cùng quy định hoạt động đọc hay ghi.

Hoạt động ghi đợc bắt đầu khi có tín hiệu bắt đầu, tiếp đó là 8 bít địa
chỉ bít thứ 8 là 0 để báo hiệu ghi, sau khi xác nhận địa chỉ EEPROM đa ra
19
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
bit 0 bít xác nhận(coi nh là tín hiệu ngăn cách gia các phần). Dong bít tiếp
theo đa vào là địa chỉ phần cao phần thấp của dữ liệu sẽ ghi rồi mới đến dữ
liệu cần ghi, cứ sau 8 bít ROM đều đa ra bít xác nhận. Cuối cùng là tín hiệu
kết thúc.
Ta có thể ghi dữ liệu theo từng trang tức là bộ nhớ sẽ tự động tăng 1 ở địa
chỉ.
Hoạt động đọc cũng tơng tự hoạt động ghi, ta có thể đọc ngẫu nhiên,
đọc tuần tự, current address read.
Sơ đồ nối ghép dới đây ta ghép một IC AT24C64 với vi điều kiển AT89C51
nên các chân A

0
,A
1
, A
2
đều đợc nối với đất.
Chơng trình:
20
b¸o c¸o bµi tËp lín m«n Vi xö lý - nhãm I - Líp §T11.K45
PROG EQU 0000h
;
;Quy dinh cac chan
SEEPROM_SCL EQU P1.0 ; Xung dong ho
SEEPROM_SDA EQU P1.1 ; Du lieu noi tiep
;
; Khoi tao
SEEPROM_MADRS_LO DATA 30h ; Luu dia chi cao
SEEPROM_MADRS_HI DATA 31h ; Luu dia chi thap
SEEPROM_DATA DATA 32h ; Luu du lieu
SEEPROM_SBUF DATA 33h ; Dem port noi tiep
UART_BUSY BIT 00h ; Co bao port noi tiep ban
;
;
SEEPROM_DADRS EQU 0A0h
;
ORG PROG+0000h
SJMP START
; Bang vecto ngat
ORG PROG+0003h
LCALL INT0_ISR

RETI
ORG PROG+000Bh
LCALL T0_ISR
RETI
ORG PROG+0013h
LCALL INT1_ISR
RETI
ORG PROG+001Bh
LCALL T1_ISR
RETI
ORG PROG+0023h
LCALL UART_ISR
RETI
;
ORG PROG+0030h
START:
MOV TMOD,#00100001b ; Bo dinh thoi1 o che do 2, Bo dinh thoi 0 o che do 1
MOV TH1, #0FDh ; Toc do baud = 9600 bps voi thach anh 11.0592MHz
MOV SCON,#01010000b ; Port noi tiep o che do 1
SETB ES ; Cho phep port noi tiep ngat
SETB EA ; Cho phep ngat
SETB TR1 ; Khoi dong bo dinh thoi 1
CLR UART_BUSY
; Ghi bang chu cai A, B, C . . . vao bo nho
MOV SEEPROM_MADRS_HI,#00h
MOV SEEPROM_MADRS_LO,#00h
MOV SEEPROM_DATA,#'A'
LOOP_1: CALL SEEPROM_WRITE
INC SEEPROM_DATA
MOV A,SEEPROM_DATA

CJNE A,#'Z'+1,INC_MADRS_LO_1
MOV SEEPROM_DATA,#'A'
INC_MADRS_LO_1:
21
b¸o c¸o bµi tËp lín m«n Vi xö lý - nhãm I - Líp §T11.K45
INC SEEPROM_MADRS_LO
MOV A,SEEPROM_MADRS_LO
CJNE A,#00h,LOOP_1
INC_MADRS_HI_1:
INC SEEPROM_MADRS_HI
MOV A,SEEPROM_MADRS_HI
CJNE A,#20h,LOOP_1 ; Gioi han 8K voi AT24C64
; Doc byte tu bo nho roi gui ra port noi tiep
MOV SEEPROM_MADRS_HI,#00h
MOV SEEPROM_MADRS_LO,#00h
LOOP_2: CALL SEEPROM_READ
WAIT_UART:
JB UART_BUSY,WAIT_UART
SETB UART_BUSY
MOV SBUF,SEEPROM_DATA
INC_MADRS_LO_2:
INC SEEPROM_MADRS_LO
MOV A,SEEPROM_MADRS_LO
CJNE A,#00h,LOOP_2
INC_MADRS_HI_2:
INC SEEPROM_MADRS_HI
MOV A,SEEPROM_MADRS_HI
CJNE A,#20h,LOOP_2 ; 8K Limit for AT24C64
DONE: SJMP DONE
;

INT0_ISR:
RET
;
T0_ISR:
RET
INT1_ISR:
RET
T1_ISR:
RET
;
UART_ISR:
JB RI,RECEIVED
TRANSMITTED:
CLR UART_BUSY
CLR TI
RET
RECEIVED:
CLR RI
RET
;
SEEPROM_WRITE:
; Thu tuc ghi
; Dia chi IC : SEEPROM_DADRS
; Dia chi du lieu : SEEPROM_MADRS_HI and SEEPROM_MADRS_LO
; Du lieu : SEEPROM_DATA
; CY = 1 neu bus ban hay la IC bi loi khi xuat biet xac nhan.
; Thu lai neu CY = 1.
PUSH ACC
CALL SEEPROM_START
JC SEEPROM_WRITE_RET ; Bo neu bus

khong san sang
22
b¸o c¸o bµi tËp lín m«n Vi xö lý - nhãm I - Líp §T11.K45
MOV A,#SEEPROM_DADRS ; Dia chi IC
CLR ACC.0 ; Xac
dinh ghi du lieu
MOV SEEPROM_SBUF,A
CALL SEEPROM_SHOUT ; Gui dia chi IC
JC SEEPROM_WRITE_ERROR ; Bo neu
khong co bit xac nhan
MOV SEEPROM_SBUF,SEEPROM_MADRS_HI ; Phan cao dia chi
CALL SEEPROM_SHOUT ; Gui dia chi phan
cao
JC SEEPROM_WRITE_ERROR ; Bo neu
khong co bit xac nhan
MOV SEEPROM_SBUF,SEEPROM_MADRS_LO; Phan thap dia chi
CALL SEEPROM_SHOUT ; Gui phan thap
JC SEEPROM_WRITE_ERROR ; Bo neu
khong co bit xac nhan
MOV SEEPROM_SBUF,SEEPROM_DATA ; Du lieu
CALL SEEPROM_SHOUT ; Gui du lieu
JC SEEPROM_WRITE_ERROR ; Bo neu
khong co bit xac nhan
CLR C
; Xoa co bao loi
SEEPROM_WRITE_ERROR:
CALL SEEPROM_STOP
SEEPROM_WRITE_RET:
POP ACC
JC SEEPROM_WRITE ; Thu lai

neu loi
RET
;
SEEPROM_READ:
; Thu tuc doc
; Dia chi Ic : SEEPROM_DADRS
; Dia chi du lieu : SEEPROM_MADRS_HI and SEEPROM_MADRS_LO
; Du lieu : SEEPROM_DATA
; CY = 1 neu bus ban hay la IC bi loi khi xuat biet xac nhan.
; Thu lai neu CY = 1.
PUSH ACC
CALL SEEPROM_START
JC SEEPROM_READ_RET ; Bo neu bus chua
san sang
MOV A,#SEEPROM_DADRS
CLR ACC.0
MOV SEEPROM_SBUF,A
CALL SEEPROM_SHOUT
JC SEEPROM_READ_ERROR
MOV SEEPROM_SBUF,SEEPROM_MADRS_HI
CALL SEEPROM_SHOUT
JC SEEPROM_READ_ERROR
MOV SEEPROM_SBUF,SEEPROM_MADRS_LO
CALL SEEPROM_SHOUT
JC SEEPROM_READ_ERROR
CALL SEEPROM_START
JC SEEPROM_READ_RET
MOV A,#SEEPROM_DADRS
SETB ACC.0
MOV SEEPROM_SBUF,A

CALL SEEPROM_SHOUT
23
b¸o c¸o bµi tËp lín m«n Vi xö lý - nhãm I - Líp §T11.K45
JC SEEPROM_READ_ERROR
CALL SEEPROM_SHIN ; Nhan du lieu
CALL SEEPROM_NAK ; khong chap
nhan byte
MOV SEEPROM_DATA,SEEPROM_SBUF
CLR C

SEEPROM_READ_ERROR:
CALL SEEPROM_STOP
SEEPROM_READ_RET:
POP ACC
JC SEEPROM_READ ; thu lai
neu loi
RET
;
SEEPROM_START:
; Gui bit bat dau, xac dinh chuyen tu cao ve thap o SDA trong khi SCL cao.
; Quay lai SCL, SDA thap.
; Tro lai set CY neu bus ban.
SETB SEEPROM_SDA
SETB SEEPROM_SCL
JNB SEEPROM_SDA,SEEPROM_START_ERROR
JNB SEEPROM_SCL,SEEPROM_START_ERROR
NOP ; tre mot chu ky may
CLR SEEPROM_SDA
NOP
NOP

NOP
NOP
NOP
CLR SEEPROM_SCL
CLR C ;xoa co loi
SJMP SEEPROM_START_RET
SEEPROM_START_ERROR:
SETB C ; set co bao loi
SEEPROM_START_RET:
RET
;
SEEPROM_STOP:
; Gui bit bao hieu ket thuc, xacs dinh chuyen tu thap len cao o SDA khi SCL cao.
; Cho SCL thap de thu lai. Tro lai SCL, SDA cao.
CLR SEEPROM_SDA
NOP ; SCL low va thiet lap du lieu
NOP
SETB SEEPROM_SCL
NOP ; tre mot chu ky may
NOP
NOP
NOP
NOP
SETB SEEPROM_SDA
RET
;
SEEPROM_SHOUT:
; Gui den ROM cac bit bat buoc.
; Cho SCL, SDA thu lai. Tro lai SCL thap.
; Duoc goi voi du lieu gui vao thanh dem SEEPROM_SBUF.

; SET lai CY cho biet loi boi tin hieu xac nhan.
24
b¸o c¸o bµi tËp lín m«n Vi xö lý - nhãm I - Líp §T11.K45
PUSH ACC
PUSH B
MOV A,SEEPROM_SBUF
MOV B,#8 ; bit dem
SEEPROM_SHOUT_LOOP:
RLC A ; chuyen bit vao CY
MOV SEEPROM_SDA,C ; xuat bit
NOP ; lam cho SCL thap va thiet lap du
lieu
SETB SEEPROM_SCL ; phat xung
NOP ; lam cho SCL cao
NOP
NOP
NOP
CLR SEEPROM_SCL ; Giam xung
DJNZ B,SEEPROM_SHOUT_LOOP
SETB SEEPROM_SDA ; SDA for ACK
NOP ; lam cho SCL thap va tAA
NOP
SETB SEEPROM_SCL ; phat ACK clock
NOP ; lam cho SCL cao
NOP
NOP
NOP
MOV C,SEEPROM_SDA ; Nhan ACK bit
CLR SEEPROM_SCL ; Giam ACK clock
POP B

POP ACC
RET
;
SEEPROM_SHIN:
; Nhan vao bit bat buoc.
; SCL thap de thu lai. quay tro lai SCL thap.
; Nhan du lieu tu SEEPROM_SBUF.
PUSH ACC
PUSH B
SETB SEEPROM_SDA ; thiet lap SDA vao
MOV B,#8 ; bit dem
SEEPROM_SHIN_LOOP:
NOP ; Lam cho SCL thap va thiet lap du
lieu
NOP
NOP
SETB SEEPROM_SCL ; Phat clock
NOP ; Lam cho SCL cao
NOP
MOV C, SEEPROM_SDA ; bit vao
RLC A ; chuyen bit vao byte
CLR SEEPROM_SCL ; Giam clock
DJNZ B,SEEPROM_SHIN_LOOP
MOV SEEPROM_SBUF,A
POP B
POP ACC
RET
;
SEEPROM_NAK: ; Phu dinh xung xac nhan (cao).
; SCL thap de thu lai. Quay lai voi SCL thao, SDA cao.

SETB SEEPROM_SDA ; phu dinh bit xac nhan
25

×