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ý

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.

doc24 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2477 | Lượt tải: 0download
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 tr­ng 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 nh­ng kh«ng cho m¹ch dao ®éng cung cÊp xung clock nh»m v« hiÖu ho¸ c¸c ho¹t ®éng kh¸c cña chip cho ®Õn khi cã reset cøng tiÕp theo. I.1 M« t¶ c¸c ch©n C¸c cÊu h×nh ch©n ra cña AT89C51 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…

Các file đính kèm theo tài liệu này:

  • docBAOCAO~1(mach dem sp va dk dong co).DOC
  • maxBACKUP1.MAX
  • dsnDISPLAY.DSN
  • maxDISPLAY.MAX
  • opjdisplay.opj
  • loglayout.log
  • dbkMACHDIEUKHIEN.DBK
  • drcMACHDIEUKHIEN.DRC
  • dsnMACHDIEUKHIEN.DSN
  • lisMACHDIEUKHIEN.LIS
  • maxMACHDIEUKHIEN.MAX
  • mnlMACHDIEUKHIEN.MNL
  • opjmachdieukhien.opj
  • hexVXL.hex