Tải bản đầy đủ (.pdf) (40 trang)

Cấu trúc lập trình ghép nối và ứng dụng vi điều khiển tập 2

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 (8.86 MB, 40 trang )



B ả n (Ịuyến thuộc HEVOBCO - K hà xuất b ản Giáo dục
1 7 -2 00 7/C X B /7 2-2 21 7/(;i)

Mã sô': 7B 6G lM '-]D A I


LỜI NĨI ĐẦU
f)áy là lập hai cìia bộ sách ‘‘Cấu Iriic, lập trình, ghép nổi và ứng dụng vi diều khiển". Tài liệu
này giới thiệu về ghép nối với các ihiếl bị ngồi (hiến ihị, bàn phím, nhớ ngồi, cổng mở rộng (song
song và nổi íiếp)) và các hệ VDK dùng Irong do lường, điều khiển lự động và truyền thơng.
Tìcp theo lập một, ĩập hai gổin 8 chương. Trong mỗi chươỉig, đều có mơ tả các thiết bị ngồi,
cách glìCỊ') noi và lập trình \’ới các ví dụ dể chạy thử mơ phỏng Irên PINNAQ-E và PROTEUS.
('liuoỉiíỊ II (ỉliép nối và ứng dụnu dèn LED.
('htioỉỉ^ 12 Cìhép nối \ à ihm dụnu dèn LHD ma trận.
CliưííỊio 13 Ghép nối với màn hình tinh ihè long (LCD).
Chưìíỉ 14 Ghép nối với bàn phím.
Chương í 5 Ghép nối với bộ nhớ ngồi của vi diều khiển 8051/8052.
Clií('Chưong 17 Ghép nối mở rộng cổnụ nui liếp cho vi diều khiển.
Chưoỉỉg 18 Ghép nới với hệ \'i diều khiển.
lYong lài liệu này cĩmg giới thiệu cách dùng phần mềm Proieus trong thiết kế ahư vẽ sơ đồ
nguyên lý cua hộ VĐK, trong chạy mố phịng các ví dụ với lệp di .HEX sau khi hợp dịch và chạy
niò phỏng (ùrng bước và ca chương irình) trên Proteus.
'lai liệu dược biên soạn lìr cơ bản tới chuyên sâu, cho người lự học, công nhân học nghề, sinh
\'\cn cao dáng, dại liọc, cao học và nhà nghiên cứu trong các lĩnh vực lự dộng hoá, diện lử, vật lý kỹ
thuài. cơ tin và thịng tin.
Tùy Irìnli dộ và mục dícli sử dụng, người dọc có thể bỏ qua hay chi chú ý lới phần mình quan
tâm. Vi trong ilìời dại ihơng lin, rnọi người có thc truy cặp mạng Inlcrnct, nẽn cách trình bày chỉ tóm
lắi ý chính \'à cơ bản, người dọc có thc tra cứu ihêm về các vi mạch và ứiig dụng trên mạng Internet.


'Tac gia xin châiì thành cám ơn các Ban lãnh dạo, các đổng nghiệp ở 1'rirờng Đại học lìách
Khoa lỉà Nội, Đại học Sư phạm Kỹ ihuậi Nam Định, Viện Nghiên cứii Kỹ thuật hạt nhân Hà Nội,
iKti lác giả dã cơiìiỉ tác và cộng lác vổ sự khích lệ\ cung cấp lài liệu và irao clổi chuyên môn.
Tác giá xin chân ihành cảm CTII Ban Giám đốc, Ban lãnh đạo Công ly cổ phần Sách Đại họcDav nghé cúa Nhà xuat ban Giáo dục dã giúp đỡ clế tài liệu sớm ra mắl bạn đọc.
'lac gia mong dược bạn dọc góp ý cho tài liệu được hồn thiện hơn. ITiư góp ý xin gửi về Công
ly Co phần Sikh Đại học - Dạy nghề (HEVOBCO), Nhà xuất bủn Giáo dục, 25 Hàn ITiuyên, Hà
Nội, điện íhoại 04 8.264974.

TÁC GIẢ


CHƯƠNG

11
Mục

ảich của

ý

GHÉP NỐI VÀ ÚNG DỤNG ĐÈN LED

chương:

Hiểu được nguyên tắc hoạt động, cách mắc và lập trình cho các đèn hiển thị LED đơn.
- Hiểu được nguyên tắc hoạt động, cách mắc và lập trinh cho các đèn hiển thị LED 7 đoạn.

T ong quá trình sử dụng thiết bị sơ, trong dó có máy vi lính, vi xử lý, vi điều khiển,
chúng ta cần nhìn thây được nội dung của dữ liệu (địa chỉ, dừ liệu, mã lệnh) dưối dạng các
con sctự n hi6n (0, 1, 2, 3, 4, 5, 6 , 7, 8, 9) hay các chữ cái (a, b, c, d,... z).

C) các loại hiển thị sau:
-Đ èn nóng sáng d â y tóc th ế nuôi thấp (5V) hay đèn diot p h á t quang: khi có dịng điện
nhỏ ckạy qua (cở mA). Loại LED đơn này đơn giản, rẻ tiền, nhưng chỉ biểu diễn nội dung
từng kit có giá trị 0 (tắt) hay 1 (sáng). Nếu nhiều bit, các đèn này biểu diễn th àn h các sơ"
nhị plân, khó hình dung th àn h các sô" thập phân.
-Đ è n diot (LED) 7 đoạn (thanh): (a, b, c, d, e, f, g) bơ' trí thành hình chữ sơ' 8*Tuỳ các
thanh sáng (có dịng điện chạy qua), ta có các chữ sơ'' hay chữ khác nhau. Có hai loại diot là:
^ A n ô t chung: Các anôt nô"i với nhau và nôì vói nguồn ni sẽ p h á t sán g khi các katôt
riêng rẽ của từng th a n h có mức logic 0.
-\-Katồt chung: Các katơt nối với nhau và nôi vỏi đất chung, sẽ p h á t sán g khi các anôt
riêng rẽ của từng th a n h có mức logicvl.
ỈỂĨI LKl) 7 th a n h này hiển thị trực giác được các chữ sô' và các ký tự, như ng có nhược
điểm là phải giải mã (bàng vi mạch, ví dụ 7147 hay bằng chương trình) th à n h các con sơ'
dạng 3CD (ỉìinary Coded Decimal- sơ^ thập phân mã hố thành dạng nhị phân).
-Đ èn LED nhiều đoạn: Các đoạn được bô^ Irí theo các đường ngang, dọc và chéo của 4
hình íhữ n h ậ t ghép lại. Loại này biểu diễn được chữ và con số một cách tin h t ế hơn LED 7
đoạn ih ư n g đắt tiền và điểu khiển phức tíiỊ).

-Đ èn m a trận diot (ma trận LED): Gồm nhiều diot có kích Uiưổc rất nhỏ (coi như một
điểm) sắp xếp th à n h các ma trận 5 x 7 theo 7 hàng và 5 cột. Cũng có các loại anơt chung
hay kitơt chung như đồn LED 7 đoạn. Tuỳ điểu khiển các dòng điện chạy qua, các diot
điểm này phát sáng, tạo th àn h các diểm của bức tranh của các con số* th ậ p phân hay các
chữ a b, c, d,... z. Đèn ma trận diot này biểu diễn đẹp các chữ hay sô' n hư ng đ ắt tiền, phải
xác ánh các mã của chữ hay sô^ theo từng ma trận với các hcàng và cột và đưa ra biểu diễn
với tơ* độ thích hỢp với m ắt ngưịi để qvian sát.
-M à n hình tinh th ể lỏng LCD (Liqiiit Crystal Diot): gồni nhiều diot trong một khơi
tinh thể lỏng (thường có hai hàng, nhiều cột). LCD này có ngun tắc sáng íốì tương tự ma
trậ n iiot, có thể biểu diễn được các số, chữ và hình ảnh (graph). Loại LCD thơng minh này
có ưudiểm hơn LED 7 đoạn là biổu diỗn các chữ giông chữ in, hình ản h rõ nét, có độ phân
g i ả i CIO.




tliili 1 1.2 giới Ihiệu ba loại 1jRD: loại p l ì a t ( Ị u a i i g , l o ạ i c h i thị trịn và loại thanh. Vi
mạch 1M3914 có Irẽn hình 11.2 là vi mạch d i é u k h i c ĩ ì L K l ) CƠII^' s u ấ t .
11.1.3.Lập trình điểu khiển LED rời
Nc chung, các đèn hiển thị LED rời có llìê ĩììắc vối cống PO, IM, P2 và P3 của vi điểu
khiển '/ĐK) ihuộc họ MCS - 51. Có thể mắc trực ticp hay (Ịua riìột điện trở h ạn chế dịng
ảìện hậc một cổng logic để tảng cơng s't.
Vídụ 11. la giối thiệu chương trình đưa dữ liệu cị^ dịnh ra các cổng Pi dùng lệnh gộp
< 1, 2 > vối ;
"hông sô^ 1 là giá trị của dữ liệu (dạng HKX) dưa vào thanh ghi chứa A.
- ''hỏiig sô^ 2 là chỉ sơ^ của cổng VĐK.
Plin sau của chương trình trên làni dỏn LK13 sáng dần từ Ị ) h ả i qua trá i (dùng lệnh
RLC A cho tỏi khi c ” 1. Có thể thay lệnh RLC A bàng lộnh 1{1. A dổ dịch và lặp lại một sô'
lần (Ihy bằng lệnh MOV RO, #N lần và DJNZ RO, 1AP).
Vidụ 11. Ib là chương trình của ví dụ 11.la dạng đi. l.ST sau khi hỢp dịch trong
PINN.CLE.
Ti ví dụ trên, ta có thể viết chương trình cho LED đơn sáng dần dịch về bên phải
(dùng ậnh RRC A) hay bên trái (dùng lệnh RLC A).
; Ví d 11,1 a: Chương trình dùng
macr(@\VritePs <1,2>
mov a, #11 mov Í*I2, a
enclmc
ORGOOH
@\VritePs 55h, 0
call delay
@WritcPs OAAh, 1
call clelay
@WiitcPs OOh, 2

call delay
@WritePs Olh, 3

lênh gộp hiển thị trên Ll-D rời
lap:
; lệnh gộp ghi dữ liéu
; dữ liệu
; ghi ra cổng PI2
; kết thúc lệnh gộp
; ghi 55h ra po
; ghi OAah ra P1
; ghi OAah ra P 1

call dclay
rỉc a
lĩiov
a
jnc lap
sịnip $ ; kết thúc chờ
delay; mov 1-0, #250
dell: inov 11, #200
del2: dịnz rỉ, del2
djnz lO, dell
rut
end

; ghi OAah ra P1


; Ví (1 11. Ib; Dạng đi. LST cùa chương trình dùng lệnh gộp hiển thị trên I.El) cỉơn .

1 (XX)
6 (XX)
ORG OOH
7 000 MACLEVEL 00017
000
mov a. #55h
7 002
mov PO. a
7 004 MACLEVEL 0000
8 004
call delay
9 007 MACLEVEL 0002
9 007
nnov a, #OAAh
9 009
mov p 1, a
9 OOB MACLEVEL 0000

; VÍ dụ 11. la. LHĐR, hiến thị trcn LHD rời

; dữ liệu
; ghi ra cổng TO

; dữ liệu
; ghi ra cổng Pỉ
.


10
11

11
11
11
12
13
13
13
13
14
15
16
17
18
19
20
21
22
23

OOOB
call dclay
OOOE MACLEVIÍL 0003
OOOE
mov a. #()()h
0010
movP2, a
0012 MACLEVBL (XXX>
0012
calldclay
0015 MACLEVIÍL 0004

0015
mova. #01h
0017
movP3. a
0019 MACLEVEL oooc I
0019 lap: call delay
OOIC
rica
00ID
movP3, a
001F
nclap
0021
sjmp$
0023 delay; mov rO, #250
0025 dell:m ovrl, #200
0027del2;djnzrl,del2
0029
djnzK), dcll
002B
ret

: dữ liẹii
; ịilii ra cciiiíi P2

; tiữ liệu
; ghi ra cong P3

kèt thúc chờ


11.1.4. Lập trinh điểu khiển LED rời trong các biển quảng cáo
'Vối ví dụ 11.1 trên, chúng la có thể vièt chương t n n h đưa hiên thị như mong mucn:
- Cho tấ t cả các đén nôi vâi inột cổng nào dó sáng khi dưa A = #OFFh.
- Cho mỗi đèn sáng lần lượt từ trái qua phải dùiig lệnh SE'PB c và dịch phải qi:a c vối
lệnh RRC A.
- Cho mỗi đèn sáng lẩn lượt từ phải qua trái dùng lệnh SET15 c và (iịch trái qua 'C với
lệnh RLCA.
- Cho hai đèn sáng dồn từiiíĩ dèii từ bai dau vào giũa vớì các giá trị dưa trực tiêip vào
thanh ghi A n h ư 1000000115. OlOOOOlOH, 00l()()10015, OOOl lOOOB.
- Cho các đèn sáng vlồn lừ hai dầu vàu giữa VỨI các giá t rị A !à lOOOOOOlB, 1 lOCOOl IB,
lllO O lllB ,llllllllB ,
- Cho các đèn sáng dồii tù Riữa ra liai cliìu vỏi các giá trị A là OOOnOOOB, OOlllllOOB,
O llllllO B , l l l l l l l l R .
Có ba cách viêt chương tiìnli hiển thị dộiig (dèii sáng chạy) tièii các LED của các- biển
quảng cáo là:
- Đưa các giá trị (0 cho uit và 1 cho sáng) ti iíc tiêp ra các cổng.
- Thành lập một b ảng dữ liệu, rồi đọc bàng đổ đưa ra cổng (ví dụ 11.2).
- Dùng lệnh logic và vịng lặ|) (ví dụ 11.1 và ví dụ 11.3), cịn có thể dùng lệnh ORL>.
; Ví du 11.2; Chương trình sán.íz dón vào piữa
org OOh
Ib:
mov dptr, #bvi!iiĩ
Ibl:
mova, #00h
movc a, @ a+clpir
8

; Ví du 11.3: Chương irình sáng dồn 16 bit
macro @san^dori <1.2, 3>
mov K). #lh

mov r2, #01h
mov plL #f2


mov pO, a
ỉcall delay
inc dptr
cjne a, #Offli, Ibỉ
sjmp Ib
(lelay:
inov r7, #25
nhanO:
mov R6 , #20
ĩiliím 1:
inov r5, #250
djnz r5, s
djnz 1'6 , n h a n l
djĩiz r7, nhanO
rel
hang: DB (XXX)OOOOB
DB 1000000IB
DB ỉ 100001IB
I)B lllO O lllB
DB l l I l l i l l B
DBOOOllOOOB
DBOOIlllOOB
D B O lliilỉO B
DB l l l l ỉ l l l B
DB (X)OOOOOOB
end


hay OOH
hay 81H
hay 0C3H
hay 0H7H
hay OPTH
hay 18H
hay 3CH
hay 7EH
hay 0FF1I
hay 001 ỉ

mov pl3, r2
kip!4: acall deỉíiy
niov a, K)
ri a
mov rO, a
acid a. r2
mov r2, a
mov pl3, a
acaỉl deỉay
mov a. r2
cjne a, #Orni, lap!4
cndinac

org OOh
! main: @sangdon 0, OOh, 2, 1
((i sangdon 2, Offh, 0, 2
@sangdon 2, OOh, 0, 3
sangdon 0, Ofíli, 2, 4

ljmp main
delay: mov xl, #25
nhanO: mov r6. #20
nhanl: mov r5, #250
djnz r5, s
djnz r6, nhanl
djnz r7, nhanO
rei
cnd

sáng cổng
sáng cổng
sáng cổng
sáng cổng

P2
PO
PO
P2

Trong ba cách trôn, cách đưa dử liộu Irực tiô'p khôiig thể dùng cho một bảng dữ liệu
dài. Cách dùng báng là thông dụng nhất, cho mỗi trường hỢp, nhất là cách hiển thị khó,
khơng có giải th u ậ t xuc định. Cách dùng lộnh vỏi giải th u ật dôi khi ngắn gọn. Hiển thị dồn
(sang ti’ái hay sang phải). Cịn có giải thuật khác là dùng lộnh logic ORL giá trị đưa ra
hiến thị cù xO và giá trị dịch một bit yO (bởi lệnh SETB c và RLC A).
Địn liEI) rời trên, ngồi chỉ thị íỊÌá tri của thanh ghi hay ơ ĩihớ của VĐK, cịn hay
dùng (iổ quảng cáo hay điểu khiển dỏn giao thòng tại các ngả dường. Khi đó, phải mắc đèn
cơn^ st lớn với các tần g khưẽch dại cơíìg suất dùng tranzit() cỏiig sXt.
Các chương trìn h trê n có th ể thay đ thời gian trỗ Dolay dể thịi gian sáng hay tắ t tuỳ
ý. Vói đèn diổu khiển giao thơng, có lúc Ị ìh ííi clio hai dỏn sáng dồiìg thịi (đỏ, vàng) để chỉ

sii rh uan bị chuyển luồng giao thông hav chuyển dèn (đỏ sang xanh hay xanh sang vàng
roi tlỏì. Người ta cịn đưa thịi gian dơni ngưỢc từ thời gian sáng tơì đưa cho mỗi đèn về 0 và
hiến thị sô^ dếni dạng thậj) Ị)hân cho các dèĩi ílể người di đường biơt và chuẩn bị đi hay
dừng tại các giao lộ (xem phần 11.2 cho hieii thị LEl) 7 doạii).
11.1.5. Thiết kê mạch LED đơn và chạy chương trinh trên mạch mô phỏng
Trong thiết kế và chạy mơ Ị)hỏiig sơ đồ íliộn tử, inới xL hiện chương trình mơ phỏng
PROTKUS có cả mơ phỏng mạch với vi (liểu khiển các loại như MCS-51 của INTEL, PIC
của Microchip, AVR của ATMKL, MCG8 H 1 1 cưa Motorola v.v... Chương trìn h trê n cịn mơ
phóng dưỢc các mạch sc/ và tương lự thay cho Workbcnch và Circuit m ak er hay Protel.
2. c-m u c..Đ K H iỂ N ữ >


Nhược diêm cơ ban của PROTEƯS là không hỢp dịch dược các ngơn ngữ khác lìhau trơĩì
giao diện, mà chỉ chạv mơ phỏng được chương trình dạng di.HKX. Mn chạv dưíỉc mạch
VĐK các loại, ta phải:
- Thiết kế mạch nguyẽn lý với chương trình ISIS.
- Viết chương trình và hỢp dịch th àn h file. HKX với các chương trình hợj) dịc.i iương
ứng với ngơn ngữ dó bằng cách vào tệp Labcenter/Proteus/Tool/ASEM5l
Ví dụ:

- PINNACLE cho họ MCS-51 của INTEl. hay ASEM51.
- AVR STUDIO cho AVR cua ATMEL.
- MPASM cho PTC của Microchip.

Ngồi các hỢp ngủ, cịn các ngơn ngữ bậc cao (ngôn ngủ c , C++, PASCAL, C51 và R51
củng dịch ra tệp đuôi. HEX để chạy trên PROTEUS.

1. Chương tr ìn h P R O T E U S
PROTEUS có giao diện và 4 th a n h cơng cụ như hình 11.3, 11.4 và ll.õ .


PAe

Vievw

C d it

“ d'isí"Ẽâ
Í-3^ÍB
»*ĩũ

L lb rđ ry

T e e is

V r

o

^

C wM Qn

G r a e tt

S o u rc e

\W n i l ‘-^“í
\ \ù lù m

âị- " ã

ĩỉì ìữ.
s

i>

^

c^buo

T cm (iL o(«

5 v » te r w

I a ae Oi
_______ ____

A>

B

____
/

ã i



• •

tlB%>


'í'

V

;H ộ p h ic n tỉiiị h ìn h ỉin h :kiộn. ; ; ; ;

H ộ p h ic n ứ iị d a i\h sậệlỊ lĩn h kiin

c

o

-

t

11

* !ằã I 11 ô J ằ I

ISBHL&dõu.
Hỡnh 11.3. Giao điện của PROTEUS

Công dụng của các th a n h công cụ như sau:
- Thanh công cụ số 1 d ù n g để tạo trang, lưu giữ, sao chép, phóng to, th u nhỏ, ícm và
in v.v... các tra n g th iết kế.
- Thanh công cụ số 2 dù n g để chọn các vi mạch ra danh sách linh kiện, vẽ các đưòing
dâv, ghi các n h ã n v.v...
- Thanh công cụ sô' 3 dù n g để quay 0“, 90“, 180“ các linh kiện và


tên nhãn.

- Thanh công cụ số 4 d ùng để chạy chương trìn h mơ phỏng.
rên và cơng dụn g từ n g n ú t trong nhóm các th an h ghi trê n

trìn h bày ỏ cíc hì nh

vẽ ở trên.
10

i CTWjt..t»KH«ỂN«B


4- Thanh sỏ^ 1
n

íỉ^Cỉi Ỗ Q

ĩ ĩiti

1

2

3

^

^ Q ^ữ S E Q H

4

• C ụm

1:

• Cụm

2:

In cá Irang, chọn v ù n g in tuỳ ý

• Cụiìi

3:

Chia ìưới điểm trang t h iế t k ế

• Cụm

‘t:

5

6

Ỉ> È Í^
7

Tạo n h a n h một trang th iết kế, mở trang thiỏt kê đã tạo, lưutrang th iết ké


Zooni linh kiện vể giửa trang, phóng to trang, thu nhó trang, fix trang,
zoom v ù n g t u ỳ chọn

• Ciim 5: c á t , copy. p a ste trang
• Cụni 6: Copy, m ove, quay, xố linh kiện trên
• Cụm 7; Chỉ d ù n g biểu tưỢng đầu, chọn linh kiện

4- Thanh sơ' 2

í>

+ ••• ^ 0 ^ ẩ D-^ oa 0 ■?-.s / □ 0

1 2

3

4

5

6

7

8

9


co A Ẽ 4-

10 11 12 13 14 lõ 16 17 18 19 20 21 22 23

1. C o m p u te r cho p h é p chọn lin h k iệ n sa u khi nháp nút p ở hộp ih o ạ i D E V IC E S
2. D iểm nôi
3. Tạo n h ã n củ a đ ư ờ ng dáy: n h ắ p trái chuột lên dây dẫn và đặt tên
4. Ghi ván bản; n h ắ p

trái c h u ộ t và v iế t

õ. Tạo bus: n h ắ p trái kéo đôn cliêm khác, lại nhắp trái rồi nháp phải. P h ả i đặt label
cho c ù n g t ê n cho các d ây đ.ui sử d ụ n g c h u n g bu3
6. Mạch phụ
7. N h á p trái lê n lin h kiện đê xem E d it compoueiit
8. N guồn, đất, bu s,...
9. C hân lin h kiện
10. S im u la t io r ' ỉraph; mô p h ỏ n g h ìh h vẻ
11. T ape recorder, ghi b ă n g từ
12. Cìenerator: DC, x u n g , sin ,...
13. V oltage Probo, g iô n g v ôn k ế t h ư ò n g n h ư n g rhỉ ró 1 dẩu d;'iy, hiện sô' trực tiếp
11. C u ren t Probo, n h ư trên n h ư n g ch o giá trị dòng điộn
15. O ụng cụ áo; VƠIÌ kè* AC, DC. a m p e kê AC, D(',..
16. Vẽ đư ò ng 2D
17. Vẽ hộp 2D
18. Vẽ đư òng trò n 2D
19. Vẽ cu n g tròn 21)
20. Vẽ đưòng c o n g 2D
21. Text 21). n h á p trái vào t r a n g và type
22. Ký hiệu h ìn h v ẻ 2D

23. D ánh đấu ch o gôc linh kiện

i- Thanh sơ' 3
c

o

^

í

Q u a y trá i, p h ả i, đơi xứng chân r.íĩang dọc iinh kiện tr ê n hộp h iể n thị
lin h kiện

Hình 11.4. Các thanh còng cụ 1, 2 và 3 của giao diện PROTEUS

11


!►

II

Đ icu khiến síart, step by slep. pause, stop của q trình mơ phĩng

( 011 inội thanh tooỉbar

ở giữa

như trên hình, nhưng tluinh này clìù yếu dùng licn quan đ ế n ạo


mạch iiì. ta khơng để cập ờ dây.

Hinh 11.5. Thanh cơng cụ số 4 để chạy chương trình

2. T h iế t k ế m ạ ch n g u y ê n lý
V ới các núm trong các th an h công cụ Irên, ta đã thiết kế đưỢc bản võ của sơ đc ngtyên
lý của mạch hiển thị 16 LED đơn nơì với hai cổng 1^0 và P2 như hin h 11.6.

RI
30CKỈ

R8

R1

D
U1
ứCTfki.i

paa>>aa
PQ.U**ỈH

P02if^
P0J(f>tì3

PQMMữ*
pasỉf>»
PD.7/AW


TOHỈ
i- ^6

f2D
’/e
P2.i/>e
P
2^A
O
r^a-A
ti
PZ.WAG
f2SỈA
O
r2iBỈAU
P27/A»

í tOT3

:.iz f12
^1*

Fp3ạ.iV
íyfurxi»p
12
paaT
rĩĐ
P33w
n

^3 *.7D

f 15

f3*n

P1.T

P37/W

ATa^jS
tTExl^
Hình 11.6. Mạch hiển thị 16 đèn LED rịi

Trong hộp linh kiện (ấn chữ p/micro controller), chúng ta đã chọn VĐK 89C52, LKD
đtín và điện trở hạn chế dịng điện loại nhỏ 3000.

3. Chạy chư ơng tr ìn h m ô p h ỏ n g
a) S o ạ n thảOy b iê n d ịc h c h ư ơ n g tr ì n h có đ u ơ i ,HEX
Dùng chương trìn h PINNACLE để biên dịch các ví dụ 11.1 tới 11.3, ta có các 'hương
trình đi HKX tương ứng. Các chương trình với các ngôn ngữ bậc cao, ta cũng p h ii biên
dịch với các chương trìn h biên dịch tương ứng.
b) Mở sơ đ ồ n g u y ê n lý
Ta gọi sơ dồ cần chạy trên giao diện PROTEUS bằng nháy chuột vào biểu tưỢHỊ ISIS,
mỏ tệp và chọn tên của sơ đồ (thường ở thư mục BIN của PROTEUS nôu tự vẽ).
c) N ạ p ch ư ơ n g t r ì n h c ầ n c h a y
Có Ihể cóp tơn chương trình cần chạy vào cùng thư mục của sơ đồ nguyên lý hcặc nạp
vào bang cách tìm đường dẫn tới th ư mục có chứa chương trình theo cách sau:
Nháy chuột phải vào VĐK của sơ đồ nguyên lý: hình vẽ của sơ dồ nguyên lý h ệ n lên
màu do.

- N háy chuột trái vào VĐK của sơ đồ nguyên ỉý: hiện lên giao diện của chạy íhương
12


trình (TcUih nháy chuột phải lần hai vì sơ (lơ riííun lý bị xố di, phải hồi phục bằng nútN
nhấn lúni trở vể mũi tên ngược chiểu trôn Ihatiii cỏiig cụ số 1).
- Wháy chuột trái ưào ô chương trinh: dể tìm dường dẫn tói chương trìn h cần chạy
trong ?INNACLE.
N ỉá v chuôt trái vào tên chương trinh cẩn vhạy: khi dó, tơn chương trìn h sẽ hiện vào
hộp tơi của chương trình với cả dường dẫn. Nỏu cóp tơn chương trình vào cùng thư mục với
sơ dồ ĩgun lý, ta khơng phải tìm tên chương trình theo đường dẫn.
- 'ũểm tra tần s ố n h ịp của giao diện cỏ ìiỢp với tần s ố của VĐK: giá trị mặc định là
12MH:, nếu tần sô^ nhịp không hợp, phải sửa lại cho đúng.
~
về sơ đồ nguyên lý : nháy chuột trái vào chữ OK để trở về sơ đồ nguyên lý.
dy C h ạy c h ư ơ n g t r i n h
l)in^ th a n h cơng cụ sơ" 4 để chạy chương trình bằng cách nháy chuột vào các núm
tương Ing sau;
^úm s ố 1 hinh tam giác:
chạy cả chương trình.
~ Vúm sơ'2 h ìn h m ột vạch uà tam giác:
chạy từng lệnh của chương trình.
- Vzím SỐ3 h in h hai vạch thẳng:
nghỉ chạy chương trình.
~ Viim s ố 4 h ìn h chữ n hật:
kết thúc chạy chương trình.
Tiong khi chạy chương trình, trê n các đường dây tín hiệu, có các chấm đỏ, xanh tương
ứng vd các mức logic 1 h ay 0 .
Cí thể chương trìn h khơng chạy hay báo lỗi vì lý do khác nhau: tốc độ xung nhịp
khơnghợp, q thịi gian, lệnh sai v.v...

Níu chạy chương trìn h hiển thị trên 16 LF]D ở trên, ta sẽ thây các LED sẽ nhấp nháy
như qiy luật giải th u ậ t của chương trinh. Nếu không như mong muốh, giải th u ậ t không
đúng, )hải sửa lại.
M)t sơ đồ nguyên lý ở trên, có th ể cho chạy mơ phỏng thử nhiều chương trìn h phục vụ
cho nỏ
__
Vii cách thiết k ế và chạy chương trình theo chương trìn h mơ phỏng PROTEUS, ta có
thể thíc hành đưỢc về th iết k ế và lập trình cho hệ VĐK, trưốc khi chạy trê n sơ đồ lắp ráp.
Và sơ đồ nguyên lý trên, ta có thể vẽ dưỢc sơ đồ mạch in vối p h ần mềm ARES của
PROTCUS.
Siu khi làm mạch in, lắp linh kiện, ni mạch bằng nguồn điện ni, nạp chương
trình *ào bộ nhỏ PROM với máy nạp chương trình (Prograrnmer), chương trìn h có thể chạy
trên sí dồ lắp ráp sau khi đã chạy tơt trên chương trình mơ phơng.
11.2. HIỂN THỊ TRÊN MỘT ĐÈN LED 7 ĐOẠN
Đìĩi LEI) rịi có nhưỢc điểm là chỉ biểu diễn được sô' nhị phân (logic 0 ~ đèn t ắ t và 1 đồn Síng) khơng biểu diễn trực tiếp dược các cliữ và các con S(í. Mn biểu diễn đèn LED
rịi Ihinh chữ hay sô", ta ph ải mắc nhiều đèn thành chữ hay sơ dó. N hư vậy, sẽ tơn nhiều
đèn v; công s u â t điện nuôi lỏn.
Đĩĩi LED 7 đoạn (hay 7 th a n h sáng) ra dời (ỉể khắc phục được nhược điểm trên.
11.2.t Cấu tạo và hoạt động của đèn LED 7 đoạn
iVổi dèn LED 1 đoạn có 7 th a n h a, b, c, d, e, f và chấm h (để biểu diễn sô' th ập phân),
đưỢc sip xêp như hình 11.7a. Mỗi th an h là một đèn LED đơn, dược mắc theo:
- \ n ơ t chung', (hình 11.7b), các anơt của các đèn nối chung với n h au và với cực +5V của
nguồi diện ni, cịn các cực âm là các katôt a, b, c, d, 0, f, g, h.
-K a tơ t chung: (hình 10.7c), các katơt của các dèn nối chung VỚI n h au và vói đất, các
anơt cưỢc nơì với các lơi vào a, b, c, ci, e, f, g và h.
13


Như vậy, trong cả hai trường


h(íỊ)

(iiìắc ainV .■hui.íí h;iy kalỏt clunig), các dầu còn lại a, h,

c, d, e, f, g v à h c ủ a d ò n (lểu nối với các' lỏi ra c u a .'ông VI dÚHi khiịn í‘ó g iá trị c ủ a m ã 7 đoạn.

Khi các th anh diot có dịiig tliện chạy (Ịiia (cỏ :hịỉi'. điện ti'(í liạn chê dịng cỡ 200Q),
thanh phát sáng và tùy n i à tiíơng ứng của { ' ả i ' lòi V A a. b , c, d. i \ f, g và h ta có hình sáng
của các chữ sơ 0 tới 9 hay chừ lừ A tới z (hán<í 11.1).
Bảng 11.1 đưỢc th àn h lạp bằng cách:
- Mắc anôt chung hay katơt chung, đc từ (tu cỏ lỏi ríi từ a tới g có Iiìức logic 0 (cho niắc
anơt chung) hay 1 (cho mắc katôt chung). Các mã của cùng một sị bù nhau (tơng = ()FFh).
- Các thanh sáng từ a tởi g hiện hình các clìữ sị từ 0 (các thanh a tỏi f sáng, trừ thanh
g t ắ t ) t ớ i 9 ( c á c t h a n h a , b , c, (1, f, g Scáng, t r ừ t h a n h e L ă í).

Anơt
+5V*

c)

b)

Hình 11.7. LED 7 thanh (a), có anơt chung (b) »iay katịt chung (c)
B ản g 11.1. Mã 7 đ o ạ n cho các số từ 0 tới 9
Sò'

Mả

D= h


D 6=g

D5 = f

D3 = d

D4 = e

D1'b

D2 = c

DO = a

BCD

0

0000

0

0

1

1

1


0001

0

0

0

0

2

0010

0

1

0

1

3

0011

0

1


0

0

4

0100

0

1

1

0

Q
1

.

A chung

Mâ7đ

Mãĩd
K chung^

1


1

1

CO

3F-H

0

1

1

F9

06H

ũ

1

1

A4

50H

1


ì

BO

4FH

1

0

99

66H

1

92

6DH

1

82

7DH
07H

í

1


t

1

'

0101

0

1

0

r

1

6

0110

0

1

1

1


t

1

7

0111

0

0

0

0

0

1

1

1

F8

8

1000


0

1

1

1

1

1

1

1

80

7FH

5

9
Blank

1001
10H

0


0

1
0

__ 1 _

1
0

0

1

1

0

c

0

0

1
1

1


1

90

6FH

0

0

OH

OH

11.2.2. Các loại đèn LED 7 thanh
Từ hình 11.8 , ta thấy có cáo dèn LED đơn có các loại sau:
- Đ è n LED 7 BCD: có 4 lối vào ABCD (có sẵn mạch giải mã 7 thanh bên trong) nêii khi
hiển thị, không cần mạch giải mã 7 thanh bơn ngồi V Ớ I sơ đồ ngun lý ở hình (11.9).
Đèn LED 7 số(digital): có 8 lối vào a, b, c, d, e, f, g, li, không cán nguồn ni ngồi (như
anơt chung hay katơt chung) mà dùng mức log:c 1 của lịì ra của cơng VĐK (có khi con qua
mạch cơng suất) để làm sáng thanh sáng. Ixỉại dẻn này cũng càn giái inã 7 thanh.
- Đ è n LED 7 thanh mắc a n ô t chung-, (nối ngT.iồii ni ngồi) hay katơt chung (nơi đàt),
có 8 lối vào a , b, c, d, e, f, g, h ).
14



2. Chương trìn h h iể n th ị s ố tự n h iê n tr ê n LED 7 th a n h
vỏi LED BCD, dữ liệu dưa ra là nhị phân khơng cần chương trìn h giải inã. Cịn các
LED 7 thanh khác, cần chương trìn h con giải mã các sô' tự nhiên (0 , 1, 2, 3, 4, 5, 6, 7. 8 , 9)

thành mã 7 thanh. Như vậy, chương trình hiển thị khơng có mạch giải mã cho LEl) 7
th an h gồm hai chưdng trìn h con:
~ Chương trinh con giải m ã s ố tự nhiên (0 tới 9)\ bằng cách dọc bảng dữ liệu bởi lộnh
MOVC A, @A + DPTR. Tùy loại anơt chung hay katơL chung, ta có hai bảng mă khác nhau vì:
+ Với anơt chung: bit dữ liệu đưa ra katôt, phải là logic 0 cho th a n h sáng diot {àịng
điện chạy từ anơt sang katỏt).
+ Với katôt chung: bit dữ liệu đưa ra anôt, phải là logic 1 cho th a n h sáng diot (dịng
điện chạy từ anơt sang katơt).
- Chương trinh con hiển thị: có các hành động đưa dữ liệu ra cổng, gọi trễ (đế m ắt
ngưòi quan sát đủ thây đèn sáng và đèn tắt.
Ví dụ 11.4 giới thiệu chương trìn h hiển thị trên các đèn LED các loại khác nhau theo
sơ đồ mắc ở hình 11.9.
Sau khi hợp dịch trong Pinnacle, ghi vào sơ đồ mơ phỏng ở hình 11.9 và n h â n n ú t chạy
chương trình (nút thứ nhâ't của th a n h cơng cụ sô^ 4), theo dõi các đèn LED
7
th a n h , ta th
mỗi đèn sẽ hiển thị các sô" từ 0 tới 9 rồi trở về 0.
Ví dụ 1l.õ giới thiệu chương trình đưa mã 7 đoạn từ ơ nhớ ra hiển thị trẽn LED 7 đoạn. Tnióc
đó có (loạn chương trình ghi và biến đổi các Iiìã BCD thànli mã 7 đoạn để ghi vào các ô nhớ.
3. Chương tr in h h iể n th ị ký tự
Hiển thị ký tự trên một LED 7 th a n h cũng tương tự hiển thị sô' tự nhiên, chỉ có điều
khác là;
- Các sơ" tự nhiêiì có sẵn bảng mã sô tự nhiên —mã 7 thanh (anôt chung hay katôt chung),
trong khi hiển thị ký tự cần lập bảng mã cho chuỗi ký tự. Ví dụ, dịng chữ “CHAO ~ BAISr\
- Hiển thị cũng tương tự hiển thị số là đọc bảng dữ liệu (bởi lệnh MOVC A, (íỊ^A +
DPTR) rồi đưa A ra cổng Pi mong mn.
Ví dụ 11.6a giới thiệu chương tiùnh hiển thị chuỗi “CHAO BAN” đưa dữ liệu trực tiôp qua
cổng PO mắc với địn LED 7 có katơt chung và c ìươnp: trình 11.6b bằng đoc bảng dữ liộu.
; Ví dụ I 1.4: Chirơng trình hiển thị các số tự
m o v P l,# 00h

nhièn (0 lới 9) Irên các loại LED 7
mov dplr, #bangrnal; anỏl chung, PQ
macro @sangleci7
@sangled7 0
mov K), #0()h
mov dpir, #bangma2
mov rl, #Obh
@sanglcci7 2 ; kalỏl chung, cổng P2
inain: mov a, rO
@sanglcd7 3; LliD số, cống P3
movc a, @a+dptr
sjmp $
mov pl K a
delay;MOVR7,#200
call delay
delO: mov ró, #50
inc rO
dell: mov r5, #20
cljn7. rl, main
(ỉjnz r5, s
endinac
djnz ró, del 1
org OOh
djnz r7, deio
mov I-O, #10; LED BCD, cổng P1
rẽt
mov a, # 0 0 h
bangmal: db OcOh, 0f9h, 0a4h, ObOlì, 99h, 92h,
82h,Of8h, 80h,90h,0c0h
lap:

mov P l , a
bangma2: db 03fh, 06h, 05bh, 04fh, 066h,
call clelay
06dh,
7dh, 07h, 07fh, 06fh, 03fh
inc a
end
cjnc a, #0a h, lap
16


; Ví (iụ 11.5: Chương trình hiển thị dữ liộu
11011)1 ỏ nhớ dùng lệnh gộp giải mã__________
MACRO CạKilAÍMA < 1, 2, 3>
inov a, 11
; 11 - địa chi chứa dữ liệu
iinl a, #()lli
; lọc 4 bit thấp
IIIOVC a, @a+clptr ; đọc mã 7 đoạn
rnov 12, a
; gửi vào dịa chi nhớ 12
inov a, 11
; 11 - dịa chi chứa dữ liệu
anl a, #0r01i
; lọc 4 bit cao
svvap a
; tráo sang 4 bit thấp
movc a, @a+dptr ; dọc mã 7 doạn
inov 13, a
; gửi vào dịa chỉ nhớ 13

i ;n d m a c
org UOh
Mov dptr, #bangma; địa chi bàng
Mov rO, #30h
Mov @rO, #25h

(a(',IAlSÍAM )li,M ĩ.4lli
inov rO, #401i
inov a, (r/^K)
ino\' ro, a
inc rO
inov a, @r(}
inov 1\), a
S|mp s
hanuma: (Ib OcOli, Of9h, 0a4h, ObOh, 99h,
db 92h, 82h, Of8h, 80h. 90h ; anôt chung
; (cỉb 3ni, 06h. 5bh, 4fh, 66h, 6dh, 7dh,
07li, 701, 6fh, OOh; katôt chung
delav: niov r0,#250
dell: m ov rl,#200
dcl2: djnz rl, del2
(ljnz rO, del 1
rct
end

; Ví (ÌỊI 1 1.6a: Chương trình hiển ihị “CHAOliAN” dưa dữ liệu trực tiếp

; Vi
V1 (iụ
(lụ 11.6b:

11 .od: Chương
enương trình
trmn hiển
nier thị “CHAOBAN" dùng lệnh dọc bảng dữ liệu

inacrcXgỉVVriiePs <1, 2>
rnov a, #11
mov PI2, a
endmac
ORC.OOH
Cf«)WnteRs039h. 0
call dclay
Cfí\VritcPs 74h, 0
call delay
(ft)\Vritel^ 5Ch, 0
call delay
(íỊ)\Vrilel^ 5Ch, 0
call dclay
ÍỘVVritcPs 40h.0
call delay
(fí\VritePs 7Ch, 0
i-all delay
Cq) WriiePs 5Ch, 0
call delay
(anvrilel^ 54h, 0
call cỉclay
sjmp s
dciav; mov r7, #250
dell: mov r6 , #20
del2: mov r5, #20h

djnz r5, $
d jii7. ró, dcl2
d|nz r7. del 1
rel
end

org OOh
niov dplr, #bangma
main: mov rO, #0()li
mo\’ a rO
movc a, @a+dptr
djnz kt
inov ro, a
call delay
inc dptr
ljmp main
kc
inov a, #0()h
inov IK). a
call clelay
bangnia: (ih 3%, 741i, 5cli, 3fh, 40h, 7ch
dh ,xii.541i, OOh
dclay: inov r7, #250
dcl I: mov r6, #20
dol2: inov r5, #20h
(ljn/. r5, s
(ijiu r6, dcl2
(ljnz r7, dcl 1
rci
CIKỈ

Chu y: Chuỗi ký lự kốl thúc bời mã OOh. Khi
dọc tới mã này, cliirơng trình nhảy tới nhãn KT
dè kêì thúc.

; lệnh dữ liệu
; dĩr liệu
; ghi ra cổng PI2
; kết thúc lẹnh gộp
; ghi chữ“C” ra PO
; ghi chữ"H” ra r o
; ghi chữ“A” ra po
; ghi chiT‘()” ra TO
; ghi chiT'-” ra TO
; ghi chữ“B” ra P()
; ghi chữ“A” ra H)
; ghi cliũr‘N” ra r o
; kết thúc chờ

^ A l HỌC QUỐC GIA HẢ NỘI
TRUNG ĨÂM THÒNG ỈIN THU VIỆN
3 .C - n « 0 C ..Đ K H lỂ N « A

V .G O

/

17





11.3.3. Chương trinh hiển thị cho nhiểu đèn LED
Hình 11.11 giới thiộu cách mắc tỗì đa 8 đèn LED 7 doạn với hai cổng của vi cliểu khiển:
cổng PO đưa dữ liệu ra song song cho 8 đèn LED và cổng P1 có 8 bit nơì với 8 cực bazơ của 8
tranzito để diều khiển một trong 8 LED tương ứng p h át sáng khi có dữ liộu dưa ra.
Chương trình ở ví dụ 11.7 hiển thị các chữ sô" từ 0 tới 7 trôn 8 LED 7 doạn. Chương
trình cũng có hai h à n h động:

Đọc mã 7 đoạn của các sô^ tự nhiên từ 0 tới 7 có sẵn trong bảng mă với clỊa chỉ (lầu
tiên là bangma.
Dưa ra hiển thị trên c á c LED tương ứng mắc với cổng PO và tín hiệu diều klúcn vào
bazơ của tranzito mắc với cổng P l. Lòi điều khiến trong r3 (có 1 bifc bang 0) có tl7 0 cho
đèn LED 7 đoạn ở tậ n cùng bên trái sáng và đưỢc dịch phải (RRC A) để điều khiển dèn
LED sáng từ trái qua phải. Nẽu ban đầu cho r3 = #OEh và dùng lệnh dịch trái (RLC A) thì
các LED sẽ sáng từ phải qua Irái.
Ví dụ 11.7 ^ ố i thiệu chương trìn h hiển thị các dử liệu dạng BCD dưỢc chứa trong các ô
nhớ có địa chỉ 30h, 31h, 32h, 33h, 34h và 35h. Trước khi hiển thị, phải biến dổi mã BCD
thành mã 7 doạn ghi trong các ơ nhớ có địa chỉ 40h tới 45h, bằng lệnh gộp GIAIMA.
Ví dụ 11.8. giới thiệu chương trình hiển thị chuỗi chữ APECHANGI2006 trong bảng mã 7
đoạn lên 8 dèn LED 7 đoạn. Kết thúc của chuỗi là mã OOh. Muổh biểu diễn đầy đủ chuỗi ký tự
trên, ta phải có sơ' đèn LED 7 đoạn bằng sô^ký tự cần biểu diễn (13 đèn LED 7 đoạn).
; Ví dụ 11.7: Chương Irình hiển ihị dữ liệu ; Ví dụ 11.8: Chương trình hiển ihị chữ “APIiC
HA NOI 2006: trong bảng mã
tronp các ò nhớ 30h lới 35h
quelequPl
Org OOh
ledVequPO
Ljmpmain
orgOOh
quelequPl

mov dptr, #bangma ; địa chỉ bảng niă
ledVcquTO
; bit ci7= 0
mov r3, #07h
Org lOOh
; xoá a
lap: clr a
Main:
movc a, @a+dplr ; dọc bảng
mov lO, #30h
jz kt
mov a, #00h
mov led7, a
; clira dữ liộu ra cổng K)
IìiịK): mov @rO, a; ghi các số 0-7 vào các ò nhớ ■
; dưa diều khiển LBD7
mov quet. r3
inc rO
; gọi trề
Icall delay
inc a
mov quet, #Offli ; xoá đèn LKD7
cjne a, #9, lapO
mov a, r3
; lạo điều khiển mới
mov dplr, #bangma
; dịch phải a
rr a
call giaima
; ghi lại vào r3

mov
r3,
a
lap2: call hicnlhi
; lăng địa chỉ mới
inc dptr
sjmp lap2
; trở về lạp
sjmp lap
giaima:
kl: sjinp s
mov rO, #30h
; trể
delay: mov r7, #250
mov rl, #40h
dell: mov r6, #20
lapl: Mova, @rO
del2: mov r5, #20h
Movc a, @a+dptr; đọc mã 7 đoạn
djnz r5, $
Mov @r 1, a; gửi vào ô nhớ địa chỉ nhớ r 1
djnz r6, del2
inc rO
djnz r7, dell
inc rl

20


rnov a, rl

cjnc a, #4Ah, lapl
rcl
hientii: mov r3, #0111111 Ib
inov rí), #40h
lap3: mova,@rO
mov led7, a
inov quel, r3
Icall delay
mov quel. #Offh ; xoá đèn LED7
rnov a, r3 ; tạo điều khiển mới
n a
; dịch phải
niov r3, a ; ghi lại vào r3
inc rO
niov a, rO
cjne a, #49h, lap3
rel
dela\: mov r7, #250; trề
dell: movró, #20
del2: niov r5, #20h
djnz r5, $
djnz r6, del2
djn/ r7, dell
rel
bangna: db OCOh. 0F9h, 0A4h, 0B0h,99h
db 92h, 82h, 0F8h
^nd

lei
bangina: db 77h, 73h. 79h, 39h, 76h,77hdb 54h

06h, 5hh. 3ÍÌ1, 3fh, 7dh, OOh
erul

(7/// V. Ví dụ 11.8 khác với các ví dụ ở
trên là dùng lệnh inovc a, @a-^clpír và inc
dpỉr (íãnu dần dịa chi cùa phần tử của bảng) để
đọc Uiãn lự các phầii tử của bảng (iheo dplr vì
A = 0) có dịa chi đầu là bangma trong khi các
ví dụ giúi mã ở trên đọc phần lử bảng (theo giá
trị ciia A vì dpir = bangma) bởi lệnh movc ứ,
(aiì-^-dpír.

11.3>. Hiển thị của một số thiết bị số thịng dụny
(ác thiết bị số nói chung, vi diều khiển nói riêng tích luỷ dữ liệu dưối dạng nhị phân
đổ tié kiệm dung lượng nhớ. N hưng đưa biểu diễn ('ho người diều hành quan sát lại phải
hiển ứiị dvtòi dạng một con sô^ th ập phân gồm nhiổu chữ Kố tự ĩìhiên (từ 0 tỏi 9). Chúng ta
phai Mốt chương trình để biến đổi mã nhị phân thành rnă 7 đoạn (nếu dùng LED 7 đoạn)
hay nã ma trận LED (nếu dùng các ma trậ n diot) dc hiển thị. Ta sẽ xét hai trường hỢp,
hiển hị niột byte nhị phân vói sơ" thập phân tỏi 2561) và hai bytc nhị phằn vỏi sơ" thập
phânLỚi 65536.

1. D ín g hổ đ iệ n tử s ố
1rong đời sông, chúng ta cần dùng đồng hồ chỉ thòi gian thực. Người ta đã dùng vi
diểu ỉhiển, trong đó có bộ đếm dao động của thạch anh làm đồng hồ đếm thòi gian rồi chỉ
thị tlời gian hay sơ' đếm về giị, phút, giây lên các l.KI) 7 doạn tương ứng. Trong chương 8
về Tiner của tập I, ta đã xét về Timer, ở đây, chúng ta xét tiếp vể giải mã 7 đoạn và hiển
thị tn n các dèn LED 7 đoạn cho sơ"đếm thịi gian (giờ. phút, giây).
Irong chưđng trình của ví dụ 11.9 ta thấy;
D ùng các lệnh gộp đếm, giải m ã và hiển thị.
-Đ ếm thập p h á n cho giây, phút, giờ: sô' dô^m chứa trong inỗi ô nhớ dạng BCƠ nén (ghi

21


trong các ơ nhớ 30h, 31h và 32h) hay nói khác đi, mỗi ô nhớ chứa hai chữ sô^ BCl) nén (’ủa
giAv, chục giâv (tới 60 giây), phút, chục p h ú t (lới 60 phút) và giờ (chục giờ).
- Giải m á BCD —7doạn\ sẽ giải mã 2 chữ sô BCD nén trong niộl ô nhớ hav h'ú nible
khi dùng lệnh tráo hai nible trong th a n h ghi a (SWAP A). Như vậy, chương Irình mã phải dùng ba lệnh gộp giaim a cho ba ô nhớ chửa các giá trị của giây, ph ú t và giị rối ghi
vào các ơ nhớ từ 40h Lới 45h.
- Hiển thị: chỉ dùng có một lệnh gộp với địa chỉ ô nhớ đầu chửa mã 7 đoạn cia ^ â y
(40h) tới giá trị cạnh ô nhớ chứa mã của chục giờ (45h) để hiển thị ra 6 dèn LED 7 doạn cho
chục giò, giò, chục phút, phút, chục giây và giây.
Sau khi dịch bằng chương trìn h biên dịch PINNACLE ta sẽ có tồn văn bản của
chương trình đồng hồ đếm thịi gian có hiển thị thịi gian trên 6 LED 7 đoạn cho cliục giò,
giò, chục phút, phút, chục giây và giây.
Trong chương trìn h của ví dụ 11.10 ta thây chương trình giải mã phức tạp vì n.ột byte
nhớ chứa hai sơ" BCD nén. Khắc phục nhưỢc điểm trên, chương trìn h của ví dụ 11.11 (lùng
6 lệnh đếm gộp cho 10 giây, 6 chục giây, 10 phút, 6 chục phút, giò, chục giò.
Trong chương trìn h của ví dụ 11.10 ta thây:
- Dùng các lệnh gộp đếm còn giải mã và hiển thị là những chương trình con.
- Đếm thập p h â n cho giâyy chục giớy, phút, chục phút, giờ và chục giờ: số đôni chứa
trong mỗi ô nhớ dạng BCD không nén (ghi trong các ô nhớ 30h, 31h, 32h, 33h, 34h và 35h)
hay nói khác đi, mỗi ơ nhớ chứa một chữ sô' BCD không nén của giây, chục giãy, phút, chục
phút, giò và chục giò.
- Giải m ã BCD - 7 đoạn: sẽ giải mã 1 chữ số BCD khơng nén trong một ó nhớ hay niột
nible nên khơng dùng lệnh tráo hai nible trong thanh ghi a (SWAP A). N hư vậy, chương
trình con giải mã dùng cho sáu ô nhớ chứa các giá trị của giây, chục giây, phúl, chạ? J)hút,
giò và chục giò rồi ghi vào 6 ơ nhớ từ 40h tói 45h.
- Hiển thị: chỉ dùng có một chương trình con vỏi dịa chỉ ơ nhớ đầu chứa mã 7 dcạn c ủ a '
giây (40h) tới giá trị cạnh ô nhớ chứa mã của chục giờ (45h) để hiển thị ra 6 đòn LHD 7

đoạn cho chục giò, giờ, chục phút, phút, chục giây và giây.
So sánh hai chương trìn h của các ví dụ 11.9 và 11.10 ta thấy:
- Chương trìn h của ví dụ 11.9 đơn giản về việc đếm (chỉ 3 lệnh gộp) nhưng lại phứo tạp
trong giải mà.
- Chương trình của ví dụ 11.10 phức tạp về việc đếm (tới 6 lộnh gộp) n hư n g .ạí đơn
giản trong giải mã với một chương trìn h con.
- Cả hai chương trình giống n h au vể hiển thị: niột lộnh gộp hay mộl chương trình con.
; Ví dụ 11.9; Đổng hồ đếm BCD nén và hiển ihị Irên LĨÌD 7 doạn
M A C R 0@ dem < 1.2. 3 > ;
mov a, 11
add a, # 1
da a
mov 11. a
cjnc a, #12,13
ENDMAC
MACRO @GIAIMA <loai, nhoi, nho2>
mov a, 11
anl a, #Ofti
movc a, @a+dptr
mov 12, a
22

ưiov sp, #70h
mov dptr, #ma7doan
clriro
mov tmod, #01h
clr tfO
mov thO, #high (65536 - 5000)
mov tio, #low (65536 - 5000)
mov ie, #82h ; cho phép ngắt TimerO

setb trO
main4: mov gio, #00h
main3: mov phut, #00h
main2: mov giay, #00h


ino' a, Ĩ 1
iinla, #Ot'()h
SWÍP a
ino'c a, @a+ciplr
mo' 13. ;i
i : n i )Ma c
MACIO @lliriNTịỉI< dchigiay, dchigio+l>
mcv a. #011 11111B ; inã quét
inov rO. #11
; dịa chỉ giây
hthil:'nov leciV. @rO
mo\’ qiiet, a
lc;ll delay
mo\ qiiet, #()f'íh
iiií rO
rr 1
inov a, lO
cjie a, #12, hthi 1
; địa chỉ giờ
f-;n d m a c
rgOh
jm> rcset
oi-ị Obh
jm) rimei IntO

qucl equ P1
i!

ị.ỉ\ll

^(.111

gi) cqii 32h
pKit equ31h
giiy equ 30h
OR l(X)h
Rese:

main 1: mov bdn, #00h
Icall giaima
mainO:
@HIENTHI 40h,46h
mov a, bdn
cjne a, #20, mainO
@dem giay, 60h, mainl
@dem phut, 60h, main2
@dem gio, 24h, main3
ljmp main4
; chương trình con giải mã
giaima;
@GIAIMA giay, 40h, 41h
@G1AIMA phut,42h,43h
@GIAIMA gio, 44h, 45h
ret
; chương trình con ngắt TimerOInt

TimerlntO;
clr trO
inc bdn
mov thO, #high (65536 - 5000)
mov tio, # low (65536 - 5000)
setb trO
reti
Delay:
mốv r7, #20
Del: mov r6, #20
djnz r6, $
djnz r7, Del
rết
ma7doan: db OcOh, 0F9h, 0A4h, OBOh
db 99h, 92h, 82h, 0F8h,80h, 90h
end

; Ví di 11.10; Đồng hồ hiển thị dếm BCD không nén, hiển thị trên LED7 đoạn
(I g Oh
jnp rcset
crg Obli
jnp 'rimcrlnlO
riacro @dem <1, 2, 3 > ; 1. loại đếm,
; 2. so sáiih, 3. nhãn
IIOV a, II
;d da,#l
ca a
lìov 11, a
(jne a, #12,13
(ndmac

(Iiet equ P1
U'd7 cqu TO
)dn equ 38h
^hiicgio cqii 35h______________________

@dem phui, lOh, main3
@dem chucphut, 6h, main4
@dem gio, lOh, mainS
@dem chucgio, 24h, mainó
ljmp main?
TimerlntO: ; ngắt TimerlntO sau 50msec
inc bdn
clr trO
mov thO, #high (65536 - 4000)
mov tio, # low ( 65536-4000)
clr tfO
setb trO
reti
gmá: ; chương trình con giải mã
mov r5, #8
; so lần biến đổi mã
nnov rO, #30h
23


gio cqu 34h
chucphiit equ 33h
phiil equ 32h
chucgiay equ 31h
giay cqu 30h

org lOOh
Resei;
mov sp, #70h
mov dplr, #ma7doan
clr tfO
mov imod, #01h
mov ihO, #high (65536-4000)
khòi lạo trễ TimerO 50ms
mov tio, #low (65536-4000)
mov ie, #82h ; cho phép ngắi TimerO
selb trO
main7: mov chucgio, #00h
mainó: mov gio, #00h
mainS: mov chucphut, #00h
main4: mov phut, #00h
main3: mov chucgiay, #00h
maiii2: mov giay, #00h
main 1: mov bdn, #00h
Icall gma
mainO: Icall hthi
mov a, bdn
cjne a, #20, mainO
@dem giay, lOh, mainl
@dem chucgiay, 6h, main2

mov rl, #40h
gmaO: mov a, @rO
movc a, @a+dpir
mov @ rl. a
inc rO

inc rl
djnz r5, gmaO
ret
hthi: ; chương irình con hiển ihị
mov a, #01 i 11111B ; mã quét
mov rO, #40h
hthil: ĨĨIOV led7, @rO
movquel, a
Icall delay
mov quet, #Offh
inc rO
rr a
mov a, rO
cjne a, #46h, hthil
ret
Delay:
mov r7, #20
Del: mov rỏ, #20
djnz r6, $
djnz r7, Del
rei
; khai báo mã 7 đoạn lừ số 0 tới số
maVdoan: db OcOh, 0F9h, 0A4h, OlỉOh,
99h, 92h, 82h, 0F8h, 80h, 90h
cnd

2. H iển thị m ột b y te n h ị p h â n trê n LED 7 đ o ạ n
Dung lượng của một byte nhị phân dưỢc hiển thị ra LED 7 doạii dưỢc lập trình theo
hai giai đoạn:
- Biên đổi S() nhị phân (H) thành S(Ydạng BCD không nén hay dạng ỈIEX bằng chương trìnli.

- Biến đổi sơ" dạng BCD khơng nén (hay dạng HEX) của các sô" tự nhiên (từ 0 tối 9)
thành dạng mà 7 doạn bằng dọc bảng mã theo các giá trị của A dạng BCD sang dạng nià 7
doạii bằng lệnh MOVC A, @A + DPTR.
- Hiển thị mã 7 đoạn lơn các LED 7 đoạn.
Ví dụ 11.11 giới thiộu chương trình hiển thị các sơ" nhị p h ân của niột bytc chứa sô nhị
phân của 2521) ra các sô' th ậ p phân 252 trẽn các địn LED 7 đoạn.
Chương trình dùng ba đoạn chương trình:
- Doạn biơn đổi một byte nhị phân của sôi FCH ra sô"thập phân 252D, rồi ghi vào trong
các ô nhỏ lOh, 1 Ih và 12h.
- Đoạn giải rnã: biến đổi sô" thập phân 252D đã lưu trữ trong các ô nhỏ lOh, l l h và
12h (hàng đơn vị) th à n h các mã 7 đoạn bằng bảng mã có địa chỉ ban dầu là bangma. Mỗi sơ^
thập phân hàng tràm , chục, đơn vị có các mã A4h, 92h và A4h đưỢc ghi trong các vùng Iihó
có địa chỉ là 30h, 31h và 32h.
24


- Đoạn hiển thị: lệnh này đọc các mà trong các ỏ ĩihỏ có dịa chỉ là 30h, 31h và 32h đd
hiển thị trên ba LP]D 7 đoạn. Số* lần lặp lại và thời gian trỗ cỏ thể điểu chỉnh để m ắt nhìn
rõ nliíYt.

3. H iên thị hai b y te nhị p h â n
Mai byte nhị phân thường dược tích luỹ scí đơin, sơ* Lhời gian ở hai th a n h ghi TH, TL
của vi (ỉiều khiển. Số^ thập p h ân tơì đa chứa trong hai hyle nhị phân là số* th ập phân 65536,
tức chứa lỏi hàng chục ngàn (TTHOU), ngàn (THOU), hàng trăm (iỉưN ), h à n g chục (TEN)
và hang đơn vị (UNIT).
Chương trìn h hiển thị dữ liệu trong hai byte nhị phân cũng tương tự như một byte nhị
phân đã xét nhưng nó phức tạp hơn vì có tỏi õ con sơ" thập phán.
Cũng ró rơng viộc vối 3 đoạn chương trình là ;
/ỉiẻh đơi sơ nhị phâ n ra 5 con s ổ thập phân của hàng chục ngàn, ngàn, trăm , chục và
đơn vị. Vì có 5 doạn biến đổi nên không dùng phép chia cho 10 đơn giản như trường hỢp

một byte mà dùng các phép tr ừ liên tiếp với 100001) = 2710H.
lOOOD
=3E8H
lOOD
=64H
lOD
=OAH
Ta dùng lệnh gộp chung cho cách biến dổi trôn và ghi các sô' biôn đổi vào các ô nhớ liên
tiếp dành cho hàng chục ngàn (TTHOU), hàng ngàn (THOU), hàng trám (HUN), hàng chục
(TEN) và hàng đơn vị (UNIT) như ví dụ 11.12. Có thể dùng 5 phép chia cho lOD để biến đổi.
- Giải mã s ố thập p h â n sang sơ' mã 7 đoạn: tương tự chương trình ở trên, ghi vào các
dải nhớ tướng ứng với các địa chỉ đầu 30h, 40h, õOh, 60h và 70h.
- Hiển thị các m ã trên ra các LED 7 đoạn: tương tự chương trình ở trên.
4. H iển thị thờ i g ia n đ ế m lùi ở đ è n giao thơiiíĩ
Tại các n út giao thơng trong th à n h phơ hiộn dại, ngưịi ta mắc các đèn :
- LKD đơn to đổ diếu khiển các phương tiện giao thông với màu xanh (cho đi qua),
vànị( (chuẩn bị) và dỏ (cấm đi qua).
- Các LEI) 7 đoạn nhỏ, m àu xanh dể chỉ thị ihòi gian dếni lùi của các phương tiện
điíỢc phép di qua và các LED 7 đoạn nhỏ, niau ảõ (lỏ cliỉ tliỊ iỉidì ^Man đêm lùi của các
phương tiện khơng được phép di qua.
Do đó, Irong các hộp dèn phải có bộ dốrn lùi tliời ^nan từ ihời gian dặt sẵn (thưòng thòi
gian của màu xanh là 20sec, thòi gian của màu vàn^^ là õscc và thòi gian của màu đỏ = thời
gian xanh + vàng = 25sec).
; Ví dụ 11.11; Hicn ihị dữ liệu của mội byle nhớ trôn L1-:D 7 doạn
hang equ ỉ^)
coid eqii P3
org OOh
inov dpti\ #bangina
mov a, #Ofch ; so 252d
mov b,#10

div ab
inov 12h, b
12h chứa số đơn vị
mov b, # 10

4.

c m^.,ĐKHỂWA

hthi: mov r2, #250
IIIOV rO, #30h
mov r3,#0000()ỉ0()b
inov r4, #3
lap2: mov a, @rO
mov hang, a
mov cotd, r3
Icall delay
mov cotd, #00

25


×