Xem mẫu

  1. TRƯ NG I H C BÁCH KHOA HÀ N I KHOA I N T VI N THÔNG 00O00 BÁO CÁO BÀI T P L N MÔN VI X LÝ TÀI M CH O NHI T VÀ C NH BÁO Th y giáo hư ng d n: ThS. Hàn Huy Dũng Sinh Viên th c hi n: Nguy n Th L i ng ình Tài Nguy n Huy Hoàng Ngô Thanh Xuân ng c Cư ng L p : T2-K48 Hà N i 05-2006
  2. Ch c năng c a tài o và hi n th nhi t c a môi trư ng m t i m b t kỳ trong 0 0 kho ng -40 C n 100 C Báo ng khi nhi t c a môi trư ng trong m t kho ng nào ó mà ta ch n PH N M U GI I THI U V K 8 BÍT PIC16F877 VÀ SO SÁNH V I V K 8051 Ng y nay, c¸c bé vi ®iÒu khiÓn ®ang cã øng dông ng y c ng réng r i trong c¸c lÜnh vùc kü thuËt v ®êi sèng x héi, ®Æc biÖt l trong kü thuËt tù ®éng ho¸ v ®iÒu khiÓn tõ xa. Giê ®©y víi nhu cÇu chuyªn dông ho¸, tèi −u (thêi gian, kh«ng gian, gi¸ th nh), b¶o mËt, tÝnh chñ ®éng trong c«ng viÖc... ng y c ng ®ßi hái kh¾t khe. ViÖc ®−a ra c«ng nghÖ míi trong lÜnh vùc chÕ t¹o m¹ch ®iÖn tö ®Ó ®¸p øng nh÷ng yªu cÇu trªn l ho n to n cÊp thiÕt mang tÝnh thùc tÕ cao. Kh¸i niÖm vÒ bé vi ®iÒu khiÓn §Ó hiÓu kh¸i niÖm vÒ bé vi ®iÒu khiÓn, ta cã thÓ l m phÐp so s¸nh nã víi bé vi xö lý c«ng dông chung nh− sau: Ta biÕt r»ng, c¸c bé vi xö lý c«ng dông chung nh− hä Intel x86 (8086, 80286, 80386, 80486 v Pentium) hoÆc hä Motorola 680x0(6800, 68010, 68020, 68030, 68040 vv...) kh«ng cã RAM, ROM v kh«ng cã c¸c cæng ra v o trªn chip... Víi lý do ®ã m chóng ®−îc gäi l c¸c bé vi xö lý c«ng dông chung. Mét nh thiÕt kÕ hÖ thèng sö dông mét bé vi xö lý c«ng dông chung ch¼ng h¹n nh− Pentium hay 68040 sÏ ph¶i bæ xung thªm RAM, ROM, c¸c cæng v o ra v c¸c bé ®Þnh thêi ngo i ®Ó l m cho chóng ho¹t ®éng ®−îc. MÆc dï viÖc bæ xung c¸c RAM, ROM, c¸c cæng v o ra sÏ l m cho hÖ thèng cång kÒnh lªn nh−ng nã l¹i cã −u ®iÓm khi sö dông c¸c bé vi xö lý n y l rÊt linh ho¹t. Ch¼ng h¹n nh− ng−êi thiÕt kÕ cã thÓ quyÕt ®Þnh vÒ sè l−îng RAM, ROM, v c¸c cæng v o ra cÇn thiÕt sao cho phï hîp víi kh¶ n¨ng, môc ®Ých sö dông cña hÖ thèng. §iÒu n y kh«ng thÓ cã ®èi víi c¸c bé vi ®iÒu khiÓn. Bëi v×, mét bé vi ®iÒu khiÓn ® cã mét CPU (mét bé vi xö lý) cïng víi mét sè l−îng RAM, ROM, c¸c cæng v o ra v mét bé ®Þnh thêi trªn cïng mét chÝp. Hay nãi c¸ch kh¸c l bé vi xö lý, RAM, ROM, c¸c cæng v o ra v mét bé ®Þnh thêi cïng ®−îc nhóng trªn mét chip. Do vËy ng−êi thiÕt kÕ kh«ng thÓ bæ xung thªm bé nhí ngo i, sè c¸c cæng v o ra hoÆc bé ®Þnh thêi cho nã. Víi sè l−îng RAM, ROM v sè c¸c cæng v o ra cè ®Þnh nh− vËy l mét mÆt h¹n chÕ (kÐm linh ho¹t) xong nã l¹i thËt sù lý t−ëng ®èi víi nh÷ng øng dông mang tÝnh chuyªn biÖt, tèi −u vÒ gi¸ th nh, tèi −u vÒ kh«ng gian... HiÖn nay trªn thÞ truêng cã c¸c bé vi ®iÒu khiÓn 8 bÝt chÝnh l . 6811 cña Motorola, 8051 cña Intel, Z8 cña Xilog v Pic16x cña Microchip Technology. Mçi lo¹i trªn ®©y ®Òu cã mét tËp lÖnh v thanh ghi riªng duy nhÊt, nªn chóng ®Òu kh«ng t−¬ng thÝch lÉn nhau. Còng cã nh÷ng bé vi ®iÒu khiÓn 16 bÝt v 32 bÝt
  3. ®−îc s¶n xuÊt ra bëi c¸c h ng s¶n xuÊt chÝp kh¸c nhau. Nh÷ng yªu cÇu ®Ó lùa chän mét bé vi ®iÒu khiÓn l : + §¸p øng nhu cÇu tÝnh to¸n cña b i to¸n mét c¸ch hiÖu qu¶ vÒ mÆt gi¸ th nh v ®Çy ®ñ chøc n¨ng cã thÓ nh×n thÊy ®−îc, (kh¶ dÜ). + Cã s½n c¸c c«ng cô ph¸t triÓn phÇn mÒm ch¼ng h¹n nh− c¸c tr×nh biªn dÞch tr×nh hîp ng÷ v gì rèi. + Nguån c¸c bé vi ®iÒu khiÓn cã s½n nhiÒu v tin cËy. C¸c tiªu chuÈn lùa chän mét bé vi ®iÒu khiÓn: Tiªu chuÈn ®Çu tiªn v tr−íc hÕt trong lùa chän mét bé vi ®iÒu khiÓn l nã ph¶i ®¸p øng nhu cÇu b i to¸n vÒ mÆt c«ng suÊt tÝnh to¸n, gi¸ th nh v hiÖu qu¶. Trong khi ph©n tÝch c¸c nhu cÇu cña mét dù ¸n dùa trªn bé vi ®iÒu khiÓn, chóng ta tr−íc hÕt ph¶i biÕt l bé vi ®iÒu khiÓn n o l 8 bÝt, 16 bÝt hay 32 bÝt cã thÓ ®¸p øng tèt nhÊt nhu cÇu tÝnh to¸n cña b i to¸n mét c¸ch hiÖu qu¶ nhÊt. + Nh÷ng tiªu chuÈn ®−îc ®−a ra ®Ó c©n nh¾c l : + Tèc ®é: Tèc ®é lín nhÊt m bé vi ®iÒu khiÓn hç trî l bao nhiªu. + KiÓu ®ãng vá: §ã l kiÓu 40 ch©n DIP hay QFP hay l kiÓu ®ãng vá kh¸c. §©y l ®iÒu quan träng ®èi víi yªu cÇu vÒ kh«ng gian, kiÓu l¾p r¸p v t¹o mÉu thö cho s¶n phÈm cuèi cïng. + C«ng suÊt tiªu thô: §iÒu n y ®Æc biÖt kh¾t khe ®èi víi nh÷ng s¶n phÈm dïng pin, ¾c quy. + Dung l−îng bé nhí RAM v ROM trªn chÝp. + Sè ch©n v o – ra, bé ®Þnh thêi, sè ng¾t trªn chÝp. + Kh¶ n¨ng dÔ d ng n©ng cÊp cho hiÖu suÊt cao hoÆc gi¶m c«ng suÊt tiªu thô. + Gi¸ th nh cho mét ®¬n vÞ: §iÒu n y quan träng quyÕt ®Þnh gi¸ th nh cuèi cïng cña s¶n phÈm m mét bé vi ®iÒu khiÓn ®−îc sö dông. Bé Vi ®iÒu khiÓn 8 bit PIC16F877 §Æc tÝnh næi bËt cña bé vi xö lÝ. + Sö dông c«ng nghÖ tÝch hîp cao RISC CPU. + Ng−êi sö dông cã thÓ lËp tr×nh víi 35 c©u lÖnh ®¬n gi¶n. + TÊt c¶ c¸c c©u lÖnh thùc hiÖn trong mét chu k× lÖnh ngo¹i trõ mét sè c©u lÖnh rÏ nh¸nh thùc hiÖn trong 2 chu k× lÖnh. + Tèc ®é ho¹t ®éng l : - Xung ®ång hå v o l DC- 20MHz - Chu kú lÖnh thùc hiÖn trong 200ns + Bé nhí ch−¬ng tr×nh Flash 8Kx14 words + Bé nhí Ram 368x8 bytes + Bé nhí EFPROM 256x 8 bytes Kh¶ n¨ng cña bé vi xö lÝ n y + Kh¶ n¨ng ng¾t ( lªn tíi 14 nguån ng¾t trong v ng¾t ngo i ) + Ng¨n nhí Stack ®−îc ph©n chia l m 8 møc + Truy cËp bé nhí b»ng ®Þa chØ trùc tiÕp hoÆc gi¸n tiÕp. + Nguån khëi ®éng l¹i (POR) + Bé t¹o xung thêi gian (PWRT) v bé t¹o dao ®éng (OST)
  4. + Bé ®Õm xung thêi gian (WDT) víi nguån dao ®éng trªn chÝp (nguån dao ®éng RC ) ho¹t ®éng ®¸ng tin cËy. + Cã m ch−¬ng tr×nh b¶o vÖ. + Ph−¬ng thøc cÊt gi÷ SLEEP + Cã b¶ng lùa chän dao ®éng. + C«ng nghÖ CMOS FLASH /EEPROM nguån møc thÊp ,tèc ®é cao. + ThiÕt kÕ ho n to n tÜnh . + M¹ch ch−¬ng tr×nh nèi tiÕp cã 2 ch©n. + Xö lý ®äc /ghi tíi bé nhí ch−¬ng tr×nh . + D¶i ®iÖn thÕ ho¹t ®éng réng : 2.0V ®Õn 5.5V + Nguån sö dông hiÖn t¹i 25 mA + D y nhiÖt ®é c«ng nghiÖp v thuËn lîi . + C«ng suÊt tiªu thô thÊp: < 0.6mA víi 5V, 4MHz 20 uA víi nguån 3V, 32 kHz < 1 uA nguån dù phßng. C¸c ®Æc tÝnh næi bËt cña thiÕt bÞ ngo¹i vi trªn chip + Timer0: 8 bÝt cña bé ®Þnh thêi, bé ®Õm víi hÖ sè tû lÖ tr−íc + Timer1: 16 bÝt cña bé ®Þnh thêi, bé ®Õm víi hÖ sè tû lÖ tr−íc, cã kh¶ n¨ng t¨ng trong khi ë chÕ ®é Sleep qua xung ®ång hå ®−îc cung cÊp bªn ngo i. + Timer 2: 8 bÝt cña bé ®Þnh thêi, bé ®Õm víi 8 bÝt cña hÖ sè tû lÖ tr−íc, hÖ sè tû lÖ sau + Cã 2 chÕ ®é b¾t gi÷, so s¸nh, ®iÒu chÕ ®é réng xung(PWM). + ChÕ ®é b¾t gi÷ víi 16 bÝt, víi tèc ®é 12.5 ns, chÕ ®é so s¸nh víi 16 bÝt, tèc®é gi¶i quyÕt cùc ®¹i l 200 ns, chÕ ®é ®iÒu chÕ ®é réng xung víi 10 bÝt. + Bé chuyÓn ®æi tÝn hiÖu sè sang t−¬ng tù víi 10 bÝt . + Cæng truyÒn th«ng nèi tiÕp SSP víi SPI ph−¬ng thøc chñ v I2C(chñ/phô) + Bé truyÒn nhËn th«ng tin ®ång bé, dÞ bé(USART/SCL) cã kh¶ n¨ng ph¸t hiÖn 9 bÝt ®Þa chØ. + Cæng phô song song (PSP) víi 8 bÝt më réng, víi RD, WR v CS ®iÒu khiÓn.
  5. S¬ ®å c¸c ch©n PIC16F87X.
  6. S¬ ®å khèi bé vi ®iÒu khiÓn PIC16F87X So s¸nh víi bé vi ®iÒu khiÓn 8051 * Bé vi ®iÒu khiÓn 8051 l bé V§K ®Çu tiªn thuéc hä V§K x51 ®−îc s¶n xuÊt bëi c«ng ty Intel, Siemens, Advanced Micro Devices, Fujitsu, Philips. C¸c ®Æc ®iÓm chung cña bé V§K n y: + 4KB ROM + 128 B RAM + 4 cæng I/O 8 bit + 2 Timer 16 bit + Cã kh¶ n¨ng qu¶n lý ®−îc 64 KB bé nhí m ch−¬ng tr×nh ngo i (ROM ngo i). + Cã kh¶ n¨ng qu¶n lý ®−îc 64 KB bé nhí d÷ liÖu ngo i (RAM ngo i) + Cã bé xö lý logic riªng (thao t¸c trªn c¸c bit) + Cã thÓ thao t¸c trùc tiÕp ®−îc 210 bit (c¸c bit n y ® ®−îc ®Þa chØ ho¸) + Cã 5 ng¾t + Dïng nguån dao ®éng ngo i + Dïng ®iÖn ¸p 5V ®Ó cho chip ho¹t ®éng *Cæng P0: Cã d¹ng cùc m¸ng hë v cã 8 ch©n (8 bit) l cæng v o/ra hoÆc l cæng chuyÓn d÷ liÖu v ®Þa chØ.
  7. *Cæng P1: L cæng v o/ra cã 8 ch©n (8 bit). *Cæng P2: Cã 8 ch©n (8 bit) l cæng v o/ra hoÆc l cæng chuyÓn d÷ liÖu v ®Þa chØ. *Cæng P3: Cã 8 ch©n, cæng n y cã thÓ l cæng v o/ra 8 bit hay cßn cã c¸c chøc n¨ng quan träng kh¸c nh− phôc vô cho ng¾t, c¸c bé ®Þnh thêi, viÖc truyÒn nhËn d÷ liÖu truyÒn th«ng nèi tiÕp, ®äc v ghi c¸c bé nhí ngo i… S¬ ®å khèi cña V§K 8051 Nh− vËy cã thÓ thÊy ®Æc ®iÓm ®Çu tiªn m PIC16F877 ®em l¹i v næi bËt so víi V§K 8051 l dßng PIC16F877 nh÷ng ®Æc tÝnh kÜ thuËt h¬n h¼n so víi bé V§K 8051 thÓ hiÖn ë nh÷ng ®iÓm sau: V§K8051 V§K PIC16F877 §Æc tÝnh Sè l−îng §Æc tÝnh Sè l−îng ROM trªn chÝp 4K byte ROM trªn chÝp 8K RAM 128 byte RAM 368 byte Bé ®Þnh thêi 2 Bé ®Þnh thêi 3 C¸c ch©n v o ra 32 C¸c ch©n v o ra 40 Cæng nèi tiÕp 1 Cæng nèi tiÕp 2 Nguån ng¾t 6 Nguån ng¾t 14 Ngo i nh÷ng ®Æc tÝnh trªn th× bé vi ®iÒu khiÓn PIC16F877 cßn cã mét ®Æc ®iÓm h¬n h¼n so víi 8051 l cã 10 bÝt chuyÓn ®æi A/D trªn chÝp ®iÒu n y sÏ gióp chóng ta kh«ng ph¶i mÊt mét bé chuyÓn ®æi (sÏ dÉn ®Õn kÕt nèi d©y trë nªn phøc t¹p). Mét ®Æc ®iÓm n÷a l bé vi ®iÒu khiÓn PIC16F877 cã bé t¹o dao ®éng chñ trªn chÝp ®iÒu n y sÏ tr¸nh ®−îc nh÷ng sai sè kh«ng cÇn thiÕt trong viÖc t¹o xung ng, V K PIC16F877 có kh năng t RESET b ng b W T, và có thêm 256 byte EEPROM
  8. PH N I THI T K PH N C NG Sơ kh i c a m ch Kh i x lý Kh i Kh i x lý Kh i hi n Nhi t nhi t ADC vào ra th và c nh môi trư ng báo Kh i x lý chung ♣ Kh i x lý nhi t và kh i ADC : Là m t sensor nhi t LM335 và m t b ADC 10 bit Sơ c a sensor nhi t LM335 LM335 c u vào là nhi t môi trư ng và u ra là di n áp Chân 1 là chân mang d u “-”, thư ng ư c n i t khi phân c c Chân 2 là chân mang d u “+”, ư c n i v i V+ thông qua m t i n tr và chân 2 cũng là u ra c a LM335 Chân 3 là chân mang ch “ADJ”, thư ng ư c n i v i m t bi n tr i u ch nh nhi t ban u cho phù h p Ngư i ta thư ng phân c c cho nó như sau:
  9. Còn b bi n i ADC , ta dùng ADC c a PIC là ADC 10 bít Nguyên lý làm vi c và các công th c tính toán: o nhi t môi trư ng t i m t i m thông qua sensor nhi t LM335 (Chi ti t v LM335 xem thêm trong datasheet). LM335 là sensor o nhi t, o ư c nhi t trong kho ng t -400C n 1000C, u ra là 10mV/K. u ra này ư c ưa vao chân Analog c a b ADC (C th ây là ưa vào Chân AN0 ).Vì ây là tính theo K nên o C ta c n có công th c chuy n i giá tr t K sang C. ây ta dùng ADC c a PIC là 10 bit => max=1023, Vref=Vcc, gi thi t là Vcc = 5V nên t i 0 C hay 273K thì u ra c a LM335 có giá tr là 2.73V. Như v y khi mu n tính toán ra C ta c n ph i tr i m c i n áp là 2.73V. L y ví d : nhi t là 30 C = 303K -> out = 303 x 10mV/K =3.03V. Ta tính toán giá tr c ư c t ADC 10 bit (ADC_Vin là i n áp ưa vào chân ADC c a PIC, ADC_value là giá tr u ra c a ADC dư i d ng th p phân): ADC_Vin = 5V => ADC_value = 1023 ADC_Vin = 2.73V => ADC_value = (1023/5)x2.73=558.558 (tương ng 0 C) ADC_Vin = 3.03V => ADC_value = (1023/5)x3.03=619.938 (tương ng 30 C) M t khác do V_ref = Vcc =5V nên ADC_value=1 tương ng 5/1023 = 4.887mV (~ 5mV). Trong khi ó LM335 cho ra i n áp là 10mV/1K nên giá tr ADC thay i 1 ơn v thì nhi t ph i thay i là 0.5K (hay g n 5mV) T ó ta có công th c y sau tính giá tr C: C=(ADC_value - 558.558)x(4.887mV/10mV) => C=(ADC_value - 558.6)/ 2.046 ♣Kh i hi n th và c nh báo Ta dùng LED 7 thanh hi n th nhi t c a môi trư ng và dùng loa phát ra c nh báo khi nhi t môi trư ng trong kho ng nguy hi m. C th trong m ch này ta dùng Hai LED 7 thanh Anot chung (chúng ta cũng có th dùng LCD thay th ) Sau ây là sơ m ch nguyên lý:
  10. Sơ nguyên lý 1 2 3 4 5 1 2 3 4 5 g a b g a b f f VCC VCC DOT DOT Vcc Vcc e d e d c c 10 10 9 8 7 6 9 8 7 6 21 40 A1015 A1015 22 RD2/PSP2 RB7/PGD 39 T1 T2 23 24 RD3/PSP3 RC4/SDI/SDA RB6/PGC RB5 38 37 25 RC5/SDO RB4 36 HI RC6/TX/CK RB3/PGM 26 35 27 RC7/RX/DT RB2 34 28 RD4/PSP4 RB1 33 29 RD5/PSP5 RB0/INT 30 RD6/PSP6 22pF RD7/PSP7 4 RA2/AN2 5 10MHz RA3/AN3 6 RA4 7 Q3 13 RA5/AN4 8 4K7 OSC1/CLKI RE0/AN5 14 15 OSC2/CLKO RE1/AN6 RC0/T1CKI RE2/AN7 9 10 T3 SPEAKER 22pF 16 17 RC1/CCP2 RC2/CCP1 HI 18 4K7 19 RC3/SCK/SCL 20 RD0/PSP0 32 4K7 RD1/PSP1 VDD1 31 VSS1 2 HI 3 3 11 RA1/AN1 2 VR10K VDD RA0/AN0 1 LM335Z 12 VPP 10K VSS 1K 1 SW_PB_SPST PIC16F877A HI HI HI SW2 Gi i thích sơ nguyên lý: Các Transistor A1015 (chúng ta g i là các èn T1, T2, T3) ư c c p ngu n 5V chân E , chân C c a T1 và T2 ư c n i v i 2 chân Vcc c a LED 7 thanh, các chân B c a T1, T2 ư c n i l n lư t v i các chân 20 và 19 c a V K PIC16F877A (c th là n i v i các chân RD0 và RD1 là các chân output c a PORTB). Khi RD1 m c th p thì u C c a èn T1 s m c cao lúc ó LED 1 ư c phân c c úng và có th sáng, ngư c l i thì LED 1 b phân c c sai lúc ó nó s không sáng. Tương t cho chân RD0 và LED còn l i. èn T3 cũng như v y nhưng thay LED b ng m t cái Loa (và chân output là chân RE0 c a PORTE) dùng c nh báo . u ra c a sensor nhi t LM335 s ư c ưa vào chân 2 c a V K (là chân Analog AN0 c a ADC 10 bít tích h p s n trong V K PIC, chân AN0 này s ư c thi t l p là chân vào Analog c a ADC) . Cu i cùng là V K PIC16F877A, ây ta ch nói n nh ng tính năng mà ta dùng cho tài này, nó là m t con V K tích h p r t nhi u ch c năng mà chúng ta có th tham kh o thêm trong Datasheet c a nó. Nhìn vào sơ nguyên lý ta có th th y ngay r ng các chân 19, 20 là các chân output ( ã ư c nói trên) ,ngoài ra
  11. còn có các chân 33 n 39 cũng là các chân output (chính là các bít RB0 n RB6 ư c thi t l p là các chân output c a PORTB), các chân này ư c n i v i LED 7 thanh hi n th nhi t , khi LED ư c phân c c úng thì n u các chân này mưc cao thì LED s sáng. Chân 2 là chân Input, là chân vào Analog c a ADC Các chân 11,12,31,32 là các chân c p ngu n cho V K, riêng chân Vpp (chân 1) chính là chân RESET. Chân 13, 14 là các chân dùng cho vi c thiêt l p xung Clock cho V K
  12. PH N II THI T K PH N M M Trong bài này chúng ta s dùng chương trình CCS (ngôn ng C cho PIC c a Microchip) vi t ph n l p trình cho V K, ưu i m c a nó là khá nh g n so v i khi ta vi t b ng MASM nh ư c h tr khá nhi u hàm, ngoài ra ta còn có th chèn m t o n chương trình vi t b ng ASM giũa hai ch th ti n x lý là #ASM và #ENDASM . Tài li u tham kh o: “Tài li u hư ng d n CCS Ti ng vi t” c a tác gi Tr n Xuân Trư ng, SV K2001, HBK HCM ho c y hơn là ph n Hepl trong trình cài t PIC C Compiler Code y cho chương trình --------------------------------------------------------------------------------------------------- #include //Khai báo con PIC ta s d ng và file khai báo các bít,các // thanh ghi quan tr ng trong con PIC này #include //Khai báo s nh ngiã các thanh ghi và các bít quan tr ng #device *=16 adc=10 // Khai báo dùng poiter 16 bít và ADC 10 bít #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT //Khai báo các config #use delay(clock=20000000) //Khai báo s d ng hàm Delay và t n s dao ng s d ng int8 high,low; //Khai báo các bi n s nguyên 1byte (8bít) //Khai báo m ng h ng s là s nguyen 1 byte int8 const a[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // Chương trình con tách s hàng ch c và hàng ơn v thành hai s ch a trong hai bi n // ã khai báo trên là high và low void convert_bcd(int8 x) { low=x%10; //chia l y ph n dư, low=hàng ơn v high=x/10; high=high%10; //high=s hàng ch c } // Chương trình con gi i mã và hi n th nhi t void display() { PORTB=a[low]; // G i d li u n LED 1 RD0=0; // B t LED1, LED1 s hi n th úng giá tr c a low delay_ms(2); // Cho tr 2ms RD0=1; // t t LED 1
  13. PORTB=a[high]; // LED 2 RD1=0; delay_ms(2); RD1=1; } //Chương trình con th c hi n vi c báo ng void bao_dong(){ int8 i; for(i=0;i
  14. value = (value - 558.5)/2.048; //for 5V supply if (i==150) { convert_bcd((int8)value);i=0;} if(((int8)value > 40) || ((int8)value < 15)) bao_dong(); display(); } } -------------------------------------------------------------------------------------------------- Lưu ý: ●T i sao khi g n a[low] =PORTB thì LED 1 l i hi n th giá tr c a low? B i vì m ng h ng s : a[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; s tương ương v i m ng giá tr các s nh phân như sau: a[10] = {11000000,11111001,10100100,10110000,10011001,10010010,10000010, 11111000,10000000,10010000}; K t ph i qua trái (b qua s nh phân cu i cùng b i vì ta không s d ng chan RB7 c a PORTB) các s nh phân này ch ra m c i n áp các thanh a,b,c,d,e,f,g,h c a LED T c là m ng này tương ng v i các giá tr hi n th trên LED là các s : 0,1,2,3,4,5,6,7,8,9 ●M t s các hàm trong CCS ã ư c s d ng là: Hàm delay_us(time) delay_ms(time) ví d : delay_us(2) ; //t o tr 2us delay_ms(2); //t o tr 2ms Hàm: setup_adc(ADC_CLOCK_INTERNAL); hàm này dùng xác nh cách th c ho t ng c a b bi n i ADC, c th là xác nh th i gian l y m u b ng m t xung clock Hàm: setup_adc_ports(AN0); setup_ADC_channel(0) các hàm này dùng xác nh chân l y tín hi u Analog là chân AN0 Còn ây là file nh ngĩa “def_877a.h” mà ta ã khai báo trên: --------------------------------------------------------------------------------------------------- // register definitions #define W 0 #define F 1 // register files #byte INDF =0x00 #byte TMR0 =0x01
  15. #byte PCL =0x02 #byte STATUS =0x03 #byte FSR =0x04 #byte PORTA =0x05 #byte PORTB =0x06 #byte PORTC =0x07 #byte PORTD =0x08 #byte PORTE =0x09 #byte EEDATA =0x10C #byte EEADR =0x10D #byte EEDATH =0x10E #byte EEADRH =0x10F #byte ADCON0 =0x1F #byte ADCON1 =0x9F #byte ADRESH =0x9F #byte ADSESL =0x9F #byte PCLATH =0x0a #byte INTCON =0x0b #byte PIR1 =0x0c #byte PIR2 =0x0d #byte PIE1 =0x8c #byte PIE2 =0x8d #byte OPTION_REG =0x81 #byte TRISA =0x85 #byte TRISB =0x86 #byte TRISC =0x87 #byte TRISD =0x88 #byte TRISE =0x89 #byte EECON1 =0x18C #byte EECON2 =0x18D #byte SSPBUF =0x13 #byte SSPCON =0x14 #byte SSPCON2 =0x91 #byte SSPADD =0x93 #byte SSPSTAT =0x94 // SSPCON bit #bit SSPWCOL = 0x14.7 #bit SSPOV = 0x14.6 #bit SSPEN = 0x14.5 #bit SSPCKP = 0x14.4 #bit SSPM3 = 0x14.3 #bit SSPM2 = 0x14.2
  16. #bit SSPM1 = 0x14.1 #bit SSPM0 = 0x14.0 // SSPSTAT bit #bit SSPSMP = 0x94.7 #bit SSPCKE = 0x94.6 #bit SSPDA = 0x94.5 #bit SSPP = 0x94.4 #bit SSPS = 0x94.3 #bit SSPRW = 0x94.2 #bit SSPUA = 0x94.1 #bit SSPBF = 0x94.0 //DINH NGHIA BIT #bit ra5 =0x05.5 #bit ra4 =0x05.4 #bit ra3 =0x05.3 #bit ra2 =0x05.2 #bit ra1 =0x05.1 #bit ra0 =0x05.0 #bit rb7 =0x06.7 #bit rb6 =0x06.6 #bit rb5 =0x06.5 #bit rb4 =0x06.4 #bit rb3 =0x06.3 #bit rb2 =0x06.2 #bit rb1 =0x06.1 #bit rb0 =0x06.0 #bit rC7 =0x07.7 #bit rC6 =0x07.6 #bit rC5 =0x07.5 #bit rC4 =0x07.4 #bit rC3 =0x07.3 #bit rC2 =0x07.2 #bit rC1 =0x07.1 #bit rC0 =0x07.0 #bit rD7 =0x08.7 #bit rD6 =0x08.6 #bit rD5 =0x08.5 #bit rD4 =0x08.4 #bit rD3 =0x08.3 #bit rD2 =0x08.2 #bit rD1 =0x08.1 #bit rD0 =0x08.0
  17. #bit rE2 =0x09.2 #bit rE1 =0x09.1 #bit rE0 =0x09.0 #bit trisa5 =0x85.5 #bit trisa4 =0x85.4 #bit trisa3 =0x85.3 #bit trisa2 =0x85.2 #bit trisa1 =0x85.1 #bit trisa0 =0x85.0 #bit trisb7 =0x86.7 #bit trisb6 =0x86.6 #bit trisb5 =0x86.5 #bit trisb4 =0x86.4 #bit trisb3 =0x86.3 #bit trisb2 =0x86.2 #bit trisb1 =0x86.1 #bit trisb0 =0x86.0 #bit trisc7 =0x87.7 #bit trisc6 =0x87.6 #bit trisc5 =0x87.5 #bit trisc4 =0x87.4 #bit trisc3 =0x87.3 #bit trisc2 =0x87.2 #bit trisc1 =0x87.1 #bit trisc0 =0x87.0 #bit trisd7 =0x88.7 #bit trisd6 =0x88.6 #bit trisd5 =0x88.5 #bit trisd4 =0x88.4 #bit trisd3 =0x88.3 #bit trisd2 =0x88.2 #bit trisd1 =0x88.1 #bit trisd0 =0x88.0 #bit trise2 =0x89.2 #bit trise1 =0x89.1 #bit trise0 =0x89.0 // INTCON Bits for C #bit gie = 0x0b.7 #bit peie = 0x0b.6 #bit tmr0ie = 0x0b.5
  18. #bit int0ie = 0x0b.4 #bit rbie = 0x0b.3 #bit tmr0if = 0x0b.2 #bit int0if = 0x0b.1 #bit rbif = 0x0b.0 // PIR1 for C #bit pspif = 0x0c.7 #bit adif = 0x0c.6 #bit rcif = 0x0c.5 #bit txif = 0x0c.4 #bit sspif = 0x0c.3 #bit ccp1if = 0x0c.2 #bit tmr2if = 0x0c.1 #bit tmr1if = 0x0c.0 //PIR2 for C #bit cmif = 0x0d.6 #bit eeif = 0x0d.4 #bit bclif = 0x0d.3 #bit ccp2if = 0x0d.0 // PIE1 for C #bit adie = 0x8c.6 #bit rcie = 0x8c.5 #bit txie = 0x8c.4 #bit sspie = 0x8c.3 #bit ccp1ie = 0x8c.2 #bit tmr2ie = 0x8c.1 #bit tmr1ie = 0x8c.0 //PIE2 for C #bit osfie = 0x8d.7 #bit cmie = 0x8d.6 #bit eeie = 0x8d.4 // OPTION Bits #bit not_rbpu = 0x81.7 #bit intedg = 0x81.6 #bit t0cs = 0x81.5 #bit t0se = 0x81.4 #bit psa = 0x81.3 #bit ps2 = 0x81.2 #bit ps1 = 0x81.1 #bit ps0 = 0x81.0 // EECON1 Bits
  19. #bit eepgd = 0x18c.7 #bit free = 0x18C.4 #bit wrerr = 0x18C.3 #bit wren = 0x18C.2 #bit wr = 0x18C.1 #bit rd = 0x18C.0 //ADCON0 #bit CHS0 =0x1F.3 #bit CHS1 =0x1F.4 #bit CHS2 =0x1F.5
  20. PH N T NG K T 1. Nh n xét k t qu nh n ư c Nhi t o dư c khá chu n xác, tuy nhiên sai s v n còn khá l n (t i m t C), i u này ta có th kh c ph c ư c b ng cách dùng ba LED hi n th , lúc ó sai s s gi m xu ng còn 0,1oC (b i vì ADC trong con PIC này là 10 bít => giá tr nó xu t ra t i 1023). N u mu n chu n xác hơn n a ta có th dùng ADC ngoài có s bít cao hơn, ho c dùng LCD hi n th ng d ng c a tài r t r ng rãi trong cu c s ng, nh t là trong các nhà máy bia, các h th ng làm l nh trong vi c ki m soát nhi t 2.Hư ng phát tri n m r ng tài: - Nâng cao chính xác hi n th b ng cách dùng ADC có phân gi i cao hơn (có th dùng ADC ngoài) - Thêm bàn phím giao ti p có th thay i tr c ti p kho ng nhi t theo dõi, cùng v i ó ta thêm vào LED 7 hi n th hai giá tr nhi t này - S d ng EEPROM lưu giá tr nhi t mà ngư i dùng thi t l p, các l n thay i khác... - Ghép n i máy tính truy n giá tr nhi t n máy tính - Ghép n i LCD và m t m ch m th i gian th c (DS1307) ng v i m i th i i m chương trình s t ng ch n kho ng thi t l p nhi t thích h p theo t ng mùa, t ng th i i m nh trư c... - S d ng PID trong i u khi n t ng k t h p v i các m ch i u khi n tăng gi m nhiêt m b o nhi t luôn bám theo m t giá tr cho trư c, h n nh nhi t (giá tr thay i là r t nh )
nguon tai.lieu . vn