Xuất phát từ yêu cầu thực tế cũng như mục đích của nhóm là muốn nghiên cứu và học tập đạt hiệu quả cao (lý thuyết gắn liền với thực tế).
- Xuất phát từ yêu cầu làm bài tập lớn.
=> Vì vậy tập thể nhóm muốn phát triển thêm ý tưởng là: Thiết kế mạch đếm sản phẩm và điều khiển động cơ. Đây là ý tưởng theo đánh giá chủ quan của nhóm là có tính thực tế , có khả thi và có thể phát triển. Tuy đề tài đưa ra là không mới nhưng cũng là khó khăn đối với những người mới học. Chính vì vậy chúng em rất cần sự động viên và giúp đỡ của thầy để có thể thực hiện tốt đề tài này.
24 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2477 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Thiết kế mạch đếm sản phẩm và điều khiển động cơ dùng IC89C51- Bài tập lớn Vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
B¸o c¸o
BµI tËp lín Vi xö lÝ
Giáo viên hướng dẫn: Phạm Ngọc Nam
Nhóm:
Phạm Toàn Vinh ( C )
Phạm Thị Khánh Ly
Nguyễn Mạnh Quân
Chu Văn Thắng
Phạm Hồng Thái
Líp: §iÖn tö 9 – K47
Đề tµi: Thiết kế mạch đếm sản phẩm và điều khiển động cơ
Mục đích :
Xuất phát từ yêu cầu thực tế cũng như mục đích của nhóm là muốn nghiên cứu và học tập đạt hiệu quả cao (lý thuyết gắn liền với thực tế).
Xuất phát từ yêu cầu làm bài tập lớn.
=> Vì vậy tập thể nhóm muốn phát triển thêm ý tưởng là: Thiết kế mạch đếm sản phẩm và điều khiển động cơ. Đây là ý tưởng theo đánh giá chủ quan của nhóm là có tính thực tế , có khả thi và có thể phát triển. Tuy đề tài đưa ra là không mới nhưng cũng là khó khăn đối với những người mới học. Chính vì vậy chúng em rất cần sự động viên và giúp đỡ của thầy để có thể thực hiện tốt đề tài này.
i. s¥ §å KHèI Vµ NGUY£N lý HO¹T §éNG :
Nguồn 5V
Nguồn 12V
Khối nhận biết sản phẩm
Khối xử lý
IC89C51
Khối hiển thị
Động cơ
Phím chức
năng
Bộ khuếch đại
1. Khối xử lý:
Gồm có IC89C51 và mạch dao động của nó.
IC 89C51 lµ mét lo¹i vi ®iÒu khiÓn trong hä 8051 víi cÊu tróc c¸c thanh ghi , c¸c bé ®Öm vµ c¸c bÝt cê hoµn toµn ®îc ®iÒu khiÓn b»ng ch¬ng tr×nh.
ChÝp nµy cã bé nhí RAM 2K rÊt thuËn tiÖn cho c¸c ®iÒu khiÓn cì lín
Ch¬ng tr×nh viÕt cho IC nµy rÊt phong phó nh C, C++, Asembly , thËm chÝ c¶ nh÷ng ng«n ng÷ bËc cao nh Visual C++, Java,.. tuy nhiªn ®Ó n¹p vµo bé nhí ®iÒu khiÓn chóng ta ph¶i chuyÓn ch¬ng tr×nh viÕt tõ c¸c ng«n ng÷ kh¸c nhau sang file ®Þnh d¹ng kiÓu Hexa, råi dïng bé n¹p ®Ó n¹p.
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-51TM vÒ ch©n ra vµ tËp lÖnh.
S¬ ®å khèi cña AT89C51
AT89C51 cã c¸c ®Æc trng c¬ b¶n nh sau: 4 Kbyte 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 và hç trî hai chÕ ®é tiÕt kiÖm n¨ng lîng ®îc lùa chän b»ng phÇn mÒm. ChÕ ®é nghØ dõng CPU trong khi vÉn cho phÐp RAM, c¸c bé ®Þnh thêi/®Õm, port nèi tiÕp vµ hÖ thèng ng¾t tiÕp tôc ho¹t ®éng. ChÕ ®é nguån gi¶m duy tr× néi dung cña RAM nhng kh«ng cho m¹ch dao ®éng cung cÊp xung clock nh»m v« hiÖu ho¸ c¸c ho¹t ®éng kh¸c cña chip cho ®Õn khi cã reset cøng tiÕp theo.
I.1 M« t¶ c¸c ch©n
C¸c cÊu h×nh ch©n ra cña AT89C51
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
Ngâ vµo ng¾t ngoµi 0
P3.3
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
§iÒu khiÓn ghi bé nhí d÷ liÖu ngoµi
P3.7
§iÒu khiÓn ®äc bé nhí d÷ liÖu ngoµi
Port 3 còng nhËn mét vµi tÝn hiÖu ®iÒu khiÓn cho viÖc lËp tr×nh Flash vµ kiÓm tra ch¬ng tr×nh.
- 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.
RST
M¹ch reset t¸c ®éng b»ng tay vµ tù ®éng reset khi khëi ®éng m¸y
- ALE/ (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. Chaân naøy cuõng laøm ngoõ vaøo xung laäp trình () trong thôøi gian laäp trình cho Flash.
Khi hoaït ñoäng bình thöôøng, xung ngoõ ra ALE lu«n coù taàn soáä khoâng ñoåi laø 1/6 taàn soá cuûa maïch dao ñoäng, coù theå ñöôïc duøng cho caùc muïc ñích ñònh thôøi töø beân ngoaøi vào taïo xung clock. Tuy nhieân, löu yù laø moät xung ALE seõ bò boû qua trong moãi moät chu kyø truy xuaát boä nhôù döõ lieäu ngoaøi.
Khi caàn, hoaït ñoäng ALE coù theå ñöôïc voâ 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 laïi, chaân naøy seõ ñöôïc keùo leân cao. Vieäc set bit khoâng cho pheùp hoaït ñoäng choát byte thaáp cuûa ñòa chæ seõ khoâng coù taùc duïng neáu boä vi ñieàu khieån ñang ôû cheá ñoä thöïc thi chöông trình ngoaøi.
- (29)
(Program Store Enable) laø xung ñieà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, ñöôïc kích hoaït hai laàn moãi chu kyø maùy, nhöng hai hoaït ñoäng seõ bò boû qua moãi khi truy caäp boä nhôù döõ lieäu ngoaøi.
- /Vpp (31)
(External Access Enable) laø chaân cho pheùp truy xuaát boä nhôù chöông trình ngoaøi (baét ñaàu töø ñòa chæ töø 0000H ñeán FFFFH).
= 0 cho pheùp truy xuaát boä nhôù chöông trình ngoaøi, ngîc l¹i =1 seõ thöïc thi chöông trình beân trong chip
Tuy nhieân, löu yù raèng neáu bit khoaù 1 (lock-bit 1) ñöôïc laäp trình, seõ ñöôïc choát beân trong khi reset.
Chaâ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 choïn).
- XTAL1 vaø XTAL2
XTAL1 vaø XTAL2 laø hai ngoõ vaøo vaø ra cuûa moät boä khueách ñaïi ñaûo cuûa maïch dao ñoäng, ñöôïc caáu hình ñeå duøng nhö moät boä dao ñoäng treân chip.
Khoâng coù yeâu caàu naøo veà chu kyø nhieäm vuï cuûa tín hieäu xung clock beân ngoaøi do tín hieäu naøy phaûi qua moät flip-flop chia hai tröôùc khi ñeán maïch taïo xung clock beân trong, tuy nhieân caùc chi tieát kyõ thuaät veà thôøi gian möùc thaáp vaø möùc cao, ñieän aùp cöïc tieåu vaø cöïc ñaïi caà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 traïng thaùi nguû trong khi taát caû caùc ngoaïi vi beân trong chip vaãn tích cöïc. Cheá ñoä naøy ñöôïc ñieàu khieån bôûi phaàn meàm. Noäi dung cuûa RAM treân chip vaø cuûa taát caû caùc thanh ghi chöùc naêng ñaëc bieät vaãn khoâng ñoåi trong khi thôøi gian toàn taï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 caàn löu yù raèng khi cheá ñoä nghæ ñöôïc keát thuùc bôûi moät reset cöùng, chip vi ñieàu khieån seõ tieáp tuïc bình thöôøng vieäc thöïc thi chöông trình töø nôi chöông trình bò taïm döøng, trong voøng 2 chu kyø maùy tröôùc khi giaûi thuaät reset meàm nắm quyeàn ñieàu khieån.
ÔÛ cheá ñoä nghæ, phaàn cöùng treân chip cấm truy xuaát RAM noäi nhöng cho pheùp truy xuaát caùc chaân cuûa caùc port. Ñeå traùnh khaû naêng coù moät thao taùc ghi khoâng mong muoán ñeán moät chaân port khi cheá ñoä nghæ keát thuùc baèng reset, leänh tieáp theo yeâu caàu cheá ñoä nghæ khoâng neân laø leänh ghi ñeán chaân port hoaëc ñeán boä nhôù ngoaøi.
I.2.2 ChÕ ®é nguån gi¶m
Trong cheá ñoä naøy, maïch dao ñoäng ngöøng hoaït ñoäng vaø leänh yeâu caàu cheá ñoä nguoàn giaûm laø leänh sau cuøng ñöôïc thöïc thi. RAM treân chip vaø caùc thanh ghi chöùc naêng ñaëc bieät vaãn duy trì caùc giaù trò cuûa chuùng cho ñeán khi cheá ñoä nguoàn giaûm keát thuùc. Chæ coù moät caùch ra khoûi cheá ñoä nguoàn giaûm, ñoù laø reset cöùng.
Vieäc reset seõ xaùc ñònh laïi caùc thanh ghi chöùc naêng ñaëc bieät nhöng khoâng laøm thay ñoåi RAM treân chip. Vieäc reset khoâng neân xaûy ra (chaân reset ôû möùc tích cöïc) tröôùc khi Vcc ñöôïc khoâi phuïc laïi möùc ñieän aùp bình thöôøng vaø phaûi keùo daøi traïng thaùi tích cöïc cuûa chaân reset ñuû laâu ñeå cho pheùp maïch dao ñoäng hoaït ñoäng trôû laïi vaø ñaït traïng thaùi oån ñònh.
Traïng thaùi cuûa caùc chaân trong thôøi gian toàn taïi cheá ñoä nghæ và cheá ñoä nguoà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æ
Beân trong
1
1
Döõ lieäu
Döõ lieäu
Döõ lieäu
Döõ lieäu
Nghæ
Beân ngoaøi
1
1
Thaû noåi
Döõ lieäu
Döõ lieäu
Döõ lieäu
Nguoàn
giaûm
Beân trong
0
0
Döõ lieäu
Döõ lieäu
Döõ lieäu
Döõ lieäu
Beân ngoaøi
0
0
Thaû noåi
Döõ lieäu
Döõ lieäu
Döõ lieäu
I.3 C¸c bÝt kho¸ bé nhí ch¬ng tr×nh
Treân chip coù ba bit khoaù, caùc bít naøy coù theå khoâng cho pheùp laäp trình hoaëc cho pheùp laäp trình, caùc bit naøy cho ta theâ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 ôû chaân ñöôïc laáy maãu vaø ñöôïc choát trong khi reset. Neáu vieäc caáp nguoàn cho chip khoâng coù coâng duïng reset, maïch choát ñöôïc khôûi ñoäng baèng moät giaù trò ngaãu nhieân vaø giaù trò naøy ñöôïc duy trì cho ñeán khi coù taùc ñoäng reset. Ñieàu caàn thieát laø giaù trò ñöôïc choát cuûa phaûi phuø hôïp vôi möùc logic hieän haønh ôû chaân naøy.
Caùc bit khoùa chöông trình
Loaïi baûo veä
Cheá ñoä
LB1
LB2
LB3
1
U
U
U
Khoâ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 khoâng ñöôïc pheùp tìm naïp leänh töø boä nhôù noäi, ñöôïc laáy maãu vaø ñöôïc choát khi reset, hôn nöõa vieäc laäp trình treân Flash bò caám
3
P
P
U
Nhö cheá ñoä 2, caám theâm vieäc kieåm tra chöông trình
4
P
P
P
Nhö cheá ñoä 3, caám theâm vieäc thöïc thi chöông trình ngoaøi
Tín hiệu lấy ra từ khối nhận biết sản phẩm và khối các công tắc và các thông báo phụ được đưa vào IC theo chương trình đã được lập trình sẵn.
Trong IC89C51 thanh ghi R0 lưu số kẹo định sẵn , thanh ghi R1 lưu số gói định sẵn ,thanh ghi R2 lưu số gói đang đếm ,số kẹo đang đếm lưu tại TL0.
IC hoạt động như một bộ đếm và khi nhận tín hiệu vào thì sẽ đếm tăng lên một cứ như thế mạch sẽ đếm được số sản phẩm và điều khiển động cơ như đã lập trình.
* Khối nguồn:
Có hai nguồn cấp điện :
Nguồn cấp điện 5V cho IC89C51,khối nhận biết sản phẩm,khối hiển thị ,khối các công tắc và các thông báo phụ
Nguồn cấp điện 12V cho động cơ và bộ khuếch đại.
2. Khối nhận biết sản phẩm:
§Ó nhËn biÕt tÇng chóng em dïng SENSOR quang víi kÝch thÝch lµ ¸nh s¸ng. TÝn hiÖu nhËn ®îc sÏ so s¸nh víi mét møc ®iÖn ¸p ®Þnh s½n ®Ó ®a ra tin hiÖu sè.
Vra
80%Vcc
t
Mạch bao gồm 2 điện trở ,1 diode phát , 1 diode thu , 1 biến trở và một bộ khuếch đại thuật toán làm việc như một Trigơ có sơ đồ nguyên lý như hình vẽ trên:
- Ta có thể điều chỉnh VR1 để V3 có một giá trị điện áp xác định phù hợp,bình thường D1 phát và D2 thu nhận tín hiệu D2 thông thì điện trở của nó giảm xuống làm cho V2 =0 lúc đó hiệu điện áp vào bộ khuếch đại thuật toán là:V3-V2=V3 ,vì bộ khuếch đại thuật toán làm việc như một Trigơ nên điện áp ra là Ura =80%Vcc
- Khi có một sản phẩm đi qua thì D2 không nhận được tín hiệu từ D1 phát nữa nên nó có điện trở rất lớn ,làm cho thế tại V2 tăng lên =>điện áp vào bộ khuếch đại thuật toán là V3-V2 (ta phải điều chỉnh VR1 = điện trở của D2 lúc không thông) =>V3-V2=0
=> Vậy là ta đã nhận được một đột biến điện áp (một sườn âm)kích cho 89C51 làm việc.
3. Khối hiển thị:
- Gồm 6 đèn LED 7 thanh để hiển thị số sản phẩm định trước và số sản phẩm đã đếm được.
- Trong khối này có các IC7447 là các IC giải mã lấy dữ liệu từ 89C51 và giải mã ra LED 7 thanh
- LED 7 thanh được dùng để hiển thị số sản phẩm định sẵn lấy ra từ các chân của cổng P1 , số sản phẩm định sẵn lấy ra từ 4 bít thấp của P2, số gói sản phẩm đếm được lấy ra từ 4 bít cao của P2, số sản phẩm đếm được lấy ra từ các chân của cổng P0 ( tất nhiên là đã qua 7447).
4. Bộ khuếch đại:
- Vì tín hiệu ra từ IC89C51 quá nhỏ nên ta phải cho qua bộ khuếch đại tăng tín hiệu ra để điều khiển động cơ.
5. Khối nguồn:
Có hai nguồn cấp điện :
- Nguồn cấp điện 5V cho IC89C51,khối nhận biết sản phẩm,khối hiển thị ,khối các công tắc và các thông báo phụ.
- Nguồn cấp điện 12V cho động cơ và bộ khuếch đại.
II. S¥ §å NGUY£N lý :
III. Ch¬ng tr×nh nguån :
; --- 8051 registers ---
ACC data 0xE0
B data 0xF0
DPH data 0x83
DPL data 0x82
IE data 0xA8
IP data 0xB8
P0 data 0x80
P1 data 0x90
P2 data 0xA0
P3 data 0xB0
PCON data 0x87
PSW data 0xD0
SBUF data 0x99
SCON data 0x98
SP data 0x81
TCON data 0x88
TH0 data 0x8C
TH1 data 0x8D
TL0 data 0x8A
TL1 data 0x8B
TMOD data 0x89
; --- 8051 register bit fields ---
; IE
EA bit 0xAF
ES bit 0xAC
ET1 bit 0xAB
EX1 bit 0xAA
ET0 bit 0xA9
EX0 bit 0xA8
; IP
PS bit 0xBC
PT1 bit 0xBB
PX1 bit 0xBA
PT0 bit 0xB9
PX0 bit 0xB8
; P3
RD bit 0xB7
WR bit 0xB6
T1 bit 0xB5
T0 bit 0xB4
INT1 bit 0xB3
INT0 bit 0xB2
TXD bit 0xB1
RXD bit 0xB0
; PSW
CY bit 0xD7
AC bit 0xD6
F0 bit 0xD5
RS1 bit 0xD4
RS0 bit 0xD3
OV bit 0xD2
P bit 0xD0
; TCON
TF1 bit 0x8F
TR1 bit 0x8E
TF0 bit 0x8D
TR0 bit 0x8C
IE1 bit 0x8B
IT1 bit 0x8A
IE0 bit 0x89
IT0 bit 0x88
; SCON
SM0 bit 0x9F
SM1 bit 0x9E
SM2 bit 0x9D
REN bit 0x9C
TB8 bit 0x9B
RB8 bit 0x9A
TI bit 0x99
RI bit 0x98
ORG O000H
LJMP MAIN
ORG 0003H; tang so hang don vi dinh san = ngat ngoai 0
INC R7
RETI
ORG 0013H ;tang so hang tram dinh san = ngat ngoai 1
INC R1
RETI
; Khai bao cac ham
ORG 0030H
; Tre nua giay
DELAY_500ms:
MOV R3,#20
LOOP1: MOV R4,#50
LOOP2: MOV R5,#255
LOOP3: DJNZ R5,LOOP3
DJNZ R4,LOOP2
DJNZ R3,LOOP1
; Hien thi ra den led
HIENTHI:
; Hien thi (so keo)/goi dinh san ra p1
MOV A,R0; Chuyen thanh ma BCD
MOV B,#10
DIV AB
SWAP A
ADD A,B
MOV P1,A
; Hien thi so keo dang dem ra p0
MOV A,TL0
MOV B,#10
DIV AB
SWAP A
ADD A,B
MOV P0,A
; Hien thi so goi dang dem ra 4 bit cao, so goi dinh san ra 4 bit thap cua p2
MOV A,R2 ; So goi dang duoc dem
SWAP A ; Dua R2 ra 4 bit cao cua P2
MOV B,R1 ; So goi dinh truoc duoc dua ra 4 bit thap cua P2
ADD A,B
MOV P2,A ; Hien thi so goi dang dem duoc
RET
; Gioi han so keo trong 1 goi <100
SSKGH:
; Gioi han R0<100
CJNE R0,#100,NEXT; So sanh voi 100
MOV R0,#0 ; =100 => R0=0
RET
NEXT: ; # 100
JC END1 ; < 100
MOV R0,#0 ; >100
RET
END1:
RET
GH_hang_chuc:
; Gioi han R6<10
CJNE R6,#10,NEXT1; So sanh voi 10
MOV R6,#0 ; =10 => R6=0
RET
NEXT1: ; # 10
JC END1 ; < 10
MOV R6,#0 ; >10
RET
GH_hang_dvi:
; Gioi han R7<10
CJNE R7,#10,NEXT0; So sanh voi 10
MOV R7,#0 ; =10 => R7=0
RET
NEXT0: ; # 10
JC END1 ; < 10
MOV R7,#0 ; >10
RET
;NEXT0: ; # 10
;JC END1 ; < 10
;MOV R7,#0; >10
;RET
SSKDS:
; So sanh so keo dem dc voi so keo dinh san
MOV A,TL0
; So sanh TL0 voi thanh ghi R0
CJNE A,0,NEXT2 ; Neu khac nhay toi next2
; neu bang, so sanh tiep voi 0
CJNE A,#0,NGAT1 ; Neu khac0 -> nhay toi ngat
RET
RET
NGAT1: ; Tang so goi dem dc
INC R2
SETB P3.6 ; Bat LED khi du 1 goi
LCALL DELAY_500ms
CLR P3.6 ; Cho sang nua giay roi tat
MOV TL0,#00H ; Xoa so keo dem ve 0
RET
NEXT2:
JC END2; TL0<R0 THI RETURN
MOV A,TL0 ;TL0 >0 THI CHIA TL0 CHO R0, PHAN NGUYEN ( SO GOI) CONG THEM VAO SO GOI DEM DC, PHAN DU CONG VAO SO KEO DEM DC -> DOI PHO VOI TH TL0>R0
MOV B,R0
DIV AB
ADD A,R2
MOV R2,A
MOV TL0,B
RET
END2:
RET
SSGGH: ; GIOI HAN SO GOI <10
CJNE R1,#10,NEXT3
MOV R1,#0
RET
NEXT3:
JC END3
MOV R1,#0
RET
END3:
RET
SSGDS: ; SS SO GOI VOI SO GOI DINH SAN
MOV A,R2
CJNE A,1,NEXT4
CJNE A,#0,NGAT
RET
RET
NEXT4:
JC END4
CLR P3.5 ; NEU SO GOI DEM DC LON HON SO GOI DINH TRUOC THI TAT DONG CO
MOV TL0,#0
MOV R2,#0
RET
END4:
RET
NGAT:
CLR P3.5 ; TAT DONG CO NEU R2=R1 (SO GOI DEM =SO DINH SAN)
MOV TL0,#0
MOV R2,#0
MOV R1,#0
MOV R0,#0
MOV TMOD,#0
MOV IE,#0
CLR TR0
RET
GHEP_SO:
; SAU KHI NHAP SO HANG DON VI VAO R7, SO HANG CHUC VAO R6, GHEP 2 SO NAY THANH SO NHI PHAN CHI SO GOI TAI RO
MOV A,R6
MOV B,#10
MUL AB
ADD A,R7
MOV R0,A
RET
;-----------*------------
; CAC HAM CUA CHE DO DEM SAN PHAM
GH_VA_DEM_R0_DEN_100:
; GIOI HAN TL0<100
MOV A,TL0
CJNE A,#100,NEXT21
MOV TL0,#0
INC R2
RET
NEXT21:
JC END21
MOV A,TL0
MOV B,#100
DIV AB
ADD A,R2
MOV R2,A
MOV A,TL0
ADD A,B
MOV TL0,A
RET
END21:
RET
SO_SANH:
MOV A,R2
CJNE A,1,NEXT22
CJNE A,#0,SO_SANH1
CJNE R0,#0,SO_SANH1
MOV A,TL0
CJNE A,#0,SO_SANH1
RET
RET
RET
RET
RET
SO_SANH1:
MOV A,TL0
CJNE A,0,NEXT23; SS TL0 VOI THANH GHI R0
CLR P3.5; TAT DONG CO NEU R2 =R1( SO GOI DEM= SO DINH TRUOC)
MOV TL0,#0
MOV R2,#0
MOV R1,#0
MOV R0,#0
MOV TMOD,#0
MOV IE,#0
CLR TR0
RET
RET
NEXT22:
JC END22
CLR P3.5; TAT DONG CO
MOV TL0,#0
MOV R2,#0
RET
END22:
RET
NEXT23:
JC END23
MOV A,TL0
MOV B,R0
DIV AB
ADD A,R2
MOV R2,A
MOV TL0,B
RET
END23:
RET
MAIN:
; KHOI DONG NGAT NGOAI
MOV R0,#00H
MOV R1,#00H
MOV R2,#00H
MOV R6,#0
MOV R7,#0
MOV IE,#10000101B; KHOI DONG 2 NGAT NGOAI
SETB IT0; CHON KICH SUON AM
SETB IT1; KHOI DONG BO DEM
MOV TMOD,#00000110B ; BO DEM 0, CHE DO 1
MOV TH0,#0
SETB P3.4
SETB P3.1
SETB P3.0
CLR P3.5
SETB P3.7
CLR P3.6
LCALL DELAY_500ms
JNB P3.7,MAIN2; NEU P3.7 = 0 -> NHAY DEN CHE DO 2
; NEU P3.7 =1 -> CHE DO DEM SAN PHAM
LJMP MAIN1; NHAY DEN CHE DO DEM SP ( CHE DO 1) KHI P3.7=1(MAC DINH)
;-----------*-------------
; CHE DO DEM 1 SAN PHAM
START1:
SETB P3.5
SETB P3.0
LJMP AFTER_START1
RET
TANG_SO_HANG_CHUC1:
INC R6
LCALL DELAY_500ms
SETB P3.1
LJMP AFTER_TANG_SO_HANG_CHUC1
RET
MAIN1:
; CHE DO DEM KHI P3.7 =1
; KHOI DONG NGAT NGOAI
AGAIN1:
SETB TR0
BACK1:
JNB P3.0,START1; NEU ENTER DC AN -> NHAY DEN START1 DE KHOI DONG DC
AFTER_START1:
JNB P3.1,TANG_SO_HANG_CHUC1 ;NEU P3.1 AN -> TANG SO HANG CHUC LEN 1
AFTER_TANG_SO_HANG_CHUC1:
LCALL GH_hang_dvi; GIOI HAN HANG DON VI <10
LCALL GH_hang_chuc; GIOI HAN HANG CHUC <10
LCALL SSGGH; GIOI HAN HANG TRAM <100
LCALL GHEP_SO; GHEP HANG CHUC VA HANG DON VI THANH 1 SO NHI PHAN
LCALL HIENTHI; HIEN THI
LCALL GH_VA_DEM_R0_DEN_100
LCALL SO_SANH; SO SANH CAC SO DEM DC VOI SO DINH TRUOC, NEU DU THI TAT
JNB TF0,BACK1
CLR TR0
CLR TF0
SJMP AGAIN1
;-----------------*--------------
; CHE DO 2: DONG GOI
START2:
SETB P3.5
SETB P3.0
LJMP AFTER_START2
RET
TANG_SO_HANG_CHUC2:
INC R6
LCALL DELAY_500ms; TRE CHONG XUNG NAY
SETB P3.1
LJMP AFTER_TANG_SO_HANG_CHUC2
RET
MAIN2: ; CHE DO 2(DONG GOI)
AGAIN2:
SETB TR0
BACK2:
JNB P3.0,START2
AFTER_START2:
JNB P3.1,TANG_SO_HANG_CHUC2
AFTER_TANG_SO_HANG_CHUC2:
LCALL GH_hang_dvi
LCALL GH_hang_chuc
LCALL GHEP_SO
LCALL HIENTHI
LCALL SSKGH
LCALL SSGGH
LCALL SSKDS
LCALL SSGDS
JNB TF0,BACK2
CLR TR0
CLR TF0
SJMP AGAIN2
END
IV. TµI liÖu tham kh¶o :
[1] NguyÔn T¨ng Cêng vµ Phan Quèc Th¾ng: CÊu tróc vµ lËp tr×nh hä vi ®iÒu khiÓn 8051, Nhµ xuÊt b¶n Khoa häc kü thuËt, Hµ Néi 2004.
[2] Tèng V¨n On vµ céng sù
[3] Ng« Diªn TËp: LËp tr×nh b»ng hîp ng÷, Nhµ xuÊt b¶n Khoa häc kü thuËt, Hµ Néi 1998.
[4] V¨n ThÕ Minh: Kü thuËt vi xö lÝ, Nhµ xuÊt b¶n gi¸o dôc 1997.
[5] TS. §Æng V¨n ChuyÕt vµ céng sù : Gi¸o tr×nh kü thuËt m¹ch ®iÖn tö, Nhµ xuÊt b¶n gi¸o dôc 2003.
[6] Huúnh §¾c Th¾ng : CÈm nang thùc hµnh vi m¹ch tuyÕn tÝnh, TTL/LS, CMOS, Nhµ xuÊt b¶n Khoa häc kü thuËt, Hµ Néi 1994.
[7] NguyÔn Quang Hïng vµ TrÇn Ngäc B×nh: §éng c¬ bíc Kü thuËt ®iÒu khiÓn vµ øng dông, Nhµ xuÊt b¶n Khoa häc kü thuËt, Hµ Néi 2003.
[8] Intel Semiconductors: Intel MCS-51 Microcontroller family user’s manual, Glence, Mc Graw Hill Publication, 1997.
[9] AT89c51 Datasheet, Atmel Corp…