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.12 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 trưng 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 nhưng 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à
3
báo cáo bài tập lớn mơn Vi xử lý - nhóm I - Lớp ĐT11.K45
kiểm tra chương trình.
- 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 laứ moọt xung ngoừ ra ủeồ choỏt byte thaỏp cuỷa ủũa chổ trong khi
truy xuaỏt boọ nhụự ngoaứi. Chãn naứy cuừng laứm ngoừ vaứo xung laọp trỡnh
(
PROG
) trong thụứi gian laọp trỡnh cho Flash.
Khi hoát o ng b nh th ng, xung ngo ra ALE luủ ọ ỡ ửụứ ừ ơn co tần soự ỏọ

khõng o i la 1/6 tần so cu a mách dao o ng, co the ùc du ng choủ ồ ứ ỏ ỷ ủ ọ ự ồ ủửụ ứ
ca c múch ch nh th i t bẽn ngoa iự ủớ ủũ ụứ ửứ ứ và táo xung clock. Tuy nhiẽn, l uử
y la mo t xung ALE se b bo qua trong mi mo t chu ky truy xua tự ứ ọ ừ ũ ỷ ọ ứ ỏ
bo nh d lie u ngoa i.ọ ụ ự ửừ ọ ứ
Khi cần, hoát o ng ALE co the ùc võ hie u hoa ba ng ca chủ ọ ự ồ ủ ửụ ọ ự ố ự
set bit 0 cu a thanh ghi ch c na ng a c bie t co a ch 8Eh. Khi bitỷ ửự ờ ủ ở ọ ự ủũ ổ
na y ùc ứ ủửụ set, ALE ch t ch c ùc trong th i gan th ùc hie n le nh MOVXổ ớ ử ụứ ử ọ ọ
hoa c MOVC. Ng ùc lái, chãn na y se ùc ke o lẽn cao. Vie c ở ửụ ứ ừ ủửụ ự ọ set bit
khõng cho phe p hoát o ng cho t byte tha p cu a a ch se khõng coự ủ ọ ỏ ỏ ỷ ủũ ổ ừ ự
ta c dúng ne u bo vi iều khie n ang che o th ùc thi ch ng tr nhự ỏ ọ ủ ồ ủ ụỷ ỏ ủ ọ ử ửụ ỡ
ngoa i.ứ
-
PSEN
(29)
PSEN
(Program Store Enable) la xung iều khie n truy xua t boứ ủ ồ ỏ ọ
nh ch ng tr nh ngoa i. Khi AT89C52 ang th ùc thi ch ng tr nh tụự ửụ ỡ ứ ủ ử ửụ ỡ ửứ
bo nh ch ng tr nh ngoa i, ọ ụự ửụ ỡ ứ
PSEN
ùc k ch hoát hai lần mi chu kyủửụ ớ ứ
ma y, nh ng hai hoát o ng ự ử ủ ọ
PSEN
se b bo qua mi khi truy ca p boừ ũ ỷ ọ ọ
nh d lie u ngoa 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) laứ chãn cho pheựp truy xuaỏt boọ nhụự
chửụng trỡnh ngoaứi (baột ủầu tửứ ủũa chổ tửứ 0000H ủeỏn FFFFH).
EA
= 0 cho pheựp truy xuaỏt boọ nhụự chửụng trỡnh ngoaứi, ngược lại
EA
=1 seừ thửùc thi chửụng trỡnh bẽn trong chip
Tuy nhiẽn, lửu yự raống neỏu bit khoaự 1 (lock-bit 1) ủửụùc laọp trỡnh,
EA
seừ ủửụùc choỏt bẽn trong khi reset.
Chãn naứy cuừng nhaọn ủieọn aựp cho pheựp laọp trỡnh Vpp=12V khi
laọp trỡnh Flash (khi ủoự điện aựp laọp trỡnh 12V ủửụùc chón).
- XTAL1 vaứ XTAL2
XTAL1 vaứ XTAL2 laứ hai ngoừ vaứo vaứ ra cuỷa moọt boọ khueỏch ủái
ủaỷo cuỷa mách dao ủoọng, ủửụùc caỏu hỡnh ủeồ duứng nhử moọt boọ dao
ủoọng trẽn chip.

Khõng coự yẽu cầu naứo về chu kyứ nhieọm vú cuỷa tớn hieọu xung
clock bẽn ngoaứi do tớn hieọu naứy phaỷi qua moọt flip-flop chia hai trửụực khi
ủeỏn mách táo xung clock bẽn trong, tuy nhiẽn caực chi tieỏt kyừ thuaọt về
thụứi gian mửực thaỏp vaứ mửực cao, ủieọn aựp cửùc tieồu vaứ cửùc ủái cần
phaỷi ủửụùc xem xeựt.
I.2 Các chế độ đặc biệt
I.2.1 Chế độ nghỉ
Trong cheỏ ủoọ nghổ, CPU tửù ủi vaứo tráng thaựi nguỷ trong khi taỏt
caỷ caực ngoái vi bẽn trong chip vn tớch cửùc. Cheỏ ủoọ naứy ủửụùc ủiều
khieồn bụỷi phần mềm. Noọi dung cuỷa RAM trẽn chip vaứ cuỷa taỏt caỷ caực
thanh ghi chửực naờng ủaởc bieọt vn khõng ủoồi trong khi thụứi gian tồn tái
cheỏ ủoọ naứy. Cheỏ ủoọ nghổ coự theồ ủửụùc keỏt thuực bụỷi moọt ngaột baỏt

kyứ naứo ủửụùc pheựp hoaởc baống caựch reset cửựng.
Ta cần lửu yự raống khi cheỏ ủoọ nghổ ủửụùc keỏt thuực bụỷi moọt reset
cửựng, chip vi ủiều khieồn seừ tieỏp túc bỡnh thửụứng vieọc thửùc thi chửụng
trỡnh tửứ nụi chửụng trỡnh bũ tám dửứng, trong voứng 2 chu kyứ maựy trửụực
khi giaỷi thuaọt reset mềm naỹm quyền ủiều khieồn.
5
báo cáo bài tập lớn mơn Vi xử lý - nhóm I - Lớp ĐT11.K45
ễÛ cheỏ ủoọ nghổ, phần cửựng trẽn chip cm truy xuaỏt RAM noọi
nhửng cho pheựp truy xuaỏt caực chãn cuỷa caực port. ẹeồ traựnh khaỷ naờng
coự moọt thao taực ghi khõng mong muoỏn ủeỏn moọt chãn port khi cheỏ ủoọ
nghổ keỏt thuực baống reset, leọnh tieỏp theo yẽu cầu cheỏ ủoọ nghổ khõng
nẽn laứ leọnh ghi ủeỏn chãn port hoaởc ủeỏn boọ nhụự ngoaứi.
I.2.2 Chế độ nguồn giảm
Trong cheỏ ủoọ naứy, mách dao ủoọng ngửứng hoát ủoọng vaứ leọnh
yẽu cầu cheỏ ủoọ nguồn giaỷm laứ leọnh sau cuứng ủửụùc thửùc thi. RAM
trẽn chip vaứ caực thanh ghi chửực naờng ủaởc bieọt vn duy trỡ caực giaự trũ
cuỷa chuựng cho ủeỏn khi cheỏ ủoọ nguồn giaỷm keỏt thuực. Chổ coự moọt
caựch ra khoỷi cheỏ ủoọ nguồn giaỷm, ủoự laứ reset cửựng.
Vieọc reset seừ xaực ủũnh lái caực thanh ghi chửực naờng ủaởc bieọt
nhửng khõng laứm thay ủoồi RAM trẽn chip. Vieọc reset khõng nẽn xaỷy ra
(chãn reset ụỷ mửực tớch cửùc) trửụực khi Vcc ủửụùc khõi phúc lái mửực
ủieọn aựp bỡnh thửụứng vaứ phaỷi keựo daứi tráng thaựi tớch cửùc cuỷa chãn
reset ủuỷ lãu ủeồ cho pheựp mách dao ủoọng hoát ủoọng trụỷ lái vaứ ủát
tráng thaựi oồn ủũnh.
Tráng thaựi cuỷa caực chãn trong thụứi gian tồn tái cheỏ ủoọ nghổ va
cheỏ ủoọ nguồn giaỷm ủửụùc cho trong baỷng sau:
Cheỏ
ủoọ
Boọ nhụự
Chửụng trỡnh

ALE PSEN PORT O PORT 1 PORT 2 PORT 3
Nghổ Bẽn trong 1 1 Dửừ
lieọu
Dửừ
lieọu
Dửừ
lieọu
Dửừ
lieọu
Nghổ Bẽn ngoaứi 1 1 Thaỷ
noồi
Dửừ
lieọu
Dửừ
lieọu
Dửừ
lieọu
Nguồn
giaỷm
Bẽn trong 0 0 Dửừ
lieọu
Dửừ
lieọu
Dửừ
lieọu
Dửừ
lieọu
Bẽn ngoaứi 0 0 Thaỷ
noồi
Dửừ

lieọu
Dửừ
lieọu
Dửừ
lieọu
6
báo cáo bài tập lớn mơn Vi xử lý - nhóm I - Lớp ĐT11.K45
I.3 Các bít khố bộ nhớ chương trình
Trẽn chip coự ba bit khoaự, caực bớt naứy coự theồ khõng cho pheựp
laọp trỡnh hoaởc cho pheựp laọp trỡnh, caực bit naứy cho ta thẽm moọt soỏ ủaởc
trửng nửừa cuỷa AT89C51 nhử sau.
Khi bit khoaự 1 LB1 ủửụùc laọp trỡnh, mửực logic ụỷ chãn
EA
ủửụùc
laỏy mu vaứ ủửụùc choỏt trong khi reset. Neỏu vieọc caỏp nguồn cho chip
khõng coự cõng dúng reset, mách choỏt ủửụùc khụỷi ủoọng baống moọt giaự
trũ ngu nhiẽn vaứ giaự trũ naứy ủửụùc duy trỡ cho ủeỏn khi coự taực ủoọng
reset. ẹiều cần thieỏt laứ giaự trũ ủửụùc choỏt cuỷa
EA
phaỷi phuứ hụùp vụi
mửực logic hieọn haứnh ụỷ chãn naứy.
Caực bit khoựa chửụng trỡnh Loái baỷo veọ
Cheỏ
ủoọ
LB1 LB2 LB3
1 U U U Khõng coự ủaởc trửng khoựa chửụng trỡnh
2 P U U Caực leọnh MOVC ủửụùc thửùc thi tửứ boọ
nhụự chửụng trỡnh ngoaứi khõng ủửụùc
pheựp tỡm náp leọnh tửứ boọ nhụự noọi,
EA

ủửụùc laỏy mu vaứ ủửụùc choỏt khi
reset, hụn nửừa vieọc laọp trỡnh trẽn Flash
bũ caỏm
3 P P U Nhử cheỏ ủoọ 2, caỏm thẽm vieọc kieồm
tra chửụng trỡnh
4 P P P Nhử cheỏ ủoọ 3, caỏm thẽm vieọc thửùc thi
chửụng trỡnh ngoaứ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ớ ngồi (RAM, ROM) - cách ghép với VXL
I.4 Tổ chức bộ nhớ
AT89C51 coự khõng gian boọ nhụự riẽng cho chửụng trỡnh vaứ dửừ
lieọu, caỷ hai ủều ủửụùc ủaởt bẽn trong chip, ngoaứi ra ta coự theồ mụỷ roọng
boọ nhụự chửụng trỡnh vaứ boọ nhụự dửừ lieọu baống caựch sửỷ dúng caực
chip nhụự bẽn ngoaứ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
ngồi thì bộ nhớ bên trong chip khơng được sử dụng và khơng gian nhớ chương
trình ngồi có thể mở rộng tối đa tới 64K bắt đầu từ địa chỉ 0000h tới FFFFh.
Toựm taột caực khõng gian nhụự dửừ lieọu trong IC AT89C51
Hỡnh veừ trẽn cho ta thaỏy caỏu truực cuỷa khõng gian nhụự cuỷa
8
Boọ nhụự
chửụng
trỡnh
ủửụùc
chón

qua PSEN
FFFF
0000
Boọ nhụự
dửừ lieọu
ủửụùc
chón
qua WR
vaứ RD
FFFF
0000
FF
00
Boọ nhụự trẽn
chip
Boọ nhụự mụỷ
roọng
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
AT89C51, trong ủoự khoõng gian nhụự noọi ủửụùc chia thaứnh caực daừy thanh
ghi (00h-1Fh), vuứng RAM ủũnh ủũa chổ bit(20h-2Fh), vuứng RAM ủa muùc
ủớch (30h-7Fh) vaứ caực thanh ghi chửực naờng ủaởc bieọt(80h-FFh).
Boọ nhụự dửừ lieọu treõ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 31F

18
Bank 217
10
Bank 10F
08
Bank thanh ghi 0
(maởc ủũnh cho R0-R7)
07
00
RAM ủa duùng
7F
30
RAM
ẹũa chổ
bit
ẹũa chổ
byte
87 86 85 84 83 82 81 80
80
P0
khoõng ủửụùc ủũa chổ hoựa
bit
81
SP
khoõng ủửụùc ủũa chổ hoựa
bit
82
DPL
khoõng ủửụùc ủũa chổ hoựa
bit

83
DPH
khoõng ủửụùc ủũa chổ hoựa
bit
87
PCON
8F 8E
8D 8C 8B 8A
89 88
88
TCON
khoõng ủửụùc ủũa chổ hoựa
bit
89
TMOD
khoõng ủửụùc ủũa chổ hoựa
bit
8A
TL0
khoõng ủửụùc ủũa chổ hoựa
bit
8B
TL1
khoõng ủửụùc ủũa chổ hoựa
bit
8C
TH0
97 96 95 94 93 92 91 90
90
P1

9F 9E
9D 9C 9B 9A
99 98
98
SCON
khoõng ủửụùc ủũa chổ hoự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
CAÙC THANH GHI CHệÙC NAấNG ẹAậC
BIEÄT
ẹũa chổ
byte
ẹũa chổ
bit
khoõng ủửụùc ủũa chổ hoự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. Gheựp noỏi vụựi boọ nhụự ngoaứi
Caực boọ vi ủiều khieồn raỏt hieỏm khi ủửụực sửỷ dúng gioỏng nhử
caực CPU trong caực heọ maựy tớnh, thay vaứo ủoự chuựng ủửụùc duứng laứm
thaứnh phần trung tãm trong caực thieỏt keỏ hửụựng ủiều khieồn, trong ủoự
boọ nhụự coự dung lửụùng giụựi hán, khaộc phúc nhửụùc ủieồm naứy caực boọ
vi ủiều khieồn ủều ủửụùc thieỏt keỏ ủeồ coự khaỷ naờng mụỷ roọng caực taứi
nguyẽn (boọ nhụự, I/O, .v.v. .).
Trong phần giụựi thieọu về AT89C51 ta thaỏy chổ coự 2 port 0 vaứ port
2 laứm chửực naờng bus ủũa chổ vỡ vaọy AT89C51 coự theồ mụỷ roọng toỏi ủa
64K boọ nhụự chửụng trỡnh vaứ 64K boọ nhụự dửừ lieọu ngoaứi.
ẹeồ tieỏt kieọm caực chãn cho pheựp ta ủoựng goựi boọ vi ủiều khieồn
trong voỷ 40 chãn nẽn port 0 vửứa laứ bus dửừ lieọu (D0-D7) vửứa laứ bus ủũa

chổ (A0-A7), kieồu saộp xeỏp naứy ủửụùc gói laứ saộp xeỏp ủa hụùp.
Saộp xeỏp ủa hụùp hoát ủoọng nhử sau: trong nửỷa chu kyứ ủầu cuỷa
chu kyứ boọ nhụự, byte thaỏp cuỷa ủũa chổ ủửụùc cung caỏp bụỷi port 0 vaứ
ủửụùc choỏt nhụứ tớn hieọu ALE. Trong nửỷa sau cuỷa chu kyứ boọ nhụự, port 0
ủửụùc sửỷ dúng laứm bus dửừ lieọu vaứ dửừ lieọu ủửụùc ủóc hay ghi.
Ta sửỷ dúng IC 73HC373 laứm mách choỏt dửừ lieọu, giửừ cho byte
thaỏp cuỷa bus ủũa chổ oồn ủũnh trong caỷ chu kyứ boọ 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

Bộ
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 lưu trữ trong chip
nhớ. Trong hình vẽ trên lưu 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 lưu trữ được xóa.
Flash memory tương tự như EEPROM nhưng 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 lưu 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 lưu 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 chưa bị cắt thì nội dung ô nhớ vẫn được giữ nguyên.
11
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
Trong khi đó, bộ nhớ DRAM lưu trữ thông tin bằng mức điện áp trên một tụ
điện có đ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 thuật ngữ ‘động’ hàm ý rằng mặc dù chưa cắt nguồn nuôi nhưng 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ớ.
Moọt vi maùch nhụự thửụứng coự caỏu truực bao goàm: nhoựm tớn hieọu
ủũa chổ, nhoựm tớn hieọu dửừ lieọu (data output/input), tớn hieọu choùn voỷ,
tớn hieọu ủieàu khieồn ủoù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)
Caỏu truực toồng quaựt moọt vi maùch nhụự
12
Tớn
hieọu
ủũa
chổ
A
1
D
0
A
2
D
2
A
3
D
3
.
.

.
.

A
n
D
m
WECSOE
Vaứo/r
a dửừ
lieọu
Chaõn
choùn
voỷ
ẹoùc
Ghi
báo cáo bài tập lớn mơn Vi xử lý - nhóm I - Lớp ĐT11.K45
Mi moọt mách nhụự ủửụùc phoỏi gheựp vụựi chip cần phaỷi ủửụùc
chip quy chieỏu tụựi moọt caựch chớnh xaực khi thửùc hieọn caực thao taực
ghi/ủóc. ẹiều ủoự coự nghúa laứ mi mách nhụự phaỷi ủửụùc gaựn moọt
vuứng riẽng bieọt coự ủũa chổ xaực ủũnh naốm trong khõng gian ủũa chổ toồng
theồ cuỷa boọ nhụự. Vieọc gaựn ủũa chổ cú theồ cho mách nhụự ủửụùc thửùc
hieọn nhụứ moọt xung chón voỷ laỏy tửứ mách giaỷi maừ ủũa chổ.

Sụ ủồ toồng quaựt gheựp noỏi boọ nhụự ngoaứi vụựi AT89C51
II.2 Ghép nối tăng dung lượng bộ nhớ.
Caực vi mách nhụự coự dung lửụùng coỏ ủũnh vớ dụ 4K, 8K . v.v. . Vỡ
vaọy ta phaỷi gheựp noỏi caực vi mách nhụự naứy moọt caựch thớch hụùp ủeồ
coự ủửụùc moọt boọ nhụự ngoaứi theo ủuựng yẽu cầu thieỏt keỏ. Coự hai caựch
gheựp noỏi chớnh ủeồ taờng dung lửụùng boọ nhụự laứ gheựp noỏi theo haứng
dóc (taờng ủầu vaứo ủũa chổ) vaứ gheựp noỏi theo haứng ngang (taờng ủầu ra
dửừ lieọu).
- Gheựp noỏi theo haứng ngang (taờng soỏ bit dửừ lieọu)

Giaỷ sửỷ ta coự moọt IC nhụự coự dung lửụùng laứ 2
n
.m bit, muoỏn coự
moọt boọ nhụự coự dung lửụùng 2
n
.(km) bit ta gheự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 hieọu ủiều
khieồn
AT89C51
Boọ
nhụựự
A0-A7
Port 0 D0-D7
EA
74HC373
ALE
Port 2
A8-A15
O
G
D
k.m bit
. . .
Tớn hieọ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
- Gheựp noỏi theo haứng dóc (taờng soỏ bit ủũa chổ)
Giaỷ sửỷ ta coự moọt IC nhụự coự dung lửụùng 2
n
.m bit, muoỏn coự moọt
boọ nhụự coự dung lửụùng 2
n+k
.m bit ta gheự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
ẹeồ vi xửỷ lyự coự theồ nhaọn bieỏt vaứ laứm vieọc vụựi boọ nhụự ngoaứi,
khi laọp trỡnh ta cần khụỷi táo caực giaự trũ caực thuỷ túc cần thieỏt ủeồ giao
tieỏp vụựi boọ nhụự ngoaứi. Vớ dú ủũnh nghúa caực chãn ủiều khieồn, thieỏt
laọp caực chửụng trỡnh con ghi ủóc dửừ lieọ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 voỷỷ
Tớn hieọ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
giaỷi
maừ
ủũ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
INC SRAM_DATA
16
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
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
ngoai
17
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
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.

19
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
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
bit 0 bít xác nhận(coi như là tín hiệu ngăn cách giưa 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.
20
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:
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
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_DATA
MOV A,SEEPROM_DATA
CJNE A,#'Z'+1,INC_MADRS_LO_1
MOV SEEPROM_DATA,#'A'
INC_MADRS_LO_1:
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
22

báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
; 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
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
23
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
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
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
24
báo cáo bài tập lớn môn Vi xử lý - nhóm I - Lớp ĐT11.K45
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.
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
25

×