Ụ Ụ M C L C
Trang
TÓM T TẮ
ụ 1. M c tiêu nghiên c u
ứ
ả ướ ể ạ ạ ữ ể ạ ố - Tìm h ng gi m thi u tai n n giao thông t i nh ng đo n đèo d c nguy hi m
ế ệ ố ươ ườ ử ụ ắ ạ ờ - Thay th h th ng g ầ
ng c u th ng có th i gian s d ng ng n và ph m vi quan sát
g nầ
ả ờ ỏ - Tr l i các câu h i:
ệ ố ầ (cid:0) H th ng có thay th t ế ố ươ
t g ng c u không ?
ộ ệ ố ắ (cid:0) Giá thành l p đ t m t h th ng ?
ặ
(cid:0) ậ Chi phí phát sinh trong quá trình v n hành ?
ề ả ậ ấ (cid:0) V n đ n y sinh trong quá trình v n hành ?
ể
ệ
ề ơ ả
ế ề ạ ạ ườ ữ ự ự
th c hi n
2. Trình t
ấ
Tìm hi u các v n đ c b n sau:
- Đi u ki n chi u sáng t
ệ i nh ng đo n đ ố
ng đèo d c
ệ ả ươ ầ - Kh năng quan sát và báo hi u qua g ng c u
ệ ủ ệ ố ế ả - Kh năng chi u sáng và báo hi u c a h th ng
ề ệ ắ ạ ữ - Đi u ki n n ng t ố
ạ
i nh ng đo n đèo d c
ạ ườ ộ ộ ữ ủ
- Đ r ng c a nh ng đo n đ ố
ng đèo, d c
ế ế ế ạ ệ ử ự ố ệ - Ti n hành thi t k m ch đi n t ầ
d a vào yêu c u và các s li u
ứ
ả
3. K t qu nghiên c u
ẩ ố ớ ả ế
Đ i v i s n ph m
ệ ả ự ả ự ổ ị - Th c hi n c nh báo n đ nh khi có xe đi vào khu v c c m bi n
ế
ạ ộ ế ộ ủ ề ả ả ầ ườ - Đ m b o yêu c u đi u khi n ch đ ho t đ ng c a đèn đ
ể ng
Đ i v i h th ng
ố ớ ệ ố
ỏ ọ ứ ả ầ - Nh g n và đ m b o yêu c u ch c năng
ả
ạ ườ ể ấ ợ ị - Giá thành th p phù h p đ trang b cho các đo n đ ng
Trang 1
ế ệ ượ Ti t ki m năng l ng
Trang 2
PH N IẦ :
Ớ
Ệ
GI
I THI U
ề
ặ ấ
1. Đ t v n đ
ệ ộ ế ộ ấ
ả
ả
ẫ
ặ ư
i gi
ệ
t là nh ng đo n đ
ế ầ
ươ ạ
ạ
ộ
ạ
i nh ng n i h n ch t m nhìn đ c bi
ơ ươ
ữ
ả ừ ữ
ệ ố
i nh ng n i đó đã có h th ng g
kho ng cách khá g n và không th c nh báo t
ầ
ể ả
ấ ơ
ế ờ ng c u theo th i gian s b b i bám vào làm m t đi tính năng ph n chi u. Xu t phát t
ầ
ẽ ị ụ
ố ấ
ế ủ ề ớ ộ ộ
Ả ề ạ ọ
ỏ
Ố
ơ ự ậ ỹ
Ố ” thu c lĩnh v c “K thu t đi n và c khí”.
ươ ữ ừ ạ ạ ạ ả ề
Hi n nay, tai n n giao thông là m t v n đ mà c xã h i đang quan tâm. Làm th nào
ỏ
ỏ ớ
ờ
ể
ể ả
i đáp th a đáng. Tai
đ gi m thi u tai n n giao thông là m t câu h i l n v n ch a có l
ấ
ườ
ạ
ữ
ạ ấ ễ ả
ơ ạ
ng cua g p.
n n r t d x y ra t
ầ
ệ
ạ
ặ
ng c u
M c dù t
ng c u, tuy nhiên vi c quan sát qua g
ệ ố
ữ
ượ
ả ở
ạ
c. H n n a h th ng
i ph i
l
xa đ
ừ
ươ
ả
ầ
g
ả
ầ
ấ
v n đ trên v i mong mu n đóng góp m t ph n nh bé c a mình vào cu c chi n gi m
ể
Ệ
thi u tai n n giao thông em đã ch n đ tài “
H TH NG C NH BÁO GIAO THÔNG
Ạ
ệ
ộ
ĐO N ĐÈO D C
ứ
ụ
2. M c đích nghiên c u
ộ ệ ố
T o m t h th ng c nh báo t i nh ng đo n đ xa cho các ph ệ
ng ti n qua l ườ
ng
cua g pấ
ạ ế ươ ng c u còn nhi u h n ch
ầ
ạ
3. Gi
ườ ữ ạ ạ ấ ế ệ ố ế ệ ố
ề
Thay th h th ng g
ầ
ể
ả
Góp ph n gi m thi u tai n n giao thông
ề
ế ấ
ả
thuy t v n đ
Khi có xe qua l
ằ ử
ỗ ạ ữ ị
ệ ể
ừ ữ
ng cua g p, n u có nh ng h th ng giúp ta phát
ư ậ ấ
ệ
ộ ả
hi n và x lí thông tin sau đó hi n th lên m t b ng hi u b ng ánh sáng màu thì nh v y r t
ố
t
i ch này. Vì ánh sáng có th quan
t và h u ích cho nh ng ph
sát t
ơ ữ ườ ượ ế ế ữ
ị ụ
i nh ng đo n đ
ế ng này r t c n đ
ộ ấ ấ ầ
ề ầ
ươ i nh ng đo n đ
ể
ệ
ươ
ng ti n giao thông qua l
ờ
xa và không b b i che m .
ạ
ạ
H n n a, t
ượ
ng là m t v n đ c n quan tâm r t l n, m c dù đã có h
i khu v c này mà h ng m t tr i. Tuy nhiên, khi không có ph
ấ ớ
ạ
ệ
ng ti n qua l
ầ ự
ộ ệ ố ặ ờ
ụ ệ ấ ậ
ế
ể ự
ằ ế ế ệ ế
ệ
ệ
ượ
t ki m năng l ng.
ế
ạ
ệ
ng ti n qua l
i hay không đ th c hi n vi c chi u sáng. N u không có ph
ầ ắ
ệ
ạ ượ ủ
t vi c chi u sáng nh m ti
ứ
c c a nghiên c u
ệ
ươ
ng ti n qua l ạ
i
ạ
ể ạ
ữ
c chi u sáng đ h n ch tai n n
ệ
ặ
đáng ti c. Tuy nhiên năng l
ố
ệ
ượ
th ng năng l
ố
ậ
ẫ
th ng đèn v n liên t c chi u sáng thì r t lãng phí đi n năng. Vì v y, c n m t h th ng nh n
ươ
ươ
ế
t có ph
bi
ng
ạ
ệ
ti n qua l
i thì c n t
ầ
4. Yêu c u đ t đ
ả
ệ ố
ẻ
ể
ệ ố ườ ể ề ả C nh báo chính xác ph
ỏ ọ
H th ng nh g n
ộ
ụ
Giá thành r , có th áp d ng r ng rãi
ệ
ng hi u qu
Đi u khi n h th ng đèn đ
Trang 3
PH N 2Ầ
PH
Ị
Ậ Ữ Ệ
ƯƠ
I. PH
Ệ
Ế
NG PHÁP VÀ THI T B THÍ NGHI M
ƯƠ
NG PHÁP THU TH P D LI U
ậ ữ ệ
1. Thu th p d li u
ệ ố ầ ả ươ ữ ị ị c ph ệ
ng ti n qua l ạ ạ
i t i nh ng v trí xác đ nh.
ể ư ậ
ả ử
ệ ượ ể ề ệ ố ể ế ế ượ
t đ
Yêu c u h th ng ph i nh n bi
X lí thông tin đ đ a ra c nh báo
Phát hi n đ c ban ngày và ban đêm đ đi u khi n h th ng chi u sáng
ự
ạ ệ ử
ầ ứ
2. Xây d ng ph n c ng
ơ ồ ố ủ
ự
2.1. Xây d ng s đ kh i c a m ch đi n t
a. Nguyên lí làm vi cệ
ạ ộ ườ ấ ở ị ủ ắ Quan sát trên hình là m t đo n đ ng cua khá g p, ỏ
v trí c a xe đ và xe tr ng s ẽ
ượ ể ả ế ộ ệ ố ử ụ ể ấ
không th th y nhau đ c. Do đó đ c nh báo cho hai xe bi t ta x d ng m t h th ng có
ư ệ ẽ ế ả ậ ế ệ ố
nguyên lí làm vi c nh sau. H th ng s có hai c m bi n nh n bi t có xe qua l ạ ặ ạ
i đ t t i hai
ử ừ ử ệ ề ả ẽ ế ử
ị A và B. Khi có xe qua A, B các c m bi n g i tín hi u v cho vi x lí. T đó vi x lí s
v trí
ệ ặ ố ươ ứ ạ ơ ặ ể ế ồ ờ ậ
b t tín hi u báo có xe lên ho c xu ng t ng ng t i n i đ t bi n báo ệ C. Đ ng th i, n u h
ượ ụ ế ợ ượ ặ ờ ữ ố
th ng đ c tích h p trong các tr đèn chi u sáng dùng năng l ạ
ng m t tr i trên nh ng đo n
ườ ậ ệ ố ề ể ế ả ạ đ ng này, nó còn có kh năng đi u khi n b t h th ng chi u sáng khi có xe qua l ế
i và n u
Trang 4
ạ ả ờ ị ướ ệ ố ẽ ắ ệ không có xe qua l i trong kho ng th i gian đ nh tr c h th ng s t ế
t vi c chi u sáng đ ể
ế ệ ti ệ
t ki m đi n năng.
ơ ồ ố
b. S đ kh i
ệ ủ ệ ố ể ạ 2.2. Tìm hi u các m ch đi n c a h th ng
ế ạ ả ả a. M ch c m bi n kho ng cách HCSR04
Trang 5
(cid:0) ả ả ế ổ ế ể ấ ị
Ẻ ể ả
ượ ử ụ
ế ử ụ
ớ ộ ả
ả ư ụ ừ ầ ả ỉ
ậ c s d ng r t ph bi n đ xác đ nh
C m bi n kho ng cách siêu âm HCSR04 đ
kho ng cách vì R và CHÍNH XÁC. C m bi n s d ng sóng siêu âm và có th đo
ộ
kho ng cách trong kho ng t
2 > 500 cm, v i đ chính xác g n nh ch ph thu c
vào cách l p trình.
o VCC > pin 5V Arduino.
o
(cid:0) ơ ồ ủ S đ chân c a HCSR04 g m ồ : VCC, trig, echo, GND. Trong đó:
o
ệ ừ ả ế ẽ trig > chân digital (OUTPUT), đây là chân s phát tín hi u t c m bi n.
ậ ạ ẽ ệ ượ i tín hi u đ ả
c ph n x ạ
o GND > GND Arduino.
echo > chân digital (INPUT), đây là chân s nh n l
ừ ậ ả
t v t c n
(cid:0) Nguyên lý ho t đ ng
ạ ộ
o Đ đo kho ng cách, ta s phát 1 xung r t ng n (10 microSeconds ) t
ả ể ừ ẽ ấ
ề ộ ẽ ằ ờ
ể ắ
chân
ở
ế ẽ ạ
ả
ậ
ế
trig. Sau đó, c m bi n s t o ra 1 xung HIGH
echo cho đ n khi nh n
chân
ủ
ớ
ạ ở
ạ ượ
ả
pin này. Chi u r ng c a xung s b ng v i th i gian
c sóng ph n x
l
i đ
ở ạ
ừ ả
ượ
i.
c m bi n và quay tr l
c phát t
sóng siêu âm đ
o T c đ c a âm thanh trong không khí là 340 m/s (h ng s v t lý), t
ượ
ố ậ
ươ
ng
ờ
c th i
ng v i 29,412 microSeconds/cm (10
ậ ượ ộ ủ
ớ
ẽ ể ả ố
ươ
đ
gian, ta s chia cho 29,412 đ nh n đ ằ
6 / (340*100)). Khi đã tính đ
c kho ng cách.
Trang 6
ậ ạ ế ố b. M ch nh n bi t sáng t i
ậ
ạ
ế
ố
M ch nh n bi
t sáng t
i
ạ ộ ủ ế ạ ở
Nguyên lí ho t đ ng c a m ch nh sau: Vào ban ngày ánh sáng chi u vào quang tr
ệ ở ủ ở ứ ư ả ạ ư
ậ
ẫ
ở ủ ệ ế ẫ ở m c cao. Khi
i, không có ánh sáng chi u vào quang tr làm đi n tr c a nó tăng nên Tranzitor d n vì
ở ứ ấ làm cho đi n tr c a nó gi m m nh vì v y Tranzitor ng ng d n nên chân C
ờ ố
tr i t
ậ
v y chân C m c th p.
ừ ấ ở ứ ở ứ ấ m c cao, ban đêm chân C m c th p.
T nguyên lí trên ta th y ban ngày chân C
ớ ể ế ậ ổ ố t ban ngày hay bu i t i.
ế ố
ề ể ể ạ Do đó ta k t n i chân C v i VĐK đ nh n bi
c. M ch đi u khi n bi n báo
ạ
ể
ấ
M ch công su t cho
bi n báo
ể
ệ
Bi n báo hi u
ạ ấ
*M ch công su t
ể ề ể ể ấ ọ ặ
Ta ch n Tranzito công su t ho c Fet đ đi u khi n bi n báo.
ệ ư ủ ể ở Khi có tín hi u đ a vào chân B c a Tranzitor đ kích m thì có dòng qua Tranzitor do
ẽ ể đó s làm bi n báo phát sáng.
ệ ư ư ể ẫ Khi không có tín hi u đ a vào chân B, Tranzitor ng ng d n nên bi n báo không phát
sáng (t t)ắ
ể ệ *Bi n báo hi u
ệ ượ ể ừ ể ế ệ ượ Bi n báo hi u đ c làm t các đèn led đ ti t ki m năng l ng
Trang 7
ấ ạ ủ
C u t o c a led
ể ệ ố ố ị B trí các Led theo hình mũi tên đ hi n th xe lên và xu ng
ố ử d. Kh i x lí trung tâm
M ch ạ
ệ đi n dùng
chíp
ể ề ể
AT89C2051 đ đi u khi n
ủ
ả
Hình nh c a IC
ộ ề ể ủ ư
ỉ ườ
ệ
ầ ố ệ
ệ ộ i 24Mhz.
ậ b ng kênh UART .
ộ ố ặ
* M t s đ c tính
ầ ủ
Đây là m t vi đi u khi n c a hãng atmel, đ y đ các tính năng nh chip 89C51.
ậ
ấ
Chip này ch có 20 chân. 15 đ
ng xu t nh p
ở ứ
ườ
m c 5V ).
ng dùng
Đi n áp làm vi c : 2,7 V 6V. (Th
ớ
ừ
ạ
ầ ố
T n s làm vi c: T n s dao đ ng th ch anh t
0 t
ROM : 2Kbyte Flash ROM .
RAM: 128 bytes.
ộ ị
Hai b đ nh thì 16bit.
ầ ự ằ
L p trình tu n t
ắ
ồ
Có 6 ngu n ng t .
Trang 8
ớ ươ ng trình.
ổ
ợ ẵ
ề ế ộ
ứ
Có 2 m c khóa b nh ch
ố ế
Có c ng n i ti p.
Hai b so sánh Analog tích h p s n trên chip.
ể
Tr c ti p ti p đi u khi n LED ngõ ra.
ộ
ự ế
ơ ồ ố
* S đ kh i
ơ ồ * S đ chân
ơ ồ
S đ chân
Trang 9
ừ ượ ừ ậ PORT 1: T ấ
chân 12 19: Xu t nh p d li u, t
P1.2 P1.7 đ
ấ ữ ệ
ứ ứ ự ầ ể
c dùng đ kéo lên
ng ng tích c c m c logic cao và th p cho hai đ u vào AIN0 và
ứ ươ
ủ ộ
bên trong. P1.0 và P1.1 t
ươ
ộ ế ạ ệ ng ng c a b so sánh chính xác trên chíp .
ầ ố
ể ị ự ể ề
ư ủ ể ế ể
ượ ử ụ ể
ữ
ồ ữ ầ
ữ ệ ừ ươ ư
ậ c mã d li u t
AIN1 t
ể ạ
Port 1, b khhuy ch đ i đ m đ u ra có th h xu ng 20mA và có th đi u khi n LED
ầ
ử ụ
ữ
ỉ ầ
hi n th tr c ti p. Ch c n 1s đ chuy n nh ng chân c a Port 1 s d ng nh nh ng đ u
ẽ
ữ
là nh ng ngu n dòng
vào. Khi chân P1.2 P1.7 đ
c s d ng nh nh ng đ u vào, chúng s
ượ
ượ
I vì đ
ng trình FLASH và
ch
c kéo lên bên trong. Port1cũng nh n đ
ệ
ự
th c hi n.
ệ ở
ể ậ ấ ộ
ườ
ữ ữ
ể ủ ứ
ố ố ị
ể
ư ẽ ầ ồ
ượ
ệ ủ ữ
ụ ụ ữ
ề ứ ủ ư ặ ữ
ố
PORT 3: Chân s 2, 3 , 6, 7, 8, 9, 11, nh ng chân này đã có đi n t r kéo lên. P3.6
ậ
ủ
ng xu t nh p trên b so sánh c a chip và không th truy c p .
c n i c đ nh gi a đ
ể
ở ự
c kéo lên bên trong
t c a 89C2051 nh sau: ượ
đ
ỉ ầ
Ch c n 1s đ chuy n nh ng chân c a Port 3 lên m c cao b i s kéo lên bên trong và có th
ử ụ
s d ng nh nh ng đ u vào, chúng s là nh ng ngu n dòng I vì đ
Port 3 cũng ph c v cho các ch c năng c a nhi u tính năng đ c bi
ệ ể ừ ề Flash và th c hi n.
ậ ượ
Port 3 cũng nh n đ
ệ ố c tín hi u đi u khi n t
ả ệ
ở ứ ườ ự
ng dùng m c 5V)
ố
ạ ộ ườ ng.
ầ i tr ng thái ban đ u.
t l p l
ạ ạ ả ế ề ộ
ạ ả ế
ạ ả ề ế
ng ng c a b khuy ch đ i đ o chi u, nó
ủ ộ
ộ ể ạ
c s d ng nh m t b giao đ ng trên chíp (hinh 1). Tinh th th ch
ượ ử ụ ưở ừ Vcc : Chân s 20: đi n áp vào kho ng 2,7V 6V( th
ố
GND : Chân s 10: chân n i mass.
ầ
ậ ạ ạ
RST : Xác l p l
i tr ng thái ban đ u . RST=0: Chíp ho t đ ng bình th
ạ ạ
ế ặ
ượ
c thi
RST=1: Chíp đ
ạ
XTAL1: Ngõ vào m ch t o xung clock trong chip và ngõ vào b khu ch đ i đ o chi u.
ề
ừ ộ
XTAL2: Ngõ ra t
b khu ch đ i đ o chi u.
ươ ứ
XYAL1, XTAL2 là ngõ vào và ngõ ra t
ư ộ ộ
ể ị
có th đ nh hình và đ
ặ
ộ
c s d ng. Ho c là nhân xung t
anh hay c ng h ượ ử ụ
ố
ng g m đ bên ngoài(hình 2)
Trang 10
ặ ệ * Thanh ghi có ch c năng đ c bi
ứ
ơ ồ ủ t :
ộ
ớ ặ
ượ
ọ
ệ ượ
t đ
ả
ướ
c đ a vào b ng d
ỉ ố ả ấ ả ư
ị ượ
ẫ ỉ ị
ị
ị
t c các đ a ch đ
ỉ ọ ẽ
ị
ệ ự ị ứ
c g i là thanh ghi có ch c
Bên trong s đ c a chip có m t vùng nh đ c bi
ỉ ủ
ằ
ư
ệ
ặ
i đây .L u ý r ng:
năng đ c bi
t.Các vùng đ a ch c a thanh ghi đ
ự
ể
ỉ ượ ử ụ
c th c
c s d ng, và các đ a ch tr ng có th không đ
không ph i t
ấ
ẽ
ấ ở ề ữ ệ
ệ
hi n trên chíp. Đ a ch đ c s truy xu t tr v d li u ng u nhiên, và đ a ch ghi s truy xu t
ề ế ộ
v ch đ không có hi u l c xác đ nh.
Trang 11
* B nh ch ng trình khóa bit:
ể ặ ộ ộ ớ ươ
ể ậ
Trên chíp có hai b khóa bit có th ho t đ ng không c n l p trình (U), ho c có th l p
ể ổ ề ệ ướ ạ ộ
ư ợ ầ ậ
ả trình (P) đ b sung thêm nhi u tính năng đ c li t kê trong b ng d i đây .
Trang 12
ỉ
ế ộ
* Ch đ ngh :
Ở ế ộ ạ ậ c đ t ủ
ch đ ng trong khi t
ề ạ ộ
ẽ ế ộ ế ộ
ổ ặ ượ
ầ ứ ế ậ ở ứ ạ
i b t kì khi nào có s kích ho t hay thay đ i nào đó, ho c đ
t l p ẫ
ấ ả ộ
ượ
ế ộ
t c b ph n ngo i vi v n
ủ
ầ
ượ ọ
ộ
c g i ra b i ph n m m. N i dung c a các thanh ghi trong RA M
ỉ
ổ ở
ệ
ch đ này. Ch đ ngh
t cũng s không đ i
ằ
c reset b ng
ư ợ
m c "L" n u bên ngoàiup không đ c
ặ ượ ử ụ t l p m c "H" n u bên ngoài pullup đ
ộ ế
c s d ng.
ệ ự ệ
ắ
ỳ
ầ ứ ề
ặ ở
ở
ặ
ự
ượ
c thi
ế
ế ậ ở ứ
ế
ỉ
ớ
ạ ắ
i t
t, lên t
ế ậ ạ
t l p l
ườ ậ
ể ợ
ậ
ấ ộ
i m t Port hay b nh ngoài i, ta không nên vi
ươ ừ ộ c. Đ
ỉ ượ ặ ạ
6. Ch đ power down :
ự ệ ộ
ượ
ẽ ặ ị t cũng s không đ i
ế ộ ng trình s
ấ ả
t c
ế
ch đ này cho đ n khi ch đ này
ế ậ ạ
t l p l c th c hi n. Trên chíp n i dung RAM và t
ế ộ
ị
i giá tr các
ứ ư ỉ
ch đ ngh , CPU đ
ế ộ
ho t đ ng. Ch đ này đ
ị
ấ ả
t c các giá tr trong thanh ghi đ c bi
và t
ạ ấ
ể ị ừ
có th b d ng l
ph n c ng. Các P1.0 và P1.1 nên đ
ử ụ
s d ng, ho c thi
ằ
ằ
ầ ư
ầ ứ
C n l u ý r ng khi “ngh ”l à k t thúc b ng m t ph n c ng. T ài li u th c hi n
ươ
ề
ừ
ư ớ
ch
đâu nó l
ng trình t
i hai chu k máy tr c khi các nguy ên t c đi u
ể
ộ
ế ị
khi n bên trong thi
t đ nh quy n truy c p vào b
i. Trên chíp ph n c ng quy
ế ị
ớ
ư
nh trong RAM trong tr
ng h p này, nh ng truy c p vào các port không th quy t đ nh
ế ộ
ờ ế
ả
ể ạ ừ ả
ượ
ộ
lo i tr kh năng này x y ra m t cách b t ng vi
đ
t cho m t port khi ch đ
ộ
ớ
ộ
ế ớ
t t
c l p l
ngh đ
ộ
Ở ế ộ
ế ộ
ch đ powerdown, b dao đ ng ng ng, và ch
ố
ẽ ọ
g i powerdown và l nh cu i cùng đ
các giá tr trong thanh ghi đ c bi
ế
k t thúc. Ch đ powerdown ch thoát ra khi reset l
SFR ( thanh ghi có ch c năng đ c bi
ệ
ư ớ ườ nguy ên.
ạ ộ
i ho t đ ng bình th
ệ
ổ ở ế ộ
ầ ứ
ạ
i ph n c ng. Thi
ữ
ẫ
t) nh ng trên RAM v n gi
ụ ồ ạ
ượ
c ph c h i l
ộ
ộ ệ
ỉ
ặ
i tr c khi VCC đ
ể Chú ý: Không nên reset l
ả ượ ạ
ự ủ ữ ứ ở ộ ạ m c tích c c đ dài, đ cho phép b giao đ ng kh i đ ng l ng
ệ
i và làm vi c c gi
Ở ả ế ộ c hai ch đ ngh và ch đ power donw, P1.0 và P1.1 nên set m c "0"
ế ộ
ệ ử ụ ể ặ ở ở ứ ở ứ
ế ử ụ và ph i đ
ị
ổ
n đ nh.
L u ý:ư
ỉ
ế
n u không s d ng đi n tr bên ngoài đ kéo lên, ho c set m c "1" n u s d ng
đi n ệ
ở bên ngoài đ kéo lên.
tr
ậ ể
* L p tr ình Flash :
ạ ề ể ớ ộ
ớ
ậ ộ ớ
ạ
ượ ậ ụ ộ
ộ ả ạ ờ
ể
ể ậ
ả
ộ ả ả ượ ớ ầ Chíp 89C2051 là m t lo i vi đi u khi n v i 2K bytes b nh PEROM có th xóa
ộ
i. Các mã l p trình b nh là m t
ấ ỳ
ể ả
c l p trình, đ đ m b o b t k
ằ
c xoá hoàn toàn b ng
ộ
hoàn toàn ( ví d , n i dung = FFH) và có th l p trình l
ể
ả
m ng byte t
i m t th i đi m. Sau khi các m ng đã đ
ố
ươ
ch
ng trình nào không tr ng byte, toàn b m ng nh c n ph i đ
đi n.ệ
ị ậ ỉ
ỉ ộ ế
ị ủ ị ộ ị
ể
Đ a ch b đ m bên trong: V i đi u khi n 89C2051 có m t đ a ch truy c p ( bên
ụ
ứ
giá tr 000H trên m c cao c a RST và áp d ng
ừ ứ ươ ng t
ỗ ượ ế c khuy n cáo nên
ỗ
ụ ữ
ặ
ứ ặ
ứ ặ
ứ
ứ ụ ữ ớ ề
ặ ở
ỉ ế
trong PEROM ) đ a ch đ m luôn luôn d t
ự ủ
m c tích c c c a xung d
chân XTAL1.
ể ậ
ậ
Thu t toán: Đ l p trình cho chip 89C2051, sau đây là các chu i đ
ử ụ
s d ng:
+ Chu i Powerup :
ệ
ồ
Áp d ng ngu n đi n gi a chân VCC và GND
ể
Đ t RST và XTAL1 đ GND
ứ
+ Đ t chân RST lên m c cao (m c 1)
Đ t chân P3.2 lên m c cao (m c 1)
ế ợ
+ Áp d ng k t h p gi i cho các chân
ể ự ộ ặ
2 m c logic “H” ho c “L” ; (“1” ho c “0”)t
ọ
P3.3, P3.4, P3.5, P3.7 đ l a ch n m t trong nh ng ch
ữ
ế ộ ậ ị
ể
ụ ế ặ
ạ
ng trình ho t
ướ
i đây.
ế v trí 000H đ n P1.0 đ n P1.7.
ữ ệ
ể ươ ươ
ả
ộ
đ ng hi n th trong PEROM b ng ch đ l p trình d
ừ ị
+ Áp d ng cho d li u mã byte t
ạ
+ Cho RST lên 12V đ kích ho t ch ng trình.
Trang 13
ở ộ ừ ươ ặ t byte trong PEROM ho c bit khóa. Các
ng trình m
ư ờ + Xung t
byteghi là chu k t
ể ể i ch
ấ
và th ng m t trong 1,2 ms.
ừ ấ c l p trình, th p h n RST t 12V, ta đ m c logic "1" và set
ữ ở ứ ệ
ợ
ế ế ể ậ ở ị ượ ừ ộ ơ
ữ
m c thích h p. D li u ra có th đ c
v trí k ti p, xung kích t ể ứ
ể ọ ở
Port 1.
chân XTAL1 đ ộ
c kích m t
ớ ượ ư ữ ệ ị c đ a vào Port 1.
ố ộ ị
ướ ướ c 8, thay đ i d li u và nâng cao c 6 thông qua b
i các b
ậ ố ủ ậ ế ế ả ặ ộ ớ
chân P3.2 t
ờ
ỳ ự ẹ
h n gi
ữ ệ ượ ậ
+ Đ ki m tra d li u đ
ế
chân P3.3 đ n P3.7 gi
+ Đ l p trình m t byte
ể
ầ
l n đ
ỉ
nâng cao s b đ nh đ a ch bên trong. D li u m i đ
ổ ữ ệ
ặ ạ
+ L p l
ỉ
ị
đ a ch truy c p cho toàn b 2K bytes m ng ho c cho đ n khi k t thúc đ i c a t p tin
là
ỗ m c "L".
ở ứ
ẽ ể ữ ệ ầ ự ữ ệ ế c.ượ
đ
+ Chu i Poweroff: XTAL1và RST set
Ki m tra d li u: chip AT89C2051 s ki m tra tu n t ể
d li u đ và cho bi ờ
t th i
ể
ế ể đi m k t
ỳ ờ ủ ớ
ẽ ố ọ
c đ c t
ạ
ấ ế ế
ể ắ ầ
ươ ế ậ ở
ở ứ ấ
ẽ ở ạ ươ ự ệ ể ậ ộ
ộ
thúc c a m t chu k vi
i byte
t. Trong th i gian m t chu k máy , nó s
ữ ệ
c ghi cu i cùng và s b sung các byte d li u trên P1.7. Sau khi ch y xong 1 chu kì
ệ
ạ
ẽ ắ
ầ
t c các port, nó s b t đ u ch y chu kì k ti p. Vi c
ế
ế ế
ượ
c ti n hành READY / BUSY
ệ
ể ượ
c theo dõi b i tín hi u
ng trình cũng có th đ
ờ
ở ứ
m c cao trong th i gian
m c th p sau khi chân P3.2
ứ
ng trình ng trình th c hi n đ báo BUSY (b n). chân P3.1 s tr l i m c cao khi ch
ẵ ỳ ế
ố
ượ
ẽ ổ
đ
ợ ệ ở ấ ả
ữ ệ
máy, th y d li u h p l
t
ể
ấ ứ
ki m tra có th b t đ u b t c lúc nào khi chu kì k ti p đ
ủ
ẵ
(s n sàng/b n): Byte ti n trình c a ch
ầ
đ u ra READY/BUSY. Chân P3.1
ươ
ch
ự
th c hi n đ báo READY ( s n sàng ).
ư ư ợ ậ ữ ệ ể ế ể
ng trình ki m tra : N u bit khóa LB1 và LB2 ch a đ c l p trình mã d li u thì ệ
ươ
Ch
ể ể
ừ ứ ứ ỉ
ư ờ
ữ ệ
i d li u thông qua các đ ng dây đ ki m tra:
ậ
ế ậ
t l p l
ụ ạ ị
i đ a ch truy c p bên trong là 000H và chân RST t
ọ
ệ ữ ệ ể ể ệ có
ể ọ ạ
th đ c l
m c L lên m c H.
+ Thi
ọ
ề
+ Áp d ng vi c ki m tra các tín hi u đi u khi n cho phép đ c mã d li u và đ c
các dữ
ấ ệ
ố ộ ị ượ ầ ị ỉ c kích 1 l n đ nâng cao s b đ nh đ a ch bên trong.
ộ ả ế ữ ệ
ướ
i các b
ậ ủ ế
ự ị ượ ừ
li u xu t ra t
Port 1.
ừ
ể
chân XTAL1 đ
+ Xung kích t
ọ
ế
ạ
i ng õ ra Port 1.
+Đ c ti p d li u mã byte ti p theo t
ọ ế
ặ ạ
c 3 và 4 cho đ n khi đ c h t toàn b m ng.
+L p l
ể ể
Bit khóa không th ki m tra tr c ti p , mã xác nh t c a bit khóa xác đ nh đ ằ
c b ng
ữ ủ ế
cách quan sát nh ng tính năng c a chúng..
ộ ả ầ ộ ượ Chip xóa : toàn b m ng PEROM (2KB) và 2 b Look Bit c n đ c xóa hoàn toàn
b ng ằ
ế ợ ệ ệ ệ ề ể ằ ữ tín hi u đi n b ng cách k t h p chính xác tín hi u đi u khi n và băng cách gi tín
hi u ệ
ở ứ ả ả ấ chân P3.1 m c th p trong 10ms. M ã m ng ph i vi ế ấ ả ở ứ
t c m c H trong lúc chip t t
xóa
ự ệ ệ ả ướ ớ ượ ậ ấ ố ộ làm vi c, và ph i th c hi n tr c khi b t kì byte tr ng nào trong b nh đ c l p trình
i.ạ
l
ệ ệ ọ ượ ọ ườ ể ỉ Đ c kí hi u byte: Kí hi u byte đ c đ c bình th ị
ng và ki m tra đ a ch 000H, 001H,
và
ả ượ ặ ở ứ ư ế ấ ả 002H, ngo i tr P3.5 và P3.7 ph i đ c đ t m c logic th p. Các k t qu nh sau:
ấ ở ế (000H) = 1EH ch s n xu t b i Atmel (001H) = 21H cho bi
ả ọ ộ ả t 89C2051
ượ M i mã byte trong m ng Flash đ c ghi và toàn b m ng có ạ ừ
ỉ ả
ệ ậ
* Giao di n l p trình:
th ể
Trang 14
ợ ủ ể xóa b b ng cách s d ng k t h p thích h p c a các tín hi u đi u khi n. Ghi chu k
ế ợ
ỗ ầ ể ề
ỉ ệ
ề ợ ờ ẽ ự ộ ự ẹ ờ ử ụ
và sau m i l n tri n khai s t ỳ
đ ng đi u ch nh phù h p th i gian h n gi
ế ộ ậ ỏ ằ
ạ ộ
ho t đ ng là t
ể
đ hoàn thành.
* Ch đ l p trình flash :
ệ * Đ c tính làm vi c DC :
ệ ể ạ ả ở ớ ổ ị ế ạ ạ gi ữ
i h n ngoài nh ng h n ch sau :
ổ
ế ệ ậ ẩ
ự ạ ủ
t quá đi u ki n cho phép, V có th v
ượ ả ượ
ủ ệ ề ơ ể ượ
t qua các tiêu chu n kĩ thu t
ớ
ả
c đ m b o khi dòng l n h n đi u ki n cho
ấ ủ ế ộ ỏ ặ
T = 40oC 80oC, Vcc = 2,7V 6V.
Ghi chú:
ề
Đi u ki n đ tr ng thái n đ nh là I ph i
I max = 20mA.
T ng dòng c c đ i c a I và các chân ngõ ra là 80mA.
ề
N u I v
liên quan c a chíp. Các chân chíp không đ
phép.
Vcc nh nh t c a ch đ powerdown là 2V.
Trang 15
ơ ồ ạ ế ố
e. S đ m ch nguyên lí k t n i
ề ầ ỗ ợ
ể ữ ậ ề ỹ ượ ử ụ
c s d ng ớ
i thi u ngôn ng C
Trong k thu t l p trình vi đi u khi n nói chung, ngôn ng l p trình đ
Ề
Ầ
II. PH N M M
ữ ậ
1. Ngôn ng l p trình IC và ph n m m h tr
ữ
ệ
1.1 Gi
ậ ậ
ạ ườ th ữ ậ
ng chia làm 2 lo i: Ngôn ng b c th p và Ngôn ng b c cao.
ấ
ữ ầ ơ ữ ậ ườ ơ
ữ ậ
ữ
i ngôn ng con ng
ơ
ơ ở ễ ữ ả
ậ Ngôn ng b c cao là các ngôn ng g n v
ằ
ữ ậ ể ể ế
ữ ụ
ỹ
ấ ứ ệ ả ề
ả
i cho l p tr
ươ ả
ộ ố
ng thông d ng h
ữ
ậ ệ
ữ ậ
t b ng ngôn ng b c cao cũng s đ
ể ẽ ượ
ữ ình vi
ị ạ ọ ợ
ệ ậ
i h n, do đó vi c l p
trình b ng các ngôn ng này tr nên d dàng và đ n gi n h n. Có th k đ n m t s ngôn
ả
n cơ
ư
C, Basic, Pascal… trong dó C là ngôn
ng l p trình b c cao nh
ữ
ề ả
ấ ử ụ
ể
ậ
trong k thu t vi đi u khi n. V b n ch t, s d ng các ngôn ng này thay cho ngôn ng
ậ
ậ
ự
ình viên trong vi c nghiên c u các t p l nh và xây d ng các
b c th p là gi m t
ộ
ề
ầ
ế ằ
ậ
ấ
c m t ph n m m
c u trúc gi
ng tr
i thu t. Ch
ể
ướ
c khi chuy n
trên máy tính g i là trình biên d ch (Compiler) chuy n sang d ng h p ng tr
sang mã máy.
ề ấ ể ầ ắ
Khi s d ng ngôn ng C ng
ộ ườ ậ
i l p tr
ình không c n hi u sâu s c v c u trúc c a b
ư
ườ ướ ẽ ớ ộ ề i ch a quen v i m t vi đi u khi n cho tr
ượ ể
ấ ươ ữ
ớ
ộ
ự ử ụ
ể
c ch
ủ ủ ộ
c s xây
ìm hi uể
ướ
c đó
ệ ử ụ
ộ ể ử ụ ươ
ộ ễ ơ ể
vi đi u khi n. Có nghĩa là v i m t ng
ờ
ả
ơ
ự
n, do không ph i m t th i gian t
ng tr
d ng đ
ình m t cách nhanh chóng h
ạ
ể
ề
ế
ng tr
i các ch
ki n trúc c a vi đi u khi n đó. Và vi c s d ng l
ình đã xây d ng tr
ầ
ữ
ặ ử
cũng d dàng h n, có th s d ng toàn b ho c s a ch a m t ph n.
Trang 16
1.2. Ngôn ng Cữ
ể ữ ệ 1.2.1 Ki u d li u
ể ữ ệ a. Ki u d li u trong C
ố
ị
ả
Kho ng giá tr
128 – +127
0 – 255
32768 +32767
0 65535
2147483648 +2147483647
0 – 4294697295
Ki uể
Char
Unsigned char
Int
Unsigned int
Long
Unsigned long
Float S Byte
1
1
2
2
4
4
4
ớ ế ể ữ ệ
ế ế ầ ị
ỉ ầ
ể ề ộ
ể
ụ
ườ ớ ừ * Khai báo bi n:ế
ỉ
Cú pháp: Ki u_d _li u Vùng_nh Tên_bi n _at_ Đia_ch ;
Ví d :ụ
Unsigned char data x;
ể
Khi khai báo bi n có th gán luôn cho bi n giá tr ban đ u.
Ví d :ụ
Thay vì: unsigned char x;
x = 0;
Ta ch c n: unsigned char x = 0;
ộ
ế
Có th khai báo nhi u bi n cùng m t ki u m t lúc.
Ví d : unsigned int x,y,z,t;
Ch đ nh vùng nh : t khoá “Vùng_nh ” cho phép ng ể ỉ
i dùng có th ch ra vùng nh
ị
ỉ
ể ư ế ử ụ ể ử ụ ươ ữ ớ ng tr
ớ ị
ẽ ặ ị ớ ớ
ớ
ử ụ
s d ng đ l u tr các bi n s d ng trong ch
ình. Các vùng nh có th s d ng là:
CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi không khai báo vùng nh trình d ch
Keil C s m c đ nh đó là vùng nh DATA.
Ý nghĩa
ươ ồ ng tr ình
ồ
ề
ớ ằ ị ị
ể ề ỉ ở Vùng
nhớ
ớ
B nh mã ngu n ch
CODE
ớ ữ ệ
ể
ấ ủ
B nh d li u g m 128 Byte th p c a RAM trong vi đi u khi n
DATA
ớ ữ ệ
ỉ
BDATA B nh d li u có thê đ nh đ a ch bit, n m trong vùng nh DATA
ớ ữ ệ
IDATA
ở ị ể
ồ ượ ủ
ồ
B nh d li u g m 128 Byte cao c a RAM trong vi đi u khi n ch có
ề
m t s dòng vi đi u khi n sau này
B nh d li u ngoài g m 256 Byte, đ
ỉ ặ
ượ ậ
ế ậ ượ c truy c p b i đ a ch đ t trên P0
ể
c truy c p ng có th lên đ n 64 KB, đ
ớ ữ ệ
PDATA
ớ ữ ệ
XDATA B nh d li u ngoài có dung l
ỉ ặ ộ
ộ
ộ
ộ
ộ ố
ố
ộ
ở ị b i đ a ch đ t trên P0 và P2
ị * Đ nh nghĩa l
ế ế
ư ộ ể ữ ệ ể ể ớ ữ ệ
c s d ng nh m t ki u d li u m i và có th dùng đ khai báo
ụ ể
ạ
i ki u
ễ
Cú pháp: typedef Ki u_d _li u Tên_bi n;
ẽ ượ ử ụ
Ten_bi n sau này s đ
ế
các bi n khác
Ví d : typedef int m5[5];
Trang 17
ể ữ ệ ầ ử ể ế ả Dùng tên m5 khai báo hai bi n tên a và b có ki u d li u là m ng 1 chi u 5 ph n t :
m5 a,b;
ể ữ ệ b. Ki u d li u trong Keil C
Ki uể
Bit
Sbit
Sfr
Sfr16 S bitố
1
1
8
16
ể ế ặ ộ
ề ể ế
ẽ ặ ế ể ị ị ị
bit : dùng đ khai báo các bi n có giá tr 0 ho c m t hay các bi n logic trên vùng
ớ
ủ
ứ ặ ổ
sbit, sfr, sfr16: dùng đ đ nh nghĩa các cho các thanh ghi ch c năng ho c các c ng
ạ ữ ệ ể ề ể
RAM c a vi đi u khi n. Khi khai báo bi n ki u bit trình d c Keil C s m c đ nh vùng nh
ử ụ
s d ng là BDATA.
ể ị
`
ậ
trên vi đi u khi n dùng đ truy nh p các đo n d li u 1 bit, 8 bit, 16 bit
c. M ngả
ề ộ ậ ể ộ ộ M ng là m t t p h p nhi u ph n t
ợ
ệ ớ
ữ ượ ế ớ ị
cùng m t ki u giá tr và chung m t tên. Các
ố ứ ự ủ
ẩ
ầ ử
ỉ ố
trong dãy ph n
c a ph n t
t v i nhau b i ch s hay s th t
ầ ử
ị ộ ậ
ộ
ư
ư ộ
c m t giá tr đ c l p v i các ph n t ầ ử
ở
m t bi n và l u tr đ có vai trò nh
ề ể ề ả ặ ả ả ộ
ả
ả
ầ ử ủ
ph n t
c a m ng phân bi
ầ ử
ỗ
ử
t
. M i ph n t
ả
ủ
khác c a m ng.
ề
M ng có th là m ng m t chi u ho c m ng nhi u chi u
Khai báo:
ử ả ả ầ ố
ẽ ố ố ỏ ố ầ ử ấ ớ
Cú pháp: Tên_ki u Vùng_nh Tên_m ng[s _ph n_t _m ng];
ả
ầ ử ả
m ng ta s có m ng có s ph n t b t kì.
ể
Khi b tr ng s ph n t
Ví d :ụ
Unsigned int data a[5],b[2] [3];
ẽ ả ề ả ộ ầ ử ả ả . M ng b là m ng hai
ề là 6.
ắ ầ ừ ố ề ả ả ấ ầ ớ
V i khai báo trên ta s có: m ng a là m ng m t chi u 5 ph n t
ổ
ầ ử
chi u, t ng s ph n t
ả
Ch s c a m ng b t đ u t s 0. M ng có bao nhiêu chi u ph i cung c p đ y đ ủ
ố
ỉ ố ủ
ỉ
ấ
b y nhiêu ch sô
ầ ử ả
Ví du: ph n t
ế
Khi vi m ng b[0] [1] là đúng
t b[0] là sai
d. Con trỏ
ộ ế ế ả ớ ồ
ị ữ ủ ả ớ ộ ố
ỉ
ị
ẽ ượ ấ
c c p phát m t kho ng nh bao g m m t s
ỉ ầ
ị
byte nh t đ nh dùng đ l u tr giá tr . Đ a ch đ u tiên c a kho ng nh đó chính là đ a ch
ủ
c a bi n đ
ể ứ ị ủ ứ ế ị
ộ
Khi ta khai báo m t bi n, bi n đó s đ
ấ ị
ể ư
ế ượ
c khai báo.
ỏ
ỉ
Con tr là m t bi n dùng đ ch a đ a ch mà không ch a giá tr , hay giá tr c a con
ị ớ ỏ ỉ
ượ ộ ớ ị
ộ
ả
ỏ ớ
tr chính là đ a ch kho ng nh mà nó tr t
i.
ỏ ớ
ớ ụ ể
i vùng nh đó chi m dung l
V i các vùng nh c th con tr t
ỏ ổ ế
ị ướ ụ
ng ph thu c vào
ớ ẽ
c vùng nh s có dung
ớ
ậ ố ớ ớ
ộ ớ ủ
đ l n c a vùng nh đó. Con tr t ng quát khi không xác đ nh tr
ượ
l ng l n nh t v ấ ì v y t
ỏ ụ ể
t nh t nên s d ng con tr c th .
cướ
ử ụ
ỏ
ổ
t ng Kích th
3 byte
ấ
ạ
Lo i con tr
ỏ
Con tr
quát
ỏ
Con tr XDATA
ỏ
Con tr CODE
ỏ
Con tr DATA
ỏ
Con tr IDATA
ỏ
Con tr PDATA 2 byte
2 byte
1 byte
1 byte
1 byte
Trang 18
ỏ
ế
Khai báo bi n con tr :
ữ ệ ế ể ớ
Cú pháp: Ki u_D _li u Vùng_nh *Tên_bi n;
Ví d :ụ
int *int_ptr;
long data *long_ptr;
ỏ ẽ ượ ớ ỉ ỏ ổ khi không ch rõ vùng nh con tr s đ c coi là con tr t ng quát.
ể ế ấ ả
ộ ậ
ấ ả
ể ư ợ
ể ể
ể ấ
ộ ữ ị
ể ữ ệ ấ
e. Ki u d li u c u trúc
ữ ệ
Ki u d li u c u trúc là m t t p h p các bi n, các m ng và c các ki u c u trúc khác
ữ ệ ấ
ị ở
c bi u th b i m t tên duy nh t. ki u d li u c u trúc dùng đ l u tr các giá tr , thông
ế ượ
đ
tin có liên quan đ n nhau.
ị ế ấ
ị Đ nh nghĩa và khai báo bi n c u trúc:
Đ nh nghĩa: typedef struct {
ầ ế
Khai báo các bi n thành ph n;
ể ấ } Tên_ki u_c u_trúc;
ế ớ ể Khai báo: Tên_ki u_c u_trúc Vùng_nh Tên_bi n;
ụ ấ
Ví d : typedef struct {
char day;
char month;
int year;
} Date_type;
Date_type date,date_arr[5];
1.3 Phép toán
ế
ể ể ế ị ị ệ
Phép gán kí hi u: “=”.
ế
Cú pháp: Bi n_1 = Bi n_2;
Trong đó Bi n_2 có th là giá tr xác đ nh cũng có th là bi n.
ế
ố ọ
1.3.1 Phép toán s h c
Phép toán
+
*
/
X=4)
ầ ư % ý nghĩa
Phép c ngộ
Phép trừ
Phép nhân
ầ
ấ
Phép chia l y ph n
nguyên
ấ
Phép chia l y ph n d
Ví dụ
X=a+b
X=ab
X=a*b
X=a/b
→
(a=9, b=2
a%b
→
(a=9, b=2 X=1)
1.3.2. Phép toán Logic
AND: &&
OR: ||
NOT: !
a. Các phép toán so sánh:
Trang 19
Ví dụ ý nghĩa
Phép
toán
> So sánh l n hớ nơ
ơ >= So sánh l n hớ ặ ằ
n ho c b ng
< So sánh nh hỏ nơ
a>b
4>5 các giá trị
0
a>=b
6>=2 các giá
tr 1ị
a
ơ <= So sánh nh hỏ ặ ằ
n ho c b ng
== ằ
So sánh b ng nhau
!= So sánh khác nhau
a<=b
8<=5 các giá
tr 0ị
a==b
6==6 các giá
tr 1ị
a!=b
9!=9 các giá trị
0
b. Phép toán thao tác Bit
ạ ừ
ị
ị
ấ Ví dụ
Bit_1 & Bit_2
Bit_1 | Bit_2
!Bit_1
Bit_1 ^ Bit_2
a<<3
a>>4
~a Phép toán
&
|
!
^
<<
>>
~ Ý nghĩa
Phép và (AND)
ặ
Phép ho c (OR)
ả
Phép đ o (NOT)
ặ
Phép ho c lo i tr (XOR)
D ch trái
ả
D ch ph i
L y bù theo bit
ế ợ c. Phép toán k t h p
Phép toán Ví dụ
+=
=
*=
/=
%= a+=5 <=> a=a+5
a=5 <=> a=a5
a*=5 <=> a=a*5
a/=5 <=> a=a/5
a%=5 <=> a=a%5
ấ ươ ng tr
ươ ình C
ình ng tr
1.3 C u trúc ch
ấ
1.3.1 C u trúc ch
ấ
* C u trúc
Trang 20
ị ề ử
ế
ẫ
ươ ự ỉ
1. Khai báo ch th ti n x lý
ụ
2. Khai báo các bi n toàn c c
3. Khai báo nguyên m u các hàm
4. Xây d ng các hàm và ch ng tr ình chính
ị ề ử
* Ví d :ụ
ỉ
Khai báo ch th ti n x lý
#include
#include
#define Led1 P1_0
ụ
ế
Khai báo bi n toàn c c
Unsigned char code Led_arr[3];
Unsigned char data dem;
Unsigned int xdata X;
ẫ Khai báo nguyên m u hàm
Void delay(unsigned int n);
bit kiemtra(unsigned int a);
void delay(unsigned int n)
{
ươ ế ụ ộ
Khai báo bi n c c b ;
ình tr ;ễ
ng tr
Mã ch
ươ ng tr ình chính
}
ự
Xây d ng các hàm và ch
Void main()
{
ươ ế ụ ộ
Khai báo bi n c c b ;
ình chính;
ng tr
Mã ch
}
Bit kiemtra(unsigned int a)
{
ế ụ
ươ ể ế Khai báo bi n c c bô;
ng tr
Mã ch ình ki m tra bi n a;
}
ả ượ ẫ ướ Chú ý:Hàm không khai báo nguyên m u ph i đ c xây d ng tr
hàm đó.
ở ví d trên do hàm “bit kiemtra(unsigned int a)” đã đ
ươ ở ấ ự ị Ở ụ
ể
trên nên có th xây d ng hàm b t kì v trí nào trong ch ượ
ng tr ờ ọ
ự
c hàm có l
i g i
ẫ
c khai báo nguyên m u hàm
ình.
ỉ ị ề ử
ả ệ ủ
ệ ộ ị
ươ
ướ ướ
ồ ạ ả
ng tr
ả ả ỉ ỉ
ượ
ế
ệ
ọ ự ị 1.3.2 Ch th ti n x lý
ữ
ị ề ử
ỉ
ệ
Các ch th ti n s lý không ph i là các l nh c a ngôn ng C mà là các l nh giúp cho
ị
ươ
ả
ạ
ồ
ình C thì
c khi biên d ch. Khi d ch m t ch
ng tr
vi c so n th o ch
ng tr
ình ngu n C tr
ượ
ị
ị
ả
ả
ươ
ình ngu n mà ta so n th o đ
không ph i chính b n ch
c d ch. Tr
c khi d ch, các
ề
ẽ ượ ị
ố
ẽ ỉ
ử
ệ
l nh ti n x lý s ch nh lý b n g c, sau đó b n ch nh lý này s đ
c d ch. Có ba cách ch nh
c dùng là:
lý đ
+ Phép thay th #define
+ Phép chèn t p #include
+ Phép l a ch n biên d ch #ifdef
Trang 21
ơ ổ ứ ị ươ ọ n và t ch c biên d ch, g ỡ ắ
ình ng n g n h ng tr
ệ ố
r i ch
ng tr
ỉ
ỉ ị ả ế ơ ị ề ử
ế
ỉ
t ch
Các ch th ti n x lý giúp ta vi
ươ
n.ơ
ả
ạ
ình linh ho t, hi u qu h
ị
* Ch th #define
Ch th #define cho phép t o các macro thay th đ n gi n
ự
ế ề ầ ướ ư ạ i nhi u l n, nh ng tr ị
c khi đ nh nghĩa c đ nh nghĩa l
ả ỉ ạ
l ị
i phóng đ nh nghĩa b ng ch th :
Ví d :ụ
ỉ
ủ ệ ộ ị ị ạ
ế
Cú pháp: #define Tên_thay_th dãy_kí_t
ộ
ị
ể ượ
M t Tên_thay_th có th đ
ằ
ị
ả
i ph i gi
#undef Tên_thay_thế
#define N 100
ị
* Ch th #include
ệ
ậ
Ch th #include báo cho trình biên d ch nh n n i dung c a t p khác và chèn vào t p
ươ ạ ả ồ
ỉ
ch
ình ngu n mà ta so n th o.
ng tr
Cú pháp:
Cách 1: #includeệ
Cách 2: #include“tên_t p”ệ
Ví d :ụ
Cách 1: #include
Ở ẽ ượ ệ ư ụ cách này t p regx51.h s đ c tìm trong th ể
m c INC đ chèn vào ch ươ
ng
trình ngu n.ồ
Cách 2: #include“regx51.h”
ẽ ượ ư ụ ứ ươ ệ c tìm trong th m c ch a ch ng tr ình ngu nồ
cách này t p regx51.h s đ
ớ
ư ụ ứ ặ ươ ồ Ở
ế
n u không có m i tìm trong th
ố m c INC
ư ệ ng tr ình ngu n thì ư ụ
Khi mu n chèn t p ngoài th
ứ ệ ệ ẽ ẫ ồ vi n ho c ngoài th m c ch a ch
ư ụ
ng d n th m c ch a t p. ệ
ả ườ
tên_t p s bao g m c đ
ỉ
ườ ư ệ ệ ể ị
ng dùng đ biên d ch các t p th vi n. ị
* Ch th #ifdef
ị
Ch th #ifdef này th
ỉ
Cú pháp:
Cách 1: #ifdef ten_macro
ươ ạ
Đo n ch ng trình
#endif
Cách 2: #ifdef ten_macro
ươ ạ
Đo n ch ng trình 1
#else
ươ ạ
Đo n ch ng trình 2
ạ ươ ẽ ượ c đ nh nghĩa “Đo n ch ng trình” s đ ị
c d ch
ượ
ẽ ị ỏ ươ Ở
ượ ạ
c l ng #endif
ế
cách 1 n u tên_macro đã đ
ạ
i “Đo n ch ị
ng trình” s b b qua.
ỉ
ị ườ ư ệ ệ ể ị
* Ch th #ifndef
Ch th #ifndef này th ị
ng dùng đ biên d ch các t p th vi n.
ỉ
Cú pháp:
Cách 1: #ifndef ten_macro
ươ ạ
Đo n ch ng trình
#endif
Cách 2: #ifndef ten_macro
ươ ạ
Đo n ch ng trình 1
#else
Trang 22
ươ ạ
Đo n ch ng trình 2
ượ ạ ị ươ ẽ ượ c đ nh nghĩa “Đo n ch ng tr ình” s đ ị
c d ch
ư
a đ
ẽ ị ỏ Ở
ượ ạ
c l ng #endif
ế
cách 1 n u tên_macro ch
ươ
ạ
i “Đo n ch ng trình” s b b qua.
ươ ng tr 1.3.3 Chú thích trong ch
ế ụ ệ ả ệ
Vi c vi
ằ
ư ế
ễ ả ơ ạ ộ
ng tr
ình
t chú thích trong trình nh m m c đích gi
ặ
ươ
ch
ọ
đ c có th hi u đ
ạ
giúp cho ta xem l ể ể ượ
i ch
ẽ
ế
ng đ n ch
ươ ưở
ị ạ
ờ ạ
ủ
i thích ý nghĩa c a câu l nh, đo n
iườ
ẽ
ế
t chú thích s giúp cho ng
ng trình ho c hàm ho t đ ng nh th nào và làm gì. Vi
ặ
ử ỗ ơ
ơ
n, s a l
ình d dàng và nhanh chóng h
i đ n gi n h n ho c
n.ơ
ình cũ mà ta đã làm tr lên nhanh h
ươ
ả
ng tr
ở
ình s không nh h
i chú thích khi biên d ch ch
ộ
ỉ ế ng tr
ình sang mã máy.L i gi
ặ
ặ ấ ấ ươ
ng tr
ươ
ng tr
ị
ấ ả ờ
t c l
ế
ượ ặ
c đ t sau d u “//” n u chú thích ch vi ả
ình mà ta so n th o
ả
i
t trên m t dòng ho c trong c p d u “\*” và
b n trong C
ơ ả
ẽ
C u trúc: if(dieu_kien)
ạ ươ ng trình
c ch
ươ
Chú thích trong ch
ẽ ỏ
vì trình d ch s b qua t
thích đ
“*\”.
ệ
Các l nh c
ệ
+ Câu l nh r nhánh if:
ấ
{
// Đo n ch
}
ư ệ ả Gi lí các câu l nh bên trong c òn sai thì nh y qua.
ả
i thích: n u dieu_kien đúng thì x
ấ ế
C u trúc: if(dieu_kien)
{
ươ ạ
// Đo n ch ng trình 1
}
else
{
ươ ạ
// Đo n ch ng trình 2
}
ế ử ạ ươ i thích: n u dieu_kien đúng thì x lí “Đo n ch ng trình 1” bên trong còn sai thì x
Gi
ử ả
ạ ươ l ý “Đo n ch ng trình 1”
ọ ệ
ấ
ệ
ệ
ệ
ệ
ự ệ ế ệ ả ỳ ươ ứ ồ
ng ng r i sau đó
ệ ờ
i thích: tu vào bi n có gia_tri_1 thì th c hi n các câu l nh t
ỏ ấ
ế ươ ứ ự ệ ồ
ng ng r i thoát.
ươ ứ ự ệ ệ ồ
ng ng r i thoát.
ị ự
+ Câu l nh l a ch n:
C u trúc: switch(bien)
{
case gia_tri_1: {//các câu l nh break;}
case gia_tri_2: {//các câu l nh break;}
case gia_tri_3: {//các câu l nh break;}
……………………………………...
case gia_tri_n: {//các câu l nh break;}
}
Gi
thoát kh i c u trúc nh câu l nh break.
ệ
Bi n có gia_tri_2 thì th c hi n câu l nh t
…………………….
ế
Bi n có gia_tri_n thì th c hi n các câu l nh t
ặ
+ Vòng l p xác đ nh:
Trang 23
ấ
ệ ử
ả i thích:
ế
ầ ệ
ặ
ấ
ệ ặ ệ ự ệ ế ề ệ ề
thích: th c hi n l p các câu l nh khi đi u ki n đúng n u đi u ki n sai thì thoát
ặ
ặ ị
ấ
ệ ặ ệ ệ ề ế ế ể thích: th c hi n l p các câu l nh sau đó ki m tra đi u ki n n u đúng, n u sai thì
ặ
ậ ỏ ề ạ ầ
ậ
Keil uVision4
Proteus 7
ậ C u trúc: for(n=m;nl), còn n là bi n.
ệ ặ
ự
th c hi n l p các câu l nh (lm) l n.
ị
+ Vòng l p không xác đ nh while:
C u trúc: while(dieu_kien)
{
// các câu l nhệ
}
ả
Gi
ỏ
kh i vòng l p.
+ Vòng l p không xác đ nh do while:
C u trúc: do
{
// các câu l nhệ
} while(dieu_kien);
ự
ả
Gi
ỏ
thoát kh i vòng l p.
1.4 Ph n m m l p trình và ch y mô ph ng.
ầ
* Ph n mêm l p trình
ầ
ỏ
ề
* Ph n m m mô ph ng
ư ồ
2. L u đ thu t toán
ươ ỏ 3. Ch ạ
ng trình ch y mô ph ng
Trang 24
ươ ỏ ế ượ ế ồ ằ ả
ng trình mô ph ng, c m bi n HCSR04 đ ả
c thay b ng c m bi n h ng
Trên ch
ngo iạ
#include
sbit cb_sang = P3^2;
sbit ir1 = P3^3;
sbit ir2 = P3^4;
sbit baohieu = P1^7;
sbit xelen = P1^6;
sbit xexuong = P1^5;
unsigned char kt_xelen,kt_xexuong,on;
void setup(void)
{
TMOD = 0x01;
TH0=0x15;
TL0=0xa0;
TF0=0;
ET0=1;
TR0=1;
EA=1;
}
void delay () interrupt 1
{
TR0=0;
TF0=0;
TH0=0x15;
TL0=0xa0;
if((kt_xelen>0)||(kt_xexuong>0))
{
kt_xelen;
kt_xexuong;
}
if(on>0)
on;
if(on>0)
{
if(cb_sang==0)
baohieu=0;
}
else
baohieu=1;
if(kt_xelen==0)
xelen=1;
if(kt_xexuong==0)
xexuong=1;
TR0=1;
}
void main(void)
{
Trang 25
setup();
P3 = 0xff;
P1 = 0x00;
while(1)
{
if(ir1==0) //0: sang; 1: tat
//chinh cam bien hong ngoai
{
xelen = 0;
kt_xelen=200;
on=250;
}
if(ir2==0) //chinh cam bien hong ngoai
{
xexuong = 0;
kt_xexuong=150;
on=250;
}
}
ả
ả ự
ấ ộ ố
ả ệ
ế ầ ế
ạ ạ ấ ượ }
4. M t s hình nh k t qu th c nghi m trên mô hình
Hình nh mô hình đo n cua g p, h n ch t m nhìn làm hai xe không th y đ c nhau
ệ ệ ố ượ ậ ự ả Tín hi u báo hi u có xe đang xu ng đ ế
c b t khi có xe qua khu v c c m bi n
Trang 26
ệ ượ ậ ự ả ệ
Tín hi u báo hi u có xe đang lên đ ế
c b t khi có xe qua khu v c c m bi n
Trang 27
ệ ố ệ
ạ
ố ử Các m ch đi n dùng trong h th ng
+ Kh i x lí trung tâm
ố ả ế ể ề ấ ệ
+ Kh i c m bi n và đi u khi n công su t tín hi u
ố ả ế ố ỏ + Kh i c m bi n (dùng trong hê th ng mô ph ng)
Trang 28
ố ồ
+ Kh i ngu n
Trang 29
ệ ộ ộ ạ
ệ
ả ở
ế
ồ ồ
ồ
ồ
ạ ồ ổ 5. Giá thành cho m t b m ch đi n
Chíp 89C2051: 25000 đ ngồ
ồ
ạ
Đi n tr các lo i: 20000 đ ng
ồ
C m bi n HCS04: 80000 đ ng
Led: 500 đ ng/1 led x 100 = 50000 đ ng
FET IRF3205PBF: 15000 đ ng/1 con x 2 = 30000 đ ng
T ng chi phí: 205000 đ ng/m ch
Ả
ệ ử ế ệ ả ố ạ ổ ạ ị t, m ch ch y n đ nh. Ế
III. K T QU
ạ
Qua vi c th nghi m và ch y trên mô hình đã cho k t qu t
Ậ Ả
IV. TH O LU N
ỏ ư ử ụ ế ả ả HCSR04
ạ
ượ ố ớ ả ế nên ch a đánh giá đ c đ i v i c m bi n này.
ụ ả
Trong quá trình ch y mô ph ng ch a s d ng c m bi n đo kho ng cách
ư
Đ c m bi n
ể ụ ệ ệ ị ỉ
ế
ế HCSR04 không ph i làm vi c liên t c nên s d ng thêm c m bi n
ử ụ
ả
ệ
ế HCSR04 ch có nhi m v xác đ nh xe
ả
i, còn c m bi n
ể
ề ể ả
ộ
ố ử ệ ệ ể
Ậ ạ
ể
chuy n đ ng đ phát hi n xe qua l
ể ử
lên hay xu ng đ g i tín hi u cho vi x lí đi u khi n tín hi u bi n báo.
V. K T LU N
ủ ệ ạ ả ộ Ế
Qua quan sát th c t
ườ ể ế
ự
ầ ạ
ạ ạ
ấ
ự ế
và kh năng ho t đ ng c a m ch đi n, em th y đây là m t m ch
ế ượ
ấ
ữ
ệ ấ
đi n r t thi
t th c cho nh ng đo n đ
c tri n khai và nhân
ể
ẽ
ộ
r ng s góp ph n gi m thi u tai n n giao thông t i nh ng đo n đ ng đó.
ạ ộ
ng quanh co, cua g p. N u đ
ạ ườ
ữ
ệ ấ ả
ẻ ạ
ụ ạ ả ớ ể ứ
V i giá thành r nên kh năng có th ng d ng m ch đi n r t cao trong th c t ự ế
.
Trang 30