Xem mẫu
- 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
- 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
- ®−î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)
- + 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.
- S¬ ®å c¸c ch©n PIC16F87X.
- 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Ø.
- *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
- 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:
- 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ý:
- 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
- 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
- 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
- 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
- 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
- #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
- #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
- #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
- #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
- #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
- 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