Professional Documents
Culture Documents
Vi Xu Ly PIC16F887 NguyenDinhPhu PDF
Vi Xu Ly PIC16F887 NguyenDinhPhu PDF
pdf
PIC16F887_VXL_01_LOINOIDAU.pdf
PIC16F887_VXL_003_MUCLUC.pdf
PIC16F887_VXL_CHAPTER_01_VDK_CAUTRUC_CHUCNANG_CHAN.pdf
PIC16F887_VXL_CHAPTER_02_VDK_BONHO_THANHGHI.pdf
PIC16F887_VXL_CHAPTER_03_VDK_LENH_ASSEMBLY.pdf
PIC16F887_VXL_CHAPTER_04_VDK_LENH_C.pdf
PIC16F887_VXL_CHAPTER_05_VDK_PORT.pdf
PIC16F887_VXL_CHAPTER_06_VDK_TIMER_COUNTER.pdf
PIC16F887_VXL_CHAPTER_07_VDK_GIAOTIEP_ADC.pdf
PIC16F887_VXL_CHAPTER_08_VDK_INTERRUPT.pdf
PIC16F887_VXL_CHAPTER_09_VDK_TRUYENDULIEU.pdf
PIC16F887_VXL_CHAPTER_10_VDK_PWM.pdf
I HC S PHM K THUT
KHOA IN IN T B MN IN T CNG NGHIP
GIO TRNH VI X L
NGUYN NH PH
NM 2014
LI NOI AU
Bo vi x ly ngay cang phat trien hoan thien va c s dung hau het trong cac he thong
ieu khien trong cong nghiep cung nh trong cac thiet b ien t dan dung. Chnh nh vai tro, chc
nang cua vi x ly a em lai nhieu u iem, nhieu tnh nang ac biet cho cac he thong ieu khien.
Cac nha nghien cu khong ngng nghien cu cac he thong ieu khien va s dung vi x ly e
thay the nham nang cao kha nang t ong thay the cho con ngi, va cung chnh v the a thuc
ay lnh vc vi x ly ngay cang phat trien khong ngng, thch nghi vi yeu cau ieu khien. e n gian
bt s phc tap cua phan cng khi dung vi x ly nen cac nha nghien cu a tch hp he vi x ly, bo
nh, cac ngoai vi thanh mot vi mach duy nhat goi la vi ieu khien.
Noi dung giao trnh nay nghien cu cac kien thc c ban cua vi ieu khien . Do co nhieu ho vi ieu
khien khac nhau, t he 8 bit cho en he 32 bit, mc o tch hp t n gian en phc tap, nhieu
hang che tao khac nhau, nhieu chung loai khac nhau se lam cho ngi bat au hoc hay nghien cu se
gap nhieu b ng khong biet bat au t he nao cho phu hp, chnh v the giao trnh nay ch trnh
bay ho vi ieu khien 8 bit cua hang Microchip nham giup cac ban sinh vien nganh ien noi chung co mot
giao trnh e hoc tap va nghien cu mot cach de dang.
Cac ng dung dung vi ieu khien nhieu cap o khac nhau t n gian en phc tap, giao trnh
nay ch trnh bay cac ng dung n gian e cac ban co the oc hieu, t cac kien thc c ban o
ban co the thc hien cac ng dung ieu khien phc tap hn, phan bai tap kem theo giup ban giai
quyet cac yeu cau phc tap. T cac kien thc c ban cua vi ieu khien 8 bit co the giup cac ban t
nghien cu cac vi ieu khien nhieu bit hn nh 16 bit, 32 bit.
Giao trnh bien soan chia thanh 10 chng, chu yeu trnh bay vi ieu khien PIC 16F887:
Chng 1. ac tnh, cau truc, chc nang cac port.
Chng 2. To chc bo nh, thanh ghi.
Chng 3. Lenh hp ng.
Chng 4. Ngon ng lap trnh C.
Chng 5. Giao tiep LED, LCD, phm n, ma tran phm.
Chng 6. Timer - Counter.
Chng 7. Chuyen oi tn hieu tng t sang so .
Chng 8. Ngat.
Chng 9. Truyen d lieu UART.
Chng 10. ieu che o rong xung - PWM.
Noi dung chng 1 chu yeu gii thieu ac tnh, cau truc va chc nang cac port cua vi ieu khien,
ngi oc can phai biet ac tnh cua vi ieu khien ang nghien cu . e so sanh kha nang cua cac vi
ieu khien khac nhau ta phai da vao ac tnh. Phan cau truc ben trong cho ban biet c to chc,
moi quan he gia cac khoi vi nhau, chc nang cua tng khoi . Ban phai biet ten, ky hieu at ten cho
tng port, chc nang cua tng port e giup ban s dung port ket noi ung vi cac oi tng ieu
khien.
Noi dung chng 2 gii thieu cau truc to chc cac loai bo nh tch hp ben trong vi ieu khien
bao gom bo nh chng trnh, bo nh d lieu RAM, bo nh ngan xep, bo nh Eeprom, cac cach truy
xuat bo nh.
Noi dung chng 3 gii thieu ve tap lenh hp ng cua vi ieu khien e viet cac chng trnh
bang hp ng nhng do lap trnh bang hp ng rat kho va dai khi giai quyet cac yeu cau tnh toan
phc tap nen phan nay ch gii thieu ch khong nghien cu sau.
Noi dung chng 4 gii thieu ve ngon ng lap trnh C cho vi ieu khien PIC, co nhieu trnh bien
dch ngon ng lap trnh C cho vi ieu khien nhng tai lieu nay trnh bay trnh bien dch CCS. Lap trnh
bang ngon ng C giup cac ban viet chng trnh de hn so vi hp ng, toan bo cac chng trnh
trong tai lieu nay eu viet bang ngon ng lap trnh C. e hieu cac chng trnh trong giao trnh va
viet cac chng trnh theo yeu cau th ban can phai nam ro to chc cua moat chng trnh C, cac
kieu d lieu, cac toan t, cac th vien viet san va cac lenh C c ban.
Noi dung chng 5 khao sat chi tiet chc nang cac port, s o mach cua cac port, s dung
cac port e xuat nhap tn hieu ieu khien nh led n, led 7 oan trc tiep, led 7 oan quet, LCD,
nut nhan, ban phm ma tran. Trong tng yeu cau se cho ban biet cach ket noi phan cng, nguyen ly
hoat ong, viet lu o hay trnh t ieu khien va chng trnh mau, co giai thch tng lenh hoac ca
chng trnh.
Noi dung chng 6 khao sat chi tiet chc nang cua timer-counter tch hp trong vi ieu khien,
cach s dung timer counter e nh thi va em s kien.
Noi dung chng 7 khao sat chi tiet chc nang cua bo chuyen oi tn hieu tng t thanh tn
hieu so (ADC) tch hp trong vi ieu khien, cach s dung ADC e chuyen oi cac tn hieu tng t
nh cam bien nhiet e thc hien cac ng dung o nhiet o, canh bao qua nhiet o trong ieu khien
va nhieu ng dung khac.
Noi dung chng 8 khao sat chi tiet chc nang ngat cua vi ieu khien, biet c tnh nang u
viec cua ngat, cach s dung ngat e ap ng toi u cac yeu cau ieu khien nham ap ng nhanh cac
s kien xay ra.
Noi dung chng 9 khao sat chi tiet chc nang truyen d lieu noi tiep UART cua vi ieu khien,
biet c trnh t thc hien gi d lieu va nhan d lieu, thc hien cac yeu cau truyen d lieu gia vi
ieu khien vi may tnh va gia cac vi ieu khien vi nhau.
Noi dung chng 10 khao sat chi tiet chc nang ieu che o rong xung PWM cua vi ieu khien,
biet c nguyen ly hoat ong, tnh toan cac thong so cua xung ieu che, biet lap trnh s dung
chc nang PWM e ieu khien thay oi o sang cua en, thay oi toc o cua ong c DC va nhie u
ng dung khac.
Ngoai cac kien thc c ban ma tac gia a trnh bay th con nhieu chc nang khac cua vi ieu
khien ma tac gia cha trnh bay th cac ban co the tham khao them cac tai lieu nha che tao cung
cap.
Trong qua trnh bien soan khong the tranh c cac sai sot nen rat mong cac ban oc ong
gop xay dng va xin hay gi ve tac gia theo a ch phu_nd@yahoo.com.
Tac gia xin cam n cac ban be ong nghiep a ong gop nhieu y kien, xin cam n ngi than
trong gia nh cho phep tac gia co nhieu thi gian thc hien bien soan giao trnh nay.
Nguyen nh Phu.
MC LC
LI NI U
CHNG 1. C TNH, CU TRC, CHC NNG CC PORT
I.
GII THIU
II.
1.
2.
3.
III.
CU HI N TP TRC NGHIM BI TP
1.
2.
3.
4.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
Bi tp
2
5
7
12
12
13
13
14
GII THIU
15
II.
KIN TRC B NH
16
III.
16
1.
2.
3.
4.
IV.
CU HI N TP TRC NGHIM BI TP
1.
2.
3.
4.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
Bi tp
17
17
18
20
20
20
20
20
22
CHNG 3. LNH HP NG
I.
GII THIU
24
II.
24
1.
2.
3.
III.
Gii thiu
Kho st tp lnh tm tt vi iu khin PIC 16F887
Tp lnh chi tit
CU HI N TP TRC NGHIM BI TP
1.
2.
3.
4.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
Bi tp
24
25
26
31
31
31
32
33
GII THIU
36
II.
36
1.
2.
3.
4.
5.
6.
7.
III.
36
36
39
41
41
42
42
42
i
IV.
CU HI N TP TRC NGHIM BI TP
1.
2.
3.
4.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
Bi tp
50
50
50
50
52
GII THIU
54
II.
54
III.
54
1.
2.
3.
4.
5.
55
57
61
64
65
IV.
66
Lnh set_tris_x(value)
Lnh output_x(value)
Lnh output_high(pin)
Lnh output_low(pin)
Lnh output_toggle(pin)
Lnh output_bit(pin,value)
Lnh value = get_tris_x()
Lnh value = input(pin)
Lnh value = input_state()
66
66
67
67
67
67
67
67
68
Lnh value=input_x()
Lnh output_drive(pin)
Lnh output_float(pin)
Lnh port_b_pullup()
68
68
68
68
V.
69
VI.
72
76
79
1.
2.
IX.
X.
H thng t phm
H thng nhiu phm
Gii thiu LCD
S chn LCD
S mch giao tip vi iu khin vi LCD
Cc lnh iu khin LCD
a ch ca tng k t trn LCD
Cc chng trnh hin th trn LCD
CU HI N TP TRC NGHIM
1.
2.
3.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
79
86
93
93
93
94
95
96
96
100
100
100
100
GII THIU
104
II.
104
1.
2.
3.
III.
Ngt ca Timer0
Timer0 m xung ngoi
B chia trc
105
106
106
106
ii
1.
2.
3.
4.
5.
6.
7.
8.
IV.
111
112
112
VI.
108
108
109
110
110
110
110
111
V.
Timer1 ch nh thi
Timer1 ch m xung ngoi
Hot ng ca Timer1 ch counter ng b
Hot ng ca Timer1 ch counter bt ng b
c v ghi Timer1 trong ch m khng ng b
B dao ng ca Timer1
Reset timer1 s dng ng ra CCP trigger
Reset cp thanh ghi TMR1H, TMR1L ca Timer1
Lnh setup_timer_0(mode)
Lnh setup_timer_1(mode)
Lnh setup_timer_2(mode)
Lnh set_timerx(value)
Lnh get_timerx()
Lnh setup_wdt(mode)
Lnh restart_wdt()
112
112
113
113
116
116
116
117
117
121
126
1.
2.
3.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
126
127
127
GII THIU
130
II.
130
1.
2.
3.
4.
III.
130
131
133
133
134
134
134
134
134
IV.
135
V.
CU HI N TP TRC NGHIM BI TP
140
4.
5.
6.
7.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
Bi tp
140
140
140
141
CHNG 8. NGT
I.
GII THIU
144
II.
144
III.
144
144
145
1.
2.
IV.
148
148
iii
2.
148
V.
148
VI.
CU HI N TP TRC NGHIM
157
1.
2.
3.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
157
157
157
GII THIU
160
II.
160
III.
160
IV.
161
1.
2.
V.
VI.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
161
161
168
168
169
169
169
169
175
176
176
176
GII THIU
178
II.
KHO ST PWM
178
1.
2.
3.
4.
III.
178
179
180
180
180
180
180
181
181
IV.
190
V.
CU HI N TP TRC NGHIM
190
1.
2.
3.
Cu hi n tp
Cu hi m rng
Cu hi trc nghim
190
190
190
191
iv
HNH NH
Hnh 1-1: Cc thit b s dng vi x l.
Hnh 1-2: H thng vi x l.
Hnh 1-3: Cu hnh ca vi iu khin.
Hnh 1-4: Cu trc bn trong ca vi iu khin.
Hnh 1-5: S chn ca PIC 16F887.
2
2
5
6
7
16
17
18
18
18
19
25
54
54
55
55
55
56
56
57
57
57
57
58
58
58
58
60
61
61
62
62
62
63
63
63
63
64
64
65
65
65
65
66
66
69
69
70
71
72
72
73
75
75
76
77
78
78
80
80
81
82
83
84
85
86
87
87
87
88
89
89
90
92
92
93
95
96
97
99
104
105
106
106
106
107
107
107
108
109
109
109
110
111
112
114
115
116
117
118
119
120
121
122
123
124
130
131
125
vi
132
132
134
135
136
137
138
138
139
Hnh 8-1: Vi iu khin thc hin chng trnh chnh trong 2 trng hp khng v c ngt.
Hnh 8-2: Thanh ghi INTCON.
Hnh 8-3: Thanh ghi PIE1 v PIR1.
Hnh 8-4: Thanh ghi PIE2 v PIR2.
Hnh 8-5: Mch in ngt ca PIC16F887.
Hnh 8-6: iu khin 8 led sng tt.
Hnh 8-7: Lu iu khin 8 led sng tt nh thi 262ms dng ngt.
Hnh 8-8: Mch giao tip 2 led 7 on qut hin th m giy.
Hnh 8-9: Lu m giy dng Timer nh thi bo ngt.
Hnh 8-10: Mch o nhit dng cm bin LM35.
Hnh 8-11: Lu chuyn i ADC c bo ngt.
Hnh 8-12: o nhit dng cm bin LM35 v m giy.
Hnh 8-13: Lu chuyn i ADC c bo ngt v m giy dng timer bo ngt.
144
145
146
145
148
149
149
150
150
152
153
154
155
160
160
162
163
163
163
164
166
166
167
170
170
171
172
172
173
174
178
179
180
182
183
184
184
186
187
vii
BNG
Hnh 1-1: Cc thit b s dng vi x l.
Hnh 1-2: H thng vi x l.
2
2
Bng 3-1: Cc tc t.
Bng 3-2: Tm tt tp lnh ca PIC.
25
25
36
36
72
94
95
96
98
105
110
133
Bng 8-1: Tm tt chc nng cc bit trong thanh ghi cho php ngt INTCON c a ch 0x0B.
Bng 8-2: Tm tt chc nng cc bit trong thanh ghi cho php ngt PIE1 c a ch 0x8C.
Bng 8-3: Tm tt chc nng cc bit trong thanh ghi cho php ngt PIR1 c a ch 0x0C.
Bng 8-4: Tm tt chc nng cc bit trong thanh ghi cho php ngt PIE2 c a ch 0x8D.
Bng 8-5: Tm tt chc nng cc bit trong thanh ghi cho php ngt PIR2 c a ch 0x0D.
145
146
146
147
147
162
164
167
168
186
viii
Chng 1
GII THIU
KHO ST VI IU KHIN MICROCHIP
CU HI N TP TRC NGHIM BI TP
CU HI N TP
CU HI M RNG
CU HI TRC NGHIM
BI TP
Nguyen nh Phu
I.
GII THIU
Vi x l c rt nhiu loi bt u t 4 bit cho n 32 bit, vi x l 4 bit hin nay khng cn nhng
vi x l 8 bit vn cn mc d c vi x l 64 bit.
L do s tn ti ca vi x l 8 bit l ph hp vi mt s yu cu iu khin trong cng nghip.
Cc vi x l 32 bit, 64 bit thng s dng cho cc my tnh v khi lng d liu ca my tnh rt ln
nn cn cc vi x l cng mnh cng tt.
Cc h thng iu khin trong cng nghip s dng cc vi x l 8 bit hay 16 bit nh h thng
in ca xe hi, h thng iu ha, h thng iu khin cc dy chuyn sn xut,
B NH
PORT NHP
PORT XUT
BUS A CH
CPU
BUS D LIU
BUS IU KHIN
Nguyen nh Phu
Nguyen nh Phu
C b nh thi gim st (Watchdog Timer WDT) dng dao ng trong chip cho php
bng phn mm (c th nh thi ln n 268 giy).
a hp ng vo reset vi ng vo c in tr ko ln.
C bo v code lp trnh.
B nh Flash cho php xa v lp trnh 100,000 ln.
B nh Eeprom cho php xa v lp trnh 1,000,000 ln v c th tn ti trn 40 nm.
Cho php c/ghi b nh chng trnh khi mch hot ng.
C tch hp mch g ri.
Cu trc ngoi vi
C 35 chn I/O cho php la chn hng c lp:
C 2 b so snh in p tng t
C module ngun in p tham chiu c th lp trnh.
C ngun in p tham chiu c nh c gi tr bng 0,6V.
C cc ng vo v cc ng ra ca b so snh in p.
C ch cht SR.
C b chuyn i tng t sang s:
Nguyen nh Phu
2.
C khi b nh chng trnh c nhiu dung lng cho 5 loi khc nhau.
C khi b nh Ram cng vi thanh ghi FSR tnh ton to a ch cho 2 cch truy xut
gin tip v trc tip.
C thanh ghi lnh (Instruction register) dng lu m lnh nhn v t b nh chng trnh.
Nguyen nh Phu
C thanh ghi trng thi (status register) cho bit trng thi sau khi tnh ton ca khi ALU.
Nguyen nh Phu
C khi ALU cng vi thanh ghi working hay thanh ghi A x l d liu.
C khi b nh Eeprom 256 byte v thanh ghi qun l a ch EEADDR v thanh ghi d liu
EEDATA.
C khi cc port A, B, C, E v D
KHO ST S CHN VI IU KHIN PIC16F887
3.
Nguyen nh Phu
C1OUT: ng ra b so snh 1.
C2OUT: ng ra b so snh 2.
Nguyen nh Phu
b.
T1G (Timer1 gate input): ng vo Gate cho php time1 m dng m rng xung.
RB6: xut/nhp s.
c.
RB7: xut/nhp s.
Nguyen nh Phu
P1A: ng ra PWM.
10
d.
P1B: ng ra PWM.
Chng 1. ac tnh, cau truc, chc nang cac port.
Nguyen nh Phu
P1C: ng ra PWM.
RE0: xut/nhp s.
AN5: ng vo tng t 5.
RE1: xut/nhp s.
RE2: xut/nhp s.
e.
11
Nguyen nh Phu
CU HI N TP
Cu s 1-1:
12
Nguyen nh Phu
Cu s 1-2:
Cu s 1-3:
Cu s 1-4:
Cu s 1-5:
Cu s 1-6:
Cu s 1-7:
2.
CU HI M RNG
Cu s 1-8:
Cu s 1-9:
CU HI TRC NGHIM
Cu 1-1:
(a) 3
(c) 5
Cu 1-2:
(b) 4
(d) 6
Port no ca PIC 16F887 c 4 ng:
(a) A
(c) C
Cu 1-3:
(b) B
(d) E
PIC 16F887 c tch hp ADC bao nhiu bit:
(a) 8 bit
(c) 10 bit
Cu 1-4:
(a) 8 knh
(c) 10 knh
Cu 1-5:
(b) 14 knh
(d) 12 knh
(b) 9 bit
(d) 12 bit
Nguyen nh Phu
Cu 1-8:
(a) T0SCK
(c) T0CKI
(b) T0SCL
(d) T0CK
14
BI TP
Chng 2
GII THIU
KIN TRC B NH
T CHC B NH CA VI IU KHIN PIC16F887
T CHC B NH
M LNH 14 BIT
KHO ST B NH D LIU V THANH GHI TRNG THI CA PIC
CU HI N TP TRC NGHIM - BI TP
CU HI N TP
CU HI M RNG
CU HI TRC NGHIM
BI TP
Nguyen nh Phu
I. GII THIU
chng ny kho st t chc b nh bn trong, cc thanh ghi ca vi iu khin 8 bit. Sau khi
kt thc chng ny th ngi c c th bit t chc b nh bn trong, chc nng ca tng loi b
nh, tn v chc nng ca cc thanh ghi c bit.
Nguyen nh Phu
khi gi chng trnh con nm trong cng 1 trang th lnh s vit ngn gn hn, m lnh t hn so vi
trng hp nm khc trang.
Trong cc h vi iu khin khc th b nh ngn xp dng chung vi b nh d liu, u im l
cu trc n gin, khuyt im l vic dng chung nu khng bit gii hn s ln chim ln nhau v
lm mt d liu lu trong b nh ngn xp v chng trnh thc thi sai.
vi iu khin PIC th nh thit k tch b nh ngn xp c lp vi b nh d liu v ch
dng lu a ch tr v khi thc hin lnh gi chng trnh con v khi thc hin ngt. Dung lng b
nh b nh ngn xp ch c 8 nh t stack level 1 n stack level 8 - xem hnh 2-2. Do ch c 8
nh nn khi thc hin cc chng trnh con lng vo nhau ti a l 8 cp. Do lu a ch tr v
trong thanh ghi PC, m thanh ghi PC c chiu di 13 bit nn mi nh ngn xp c s bit l 13.
Khi khng s dng ngt th chng trnh c th vit bt u v lin tc ti a ch 0000H, nhng
nu s dng ngt th nn dng lnh nhy trnh vng nh bt u ti a ch 0004H - v vng nh
ny dng vit chng trnh con phc v ngt.
B nh chng trnh c chc nng lu tr chng trnh. Chng trnh sau khi vit xong trn
my tnh, dch ra s nh phn s c np vo b nh chng trnh vi iu khin thc hin.
PC <12:0>
13
CALL, RETURN,
RETFIE, RETLW
STACK LEVEL 1
STACK LEVEL 2
.
.
.
STACK LEVEL 8
VECTOR RESET
0000H
VECTOR NGT
0004H
0005H
0001H
0002H
0003H
TRANG 0 (PAGE 0)
TRANG 1 (PAGE 1)
TRANG 2 (PAGE 2)
07FFH
0800H
0FFFH
1000H
17FFH
1800H
TRANG 3 (PAGE 3)
1FFFH
M LNH 14 BIT
17
Nguyen nh Phu
Cu trc b nh d liu
B nh d liu c phn chia thnh 4 Bank, mi bank c 128byte bao gm mt s thanh ghi
chc nng c bit, cn li l cc nh thng dng c chc nng lu tr d liu.
Ton b cc nh ca b nh d liu c gi l File thanh ghi.
Cc thanh ghi c chc nng c bit nm vng a ch thp, cc nh cn li khng c g c
bit nm cng a ch bn trn cc thanh ghi chc nng c bit xem nh cc nh RAM dng
lu d liu. Tt c cc bank thanh ghi u cha nhng thanh ghi c bit - xem hnh 2-4.
Theo hnh 2-4 th b nh d liu c chia lm 4 bank thanh ghi, mi bank c 128, tng cng l
512 nh, nhng do c 1 s thanh ghi c chc nng c bit bank no cng c nn lm gim s
lng. V d thanh ghi trng thi (status) 4 bank u c, thay v 4 thanh ghi th ch xem l 1, tng
t cho cc thanh ghi khc. S lng thc ch cn 368 nh.
C 2 cch truy xut b nh d liu: truy xut trc tip v truy xut gin tip.
Khi truy xut trc tip: th cc lnh ch c php truy xut 1 bank, mun truy xut cc nh
hay thanh ghi nm bank khc th phi i bank. C 2 bit chn bank l RP1 v RP0 nm trong thanh
ghi trng thi.
Khi truy xut gin tip: th cc lnh truy xut c php truy xut 2 bank: bank 0, 1 hoc bank
2, 3. Khi ang bank 0, 1 nu mun truy xut cc nh bank 2, 3 th phi i bank. C 1 bit chn
bank 0, 1 hoc bank 2, 3 l IRP nm trong thanh ghi trng thi.
b.
Thanh ghi trng thi STATUS REGISTER A CH 03H, 83H, 103H, 83H
TGTT cha trng thi ca khi ALU, trng thi Reset v cc bit chn bank b nh d liu.
IRP
RP1
RP0
TO
PD
Bit 7
DC
Bit 0
Hnh 2-5: Thanh ghi trng thi.
18
Nguyen nh Phu
00H
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
0BH
0CH
0DH
0EH
0FH
10H
11H
12H
13H
14H
15H
16H
17H
18H
19H
1AH
1BH
1CH
1DH
1EH
1FH
20H
Indirect addr(*)
OPTION_REG
PCL
STATUS
FSR
TRISA
TRISB
TRISC
TRISD
TRISE
PCLATH
INTCON
PIE1
PIE2
PCON
OSCCON
OSCTUNE
SSPCON2
PR2
SSPADD
SSPSTAT
WPUB
IOCB
VRCON
TXSTA
SPBRG
SPBRGH
PWM1CON
ECCPAS
PSTRCON
ADRESL
ADCON1
80H
81H
82H
83H
84H
85H
86H
87H
88H
89H
8AH
8BH
8CH
8DH
8EH
8FH
90H
91H
92H
93H
94H
95H
96H
97H
98H
99H
9AH
9BH
9CH
9DH
9EH
9FH
A0H
7FH
ACCESSES
70H 7FH
FILE ADDRESS
Indirect addr(*)
TMR0
PCL
STATUS
FSR
WDTCON
PORTB
CM1CON0
CM2CON0
CM2CON1
PCLATH
INTCON
EEDAT
EEADR
EEDATH
EEADRH
THANH GHI
THNG DNG
16 BYTE
100H
101H
102H
103H
104H
105H
106H
107H
108H
109H
10AH
10BH
10CH
10DH
10EH
10FH
110H
111H
112H
113H
114H
115H
116H
117H
118H
119H
11AH
11BH
11CH
11DH
11EH
11FH
120H
EFH
F0H
FFH
BANK 1
ACCESSES
70H 7FH
FILE ADDRESS
Indirect addr(*)
OPTION_REG
PCL
STATUS
FSR
SRCON
TRISB
BAUDCTL
ANSEL
ANSELH
PCLATH
INTCON
EECON1
EECON2
RESERVED
RESERVED
THANH GHI
THNG DNG
16 BYTE
180H
181H
182H
183H
184H
185H
186H
187H
188H
189H
18AH
18BH
18CH
18DH
18EH
18FH
190H
191H
192H
193H
194H
195H
196H
197H
198H
199H
19AH
19BH
19CH
19DH
19EH
19FH
1A0H
THANH GHI
THNG DNG
80 BYTE
THANH GHI
THNG DNG
80 BYTE
THANH GHI
THNG DNG
80 BYTE
THANH GHI
THNG DNG
96 BYTE
BANK 0
FILE ADDRESS
16FH
170H
17FH
BANK 2
ACCESSES
70H 7FH
1EFH
1F0H
1FFH
BANK 3
Bit 4
19
Nguyen nh Phu
Bit 3
Bit 1
Bit 0
B NH D LIU EEPROM
B nh d liu Eeprom c dung lng 256 byte dng lu d liu quan trng khi mt in th
d liu ny vn cn. Cch thc ghi d liu vo b nh Eeprom s c trnh by phn b nh
Eeprom.
CU HI N TP
Cu s 2-1:
Cu s 2-2:
Cu s 2-3:
Cu s 2-4:
2.
CU HI M RNG
Cu s 2-5:
Cu s 2-6:
3.
CU HI TRC NGHIM
Cu 2-1:
(a) 8KByte
(c) 8K16bit
Cu 2-2:
(a) 256Byte
(c) 8K16bit
Cu 2-3:
(b) 8K14bit
(d) 368Byte
(a) 8KWord
20
(b) 8K14bit
(d) 368Byte
(b) 8K14bit
Chng 2. To chc bo nh, thanh ghi.
Nguyen nh Phu
(c) 256Byte
Cu 2-4:
(b) 4 trang
(d) 4 bank
(b) 4 trang
(d) 4 bank
(a) 2 trang
(c) 2 bank
Cu 2-7:
(b) 814bit
(d) 813bit
(a) 2 trang
(c) 2 bank
Cu 2-6:
(d) 368Byte
(a) 8Byte
(c) 256Byte
Cu 2-5:
(a) Trang th 0
(c) Trang th 2
(b) Trang th 1
(d) Trang th 3
(b) 13 bit
(d) 15 bit
Cu 2-12: Cc chng trnh con lng vo nhau ca PIC ph thuc vo dung lng:
(a) B nh chng trnh (b) B nh d liu
(c) B nh ngn xp
(d) B nh EEPROM
Cu 2-15: Bit cho php thay i cc bank trong truy xut trc tip b nh d liu ca PIC 16F887 l:
(a) IRP1, IRP2
(c) RP1, RP2
Cu 2-16: Bit cho php thay i cc bank trong truy xut gin tip b nh d liu ca PIC 16F887 l:
(a) IRP1, IRP2
(c) IRP
(b) TRISB
(d) STATUS
21
Nguyen nh Phu
(a) TRISB
(c) TRISA
(b) PCL
(d) TMR0
Cu 2-19: Khi ngt xy ra th PIC 16F887 s thc hin chng trnh con phc v ngt ti a ch:
(a) 0004H
(c) 0000H
(b) 0014H
(d) 0024H
22
BI TP
Chng 3
GII THIU
LNH HP NG CA VI IU KHIN PIC 16F887
GII THIU
KHO ST TP LNH TM TT VI IU KHIN PIC 16F887
TP LNH CHI TIT
CU HI N TP TRC NGHIM - BI TP
CU HI N TP
CU HI TRC NGHIM
CU HI M RNG
BI TP
Nguyen nh Phu
I. GII THIU
chng ny kho st tp lnh hp ng ca cc vi iu khin. Sau khi kt thc chng ny bn
s bit m lnh nh phn, lnh gi nh, cc kiu nh a ch b nh ca vi iu khin, bit tp lnh
hp ng ca vi iu khin
Vi iu khin hay vi x l l cc IC lp trnh, khi bn thit k h thng iu khin c s dng
vi x l hay vi iu khin v d nh h thng iu khin n giao thng cho mt ng t gm c cc
n Xanh, Vng, v cc led 7 on hin th thi gian th mi ch l phn cng, mun h
thng vn hnh th bn phi vit mt chng trnh iu khin np vo b nh ni bn trong vi iu
khin hoc b nh bn ngoi v gn vo trong h thng h thng vn hnh v d nhin bn phi vit
ng th h thng mi vn hnh ng. Chng trnh gi l phn mm.
Phn mm v phn cng c quan h vi nhau, ngi lp trnh phi hiu r hot ng ca phn
cng vit chng trnh. phn ny s trnh by chi tit v tp lnh ca vi iu khin gip bn hiu
r tng lnh bn c th lp trnh c.
Cc khi nim v chng trnh, lnh, tp lnh v ngn ng gi nh trnh by chng 1,
y ch tm tt li.
Chng trnh l mt tp hp cc lnh c t chc theo mt trnh t hp l gii quyt ng
cc yu cu ca ngi lp trnh.
Ngi lp trnh l ngi bit gii thut vit chng trnh v sp xp ng cc lnh theo gii
thut. Ngi lp trnh phi bit chc nng ca tt c cc lnh ca vi iu khin vit chng trnh.
Tt c cc lnh c th c ca mt ngn ng lp trnh cn gi l tp lnh.
Lnh ca vi iu khin l mt s nh phn 8 bit [cn gi l m my]. 256 byte t 0000 0000b
n 1111 1111b tng ng vi 256 lnh khc nhau. Do m lnh dng s nh phn qu di v kh nh
nn cc nh lp trnh xy dng mt ngn ng lp trnh Assembly cho d nh, iu ny gip cho
vic lp trnh c thc hin mt cch d dng v nhanh chng cng nh c hiu v g ri chng
trnh.
Khi vit chng trnh bng ngn ng lp trnh Assembly th vi iu khin s khng thc hin
c m phi dng chng trnh bin dch Assembler chuyn i cc lnh vit bng Assembly ra
m lnh nh phn tng ng ri np vo b nh khi vi iu khin mi thc hin c chng
trnh.
Ngn ng lp trnh Assembly do con ngi to ra, khi s dng ngn ng Assembly vit th
ngi lp trnh vi iu khin phi hc ht tt c cc lnh v vit ng theo qui c v c php, trnh t
sp xp d liu chng trnh bin dch c th bin dch ng.
GII THIU
Tp lnh ca PIC 16 c chia ra lm 3 nhm lnh:
Lnh x l bit
Lnh x l byte
Lnh x l hng s v iu khin
8
OPCODE
13
24
7 6
d
10 9 8 7
OPCODE
(BIT)
0
f(FILE#)
0
f(FILE#)
Chng 3.Lenh hp ng
Nguyen nh Phu
13
OPCODE
k (literal)
13
11 10
OPCODE
0
k (literal)
TT C php
Chc nng
Chu
k
M lnh
C b nh
hng
ADDWF f,d
C, DC, Z
ANDWF f,d
CLRF f
Xa (f)
CLRW -
Xa (W)
00 0001 0xxx
xxxx
COMF f,d
B (f)
DECF f,d
Gim f
DECEFSZF
f,d
Gim f, b lnh k nu f =
0
1(2)
INCF f,d
Tng f
INCEFSZF f,d
Tng f, b lnh k nu f = 0
1(2)
25
Nguyen nh Phu
10
IORWF f,d
(W) or (f)
11
MOVF f,d
copy (f)
12
MOVWF f
(W) (f)
13
NOP
Khng lm g
00 0000 0xx0
0000
14
RLF f,d
15
RRF f,d
16
SUBWF f,d
(F) tr (f)
C, DC, Z
17
SWAPF f,d
18
IORWF f,d
Chc nng
Chu k M lnh
C b nh hng
BCF f,b
BSF f,b
Lm bit b trong f ln 1
BTFSS f,b
Chc nng
Chu k M lnh
C b nh hng
ADDLW k
ANDLW k
CALL k
CLRWDT
Xa b nh thi
GOTO k
Nhy n a ch k
IORLW k
(W) or k
MOVLW k K (W)
RETFIE
Tr v t ngt
RETLW
v np hng s vo W
10
RETURN
11
SLEEP
Cpu vo ch ch
12
SUBLW k
K (W) (W)
13
XORLW k
(W) xor k
3.
1. Lnh: ADDLW
C php:
Tc t:
26
Cng hng s k vo W
ADDLW
k
0 k 255
Chng 3.Lenh hp ng
Nguyen nh Phu
Thc thi:
(W) + k (W).
C nh hng: C, DC, Z.
Chu k thc hin: 1.
Chc nng: cng ni dung thanh ghi W vi hng s k 8 bit v kt qu lu vo W.
2. Lnh: ADDWF
Cng W vi f
C php:
ADDWF
f,d
Tc t:
0 f 127, d [0,1]
Thc thi:
(W) + (f) (dest). C nh hng: C, DC, Z. Chu k thc hin: 1.
Chc nng: cng ni dung thanh ghi W vi thanh ghi f. Nu d= 0 th lu kt qu vo
thanh ghi W, cn d=1 th lu vo thanh ghi f.
3. Lnh: ANDLW
And hng s vi W
C php:
ANDLW
k
Tc t:
0 k 255
Thc thi:
(W) AND (k)(W). C nh hng: Z.
Chu k thc hin: 1.
Chc nng: And ni dung thanh ghi W vi hng s k 8 bit, kt qu lu vo thanh ghi
W.
4. Lnh: ANDWF
And W vi F
C php:
ANDWF
f,d
Tc t:
0 f 127, d [0,1]
Thc thi:
(W) AND (f) (dest).
C nh hng: Z.
Chu k thc hin: 1.
Chc nng: And thanh ghi W vi thanh ghi f. Nu d = 0 th kt qu lu vo thanh ghi
W, nu d=1 th kt qu lu vo thanh ghi f.
5. Lnh: BCF
xo bit trong thanh ghi F - BIT CLEAR FILE
C php:
BCF
f,b
Tc t:
0 f 127, 0 b <7
Thc thi:
0 (f<b>).
C nh hng: khng. Chu k thc hin: 1.
Chc nng: xa bit b trong thanh ghi f.
6. Lnh: BSF
set bit trong thanh ghi F
- BIT SET FILE
C php:
BSF f,b
Tc t:
0 f 127, 0 b <7
Thc thi:
1 (f<b>).
C nh hng: khng. Chu k thc hin: 1.
Chc nng: set bit b trong thanh ghi f ln 1.
7. Lnh: BTFSS
kim tra 1 bit trong thanh ghi F v nhy nu bng 1
C php:
BTFSS
f,b
- BIT TEST FILE SKIP IF SET
Tc t:
0 f 127, 0 b <7
Thc thi:
nhy nu f<b>=1.
C nh hng: khng. Chu k thc hin: 1(2).
Chc nng: kim tra bit b: nu bit b bng 1 th lnh k b b qua v thay bng lnh
NOP, nu bit b bng 0 th thc thi lnh k.
8. Lnh: BTFSC
kim tra 1 bit trong thanh ghi F v nhy nu bng 0
C php:
BTFSC
f,b
- BIT TEST FILE SKIP IF CLEAR
Tc t:
0 f 127, 0 b <7
Thc thi:
nhy nu f<b>=0.
C nh hng: khng. Chu k thc hin: 1(2).
Chc nng: kim tra bit b: nu bit b bng 0 th lnh k b b qua v thay bng lnh
NOP, nu bit b bng 1 th thc thi lnh k.
9. Lnh: CALL
gi chng trnh con
C php:
CALL k
Tc t:
0 k 2047
Thc thi:
(PC + 1) TOS; kPC
Chng 3. Lenh hp ng.
- TOP OF STACK
27
Nguyen nh Phu
Chng 3.Lenh hp ng
Nguyen nh Phu
29
Nguyen nh Phu
LSB
LSB
lnh ng
Chng 3.Lenh hp ng
Nguyen nh Phu
C php:
SLEEP
Tc t:
khng
Thc thi:
00h WDT; 0 b m chia trc ca WDT; 1 TO ; 0 PD
C nh hng: TO , PD .
Chu k thc hin: 1.
Chc nng: PD = 0 cho bit CPU ang ch ng, b dao ng ngng hot ng.
Bit TO =1. B nh thi WDT v b chia trc b xa.
CU HI N TP
Cu s 3-1:
Cu s 3-2:
2.
CU HI M RNG
31
Nguyen nh Phu
Cu s 3-3:
Cu s 3-4:
Hy tm cu trc ng ng lnh.
CU HI TRC NGHIM
3.
Cu 3-1:
(a) 12 bit
(c) 14 bit
Cu 3-3:
(a)
(c)
Cu 3-7:
(a)
(c)
Cu 3-8:
(b) 1 bit
(d) 14 bit
(b) 1 bit
(d) 14 bit
(b) 13 bit
(d) 15 bit
Nguyen nh Phu
BI TP
33
Chng 4
GII THIU
CC THNH PHN C BN CA NGN NG C
CU HI N TP
CU HI M RNG
CU HI TRC NGHIM
BI TP
Nguyen nh Phu
GII THIU
I.
Trong chng trnh thng khai bo bin lu d liu v x l d liu, ty thuc vo loi d
liu m ta phi chn loi d liu cho ph hp. Cc bin ca vi x l bao gm bit, byte, word v long
word tng ng vi d liu 1 bit, 8 bit, 16 bit v 32 bit.
Cc kiu d liu c bn ty thuc vo phn mm s dng, vi iu khin PIC c rt nhiu phn
mm bin dch nh PIC-C, MIKRO-C, MPLAB, trong phn ny trnh by phn mm PIC-C.
Bng 4-1: Cc kiu d liu ca phn mm PIC-C:
TT
1
2
3
4
Kiu d liu
Int1
signed char
unsigned char
signed int hay signed int8
S bit
1
8
8
8
Gii hn
01
-128127
0255
-128127
5
unsigned int hay unsigned int8 8
0255
6
signed int16
16
-3276832767
7
unsigned int16
16
065535
8
signed long long
32
-2147483648 to 2147483647
9
unsigned long long
32
0 to 4294967295
10
float
32
1.175494E-38 to 3.402823E+38
V d 4-1: Khai bo cc bin
Int1 TT;
//khai bo bin trng thi thuc kiu d liu bit.
Unsigned char dem; //khai bo bin m (dem) thuc kiu k t khng du 8 bit.
Ch : phn mm lp trnh PIC-C khng phn bit ch hoa hay ch thng nhng cc phn
mm khc th c phn bit.
2.
CC TON T
Cc ton t l thnh phn quan trng trong lp trnh, lp trnh th chng ta cn phi hiu r
rng chc nng ca cc loi ton t.
Bng 4-2: Cc ton t ph bin trong ngn ng C:
TT
1
2
3
36
Ton
t
+
+=
&=
Chc nng
V d
Ton t cng
Ton t cng v gn.
Ton t and v gn.
Nguyen nh Phu
4
5
6
7
8
9
@
&
^=
^
|=
|
10
11
12
13
14
15
16
17
-/=
/
==
>
>=
++
*
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
!=
<<=
<
<<
<=
&&
!
||
%=
%
*=
*
~
>>=
>>
->
-=
sizeof
Ton t a ch
Ton t and
Ton t ex-or v gn.
Ton t ex-or
Ton t or v gn.
Ton t or nhiu i lng vi nhau thnh
1.
Gim
Ton t chia v gn.
Ton t chia
Ton t bng dng so snh
Ton t ln hn
Ton t ln hn hay bng
Tng
Ton t truy xut gin tip, i trc con
tr
Ton t khng bng
Ton t dch tri v gn
Ton t nh hn
Ton t dch tri
Ton t nh hn hay bng
Ton t and
Ton t ph nh (not)
Ton t or
Ton t chia ly s d v gn
Ton t module
Ton t nhn v gn
Ton t nhn
Ton t b 1
Ton t dch phi v gn
Ton t dch phi
Ton t con tr cu trc
Ton t tr v gn
Ton t tr
Xc nh kch thc theo byte ca ton t
x % = y tng ng vi x=x%y
x * = y tng ng vi x=x*y
x - = y tng ng vi x=x-y
a.
Ton t gn (=)
Dng gn mt gi tr no cho mt bin
V d 4-2: A = 5; Gn bin A bng 5
V d 4-3: A = 2+ (B = 5);
C chc nng gn bin b bng 5 ri cng vi 2 v gn cho bin A, kt qu B = 5 v A = 7.
b.
Ton t s hc (+, -, *, /, %)
C 5 ton t thc hin cc php ton cng, tr, nhn, chia v chia ly phn d.
V d 4-4:
A = 24;
B = A % 5;
Gn A bng 24, B gn s d ca A chia cho 5, kt qu B bng 4
Chng 4. Ngon ng C.
37
Nguyen nh Phu
V d 4-5:
A=123;
X = A%10;
//X=3
A= A/10;
//A = 12
Y = A%10;
//Y=2
Z = A/10;
//Z=1
V d ny c chc nng tch tng con s n v, chc, trm gn cho 3 bin x, y, z.
Cc lnh trn c th vit gn li nh sau:
X = A%10;
//X=3
Y = A/10%10;
//Y=2
Z = A/100;
//Z=1
V d 4-6:
A=1234;
X = A%10;
//X=4
A= A/10;
//A = 12
Y = A%10;
//Y=3
A= A/10;
//A = 12
Z = A%10;
//Z=2
V = A/10;
//V=1
V d ny c chc nng tch tng con s n v, chc, trm, ngn gn cho 4 bin x, y, z, v.
Cc lnh trn c th vit gn li nh sau:
X = A%10;
//X=3
Y = A/10%10;
//Y=2
Z = A/100%10;
//Z=1
V = A/1000;
//V=1
c.
Ton t gn phc hp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
Tng qut cho ton t gn phc hp: bin += gi_tr tng ng vi bin = bin + gi_tr.
V d 4-7:
A+=5; tng ng vi A = A +5;
A /= 5; tng ng A = A / 5;
B *= X + 1; tng ng B = B * (X+1);
d.
Ton t tng v gim (++, --)
Tng qut cho ton t gn phc hp: bin += gi_tr tng ng vi bin = bin + gi_tr.
V d 4-8:
A++; tng ng vi A = A +1 hay A+=1;
V d 4-9:
B = 3;
gn B bng 3
A=++B;
kt qu A bng 4, B bng 4
V d 4-10:
B = 3;
gn B bng 3
A=B++;
kt qu A bng B v bng 3, B tng ln 1 bng 4
S khc nhau l ++ t trc th tnh trc ri mi gn, t sau th gn trc ri mi tnh.
e.
Ton t quan h (==, !=, > , <, >=, <=)
Cc ton t quan h dng so snh cc biu thc, kt qu so snh l ng hoc sai.
Cc ton t trn tng ng l bng, khc, ln hn, nh hn, ln hn hay bng, nh hn hay
bng.
V d 4-11:
if (X<100)
X+=1;
Lnh trn kim tra nu X cn nh hn 100 th tng X ln 1.
f.
Ton t logic (!, && ,||)
Cc ton t trn tng ng l NOT, AND v OR.
V d 4-12:
!true s cho kt qu l false
38
Chng 4.Ngon ng C.
Nguyen nh Phu
CC LNH C C BN
Thnh phn quan trng th 3 trong lp trnh C l cc lnh ca ngn ng C, phn tip theo s
kho st cc lnh c bn.
a.
Lnh if v else:
Chc nng: kim tra iu kin nu tha th lm.
C php: if (iu_kin)
{
Lnh 1;
Lnh 2;
}
else
{
Lnh 3;
Lnh 4;
}
V d 4-18:
if (x==50)
x=1;
Chng 4. Ngon ng C.
39
Nguyen nh Phu
else
x=x+1;
b.
Lnh lp while:
Chc nng: lp li mt thao tc vi mt s ln nht nh hoc khi cn tha 1 iu kin no .
C php: while (iu_kin)
{
Lnh 1;
Lnh 2;
}
V d 4-19:
while (x > 0)
{x = x - 1 ;}
c.
Lnh lp do while:
Chc nng: lm cc lnh trong du ngoc v thot nu iu kin theo sau lnh while khng ng.
C php: do
{
Lnh 1;
Lnh 2;
}
while (iu_kin)
V d 4-20:
Do
{x=x+10;}
while (x < 100)
Thc hin lnh x bng x cng vi 10, lm cho n khi x nh hn 100.
d.
Lnh lp for:
Chc nng: lm cc lnh trong du ngoc mt s ln nht nh.
C php: for (gi_tr_bt_u; iu_kin_kt_thc; tng_gi_tr )
{
Lnh 1;
Lnh 2;
}
V d 4-21:
For (int n = 0; n <100; n++)
{x=x+10;}
Vng lp thc hin vi bin n bng 0 cho n khi n bng 100 th ngng.
e.
Lnh r nhnh break:
Chc nng: Lnh ny dng thot khi vng lp d cho iu kin kt thc cha tha mn.
f.
Lnh continue:
Chc nng: Lnh ny dng kt thc phn cn li ca vng lp lm ln lp tip theo.
g.
Lnh r nhnh goto:
Chc nng: Lnh ny dng nhy n nhy trong chng trnh.
h.
Lnh switch case:
Chc nng: thc hin 1 cng vic ty thuc vo hm.
C php: switch (cmd)
{
Case constant1: Lnh a1;
Lnh a2;
Break;
40
Chng 4.Ngon ng C.
Nguyen nh Phu
Case constant2:
Lnh b1;
Lnh b2;
Break;
Default:
Lnh c1;
Lnh c2;
Break;
}
V d 4-22:
switch (cmd)
{
Case 0: printf(cmd 0);
Break;
Case 1: printf(cmd 1);
Break;
Default: printf(bad cmd );
Break;
}
4.
/* my first C program*/
#INCLUDE <16F887.H>
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
VOID MAIN()
{
SET_TRIS_B(0x00);
//PORTB LA OUTPUT
OUTPUT_B(0x0F);
WHILE(1)
{}
}
/* my first C program*/ l ch thch cho chng trnh nm trong cp du /* . */ hoc
nm sau //.
Lnh #include <16F887.H > c chc nng bo cho trnh bin dch bit chng trnh dng cc
thnh phn ca vi iu khin c trong file 16F887.H.
Tip theo l khai bo cu hnh ca vi iu khin.
VOID MAIN () cho bit bt u chng trnh chnh v cc lnh tip theo ca chng trnh
chnh nm trong cp du {}.
5.
41
Nguyen nh Phu
#include <16F887.H>
Ch dn th nht c chc nng nh ngha bin RW l bit th 1 ca portB.
Ch dn th hai c chc nng khai bo chng trnh th vin ca vi iu khin 16F887.h
b.
Khai bo
Khai bo bin bao gm tn v thuc tnh, khai bo hm, khai bo hng. Khai bo bin ton cc
nm bn ngoi hm, khai bo bin cc b th nm bn trong hm.
c.
nh ngha gi tr cho bin
Dng thit lp gi tr cho 1 bin hoc 1 hm.
d.
Biu thc
L s kt hp ca ton t v tc t cho ra 1 kt qu duy nht.
e.
Hm
Mt hm bao gm cc khai bo bin, nh ngha gi tr, cc biu thc v cc lnh thc hin 1
chc nng c bit no .
6.
CON TR D LIU
Con tr d liu trong ngn ng C chnh l kiu truy xut gin tip dng thanh ghi, a ch ca
nh cn truy xut lu trong thanh ghi.
V d 4-24: khai bo con tr, gn a ch con tr v lu d liu:
unsigned char *pointer0 ;
//khai bo con tr
pointer0 = mem_address;
//gn a ch bt u ca vng nh cho con tr
*pointer0 = 0xFF;
7.
KHAI BO MNG
V d 4-25: khai bo mng:
unsigned char ma7doan[] = {0XC0,0XF9,0xA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90} ;
char chuoi_hien_thi = {HELLO ! } ;
42
Chng 4.Ngon ng C.
Nguyen nh Phu
ai hoc s pham ky thuat
//////// Fuses: NOMCLR,MCLR,NOPROTECT,PROTECT,NOCPD,CPD,NOBROWNOUT,BROWNOUT
//////// Fuses: BROWNOUT_NOSL,BROWNOUT_SW,NOIESO,IESO,NOFCMEN,FCMEN,NOLVP
//////// Fuses: LVP,NODEBUG,DEBUG,WRT,NOWRT,BORV40,BORV21
////////
////////////////////////////////////////////////////////////////// I/O
// Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(),
//
PORT_x_PULLUPS(), INPUT(),
//
OUTPUT_LOW(), OUTPUT_HIGH(),
//
OUTPUT_FLOAT(), OUTPUT_BIT()
// Constants used to identify pins in the above are:
#define
#define
#define
#define
#define
#define
#define
#define
PIN_A0
PIN_A1
PIN_A2
PIN_A3
PIN_A4
PIN_A5
PIN_A6
PIN_A7
40
41
42
43
44
45
46
47
#define
#define
#define
#define
#define
#define
#define
#define
PIN_B0
PIN_B1
PIN_B2
PIN_B3
PIN_B4
PIN_B5
PIN_B6
PIN_B7
48
49
50
51
52
53
54
55
#define
#define
#define
#define
#define
#define
#define
#define
PIN_C0
PIN_C1
PIN_C2
PIN_C3
PIN_C4
PIN_C5
PIN_C6
PIN_C7
56
57
58
59
60
61
62
63
#define
#define
#define
#define
#define
#define
#define
#define
PIN_D0
PIN_D1
PIN_D2
PIN_D3
PIN_D4
PIN_D5
PIN_D6
PIN_D7
64
65
66
67
68
69
70
71
#define
#define
#define
#define
PIN_E0
PIN_E1
PIN_E2
PIN_E3
72
73
74
75
43
Nguyen nh Phu
#define
#define
FALSE
TRUE
0
1
#define
#define
BYTE
BOOLEAN
int8
int1
#define
#define
#define
#define
#define
#define
#define
getc
fgetc
getchar
putc
fputc
fgets
fputs
getch
getch
getch
putchar
putchar
gets
puts
////////////////////////////////////////////////////////////////// Control
// Control Functions: RESET_CPU(), SLEEP(), RESTART_CAUSE()
// Constants returned from RESTART_CAUSE() are:
#define WDT_FROM_SLEEP 3
#define WDT_TIMEOUT 11
#define MCLR_FROM_SLEEP 19
#define MCLR_FROM_RUN 27
#define NORMAL_POWER_UP 25
#define BROWNOUT_RESTART 26
////////////////////////////////////////////////////////////////// Timer 0
// Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER_0(),
//
SET_TIMER0() or SET_RTCC(),
//
GET_TIMER0() or GET_RTCC()
// Constants used for SETUP_TIMER_0() are:
#define
T0_INTERNAL
0
#define
T0_EXT_L_TO_H
32
#define
T0_EXT_H_TO_L
48
#define
#define
#define
#define
#define
#define
#define
#define
#define
T0_DIV_1
T0_DIV_2
T0_DIV_4
T0_DIV_8
T0_DIV_16
T0_DIV_32
T0_DIV_64
T0_DIV_128
T0_DIV_256
8
0
1
2
3
4
5
6
7
#define
T0_8_BIT
#define
#define
#define
#define
#define
#define
#define
RTCC_INTERNAL
RTCC_EXT_L_TO_H
RTCC_EXT_H_TO_L
RTCC_DIV_1
RTCC_DIV_2
RTCC_DIV_4
RTCC_DIV_8
0
32
48
8
0
1
2
44
Chng 4.Ngon ng C.
Nguyen nh Phu
#define
RTCC_DIV_16
#define
RTCC_DIV_32
#define
RTCC_DIV_64
#define
RTCC_DIV_128
#define
RTCC_DIV_256
#define
RTCC_8_BIT
3
4
5
6
7
0
WDT_18MS
WDT_36MS
WDT_72MS
WDT_144MS
WDT_288MS
WDT_576MS
WDT_1152MS
WDT_2304MS
8
9
10
11
12
13
14
15
WDT_ON
WDT_OFF
WDT_DIV_16
WDT_DIV_8
WDT_DIV_4
WDT_DIV_2
WDT_TIMES_1
WDT_TIMES_2
WDT_TIMES_4
WDT_TIMES_8
WDT_TIMES_16
WDT_TIMES_32
WDT_TIMES_64
WDT_TIMES_128
0x4100
0
0x100
0x300
0x500
0x700
0x900 // Default
0xB00
0xD00
0xF00
0x1100
0x1300
0x1500
0x1700
////////////////////////////////////////////////////////////////// Timer 1
// Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1
// Constants used for SETUP_TIMER_1() are:
// (or (via |) together constants from each group)
#define
T1_DISABLED
0
#define
T1_INTERNAL
5
#define
T1_EXTERNAL
7
#define
T1_EXTERNAL_SYNC 3
#define
T1_CLK_OUT
Chng 4. Ngon ng C.
45
Nguyen nh Phu
#define
#define
#define
#define
T1_DIV_BY_1
T1_DIV_BY_2
T1_DIV_BY_4
T1_DIV_BY_8
0
0x10
0x20
0x30
#define
T1_GATE
0x40
#define
T1_GATE_INVERTED
0xC0
////////////////////////////////////////////////////////////////// Timer 2
// Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2
// Constants used for SETUP_TIMER_2() are:
#define
T2_DISABLED
0
#define
T2_DIV_BY_1
4
#define
T2_DIV_BY_4
5
#define
T2_DIV_BY_16
6
////////////////////////////////////////////////////////////////// CCP
// CCP Functions: SETUP_CCPx, SET_PWMx_DUTY
// CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH
// Constants used for SETUP_CCPx() are:
#define
CCP_OFF
0
#define
CCP_CAPTURE_FE
4
#define
CCP_CAPTURE_RE
5
#define
CCP_CAPTURE_DIV_4
6
#define
CCP_CAPTURE_DIV_16
7
#define
CCP_COMPARE_SET_ON_MATCH
8
#define
CCP_COMPARE_CLR_ON_MATCH
9
#define
CCP_COMPARE_INT
0xA
#define
CCP_COMPARE_RESET_TIMER
0xB
#define
CCP_PWM
0xC
#define
CCP_PWM_PLUS_1
0x1c
#define
CCP_PWM_PLUS_2
0x2c
#define
CCP_PWM_PLUS_3
0x3c
#word
CCP_1 =
getenv("SFR:CCPR1L")
#byte
CCP_1_LOW=
getenv("SFR:CCPR1L")
#byte
CCP_1_HIGH=
getenv("SFR:CCPR1H")
// The following should be used with the ECCP unit only (or these in)
#define
CCP_PWM_H_H
0x0c
#define
CCP_PWM_H_L
0x0d
#define
CCP_PWM_L_H
0x0e
#define
CCP_PWM_L_L
0x0f
#define
#define
#define
CCP_PWM_FULL_BRIDGE
CCP_PWM_FULL_BRIDGE_REV
CCP_PWM_HALF_BRIDGE
0x40
0xC0
0x80
#define
#define
#define
#define
#define
#define
#define
CCP_SHUTDOWN_ON_COMP1
CCP_SHUTDOWN_ON_COMP2
CCP_SHUTDOWN_ON_COMP
CCP_SHUTDOWN_ON_INT0
CCP_SHUTDOWN_ON_COMP1_INT0
CCP_SHUTDOWN_ON_COMP2_INT0
CCP_SHUTDOWN_ON_COMP_INT0
0x100000
0x200000
0x300000
0x400000
0x500000
0x600000
0x700000
46
Chng 4.Ngon ng C.
Nguyen nh Phu
#define
CCP_SHUTDOWN_AC_L
#define
CCP_SHUTDOWN_AC_H
#define
CCP_SHUTDOWN_AC_F
0x000000
0x040000
0x080000
#define
#define
#define
CCP_SHUTDOWN_BD_L
CCP_SHUTDOWN_BD_H
CCP_SHUTDOWN_BD_F
0x000000
0x010000
0x020000
#define
CCP_SHUTDOWN_RESTART
0x80000000
#define
#define
#define
#define
#define
CCP_PULSE_STEERING_A
CCP_PULSE_STEERING_B
CCP_PULSE_STEERING_C
CCP_PULSE_STEERING_D
CCP_PULSE_STEERING_SYNC
0x01000000
0x02000000
0x04000000
0x08000000
0x10000000
#word
CCP_2 =
getenv("SFR:CCPR2L")
#byte
CCP_2_LOW=
getenv("SFR:CCPR2L")
#byte
CCP_2_HIGH=
getenv("SFR:CCPR2H")
////////////////////////////////////////////////////////////////// SPI
// SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN
// Constants used in SETUP_SPI() are:
#define
SPI_MASTER
0x20
#define
SPI_SLAVE
0x24
#define
SPI_L_TO_H
0
#define
SPI_H_TO_L
0x10
#define
SPI_CLK_DIV_4
0
#define
SPI_CLK_DIV_16
1
#define
SPI_CLK_DIV_64
2
#define
SPI_CLK_T2
3
#define
SPI_SS_DISABLED
1
#define
#define
SPI_SAMPLE_AT_END
SPI_XMIT_L_TO_H
0x8000
0x4000
////////////////////////////////////////////////////////////////// UART
// Constants used in setup_uart() are:
// FALSE - Turn UART off
// TRUE - Turn UART on
#define
UART_ADDRESS
#define
UART_DATA
#define
UART_AUTODETECT
#define
UART_AUTODETECT_NOWAIT
#define
UART_WAKEUP_ON_RDA
#define
UART_SEND_BREAK
////////////////////////////////////////////////////////////////// COMP
// Comparator Variables: C1OUT, C2OUT
// Constants used in setup_comparator() are:
//
2
4
8
9
10
13
#define
#define
0x00
0x00
NC_NC_NC_NC
NC_NC
Chng 4. Ngon ng C.
47
Nguyen nh Phu
0x00090080
0x000A0081
0x00880082
0x00280083
0x00010084
0x00020085
0x00800086
0x00200087
0x00000020
0x00000010
0x20000000
0x00058000
0x00068100
0x00848200
0x00248300
0x00018400
0x00028500
0x00808600
0x00208700
0x00002000
0x00001000
0x10000000
0x01000000
0x02000000
////////////////////////////////////////////////////////////////// INTERNAL RC
// Constants used in setup_oscillator() are:
#define
OSC_31KHZ
1
#define
OSC_125KHZ
0x11
#define
OSC_250KHZ
0x21
#define
OSC_500KHZ
0x31
#define
OSC_1MHZ
0x41
#define
OSC_2MHZ
0x51
#define
OSC_4MHZ
0x61
#define
OSC_8MHZ
0x71
#define
OSC_INTRC
1
#define
OSC_NORMAL
0
48
Chng 4.Ngon ng C.
Nguyen nh Phu
// Result may be (ignore all other bits)
#define
OSC_STATE_STABLE 4
#define
OSC_31KHZ_STABLE 2
////////////////////////////////////////////////////////////////// ADC
// ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A),
//
SET_ADC_CHANNEL(), READ_ADC()
// Constants used for SETUP_ADC() are:
#define
ADC_OFF
0
// ADC Off
#define
ADC_CLOCK_DIV_2
0x100
#define
ADC_CLOCK_DIV_8
0x40
#define
ADC_CLOCK_DIV_32
0x80
#define
ADC_CLOCK_INTERNAL
0xc0
// Internal 2-6us
1
//| A0
2
//| A1
4
//| A2
8
//| A3
16
//| A5
32
//| E0
64
//| E1
128 //| E2
0x10000 //| B2
0x20000 //| B3
0x40000 //| B1
0x80000 //| B4
0x100000 //| B0
0x200000 //| B5
0
// None
// A0 A1 A2 A3 A5 E0 E1 E2 B0 B1 B2 B3 B4 B5
////////////////////////////////////////////////////////////////// INT
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
//
CLEAR_INTERRUPT(), INTERRUPT_ACTIVE(),
//
EXT_INT_EDGE()
// Constants used in EXT_INT_EDGE() are:
#define
L_TO_H
0x40
#define
H_TO_L
0
Chng 4. Ngon ng C.
49
Nguyen nh Phu
CU HI N TP
Cu s 4-1:
Cu s 4-2:
2.
CU HI M RNG
Cu s 4-3:
Cu s 4-4:
3.
CU HI TRC NGHIM
Cu 4-1:
(a) 8 bit
(c) 24 bit
Cu 4-2:
(a) T 0 n 255
(c) T -256 n 255
50
(b) 16 bit
(d) 32 bit
(b) T 0 n 65535
(d) T -128 n 127
Chng 4.Ngon ng C.
Nguyen nh Phu
Cu 4-3:
(a) 8 bit
(c) 24 bit
Cu 4-4:
(b) %
(d) &
Ton t no l chia ly s d:
(a) =
(c) /
Cu 4-9:
(b) T 0 n 65535
(d) T -128 n 127
(a) =
(c) /
Cu 4-8:
(b) 16 bit
(d) 32 bit
(a) T 0 n 255
(c) T -256 n 255
Cu 4-7:
(b) T 0 n 65535
(d) T -128 n 127
(a) 8 bit
(c) 24 bit
Cu 4-6:
(b) 16 bit
(d) 32 bit
(a) T 0 n 255
(c) T -256 n 255
Cu 4-5:
(b) %
(d) &
(a) =
(c) /
(b) %
(d) &
(b) !=
(d) <=
(b) !=
(d) <=
(b) !=
(d) <=
(b) &&
(d) ||
(b) &&
(d) ||
(b) ~
(d) |
51
Nguyen nh Phu
(a) !
(c) &
(b) &&
(d) ||
(b) ~
(d) |
(b) ~
(d) >>
(b) sizeof
(d) sizeon
(b) Nh hn 1
(d) ng
(b) 100 ln
(d) 99 ln
52
BI TP
Chng 4.Ngon ng C.
Chng 5
GII THIU
CHC NNG CC PORT CA VI IU KHIN
CC PORT CA PIC 16F887
H THNG T PHM
H THNG NHIU PHM
LNH SET_TRIS_X()
LNH OUTPUT_X()
LNH OUTPUT_HIGH(PIN)
LNH OUTPUT_LOW(PIN)
LNH OUTPUT_TOGGLE(PIN)
LNH OUTPUT_BIT(PIN,VALUE)
LNH VALUE=GET_TRIS_X()
LNH VALUE=INPUT(PIN)
LNH VALUE=INPUT_STATE(PIN)
LNH VALUE=INPUT_X()
LNH OUTPUT_DRIVE(PIN)
LNH OUTPUT_FLOAT(PIN)
LNH PORT_B_PULLUP()
CU HI N TP TRC NGHIM - BI TP
CU HI N TP
CU HI M RNG
CU HI TRC NGHIM
Nguyen nh Phu
I. GII THIU
chng ny kho st cc port xut nhp ca cc vi iu khin, cc lnh nh cu hnh cho
port v cc lnh xut nhp d liu cho port.
Sau khi kt thc chng ny th ngi c c th s dng c cc port iu khin cc i
tng nh led n, led 7 on, LCD, nhn tn hiu iu khin t nt nhn, bn phm ma trn, cc cm
bin.
Nguyen nh Phu
Hnh 5-2 trnh by PORTA v thanh ghi nh hng TRISA. Bit ca thanh ghi nh hng TRIS
bng 0 th port c chc nng xut d liu, nu bng 1 th c chc nng nhp d liu.
Ch : '0' tng ng vi 'OUT', '1' tng ng vi 'IN'.
Phn tip s kho st chi tit tng port.
1.
PortA l port hai chiu 8 bit, thanh ghi nh hng l TRISA c chc nng nh cu hnh vo ra
cho cc bit xut nhp ca portA, bit nh hng bng 0 th port tng ng xut, bit bng 1 th bit tng
ng l nhp, portA v thanh ghi nh hng TRISA nh hnh 5-3:
PORTA
R/W(x)
R/W(x)
RA7
RA6
Bit 7
R/W(1)
TRISA
TRISA7
Bit 7
R/W(x)
RA5
R/W(x)
R/W(x)
R/W(x)
R/W(x)
R/W(x)
RA4
RA3
RA2
RA1
RA0
R/W(1)
TRISA5
Bit 0
R/W(1)
R/W(1)
R/W(1)
R/W(1)
R/W(1)
TRISA4
TRISA3
TRISA2
TRISA1
TRISA0
Bit 0
Chn RA2/AN2/VREF-/CVREF/C2IN+:
C s mch nh hnh 5-6:
C th nh cu hnh thc hin 1 trong cc
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
Nguyen nh Phu
Chn RA4/T0CLI/C1OUT:
56
Nguyen nh Phu
PortB l port hai chiu 8 bit, thanh ghi nh hng l TRISB c chc nng nh cu hnh vo ra
cho cc bit xut nhp ca portB, bit nh hng bng 0 th port tng ng xut, bit bng 1 th bit tng
ng l nhp, portB v thanh ghi nh hng TRISB nh hnh 5-12:
PORTB
R/W(x)
R/W(x)
RB7
RB6
Bit 7
R/W(1)
TRISB
TRISB7
Bit 7
R/W(x)
RB5
R/W(x)
R/W(x)
RB4
RB3
R/W(x)
RB2
R/W(x)
RB1
R/W(1)
TRISB5
R/W(x)
RB0
Bit 0
R/W(1)
R/W(1)
R/W(1)
R/W(1)
R/W(1)
TRISB4
TRISB3
TRISB2
TRISB1
TRISB0
Bit 0
57
Nguyen nh Phu
U(0)
R/W(1)
ANS13
R/W(1)
R/W(1)
R/W(1)
R/W(1)
R/W(1)
ANS12
ANS11
ANS10
ANS9
ANS8
Bit 0
Bit 7
R/W(1)
WPUB6
R/W(1)
WPUB5
R/W(1)
R/W(1)
R/W(1)
R/W(1)
R/W(1)
WPUB4
WPUB3
WPUB2
WPUB1
WPUB0
Bit 0
Bit 7
Thanh ghi IOCB (Interrupt On-Change Port B register) c cu trc nh hnh 5-15. Cc bit
IOCB<7:0> trong thanh ghi IOCB nu bng 1 th cho php ngt, bng 0 th cm.
R/W(0)
IOCB7
R/W(0)
IOCB6
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
IOCB5
IOCB4
IOCB3
IOCB2
IOCB1
IOCB0
Bit 0
Bit 7
Hnh 5-15: Thanh ghi IOCB cho php/cm ngt portB thay i.
Kho st cu hnh mch cho tng tn hiu.
58
Nguyen nh Phu
Chn RB0/AN12/INT:
Chn RB1/AN10/P1C/C12IN3-:
C s mch nh hnh 5-16:
C s mch nh hnh 5-16:
C th nh cu hnh thc hin 1 trong cc
C th nh cu hnh thc hin 1 trong cc
chc
nng
sau:
chc nng sau:
L tn hiu xut nhp s I/O.
L tn hiu xut nhp s I/O.
L ng vo knh th 10 ca khi ADC.
L ng vo knh th 12 ca khi ADC.
L
ng
ra
PWM
(ch
c
p thp.
PIC16F882/883/886).
L ng vo m th 2 ca b so snh C1, C2.
Chn RB4/AN11/P1D:
PIC16F882/883/886).
Chn RB6/ICSPCLK:
Chn RB7/ ICSPDAT:
C s mch nh hnh 5-17:
C s mch nh hnh 5-17:
C th nh cu hnh thc hin 1 trong cc
C th nh cu hnh thc hin 1 trong cc
chc nng sau:
chc nng sau:
L tn hiu xut nhp s I/O.
L tn hiu xut nhp s I/O.
L ng d liu lp trnh ni tip cho b nh
L ng vo nhn xung clock lp trnh ni
chng trnh.
tip cho b nh chng trnh.
59
Nguyen nh Phu
60
Nguyen nh Phu
PortC l port hai chiu 8 bit, thanh ghi nh hng l TRISC c chc nng nh cu hnh vo ra
cho cc bit xut nhp ca portC, bit nh hng bng 0 th port tng ng xut, bit bng 1 th bit tng
ng l nhp, portC v thanh ghi nh hng TRISC nh hnh 5-19:
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
61
Nguyen nh Phu
PORTC
R/W(x)
R/W(x)
RC7
RC6
Bit 7
R/W(1)
TRISC
TRISC7
Bit 7
R/W(x)
RC5
R/W(x)
R/W(x)
R/W(x)
R/W(x)
R/W(x)
RC4
RC3
RC2
RC1
RC0
R/W(1)
TRISC5
Bit 0
R/W(1)
R/W(1)
R/W(1)
R/W(1)
R/W(1)
TRISC4
TRISC3
TRISC2
TRISC1
TRISC0
Bit 0
Chn RC2/P1A/CCP1:
Chn RC3/SCK/SCL:
C s mch nh hnh 5-22:
C s mch nh hnh 5-23:
C th nh cu hnh thc hin 1 trong cc
C th nh cu hnh thc hin 1 trong cc
chc
nng
sau:
chc nng sau:
L tn hiu xut nhp s I/O.
L tn hiu xut nhp s I/O.
L ng cp xung cho truyn d liu SPI.
L ng ra ca PWM.
L ng cp xung cho truyn d liu I2C.
L ng vo ca Capture v ng ra ca
Compare ca b so snh C1.
62
Nguyen nh Phu
Chn RC4/SDI/SDA:
Chn RC5/SDO:
C s mch nh hnh 5-24:
C s mch nh hnh 5-25:
C th nh cu hnh thc hin 1 trong cc
C th nh cu hnh thc hin 1 trong cc
chc
nng
sau:
chc nng sau:
L tn hiu xut nhp s I/O.
L tn hiu xut nhp s I/O.
L ng ra d liu cho truyn d liu SPI.
L ng vo d liu cho truyn d liu SPI.
L ng d liu cho truyn d liu I2C.
Chn RC6/TX/CK:
Chn RC7/RX/DT:
C s mch nh hnh 5-26:
C s mch nh hnh 5-27:
C th nh cu hnh thc hin 1 trong cc
C th nh cu hnh thc hin 1 trong cc
chc
nng
sau:
chc nng sau:
L tn hiu xut nhp s I/O.
L tn hiu xut nhp s I/O.
L ng vo nhn d liu cho truyn d liu
L ng ra pht d liu cho truyn d liu
ni tip bt ng b.
ni tip bt ng b.
L ng ra cp xung clock cho truyn d liu
L ng vo ra cho truyn d liu ni tip
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
63
Nguyen nh Phu
ng b.
ni tip ng b.
PortD l port hai chiu 8 bit, thanh ghi nh hng l TRISD c chc nng nh cu hnh vo ra
cho cc bit xut nhp ca portD, bit nh hng bng 0 th port tng ng xut, bit bng 1 th bit tng
ng l nhp, portD v thanh ghi nh hng TRISD nh hnh 5-28:
PORTD
R/W(x)
R/W(x)
RD7
RD6
Bit 7
R/W(1)
TRISD
TRISD7
Bit 7
R/W(x)
RD5
R/W(x)
R/W(x)
R/W(x)
R/W(x)
R/W(x)
RD4
RD3
RD2
RD1
RD0
R/W(1)
TRISD6
TRISD5
Bit 0
R/W(1)
R/W(1)
R/W(1)
R/W(1)
R/W(1)
TRISD4
TRISD3
TRISD2
TRISD1
TRISD0
Bit 0
L ng ra ca PWM.
Chn RD6/P1C:
S mch in ca cc chn t RD6 nh hnh 5-30:
Chn ny c cu hnh thc hin 1 trong cc chc nng sau:
64
Nguyen nh Phu
Chn RD7/P1D:
S mch in ca cc chn t RD7 nh hnh 5-30:
Chn ny c cu hnh thc hin 1 trong cc chc nng sau:
PortE l port hai chiu 4 bit, thanh ghi nh hng l TRISE c chc nng nh cu hnh vo ra
cho cc bit xut nhp ca portE, bit nh hng bng 0 th port tng ng xut, bit bng 1 th bit tng
ng l nhp, portE v thanh ghi nh hng TRISE nh hnh 5-31:
U(0)
PORTE
Bit 7
U(0)
TRISE
Bit 7
U(0)
-
U(0)
U(0)
R/W(x)
R/W(x)
R/W(x)
R/W(x)
RE3
RE2
RE1
RE0
U(0)
Bit 0
U(0)
R/W(1)
R/W(1)
R/W(1)
R/W(1)
TRISE3
TRISE2
TRISE1
TRISE0
Bit 0
65
Nguyen nh Phu
Chn RE2/AN7:
LNH SET_TRIS_X()
C php:
Thng s:
Chc nng:
set_tris_x(value);
x l port A, B, C, D, E
value l 1 s nguyn 8 bit tng ng vi cc bit ca port I/O.
nh hng cho cc port I/O (TRI-State) l vo hay ra. Mi bit tng ng 1 chn. Mc
1 th chn tng ng l ng vo, mc 0 l ng ra.
C hiu lc: cho tt c cc vi iu khin PIC.
V d 5-1:
SET_TRIS_B (0x0F);
// 0F=00001111: B7- B4 l ng ra, B3-B0 l ng vo.
2.
66
LNH OUTPUT_X(VALUE)
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
Nguyen nh Phu
C php:
output_x (value)
Thng s:
Chc nng:
C hiu lc:
V d 5-2:
3.
LNH OUTPUT_HIGH(PIN)
output_high(pin);
tng ng lnh
BSF PORTX,B
pin l chn xut d liu - hy xem file nh ngha ca thit b "device.h" bit tn
chnh xc.
Chc nng: lm 1 chn ca port ln mc cao.
C hiu lc: lnh ny p dng cho tt c cc thit b.
V d 5-3:
OUTPUT_HIGH(PIN_A0); // lm cho chn RA0 ca port A ln 1
C php:
Thng s:
4.
LNH OUTPUT_LOW(PIN)
output_low(pin);
tng ng lnh
BCF PORTX,B
pin l chn xut d liu - hy xem file nh ngha ca thit b "device.h" bit tn
chnh xc.
Chc nng: lm 1 chn ca port xung mc thp.
C hiu lc: lnh ny p dng cho tt c cc thit b.
V d 5-4:
output_low(pin_a0); // lm cho chn RA0 ca PortA xung mc 0
C php:
Thng s:
5.
LNH OUTPUT_TOGGLE(PIN)
C php:
Thng s:
output_toggle(pin);
pin l chn xut d liu - hy xem file nh ngha ca thit b "device.h" bit tn
chnh xc.
Chc nng: lm o trng thi 1 chn ca port.
C hiu lc: lnh ny p dng cho tt c cc thit b.
V d 5-5:
OUTPUT_TOGGLE(PIN_B0); // o trng thi chn RB0 ca port B
6.
LNH OUTPUT_BIT(PIN,VALUE)
C php:
Thng s:
output_bit(pin,value);
pin l chn xut d liu - hy xem file nh ngha ca thit b "device.h" bit tn
chnh xc.
Chc nng: xut d liu 0 hoc 1 ra 1 chn ca port.
C hiu lc: lnh ny p dng cho tt c cc thit b.
V d 5-6:
output_bit(pin_b0,0); // xut d liu 0 ra RB0
7.
C php:
value = get_tris_x();
Thng s:
khng c thng s
Kt qu tr v: l byte d liu nh cu hnh t thanh ghi TRIS
Chc nng: kt qu tr v l gi tr ca thanh ghi TRIS ca cc port A, B, C or D.
C hiu lc: lnh ny p dng cho tt c cc thit b.
8.
C php:
value = input(pin);
Thng s:
pin l chn c - hy xem file nh ngha ca thit b "device.h" bit tn chnh xc
Kt qu tr v: 0 (or FALSE) nu chn mc thp, 1 (or TRUE) nu chn mc cao.
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
67
Nguyen nh Phu
Chc nng: c d liu 1 bit t 1 chn ca port, chn ny phi cu hnh l chn vo.
C hiu lc: lnh ny p dng cho tt c cc thit b.
V d 5-7:
while (! Input (PIN_B1));
//i cho n khi chn Rb1 ln mc cao
If (input(PIN_A0))
Printf(A0 is now high \r\n);
Int16 i = PIN_B1
Whiel (!i);
//i chn RB1 ln mc cao
9.
LNH INPUT_STATE()
C php:
Thng s:
Tr v:
value = input_state(pin);
pin l chn c - hy xem file nh ngha ca thit b "device.h" bit tn chnh xc
kt qu c bng 1 nu chn c mc cao, kt qu c bng 0 nu chn c mc
thp.
Chc nng: lnh c mc logic ca 1 chn nhng khng lm thay i hng ca chn.
C hiu lc: lnh ny p dng cho tt c cc thit b.
V d 5-8:
level = input_state(pin_A3);
10.
Value = INPUT_X()
C php:
value = input_x();
Thng s:
khng c.
Kt qu tr v: l d liu 8 bit ca portx.
Chc nng: lnh c mc logic ca 1 chn nhng khng lm thay i hng ca chn.
C hiu lc: lnh ny p dng cho tt c cc thit b.
11.
LNH OUTPUT_DRIVE(PIN)
C php:
Thng s:
Tr v:
Chc nng:
C hiu lc:
V d 5-10:
12.
output_drive(pin);
pin l chn c nh ngha trong file "device.h".
khng c.
thit lp chn (pin) l ch xut.
lnh ny p dng cho tt c cc thit b.
output (pin_A0);
LNH OUTPUT_FLOAT(PIN)
C php:
Thng s:
Tr v:
Chc nng:
output_float(pin);
pin l chn c nh ngha trong file "device.h".
khng c.
thit lp chn (pin) l ch nhp v th ni chn tn hiu ny thit b khc bn
ngoi ton quyn iu khin chn ny a d liu vo vi iu khin.
C hiu lc: lnh ny p dng cho tt c cc thit b.
V d 5-11: if ((data & 0x80) == 0)
Output_low (pin_A0);
else
output_float (pin_A0);
13.
LNH PORT_B_PULLUP( )
C php:
Thng s:
Tr v:
Chc nng:
68
port_b_pullup(value);
value c 2 gi tr l true v false.
khng c.
thit lp port B treo ln ngun qua in tr ko ln bn trong. Nu value l true th treo
ln ngun, nu l false th khng treo.
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
Nguyen nh Phu
V.
S mch:
300
I LED
10mA
C th dng in tr 300 hoc 330.
Mch s dng thch anh c tn s 20MHz, c nt nhn reset, in tr reset 10k v c
pinheader 5 chn dng kt ni vi mch np ni tip.
Lu :
BEGIN
Chng trnh:
#INCLUDE <16F887.H>
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
#USE DELAY(CLOCK=20M)
VOID MAIN()
{
SET_TRIS_D(0x00);
WHILE(TRUE)
{
OUTPUT_D(0xFF);
DELAY_MS(1000);
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
69
Nguyen nh Phu
OUTPUT_D(0x00);
DELAY_MS(1000);
}
}
NGNG
Chng trnh:
#INCLUDE <16F887.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20M)
UNSIGNED INT8 I;
VOID MAIN()
{ SET_TRIS_D(0x00);
FOR(I=0;I<10;I++)
{
OUTPUT_D(0xFF); DELAY_MS(1000);
OUTPUT_D(0x00); DELAY_MS(1000);
}
WHILE(TRUE){}
}
Nguyen nh Phu
Bi 5-3: Dng vi iu khin 16F887 iu khin 8 led n sng dn tt dn t phi sang tri.
Chng trnh:
#INCLUDE <16F887.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20M)
UNSIGNED INT8 I, X;
VOID MAIN()
{ SET_TRIS_D(0x00); X=0X00; OUTPUT_D(X); DELAY_MS(500);
WHILE(TRUE)
{ FOR (I=0;I<8;I++)
{ X = (X<<1)+0X01; OUTPUT_D(X); DELAY_MS(500);}
FOR (I=0;I<8;I++)
{ X = (X<<1);
OUTPUT_D(X); DELAY_MS(500);}
}
}
71
Nguyen nh Phu
M 7 on:
Led 7 on v tn cc on nh hnh 5-39:
SO NH PHAN
HEX
7
6 5 4 3 2 1 0
DP G F E D C B A
1 1 0 0 0 0 0 0
C0
72
F9
TP
SO NH PHAN
HEX
7 6 5 4 3 2 1 0
DP G F E D C B A
1 0 0 1 0 0 1 0
92
82
Nguyen nh Phu
A4
F8
B0
80
99
90
Lu :
BEGIN
LU 10 M 7 ON T 0 N 9
Hnh 5-40: Lu m t 0 n 9.
Chng trnh:
#INCLUDE <16F887.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20M)
CONST UNSIGNED CHAR MA7DOAN [10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90};
SIGNED INT DEM;
UNSIGNED INT MA_DEM;
VOID MAIN()
{ SET_TRIS_B(0x00);
WHILE(TRUE)
{ FOR (DEM=0;DEM<10;DEM++)
{
MA_DEM = MA7DOAN[DEM];
OUTPUT_B(MA_DEM);
DELAY_MS(300);
}
}
}
73
Nguyen nh Phu
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=16M)
CONST UNSIGNED CHAR MA7DOAN [10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90};
SIGNED INT DEM;
VOID MAIN()
{ SET_TRIS_B(0x00);
WHILE(TRUE)
{ FOR (DEM=0;DEM<10;DEM++)
{
OUTPUT_B(MA7DOAN[DEM]);
DELAY_MS(300);
}
}
}
Trong chng trnh xut m 7 on ca bin DEM ra portB hin th lun nn khng cn s
dng bin trung gian MA_DEM.
Trong chng trnh th cc hng khai bo loi vi iu khin, cu hnh, tn s clock v m 7 on
t thay i nn to thnh 1 file th vin < TV_16F887.C > lu cc khai bo nh sau:
#INCLUDE <TV_16F887.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=16M)
CONST UNSIGNED CHAR MA7DOAN [10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90};
Khi chng trnh chnh c vit li nh sau:
#INCLUDE <TV_16F887.C>
SIGNED INT DEM;
VOID MAIN()
{ SET_TRIS_B(0x00);
WHILE(TRUE)
{ FOR (DEM=0; DEM<10; DEM++)
{
OUTPUT_B(MA7DOAN[DEM]);
DELAY_MS(300);
}
}
}
T y v sau ta s s dng th vin ny v c th b sung thm cc ni dung mi.
Bi tp 5-4: Hy vit chng trnh thc hin m t 9 xung 0.
Hy v mch bng Proteus v m phng.
Bi 5-5: Dng vi iu khin 16F887 kt ni vi 2 led 7 on anode chung v vit chng trnh
m t 00 n 99 vi thi gian tr tu chn.
74
Nguyen nh Phu
Lu :
BEGIN
LU 10 M 7 ON T 0 N 9
Chng trnh:
#INCLUDE<TV_16F887.C>
SIGNED INT DEM;
VOID MAIN()
{ SET_TRIS_B(0x00); SET_TRIS_C(0x00);
WHILE(TRUE)
{ FOR (DEM=0;DEM<100;DEM++)
{
OUTPUT_C(MA7DOAN[DEM/10]); //CHUC
OUTPUT_B(MA7DOAN[DEM%10]); //DONVI
DELAY_MS(300);
}
}
}
75
Nguyen nh Phu
Chng trnh chnh khi to cc portB v C l xut, cho vng lp for vi bin DEM chy t 0
n 99, tin hnh chia tch hng n v, hng chc ri gii m v gi ra port tng ng hin th,
delay.
Bi tp 5-5: Hy vit chng trnh thc hin m t 000 n 999 hin th trn 3 led 7 on, thi
gian tr tu chn. Cc bc thc hin bao gm: v mch, vit lu , vit chng trnh v m phng.
S mch:
Nguyen nh Phu
php transistor ca led cn sng dn, thc hin delay mt khong thi gian ngn ri tt transistor
m v thc hin tng t cho led th 2, c th cho n led cui cng ri lp li.
Thi gian cho led sng tu thuc vo s lng led sao cho chu k qut tt c cc led nhanh hn
p ng tn s ca mt ta quan st th ta s nhn thy cc led sng ht.
Vi 8 led 7 on theo s trn th thi gian sng l 1/8 v thi gian tt l 7/8 th bn chn
chu k qut 8ms tng ng vi tn s 125Hz l ph hp, bn c th chn tn s cao hn.
u im phng php qut led: hin th c nhiu thng tin, mch n gin.
Khuyt im: chng trnh phi qut lin tc th led mi sng, do thi gian sng t, thi gian tt
nhiu nn led s sng m hn so vi phng php kt ni trc tip.
Gii php tng sng ca led: nu qut khong 4 led th led sng r, nu nhiu led hn th
nn gim in tr hn dng t 330 xung cn khong 220.
Cu hi: nu qut 16 led th bn s chn gii php no cho led sng?
Tr li: c 2 gii php: gii php th nht l kt ni ging nh s trn dng portB ni song
song cc on ca 16 led, dng 2 port iu khin 16 transistor cho php led sng.
Vi gii php ny th thi gian tt ca led l 15/16 thi gian qu ln led s m v c th nhp
nhy.
Gii php th hai l tch lm 2 nhm 8 led: dng port th nht iu khin cc on ca 8 led
nhm th nht, dng port th hai iu khin cc on ca 8 led nhm th hai, dng port th ba iu
khin 8 transistor iu khin chung 2 nhm, mi ln m 1 transistor dng chung cho c 2 led.
Vi gii php ny th thi gian tt ca led l 7/8 t hn gii php 1 nn led sng r hn.
Lu :
BEGIN
Chng trnh:
#INCLUDE<TV_16F887.C>
VOID MAIN()
{
SET_TRIS_B(0x00);
SET_TRIS_D(0x00);
WHILE(TRUE)
{
OUTPUT_B(0xC0); OUTPUT_LOW(PIN_D0); DELAY_MS(1); OUTPUT_HIGH(PIN_D0);
OUTPUT_B(0XF9); OUTPUT_LOW(PIN_D1); DELAY_MS(1); OUTPUT_HIGH(PIN_D1);
OUTPUT_B(0XA4); OUTPUT_LOW(PIN_D2); DELAY_MS(1); OUTPUT_HIGH(PIN_D2);
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
77
Nguyen nh Phu
OUTPUT_B(0XB0);
OUTPUT_B(0x99);
OUTPUT_B(0X92);
OUTPUT_B(0X82);
OUTPUT_B(0XF8);
}
OUTPUT_LOW(PIN_D3); DELAY_MS(1);
OUTPUT_LOW(PIN_D4); DELAY_MS(1);
OUTPUT_LOW(PIN_D5); DELAY_MS(1);
OUTPUT_LOW(PIN_D6); DELAY_MS(1);
OUTPUT_LOW(PIN_D7); DELAY_MS(1);
OUTPUT_HIGH(PIN_D3);
OUTPUT_HIGH(PIN_D4);
OUTPUT_HIGH(PIN_D5);
OUTPUT_HIGH(PIN_D6);
OUTPUT_HIGH(PIN_D7);
S mch: do m 2 s nn kt ni 2 led.
Lu :
BEGIN
LU 10 M 7 ON T 0 N 9
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT8 DEM, I;
78
Nguyen nh Phu
VOID HIENTHI_DELAY()
{
FOR (I=0;I<200;I++)
{
OUTPUT_B(MA7DOAN[DEM %10]);
DELAY_MS(1);
OUTPUT_B(MA7DOAN[DEM /10]);
DELAY_MS(1);
}
}
VOID MAIN()
{ SET_TRIS_B(0x00); SET_TRIS_D(0x00);
WHILE(TRUE)
{
FOR(DEM=0;DEM<100;DEM++)
{
HIENTHI_DELAY();
}
}
}
OUTPUT_LOW(PIN_D0);
OUTPUT_HIGH(PIN_D0);
OUTPUT_LOW(PIN_D1);
OUTPUT_HIGH(PIN_D1);
OUTPUT_D(0XFF);
Gii thch: vng lp for thc hin 100 ln t 00 n 99, ly gi tr m chia tch hng n
v, hng chc, gii m v gi ra port hin th.
Bi tp 5-6: Hy vit chng trnh thc hin m t 000 n 999 hin th trn 3 led 7 on kt
ni theo phng php qut, thi gian tr tu chn. Cc bc thc hin bao gm: v mch, vit lu ,
vit chng trnh v m phng.
1.
S mch:
79
Nguyen nh Phu
Lu :
BEGIN
Khi to cc port
TT 8 LED
Nhn ON
SNG 8 LED
Nhn OFF
END
Chng trnh:
#INCLUDE<TV_16F887.C>
#DEFINE ON
PIN_E0
#DEFINE OFF
PIN_E1
VOID MAIN()
80
Nguyen nh Phu
SET_TRIS_E(0xFF);
SET_TRIS_D(0x00); OUTPUT_D(0X00);
WHILE(TRUE)
{
WHILE (INPUT(ON));
OUTPUT_D(0XFF);
WHILE (INPUT(OFF));
OUTPUT_D(0X00);
}
}
S mch:
Lu :
81
Nguyen nh Phu
BEGIN
Khi to cc port
TT 8 LED
Nhn ON
SNG 4 LED
Nhn OFF
Nhn INV
S
O 8 LED
Chng trnh:
#INCLUDE<TV_16F887.C>
#DEFINE ON
PIN_E0
#DEFINE OFF
PIN_E1
#DEFINE INV
PIN_E2
UNSIGNED INT8 X=0;
VOID MAIN()
{
SET_TRIS_E(0xFF); X=0;
SET_TRIS_D(0x00); OUTPUT_D(X);
WHILE(TRUE)
{
WHILE (INPUT(ON));
X= 0X0F; OUTPUT_D(X);
DO
{
IF(!INPUT(INV))
{
X= ~ X;
OUTPUT_D(X);
}
}WHILE(INPUT(OFF));
OUTPUT_D(0X00);
}
}
82
Nguyen nh Phu
Bi 5-10: Dng vi iu khin 16F887 giao tip vi 8 led n v 3 nt nhn ON, OFF, INV. Khi
cp in th 8 led tt, khi nhn ON th 4 led thp (D<3:0>) sng, khi nhn INV th o trng thi ca 8
led: 4 sng thnh tt, 4 tt thnh sng, khi nhn OFF th 8 led tt. C chng di nt nhn INV.
Trong chng trnh ny khi chy thc t th do tc ca vi iu khin qu nhanh, khi nhn o
chiu th do thi gian nhn phm di nn vi iu khin thc hin o led lin tc, ta s nhn thy 8 led
sng lun cho n khi ta bung phm, hoc ta nhn nhanh th trng thi o ca led khng th xc nh
r rng.
xc nh r rng th phi chng di bng cch kim tra phm nhn, nu c th delay, ri x l
v kim tra bung phm.
Trong bi iu khin ch c phm INV gy ra nh hng nn lu v chng trnh x l phn
chng di v ch bung phm INV nh sau:
Lu : nh hnh 5-50.
CHNG DI
Nhn INV
DELAY 20MS
Nhn INV
O 8 LED
CH BUNG PHM
END
Chng trnh:
#INCLUDE<TV_16F887.C>
#DEFINE ON
PIN_E0
#DEFINE OFF
PIN_E1
#DEFINE INV
PIN_E2
UNSIGNED INT8 X=0;
VOID CHONGDOI_INV ()
{
IF (!INPUT(INV))
{ DELAY_MS (20);
IF(!INPUT(INV))
{ {X = ~ X; OUTPUT_D(X);}
DO {}
WHILE (!INPUT(INV));
}
}
}
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
83
Nguyen nh Phu
VOID MAIN()
{
SET_TRIS_E(0xFF); X=0;
SET_TRIS_D(0x00); OUTPUT_D(X);
WHILE(TRUE)
{
WHILE (INPUT(ON));
X= 0X0F; OUTPUT_D(X);
DO
{
CHONGDOI_INV ();
}WHILE(INPUT(OFF));
OUTPUT_D(0X00);
}
}
Bi tp 5-7: Hy vit chng trnh iu khin 8 led n bng 2 nt nhn SANG, TAT. Khi nhn
nt SANG th 8 led sng dn t phi sang tri, mi ln nhn th 1 led sng, khi nhn nt TAT th 8 led
tt dn t tri sang phi, mi ln 1 led. Cc bc thc hin bao gm: v mch, vit lu , vit chng
trnh v m phng.
Bi 5-11: Mch m thi gian t 00 n 99, dng vi iu khin PIC 16F887 kt ni vi 2 led 7
on anode chung v 2 nt nhn Start, Stop. Vit chng trnh thc hin chc nng: khi cp in th
led hin th 00, khi nhn Start th mch m t 00 n 99, nu nhn Stop th ngng ti gi tr ang
m, nhn Start th m tip.
S mch:
84
Lu :
Nguyen nh Phu
BEGIN
LU 10 M 7 ON T 0 N 9
Gii thch lu :
Bi ny ging bi m kho st, ch thm phn kim tra nt nhn, bin cho php ban u gn
bng 0 khng cho php m, chng trnh kim tra c nhn nt Start lm bin cho php bng 1 cho
php mch m. Nu nhn nt Stop s lm bin cho php bng 0, mch ngng ti gi tr ang m.
Chng trnh:
#INCLUDE
<TV_16F887.C>
#DEFINE START PIN_E0
#DEFINE STOP
PIN_E1
SIGNED INT8 DEM;
INT1 CHOPHEP = 0;
VOID MAIN()
{
SET_TRIS_E(0xFF);
SET_TRIS_C(0x00);
SET_TRIS_D(0x00);
CHOPHEP=0;
WHILE(TRUE)
{
FOR (DEM=0;DEM<100;DEM++)
{
OUTPUT_C(MA7DOAN[DEM %10]);
OUTPUT_D(MA7DOAN[DEM /10]);
DELAY_MS(500);
DO
{
IF (!INPUT(START))
{CHOPHEP=1;}
ELSE IF (!INPUT(STOP) )
{CHOPHEP=0;}
}WHILE(CHOPHEP==0);
}
}
}
Bi tp 5-8: Hy thm vo bi 5-11 mt nt nhn c tn l INV c chc nng o chiu m
ln, m xung. ang m ln nu nhn INV th s m xung t gi tr ang m, tng t khi ang
m xung m nhn INV th s m ln. Cc bc thc hin bao gm: v mch, vit lu , vit
chng trnh v m phng.
85
Nguyen nh Phu
2.
H0
H1
H2
H3
C3
C2
C1
C0
86
Nguyen nh Phu
3
1
H0
H1
H2
H3
C3
C2
C1
C0
Xut d liu ra ct l: C3C2C1C0 =1011 nh hnh 5-56, kim tra hng no bng khng?
Nu bng H0 = 0 th nhn phm s 8.
Nu bng H1 = 0 th nhn phm s 9.
Nu bng H2 = 0 th nhn phm s A.
Nu bng H3 = 0 th nhn phm s B.
Nu khng c phm nhn no ct C2 c nhn th phi qut ct tip theo.
0
H0
H1
H2
H3
C3
C2
C1
C0
Xut d liu ra ct l: C3C2C1C0 = 0111 nh hnh 5-57, kim tra hng no bng khng?
Nu bng H0 = 0 th nhn phm s C.
Nu bng H1 = 0 th nhn phm s D.
Nu bng H2 = 0 th nhn phm s E.
Nu bng H3 = 0 th nhn phm s F.
Nu khng c phm nhn no ct C3 n y xem nh kt thc.
VCC=1
0
H0
H1
H2
H3
C3
C2
C1
C0
87
Nguyen nh Phu
Tn cc phm chng ta phn bit, cn chng trnh phn bit cc phm bng m, mi phm c
1 m phm do phn mm lp trnh xy dng, n gin mi phm c t m nh sau :
Phm s 0 c m l 00H, phm s 1 c m l 01H, phm F c m l 0FH.
Hot ng qut bn phm c thc hin theo lu nh hnh 5-58.
QUET_MT_PHIM
MAQUETCOT={FE,FD,FB,F7}
CT=0, HNG=FF,
MAPHIM=FF
H0=0
S
HNG=0
H1=0
S
HNG=1
H2=0
S
HNG=2
H3=0
S
HNG=3
HNG =FF
S
MAPHIM=CT*4 + HNG
RETURN(MAPHIM)
Nguyen nh Phu
Cui cng kim tra hng xem c bng FFH hay khng, nu bng th khng phm no c nhn
trong lc thc hin chng trnh qut, thot vi m phm bng FFH, nu khc FFH th c nhn
phm, tin hnh tnh ton m phm v thot vi m phm l ca phm nhn.
Nu qut ct th 0 th ct bng 0, theo cng thc m phm s c gi tr t 0H n 3H.
Nu qut ct th 1 th ct bng 1, theo cng thc m phm s c gi tr t 4H n 7H.
Nu qut ct th 2 th ct bng 2, theo cng thc m phm s c gi tr t 8H n BH.
Nu qut ct th 3 th ct bng 3, theo cng thc m phm s c gi tr t CH n FH.
Khi qut phm th sinh ra hin tng di phm nn ta phi thc hin thm phn chng di.
KEY 4X4
MP1= HM QUET_MT_PHIM
MP1=FF
s
MP2= HM QUET_MT_PHIM
MP1 =MP2
S
RETURN(MP1)
S mch:
89
Nguyen nh Phu
Lu :
BEGIN
LU 10 M 7 ON T 0 N 9,
KHI TO PORT
C NHN
S
GII M HIN TH
Nguyen nh Phu
S mch:
91
Nguyen nh Phu
Lu :
BEGIN
LU 10 M 7 ON T 0 N 9,
KHI TO PORT
C NHN
S
GII M HIN TH
Nguyen nh Phu
}
}
}
93
Nguyen nh Phu
Tn tn hiu
I/O
M t
VSS
Ngun
GND
VDD
Ngun
+5V
Vo
in p
iu khin nh sng nn
RS
INPUT
Register Select
R/W
INPUT
Read/Write
INPUT
Enable (strobe)
D0
I/O
DATA LSB
D1
I/O
DATA
D2
I/O
DATA
10
D3
I/O
DATA
11
D4
I/O
DATA
12
D5
I/O
DATA
13
D6
I/O
DATA
14
D7
I/O
DATA MSB
15
16
GND
94
Nguyen nh Phu
RS
RW
D7
D6
D5
D4
D3
D2
D1
D0
M t
clock
NOP
No operation
Clear display
165
Cursor home
I/D
Display control
Cursor/display
shift
S/C
R/L
Function set
DL
Set CGRAM
addr
Set DDRAM
addr
BF
Address counter
Read data
Read data
Read data
Write data
95
Nguyen nh Phu
Lnh iu khin con tr hin th Display Control: lnh ny dng iu khin con tr (cho
hin th th bit D = 1, tt hin th th bit D = 0), tt m con tr (m con tr th bit C = 1, tt con tr th
bit C = 0), v nhp nhy con tr (cho nhp nhy th bit B = 1, tt th bit B = 0).
Lnh di chuyn con tr Cursor /Display Shift: lnh ny dng iu khin di chuyn con tr
hin th dch chuyn (SC = 1 cho php dch chuyn, SC = 0 th khng cho php), hng dch chuyn
(RL = 1 th dch phi, RL = 0 th dch tri). Ni dung b nh DDRAM vn khng i.
Lnh thit lp a ch cho b nh RAM pht k t Set CGRAM Addr: lnh ny dng thit
lp a ch cho b nh RAM pht k t.
Lnh thit lp a ch cho b nh RAM hin th Set DDRAM Addr: lnh ny dng thit
lp a ch cho b nh RAM lu tr cc d liu hin th.
Hai lnh cui cng l lnh c v lnh ghi d liu LCD.
Dng sng cc tn hiu khi thc hin ghi d liu vo LCD nh hnh 5-66:
8B
H
M
CB
8C
U
I
CC
8D
A
N
CD
8E 8F
T
H
CE CF
Bi 5-14: S dng mch giao tip vi iu khin PIC16F887 vi LCD 162 hnh 5-65, hy vit
chng trnh hin th 2 hng thng tin nh trong bng 5-4.
96
Nguyen nh Phu
BEGIN
KHI TO LCD
END
SET_TRIS_D(0x00);
LCD_COMMAND(ADDR_LINE1); DELAY_US(10);
FOR (I=0;I<16;I++)
{ LCD_DATA(HANG1[I]);}
LCD_COMMAND(ADDR_LINE2); DELAY_US(10);
FOR (I=0;I<16;I++)
{ LCD_DATA(HANG2[I]);}
while(TRUE) {}
}
PIN_E1
#IFNDEF LCD_E
#DEFINE LCD_E
#ENDIF
PIN_E2
97
Nguyen nh Phu
#IFNDEF OUTPUT_LCD
#define OUTPUT_LCD
OUTPUT_D
#ENDIF
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
FUNCTION_SET
DISPLAY_CONTROL
CLEAR_DISPLAY
ENTRY_MODE
SHIFT_LEFT
SHIFT_RIGHT
ADDR_LINE1
ADDR_LINE2
0X38
0X0F
0X01
0X06
0X18
0X1C
0X80
0XC0
87
:
88
89
8A
8B
8C
8D
8E
S
8F
S
Nguyen nh Phu
K t hng 2 *
T P
H O
C H I
M I
N
H *
a ch
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
Lu :
BEGIN
KHI TO LCD
Chng trnh:
#INCLUDE<TV_16F887.C>
#INCLUDE<TV_LCD.C>
UNSIGNED CHAR I, GIAY;
const unsigned char HANG1[16]={"DONG HO:
"};
const unsigned char HANG2[16]={"*TP HO CHI MINH*"};
VOID LCD_HIENTHI()
{ LCD_COMMAND(0x8E); DELAY_US(10);
LCD_DATA((GIAY/10)+0X30);
LCD_DATA((GIAY%10)+0X30);
}
VOID MAIN()
{ SET_TRIS_E(0x00);
SET_TRIS_D(0x00);
LCD_SETUP();
LCD_COMMAND(ADDR_LINE1);
DELAY_US(10);
FOR (I=0;I<16;I++)
{ LCD_DATA(HANG1[I]);}
LCD_COMMAND(ADDR_LINE2);
DELAY_US(10);
FOR (I=0;I<16;I++)
{ LCD_DATA(HANG2[I]);}
while(TRUE)
{
FOR(GIAY=0;GIAY<60;GIAY++)
{
LCD_HIENTHI();
DELAY_MS(1000);
}
}
}
Cc thng tin hin th trn LCD l m ASCII, gi tr ca giy c tch ra thnh s BCD v
cng thm vi 0x30 s thnh m ASCII, khi mi hin th trn LCD.
99
Nguyen nh Phu
Bi tp 5-13: Hy vit chng trnh m pht giy hin th trn LCD. Pht hin th cng hng
vi giay, cch 1 .
Bi tp 5-14: Hy vit chng trnh m gi pht giy hin th trn LCD.
CU HI N TP TRC NGHIM - BI TP
X.
1.
CU HI N TP
Cu s 5-1:
Cu s 5-2:
Cu s 5-3:
2.
CU HI M RNG
Cu s 5-4:
3.
CU HI TRC NGHIM
Cu 5-1:
(a) 3
(c) 5
Cu 5-2:
(b) 4
(d) 6
Port no ca PIC 16F887 c in tr ko ln bn trong:
(a) PortA
(c) PortC
Cu 5-3:
(b) PortB
(d) PortD
(a) PortA
(c) PortC
Cu 5-4:
(b) PortB
(d) PortD
(a) 1 bit
(c) 16 bit
Cu 5-6:
(b) 8 bit
(d) 32 bit
(a) 1 bit
(c) 16 bit
Cu 5-7:
(b) 8 bit
(d) 32 bit
(a) C gi tr t 0 n 255
(c) C gi tr t -128 n 127
Cu 5-8:
(b) C gi tr t 0 n 25
(d) C gi tr t -128 n 255
(a) C gi tr t 0 n 255
(c) C gi tr t -128 n 127
Cu 5-9:
(b) C gi tr t 0 n 256
(d) C gi tr t -128 n 255
(b) X bng y chia z ly kt qu
Chng 5. Giao tiep led, lcd, phm n, ma tran phm.
Nguyen nh Phu
(b) Char
(d) Long
(b) Output_X(value)
(d) Input_X(value)
(b) Output_high(value)
(d) Input_b(value)
(b) Output_high(pin)
(d) Output_pull(pin)
(b) Khuch i p
(d) iu khin led
Cu 5-18: Trong mch qut 8 led nu chng trnh khng qut th:
(a) 8 led vn sng
(c) 8 led tt
Cu 5-19: Nu m rng mch qut 8 led thnh 16 led th dng tng cng:
(a) 16 ng I/O
(c) 8 ng I/O
(b) 32 ng I/O
(d) 24 ng I/O
Cu 5-20: Trong mch qut 8 led th thi gian led sng mi led l:
(a) 1/8 chu k
(c) 1/4 chu k
(b) 0x90
(d) 0xF0
101
Nguyen nh Phu
102
(b) 0xE8
(d) 0xFE
Chng 6
GII THIU
KHO ST TIMER0 CA PIC 16F887
TIMER1 CH NH THI
TIMER1 CH M XUNG NGOI
HOT NG CA TIMER1 CH COUNTER NG B
HOT NG CA TIMER1 CH COUNTER BT NG B
C V GHI TIMER1 TRONG CH M KHNG NG B
B DAO NG CA TIMER1
RESET TIMER1 S DNG NG RA CCP TRIGGER
RESET CP THANH GHI TMR1H, TMR1L CA TIMER1
NGT CA TIMER0
TIMER0 M XUNG NGOI
B CHIA TRC
LNH SETUP_TIMER_0(MODE)
LNH SETUP_TIMER_1(MODE)
LNH SETUP_TIMER_2(MODE)
LNH SET_TIMERX(VALUE)
LNH GET_TIMERX()
LNH SETUP_WDT(MODE)
LNH RESTART_WDT()
CU HI N TP
CU HI M RNG
CU HI TRC NGHIM
BI TP
Nguyen nh Phu
I. GII THIU
chng ny kho st cc timer/counter ca cc vi iu khin, cc timer/counter c chc nng
m xung ni c chu k bit nh thi iu khin thit b theo thi gian, c th m xung ngoi
m s kin nh m s vng dy qun, m sn phm, m tin,
Timer c nhiu tin ch trong iu khin nn hu ht cc vi iu khin u tch hp, chng
ny chng ta s kho st timer/counter v cc ng dng.
Vi iu khin PIC h 16F887 c 3 timer T0, T1 v T2. T0 l timer/counter 8 bit, T1 l
timer/counter 16 bit, c 2 u c b chia trc. T2 l timer 8 bit c b chia trc v chia sau phc v
cho cc ng dng c bit.
Sau khi kt thc chng ny bn c th s dng c timer/counter ca cc vi iu khin.
L timer/counter 8 bit.
C th c v ghi gi tr m ca timer/counter.
C b chia trc 8 bit cho php lp trnh la chn h s chia bng phn mm.
Nguyen nh Phu
OPTION_REG
R/W(1)
R/W(1)
RBPU
INTEDG
Bit 7
R/W(1)
R/W(1)
T0CS
T0SE
R/W(1)
PSA
R/W(1)
PS2
R/W(1)
PS1
R/W(1)
PS0
Bit 0
Bit 6
INTEDG
Bit 5
T0CS: bit la chn ngun xung cho TMR0 - TMR0 Clock Source Select bit.
1= s m xung ngoi a n chn T0CKI.
0= s m xung clock ni bn trong.
Bit 4
T0SE: bit la chn cnh tch cc T0SE - TMR0 Source Edge Select bit.
0= tch cc cnh ln chn T0CKI.
1= tch cc cnh xung chn T0CKI.
Bit 3
Bit 2-0
PS2:PS0: cc bit la chn t l b chia trc - prescaler rate select bits:
Bng 6-1. La chn h s chia ca Timer0.
Bit la chn
T l TMR0
T l WDT
000
1:2
1:1
001
1:4
1:2
010
1:8
1:4
011
1:16
1:8
100
1:32
1:16
101
1:64
1:32
110
1:128
1:64
111
1:256
1:128
Nu bit T0CS bng 1 th chn ch m xung ngoi Counter. Trong ch m xung ngoi
th xung m a n chn RA4/T0CKI. Bit T0SE = 0 th chn cnh ln, ngc li th chn cnh
xung.
B chia trc khng th c/ghi c mi quan h vi Timer0 v Watchdog Timer.
1.
NGT CA TIMER0
Khi gi tr m trong thanh ghi TMR0 trn t FFh v 00h th pht sinh ngt, c bo ngt
TMR0IF ln 1. Ngt c th ngn bng bit cho php ngt TMR0IE.
Trong chng trnh con phc v ngt Timer0 phi xa c bo ngt TMR0IF. Ngt ca TMR0
khng th kch CPU thot khi ch ng v b nh thi s ngng khi CPU ch ng.
Trong datasheet th bit cho php ngt c tn l T0IE v c bo ngt l T0IF. Hai bit ny nm
trong thanh ghi INTCON v tr th 5 v th 2.
Thanh ghi INTCON nm trong vng nh RAM c a ch l 0xB0.
105
Nguyen nh Phu
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
GIE
PEIE
T0IE
INTE
RBIE
R/W(0)
T0IF
R/W(0)
INTF
R/W(X)
RBIF
B CHIA TRC
B chia trc c th gn cho Timer0 hoc gn cho Watchdog Timer. Cc bit PSA v PS2:PS0
chn i tng gn v t l chia.
Khi c gn cho Timer0 th tt c cc lnh ghi cho thanh ghi TMR0 (v d CLRF 1, MOVWF
1, BSF 1, ) s xo b chia trc.
Khi c gn cho WDT th lnh CLRWDT s xo b chia trc cng vi Watchdog Timer.
Nguyen nh Phu
Bit 15
Bit 8
Bit 7
Bit 0
T1GINV
Bit 7
R/W(0)
R/W(0)
R/W(0)
R/W(0)
T1CKPS0 T1OSCEN
T1SYNC
TMR1CS TMR1ON
Bit 0
TMR1GE T1CKPS1
R/W(0)
R/W(0)
R/W(0)
Bit 6
TMR1GE: bit cho php cng ca Timer1 - Timer1 Gate Enable bit
Nu TMR1ON = 0: bit ny s khng c tc dng.
Nu TMR1ON = 1:
1= Timer1 m nu cng ca Timer1 khng tch cc.
0= Timer1 m.
107
Nguyen nh Phu
Bit 5-4
bits
Bit 3
bit
T1OSCEN: bit K cho php b dao ng Timer1 - Timer1 Oscillator Enable Control
1= b dao ng c php.
0= Tt b dao ng.
Bit 2
Bit 1
Bit 0
1.
TIMER1 CH NH THI
Nu bit TMR1CS bng 1 th T1 hot ng m xung ngoi. Xung ngoi c 2 ngun xung ph
thuc vo bit T1OSCEN:
108
Nguyen nh Phu
Nu bit T1OSCEN bng 1 th T1 m xung ngoi t mch dao ng ca T1 - xem hnh 6-10.
Nu bit T1OSCEN bng 0 th T1 m xung ngoi a n ng vo T1CKI - xem hnh 6-11.
109
Nguyen nh Phu
Timer T1 cho php c gi tr cc thanh ghi TMR1H hoc TMR1L khi timer ang m xung bt
ng b bn ngoi.
Khi ghi th nn ngng timer li ri mi ghi gi tr mong mun vo cc thanh ghi. Nu ghi m
timer ang m vn c nhng c th to ra mt gi tr m khng d on c hay khng chnh
xc.
6.
B DAO NG CA TIMER1
Mch dao ng c tch hp bn trong v t thch anh ni gia 2 chn T1OSI v T1OSO
to dao ng - xem hnh 6-13. B dao ng c php hot ng khi bit T1OSCEN bng 1.
7.
Loi dao ng
Tn s
T C1
T C2
LP
32kHz
33pF
33pF
100kHz
15pF
15pF
200kHz
15pF
15pF
110
Nguyen nh Phu
Hot ng reset lc cp ngun POR (Power On Reset) hoc bt k reset no khc khng nh
hng n hai thanh ghi TMR1H v TMR1L, ngoi tr khi xy ra xung kch ca CCP1 v CCP2 th
xa hai thanh ghi v 00H.
Thanh ghi T1CON c reset v 00h
Reset lc cp ngun POR hoc khi Brown-out Reset s xa thanh ghi T1CON v timer T1
trng thi ngng (OFF) v h s chia trc l 1:1. Cc reset khc th thanh ghi khng b nh hng.
111
Nguyen nh Phu
U(0)
T2CON
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
Bit 0
Bit 7
Bit 7
Cha s dng nu c s c gi tr 0.
Bit 6-3
0001=1:2
0010=1:3
0011=1:4
0100=1:5
0101=1:6
0110=1:7
0111=1:8
1000=1:9
1001=1:10
1010=1:11
1011=1:12
1100=1:13
1101=1:14
1110=1:15
1111=1:16
Bit 2
T2CKPS1:T2CKPS0: bit la chn h s chia trc cho ngun xung clock ca timer2
00= h s chia l 1.
01= h s chia l 4.
1x= h s chia l 16.
1.
2.
NG RA CA TMR2
Ng ra ca TMR2 c ni ti khi SSP khi ny c th ty chn to ra xung nhp.
V.
LNH SETUP_TIMER_0(MODE)
C php:
setup_timer_0(mode)
Thng s:
112
Nguyen nh Phu
LNH SETUP_TIMER_1(MODE)
C php:
setup_timer_1(mode)
Thng s:
Chc nng:
LNH SETUP_TIMER_2(MODE)
C php:
Thng s:
Chc nng:
LNH SET_TIMERx(value)
C php:
set_timerX(value)
; x l 0, 1, 2
Thng s:
Chc nng:
LNH GET_TIMERx()
C php:
value = get_timerX() ; x l 0, 1, 2
Thng s:
khng c.
Chc nng:
c gi tr ca TIMER/COUNTER.
LNH SETUP_WDT()
C php:
Thng s:
setup_wdt (mode)
For PCB/PCM parts: WDT_18MS, WDT_36MS, WDT_72MS,
113
Nguyen nh Phu
Chc nng:
C hiu lc:
Yu cu:
LNH RESTART_WDT()
7.
C php:
Thng s:
Chc nng:
C hiu lc:
Yu cu:
restart_wdt()
Khng c
Khi to li b nh thi watchdog. Nu b nh thi watchdog c cho php th
lnh ny s khi to li gi tr nh thi ngn chn khng cho b nh thi reset
CPU v s kin ch i xy ra.
PCB/PCM
PCH
Enable/Di able #fuses
setup_wdt()
Tim out time setup_ dt()
fuses
restart
restart_wdt() restart_wdt()
Cho tt c cc thit b
#fuses, hng s c nh ngha trong file devices .h
S mch:
Nguyen nh Phu
Lu :
BEGIN
KHI TO TIMER1 M XUNG NI
H S CHIA BNG 8, PORTD XUT
TIMER1=0
TIMER1 TRN
S
Chng trnh:
#INCLUDE <TV_16F887.C>
#BIT
TMR1IF = 0x0C.0
UNSIGNED INT8 X;
VOID MAIN()
{
SET_TRIS_D(0x00);
X=0X00; OUTPUT_D(X);
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
SET_TIMER1(0);
WHILE(TRUE)
{
IF (TMR1IF==1)
{
X=~X;
OUTPUT_D(X); TMR1IF=0;
}
}
}
115
Nguyen nh Phu
Bi 6-2: Dng vi iu khin PIC 16F887 iu khin 8 led n sng tt dng timer T1 vi chu k
delay l 200ms.
TIMER1=3036
TIMER1 TRN
S
Chng trnh:
#INCLUDE<TV_16F887.C>
#BIT
TMR1IF = 0x0C.0
UNSIGNED INT8 X;
VOID MAIN()
{
SET_TRIS_D(0x00); X=0X00; OUTPUT_D(X);
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
SET_TIMER1(3036);
WHILE(TRUE)
{
IF (TMR1IF==1)
{
X=~X;
OUTPUT_D(X); SET_TIMER1(3036);
TMR1IF=0;
}
}
}
116
Nguyen nh Phu
Lu :
BEGIN
KHI TO TIMER1 M XUNG NI
H S CHIA BNG 8, PORTD XUT
TIMER1=3036
TIMER1 TRN
BDT = 10 (1S)
Chng trnh:
#INCLUDE <TV_16F887.C>
#BIT
TMR1IF = 0x0C.0
UNSIGNED INT8 X, BDT;
VOID MAIN()
{
SET_TRIS_D(0x00); X=0; BDT=0; OUTPUT_D(X);
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
SET_TIMER1(3036);
WHILE(TRUE)
{
IF (TMR1IF==1)
{
TMR1IF=0;
SET_TIMER1(3036); BDT++;
IF (BDT ==10)
{
OUTPUT_D(X); X=~X; BDT = 0;
}
}
}
}
117
Nguyen nh Phu
TIMER0=0
TIMER0 TRN
S
Hnh 6-19: Lu iu khin 8 led sng tt, nh thi 13,107ms dng T0.
Chng trnh:
#INCLUDE <TV_16F887.C>
#BIT
TMR0IF = 0x0B.2
UNSIGNED INT8 X;
VOID MAIN()
{
SET_TRIS_D(0x00);
X=0; OUTPUT_D(X);
SETUP_TIMER_0(T0_INTERNAL | T0_DIV_256);
SET_TIMER0(0);
WHILE(TRUE)
{
IF (TMR0IF==1)
{
TMR0IF=0;
SET_TIMER0(0);
X=~X;
OUTPUT_D(X);
}
}
}
Nguyen nh Phu
Timer T0 m 256 xung, thi gian m bng s xung m nhn vi chu k mi xung:
xungTxung = 25651,2s = 13107,2s, thi gian sng v tt ca 8 led u bng 13,107 ms hay chu
k bng 26,214ms.
Trong chng trnh ny s dng bit TMR0IF kim tra nhng th vin <16F887.H > khng
nh ngha bit ny, nn c thm hng lnh #bit tmr0if = 0x0B.2 nh ngha bit c trn.
C trn nm bit th 2, trong thanh ghi INTCON c a ch 0x0B.
Thi gian nh thi ln nht c th c ca Timer0 l 13,107ms vi tn s thch anh l 20MHz,
bn ch c th nh thi nh hn nu ch dng timer, mun nh thi ln hn th phi dng thm bin.
Bi 6-5: Dng vi iu khin 16F887 iu khin 8 led n sng tt dng timer T0 vi chu k
delay l 2s, 1s sng, 1s tt.
TIMER0=61
TIMER0 TRN
Chng trnh:
#INCLUDE<TV_16F887.C>
#BIT TMR0IF = 0x0B.2
UNSIGNED INT8 X, BDT;
VOID MAIN()
{
SET_TRIS_D(0x00);
X=0;
BDT=0; OUTPUT_D(X);
SETUP_TIMER_0(T0_INTERNAL | T0_DIV_256);
SET_TIMER0(61);
WHILE(TRUE)
{
IF (TMR0IF==1)
Chng 6.Timer counter.
119
Nguyen nh Phu
}
}
TMR0IF=0;
SET_TIMER0(61);
BDT++;
if (BDT==100)
{
BDT=0;
X=~X; OUTPUT_D(X);
}
TIMER2 TRN
S
Hnh 6-21: Lu iu khin 8 led sng tt, nh thi 13,107ms dng T2.
Chng trnh:
#INCLUDE<TV_16F887.C>
#BIT TMR2IF = 0x0C.1
UNSIGNED INT8 X;
VOID MAIN()
{
SET_TRIS_D(0x00);
X=0;
OUTPUT_D(X);
SETUP_TIMER_2(T2_DIV_BY_16, 255,16);
WHILE(TRUE)
{
120
Nguyen nh Phu
IF (TMR2IF==1)
{
TMR2IF=0;
}
X=~X; OUTPUT_D(X);
}
}
S mch:
121
Nguyen nh Phu
Lu : hnh 6-23.
Lu khi to 10 m 7 on, timer hot ng m xung ngoi, xung m tch cc cnh ln, t
l chia l 1:1 c ngha l khng chia, cho gi tr m bt u t 0. Vng lp thc hin cng vic c
gi tr ca counter m c em chuyn thnh s BCD, gii m v gi ra port hin th ra led.
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT8 T0;
VOID MAIN()
{
SET_TRIS_B(0x00); SET_TRIS_C(0x00); SET_TRIS_D(0x00);
SETUP_TIMER_0(T0_EXT_L_TO_H | T0_DIV_1);
SET_TIMER0(0);
WHILE(TRUE)
{
T0=GET_TIMER0();
OUTPUT_B(MA7DOAN[T0%10]);
OUTPUT_C(MA7DOAN[T0/10%10]);
OUTPUT_D(MA7DOAN[T0/100]);
}
}
BEGIN
C GI TR TIMER0
GII M HIN TH RA LED
Nguyen nh Phu
SETUP_TIMER_0(T0_EXT_L_TO_H | T0_DIV_1);
SET_TIMER0(0);
WHILE(TRUE)
{
T0=GET_TIMER0();
MATRAM=MA7DOAN[T0/100];
MACHUC=MA7DOAN[T0/10%10];
IF (MATRAM==0XC0)
{
MATRAM=0XFF;
IF (MACHUC==0XC0) MACHUC=0XFF;
}
OUTPUT_B(MA7DOAN[T0%10]);
OUTPUT_C(MACHUC);
OUTPUT_D(MATRAM);
}
}
S mch:
123
Nguyen nh Phu
Lu : hnh 6-25.
Lu khi to 10 m 7 on, timer hot ng m xung ngoi, xung m tch cc cnh ln, t
l chia l 1:1 c ngha l khng chia, cho gi tr m bt u t 0. Vng lp thc hin cng vic c
gi tr ca counter m c em chuyn thnh s BCD, gii m v gi ra port hin th ra led.
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT16 T1;
VOID MAIN()
{
SET_TRIS_B(0x00); SET_TRIS_D(0x00);
SETUP_TIMER_1(T1_EXTERNAL | T1_DIV_BY_1 );
SET_TIMER1(0);
WHILE(TRUE)
{
T1=GET_TIMER1();
OUTPUT_B(MA7DOAN[T1%10]);
IF (T1/10==0) OUTPUT_D(0XFF);
ELSE
OUTPUT_D(MA7DOAN[T1/10]);
IF(T1==100) SET_TIMER1(0);
}
}
BEGIN
C GI TR TIMER1
GII M HIN TH RA LED,
SO SNH GII HN LP LI
124
S mch:
Chng 6.Timer counter.
Nguyen nh Phu
Hnh 6-26: m xung ngoi dng counter T1 hin th trn 3 led qut.
Lu : hnh 6-22.
Lu khi to 10 m 7 on, timer 1 hot ng m xung ngoi, t l chia l 1 c ngha l
khng chia, cho gi tr m bt u t 0. Vng lp thc hin cng vic c gi tr ca counter m
c em chuyn thnh s BCD, gii m v qut led hin th.
BEGIN
C GI TR TIMER1
GII M HIN TH RA LED,
SO SNH GII HN LP LI
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT16 T1;
UNSIGNED CHAR MADONVI,MACHUC,MATRAM;
VOID GIAIMA ()
{
MATRAM = MA7DOAN[T1 /100];
MACHUC = MA7DOAN[T1/10 % 10];
MADONVI= MA7DOAN[T1 % 10];
IF (MATRAM == 0XC0)
Chng 6.Timer counter.
125
Nguyen nh Phu
{
MATRAM=0XFF;
IF (MACHUC == 0XC0 )
{
MACHUC=0XFF;
}
}
}
VOID HIENTHI()
{
OUTPUT_B(MADONVI);
DELAY_MS(1);
OUTPUT_LOW(PIN_D0);
OUTPUT_HIGH(PIN_D0);
OUTPUT_B(MACHUC);
DELAY_MS(1);
OUTPUT_LOW(PIN_D1);
OUTPUT_HIGH(PIN_D1);
OUTPUT_B(MATRAM);
DELAY_MS(1);
OUTPUT_LOW(PIN_D2);
OUTPUT_HIGH(PIN_D2);
}
VOID MAIN()
{
SET_TRIS_B(0x00); SET_TRIS_D(0x00);
SETUP_TIMER_1(T1_EXTERNAL | T1_DIV_BY_1);
SET_TIMER1(0);
WHILE(TRUE)
{
T1=GET_TIMER1();
GIAIMA();
HIENTHI();
IF (T1==1000) SET_TIMER1(0);
}
}
CU HI N TP
Cu s 6-1:
Cu s 6-2:
Hy cho bit chc nng cc bit trong thanh ghi OPTION_REG ca PIC16F887.
126
Nguyen nh Phu
Cu s 6-3:
Cu s 6-4:
Hy cho bit chc nng cc bit trong thanh ghi T1CON ca vi iu khin PIC16F887.
Cu s 6-5:
Cu s 6-6:
Hy cho bit chc nng cc bit trong thanh ghi T2CON ca vi iu khin PIC16F887.
Cu s 6-7:
2.
CU HI M RNG
Cu s 6-8:
3.
CU HI TRC NGHIM
Cu 6-1:
(a) 3
Cu 6-2:
(b) 4
(b) 4
(b) 12 bit
(b) T2
(b) T2
(c) 16 bit
(d) 8 bit
(c) T0, T1
(d) T0, T2
(c) T0, T1
(d) T0, T2
(d) 8 bit
(c) 16 bit
(b) 12 bit
(d) 5
(a) 10 bit
Cu 6-5:
(c) 2
(a) 10 bit
Cu 6-4:
(d) 6
(a) 3
Cu 6-3:
(c) 5
(b) T2
(c) T0, T1
(d) T0, T2
(b) T2, T1
(c) T0, T1
(d) T1
Cu 6-12: Timer0 ca PIC 16F887 th bit no gn b chia trc cho timer0 hay watchdog timer:
(a) PSA
(c) T0SE
(d) T0SE
Cu 6-13: Timer0 ca PIC 16F887 th bit no la chn xung ni hay xung ngoi:
(a) PSA
(c) T0SE
(d) T0SE
127
Chng 7
GII THIU
ADC CA VI IU KHIN PIC 16F887
LNH SETUP_ADC(MODE)
LNH SETUP_ADC_PORT(VALUE)
LNH SET_ADC_CHANNEL(CHAN)
LNH VALUE = READ_ ADC(MODE)
CU HI N TP TRC NGHIM - BI TP
CU HI N TP
CU HI M RNG
CU HI TRC NGHIM
BI TP
Nguyen nh Phu
I. GII THIU
chng ny kho st vi iu khin giao tip vi vi mch chuyn i tng t sang s (ADC)
v vi iu khin c tch hp ADC thc hin cc ng dng trong o lng v iu khin.
Sau khi kt thc chng ny bn c th kt ni vi iu khin khng c tch hp b chuyn i
ADC vi cc vi mch ADC, s dng c vi iu khin c tch hp ADC, bit trnh t thc hin qu
trnh chuyn i ADC, bit tnh ton phn gii, chuyn i v tnh trung bnh kt qu.
130
Nguyen nh Phu
Hai ng vo Vref+ v Vref- c chc nng thit lp phn gii cho ADC.
Bit ADON c chc nng cho php ADC hot ng hoc tt b ADC khi khng hot
ng gim cng sut tiu tn, ADON bng 1 th cho php, bng 0 tt.
2.
R/W(0)
R/W(0)
ADCS1
ADCS0
CHS3
Bit 7
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
CHS2
CHS1
CHS0
GO/DONE
ADON
Bit 0
Knh
CHS<3:0>
Knh
CHS<3:0>
Knh
CHS<3:0>
Knh
0000
0100
1000
1100
12
0001
0101
1001
1101
13
0010
0110
1010
10
1110
CVREF
0011
0111
1011
11
1111
in p tham chiu
c nh bng 0,6V
Bit 2
GO/ DONE : bit bo trng thi chuyn i ADC (A/D Conversion status bit)
Chng 7. ADC.
131
Nguyen nh Phu
Bit 0
ADON = 1 c chc nng m ngun cho khi chuyn i ADC hot ng.
ADON = 0 s tt ngun khi chuyn i ADC gim cng sut tiu th.
b. Thanh ghi ADCON1 thit lp cc chn ca port l tng t hoc xut nhp s IO.
R/W(0)
U(0)
ADFM
R/W(0)
R/W(0)
VCFG0
VCFG1
U(0)
U(0)
U(0)
U(0)
Bit 7
Bit 0
Bit 7
Bit 5
Bit 4
ADRESL
ADRESL
Chng 7. ADC.
Nguyen nh Phu
n tnh ton gi tr, trong chng trnh C nu khng khai bo thuc tnh ADC 10 bit th phn mm t
ng ly gi tr 8 bit cao.
3.
4.
Tn s xung clock cho b chuyn i ADC c la chn bng phn mm bi cc bit ADCS
nm trong thanh ghi ADCON0. C 4 la chn cho ngun xung clock nh sau:
FOSC/2
FOSC/8
FOSC/32
FRC ly t b dao ng bn trong.
Bng 7-1: Tn s xung clock ty chn ph thuc vo tn s b dao ng:
Chu k xung clock ca ADC (TAD)
Tn s thit b (FOSC)
ADCS<1:0>
20MHz
8MHz
4MHz
1MHz
FOSC/2
00
100ns
250ns
500ns
2s
FOSC/8
01
400ns
1s
2s
8s
FOSC/32
10
1.6s
4s
8s
32s
Chng 7. ADC.
133
Nguyen nh Phu
FRC
11
2-6s
2-6s
2-6s
2-6s
Thi gian chuyn i ADC cho mi bit c xc nh bi chu k TAD. chuyn i hon tt
10 bit s dng ti thiu 11 chu k TAD nh hnh 7-5.
C php:
Thng s:
Chc nng:
C hiu lc:
setup_adc (mode);
mode- Analog to digital mode. Xem trong file device.
nh cu hnh cho ADC
Cho cc PIC c tch hp ADC.
V d 7-1:
setup_adc(ADC_CLOCK_INTERNAL );
2.
C php:
Hng s:
Chc nng:
Hiu lc:
V d 7-2:
3.
C php:
Thng s:
Chc
nng:
V d 7-3:
4.
C php:
134
setup_adc_ports (value)
value - l hng s nh ngha trong file devices .h
Thit lp chn ca ADC l tng t, s hoc t hp c 2.
Cho cc PIC c ADC.
setup_adc_ports( ALL_ANALOG ); // s dng tt c cc knh tng t
Nguyen nh Phu
Hng s:
Tr v:
Chc nng:
V d 7-4:
S mch:
Hnh 7-6: S mch o nhit dng PIC16F887 hin th trn 3 led trc tip.
135
Nguyen nh Phu
Lu :
BEGIN
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT16 KQADC;
UNSIGNED INT J,MATRAM;
VOID HIEN_THI()
{
MATRAM = MA7DOAN[KQADC/100];
IF (MATRAM == 0XC0)
MATRAM=0XFF;
OUTPUT_B(MA7DOAN[KQADC%10]);
OUTPUT_C(MA7DOAN[KQADC/10%10]);
OUTPUT_D(MA_TRAM);
}
VOID MAIN()
{
SET_TRIS_B(0x00); SET_TRIS_D(0x00);
SET_TRIS_C(0x00); SET_TRIS_A(0xFF);
SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(SAN0);
SET_ADC_CHANNEL(0);
WHILE(TRUE)
{
KQADC=0;
FOR (J=0; J<200; J++)
{
KQADC=KQADC+READ_ADC();
DELAY_MS(1);
}
KQADC= KQADC /2.046;
KQADC=KQADC/200;
HIEN_THI();
}
}
136
Nguyen nh Phu
Trong vng lp while ta cho bin KQADC bng 0, vng lp for thc hin 200 ln o, kt qu
cng dn vo bin KQADC.
Kt qu ng ca 200 ln o s chia cho 200 ln c kt qu o trung bnh v chia cho h s
2.046 c kt qu ng h s phn gii, sau tin hnh gii m hin th v xo s 0 v ngha.
Bi 7-2: Thm vo bi 7-1 yu cu: khi nhit tng nhng nh hn 40 th relay ng, khi
ln hn 40 th relay ngt, khi nhit gim thp hn 35 th relay ng tr li.
S mch:
Lu :
Chng 7. ADC.
137
Nguyen nh Phu
BEGIN
Chng trnh:
#DEFINE RELAY
PIN_A3
IF (KQADC>40)
ELSE
(KQADC<35)
OUTPUT_LOW(RELAY);
OUTPUT_HIGH(RELAY);
S mch:
138
Nguyen nh Phu
Mch dng 3 led 7 on hin th kt qu nhit kt ni theo phng php qut s dng port
B v 3 bit ca port D iu khin 3 transistor.
Cm bin LM35 ni vi ng vo knh tng t th 0 (SAN0).
Mch reset v cc chn kt ni mch np, t thch anh 20MHz.
Lu :
BEGIN
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT16 KQADC;
UNSIGNED INT
J, MADONVI, MACHUC, MATRAM;
VOID GIAIMA ()
{
MATRAM = MA7DOAN[KQADC /100];
MACHUC = MA7DOAN[KQADC /10 % 10];
MADONVI= MA7DOAN[KQADC % 10];
IF (MATRAM == 0XC0) MATRAM=0XFF;
}
VOID HIENTHI ()
{
OUTPUT_B(MADONVI);
OUTPUT_LOW(PIN_D0);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D0);
OUTPUT_B(MACHUC);
OUTPUT_LOW(PIN_D1);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D1);
OUTPUT_B(MATRAM);
OUTPUT_LOW(PIN_D2);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D2);
}
VOID MAIN()
{
SET_TRIS_B(0x00); SET_TRIS_D(0x00);
SET_TRIS_A(0x01);
SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(SAN0);
SET_ADC_CHANNEL(0);
WHILE(TRUE)
{
KQADC=0;
FOR (J=0; J<100; J++)
{
Chng 7. ADC.
139
Nguyen nh Phu
KQADC=KQADC+READ_ADC();
HIENTHI();
}
KQADC= KQADC /2.046;
KQADC=KQADC/100;
GIAIMA();
}
}
CU HI N TP TRC NGHIM - BI TP
V.
1.
CU HI N TP
Cu 7-1: Hy trnh by cu trc khi ADC ca PIC16F887.
Cu 7-2: Hy cho bit chc nng ca cc tn hiu VREF+ v VREF-.
Cu 7-3: Hy cho bit trnh t chuyn i ADC ca IC16F887.
Cu 7-4: Hy so snh ADC ca IC16F887 v PIC 16F877A.
2.
CU HI M RNG
Cu 7-6: Hy kho st cu trc ADC ca PIC18F4550 v PIC16F887.
3.
CU HI TRC NGHIM
Cu 7-1:
VREF VREF
210 1
V VREF
(c) SS I
(210 1)
VREF VREF
(a) SS
Cu 7-2:
(a) 8
Cu 7-3:
(a) 8
Cu 7-4:
(a) 8
Cu 7-5:
(a) 2
Cu 7-6:
(c) 12
(d) 16
(c) 12
(d) 14
(c) 12
(d) 14
(c) 4
(d) 5
VI VREF
VI VREF
V VREF
(d) SS I
(210 )
VREF VREF
(b) SS
Nguyen nh Phu
Cu 7-7:
(a) 2
(b) 4
(c) 3
(d) 8
Cu 7-10: C bao nhiu bit la chn cu hnh port cho ADC ca PIC 16F887:
(a) 2
(b) 4
(c) 3
(d) 8
Cu 7-12: C bao nhiu bit la chn ngun xung clock cho ADC ca PIC 16F887:
(a) 2
(b) 4
(c) 3
Cu 7-13: Cc bit la chn xung clock cho ADC ca PIC 16F887 c tn l:
(a) ADCS2: ADCS0
(d) 8
(d) CHS3: CHS0
(c) c gi tr
(d) nh cu hnh
(b) GO/DONE
(c) ADON
(d) ADFM
Cu 7-16: Bit chn nh dng kt qu ADC canh tri hoc phi ca PIC16F887 c tn l:
(a) ADCS2: ADCS0
(b) GO/DONE
(c) ADON
(d) ADFM
(c) c gi tr
(d) Chn tc
Cu 7-20: Cng thc tnh gi tr s nh phn sau khi chuyn i ADC ca PIC16F887 l:
VREF VREF
210 1
V VREF
(c) N I
SS
(a) N
4.
VI VREF
SS
VI VREF 10
(2 )
(d) N
SS
(b) N
BI TP
Bi tp 7-1:
Bi tp 7-2:
Chng 7. ADC.
141
Nguyen nh Phu
Bi tp 7-3:
Bi tp 7-4:
Bi tp 7-5:
142
Chng 7. ADC.
Chng 8
GII THIU
TNG QUAN V NGT
NGT CA VI IU KHIN PIC16F887
LNH ENABLE_INTERRUPT(LEVEL)
LNH DISABLE_INTERRUPT(LEVEL)
CU HI N TP
CU HI M RNG
CU HI TRC NGHIM
Vi x ly
Nguyen nh Phu
I. GII THIU
Ngt c nhiu tin ch trong iu khin nn hu ht cc vi iu khin u tch hp, chng ny
chng ta s kho st nguyn l hot ng ca ngt, cc ngun ngt, vector a ch ngt, vit chng
trnh con phc v ngt cho cc ng dng.
Sau khi kt thc chng ny bn c th s dng c ngt ca cc vi iu khin.
MP
ISP
MP
ISP
MP
MP
(b) Chng trnh chnh b gin on thc hin chng trnh con phc v ngt.
Hnh 8-1: Vi iu khin thc hin chng trnh chnh trong 2 trng hp khng v c ngt.
Chng 8. Ngat.
Nguyen nh Phu
2.
Trong vi iu khin PIC16F887 c 5 thanh ghi phc v cho ngt l INTCON, PIE1, PIE2, PIR1,
PIR2. T chc ca tng thanh ghi nh sau:
a.
Thanh ghi INTCON (Interrupt CONTROL)
T chc ca thanh ghi nh hnh sau:
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
GIE
PEIE
T0IE
INTE
RBIE
R/W(0)
T0IF
R/W(0)
INTF
R/W(X)
RBIF
K hiu
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
Trong thanh ghi trn th bit GIE l bit cho php/cm ngt ton b cc ngun ngt, bit PEIE cho
php/cm cc ngun ngt ngoi vi.
Cc bit cn li l bit cho php/cm ngt v c bo ngt ca ngt cng INT, ngt portB thay i
v ngt ca timer0.
V d 8-1: Mun cho php timer0 ngt th lp trnh cho cc bit nh sau: GIE = 1, T0IE = 1.
b.
Thanh ghi PIE1 (Peripheral Interrupt Enable) v PIR1 (Peripheral Interrupt Request)
T chc ca thanh ghi nh hnh sau:
Chng 8. Ngat.
145
Vi x ly
R/W(0)
-
ADIE
RCIE
R/W(0)
-
R/W(0)
ADIF
R/W(0)
RCIF
Nguyen nh Phu
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
K hiu
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
Bng 8-3: Tm tt chc nng cc bit trong thanh ghi cho php ngt PIR1 c a ch 0x0C:
Bit
PIR1.7
PIR1.6
PIR1.5
PIR1.4
PIR1.3
PIR1.2
PIR1.1
PIR1.0
K hiu
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
Hai thanh ghi cha cc bit cho php ngt v c bo ngt tng ng ca 7 ngt ngoi vi.
V d 8-2: Mun cho php timer2 ngt th lp trnh cho cc bit nh sau: GIE = 1, TMR2IE = 1
v bit cho php ngt ngoi vi PEIE = 1.
c.
Thanh ghi PIE2 (Peripheral Interrupt Enable) v PIR2 (Peripheral Interrupt Request)
T chc ca thanh ghi nh hnh sau:
R/W(0)
OSFIE
R/W(0)
OSFIF
R/W(0)
R/W(0)
C2IE
C1IE
R/W(0)
R/W(0)
C2IF
C1IF
R/W(0)
R/W(0)
EEIE
BCLIE
R/W(0)
R/W(0)
EEIF
BCLIF
R/W(0)
ULPWUIE
R/W(0)
-
R/W(0)
ULPWUIF
CCP2IE
R/W(0)
CCP2IF
Chng 8. Ngat.
Nguyen nh Phu
Bng 8-4: Tm tt chc nng cc bit trong thanh ghi cho php ngt PIE2 c a ch 0x8D:
Bit
PIE2.7
PIE2.6
PIE2.5
PIE2.4
PIE2.3
PIE2.2
PIE2.1
PIE2.0
K hiu
OSFIE
C2IE
C1IE
EEIE
BCLIE
ULWUIE
CCP2IE
Bng 8-5: Tm tt chc nng cc bit trong thanh ghi cho php ngt PIR2 c a ch 0x0D:
Bit
PIR2.7
PIR2.6
PIR2.5
PIR2.4
PIR2.3
PIR2.2
PIR2.1
PIR2.0
K hiu
OSFIF
C2IF
C1IF
EEIF
BCLIF
ULWUIF
CCP2IF
Chng 8. Ngat.
147
Vi x ly
Nguyen nh Phu
LNH
2.
LNH
V.
148
Nguyen nh Phu
Lu :
BEGIN
NGT T1
QUAY V
END
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT8 X;
#int_timer1
void interrupt_timer1()
{
X=~X;
OUTPUT_D(X);
}
VOID MAIN()
{
SET_TRIS_D(0x00);
X=0X00; OUTPUT_D(X);
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
SET_TIMER1(0);
ENABLE_INTERRUPTS(GLOBAL); ENABLE_INTERRUPTS(INT_TIMER1);
WHILE(TRUE)
{
}
}
149
Vi x ly
Nguyen nh Phu
Chng trnh m giy chnh xc hin th trn 2 led 7 on qut dng vi iu khin PIC
16F887 dng Timer v ngt.
S mch:
Lu :
BEGIN
NGT TIMER1
TNG BIN M NGT BDT
KHI TO LI TIMER1 M TIP
RETI
GIY = 0
BDN = 10 (1S)
S
X L TNG GIY
Chng 8. Ngat.
Nguyen nh Phu
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT8 GIAY, BDT;
#int_timer1
void interrupt_timer1()
{
SET_TIMER1(3036);
BDT++;
}
VOID HIENTHI()
{
OUTPUT_B(MA7DOAN[GIAY %10]); OUTPUT_LOW(PIN_D0);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D0);
OUTPUT_B(MA7DOAN[GIAY/10]);
OUTPUT_LOW(PIN_D1);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D1);
}
VOID MAIN()
{
SET_TRIS_B(0x00); SET_TRIS_D(0x00);
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
SET_TIMER1(3036);
ENABLE_INTERRUPTS(GLOBAL); ENABLE_INTERRUPTS(INT_TIMER1);
GIAY = 0; BDT=0;
WHILE(TRUE)
{
IF (BDT >=10)
{
BDT = 0;
IF (GIAY == 59) GIAY = 0;
ELSE
GIAY++;
}
ELSE HIENTHI();
}
}
Chng 8. Ngat.
151
Vi x ly
Nguyen nh Phu
Bi tp 8-1:
Hy v mch, vit lu v chng trnh mch m pht giy hin th trn 4 led 7
on kt ni theo phng php qut.
Bi tp 8-2:
Hy v mch, vit lu v chng trnh mch m gi pht giy hin th trn 6 led 7
on kt ni theo phng php qut.
Bi 8-3:
Chng trnh o nhit dng cm bin LM35, dng ADC ca vi iu khin PIC
16F887 bo ngt sau khi chuyn i xong, hin th kt qu o trn 3 led on kt ni
theo phng php qut, s dng in p tham chiu VDD v VSS.
Lu :
BEGIN
NGT ADC
SOLANDO=0, KQADC=0
RETI
SOLANDO = 100
S
X L KT QU O KQADC, GII M
152
Chng 8. Ngat.
Nguyen nh Phu
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT16 KQADC=0;
UNSIGNED INT SOLANDO, MADONVI, MACHUC, MATRAM;
#INT_AD
void interrupt_ADC()
{
SOLANDO++;
KQADC=KQADC+READ_ADC(ADC_READ_ONLY);
}
VOID GIAIMA()
{
MATRAM = MA7DOAN[KQADC/100];
MACHUC = MA7DOAN[KQADC/10 % 10];
MADONVI= MA7DOAN[KQADC % 10];
IF (MATRAM == 0XC0) MATRAM=0XFF;
}
VOID HIENTHI ()
{
OUTPUT_B(MADONVI);
OUTPUT_LOW(PIN_D0);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D0);
OUTPUT_B(MACHUC);
OUTPUT_LOW(PIN_D1);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D1);
OUTPUT_B(MATRAM);
OUTPUT_LOW(PIN_D2);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D2);
}
VOID MAIN()
{
SET_TRIS_B(0x00); SET_TRIS_D(0x00);
SET_TRIS_A(0x01);
SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(SAN0);
SET_ADC_CHANNEL(0);
SOLANDO=0;
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_AD);
WHILE(TRUE)
{
IF (SOLANDO<100)
{
HIENTHI();
READ_ADC(ADC_START_ONLY);
}
ELSE
{
SOLANDO=0;
KQADC= KQADC /2.046;
KQADC=KQADC/100;
GIAIMA();
KQADC=0;
}
}
}
Chng 8. Ngat.
153
Vi x ly
Nguyen nh Phu
Chng trnh chnh thc hin khi to ADC (xem li cc ca chng 7). Khi to cho php
ADC ngt.
Vng lp while thc hin kim tra xem nu bin m s ln o nu nh hn 100 th ch thc hin
chng trnh con hin th nhit o ln trc v ra lnh chuyn i ADC. Khi s ln o bng 100 th
tin hnh x l kt qu o, gii m v xo kt qu m v 0 thc hin chu k o trung bnh ln tip
theo.
Lnh READ_ADC(ADC_START_ONLY); c chc nng l ra lnh chuyn i.
Khi ra lnh chuyn i th ch ADC chuyn i xong s bo ngt, chng trnh con phc v
ngt ca ADC s tin hnh tng bin s ln o v cng dn kt qu o.
Lnh READ_ADC(ADC_READ_ONLY); c chc nng l c kt qu chuyn i.
Bi 8-4:
Chng trnh o nhit v m giy. m giy dng timer nh thi bo ngt hin
th giy trn led 7 on qut, o nhit dng cm bin LM35, dng ADC ca vi iu
khin PIC 16F887 bo ngt sau khi chuyn i xong, hin th kt qu o trn 3 led
on kt ni theo phng php qut, s dng in p tham chiu VDD v VSS.
S mch: 2 led hin th giy v 3 led hin th nhit nn tng s led l 5.
154
Lu :
Chng 8. Ngat.
Nguyen nh Phu
BEGIN
NGT ADC
RETI
NGT TIMER
SOLANDO = 100
KHI TO LI TIMER.
X L GIY
S
X L KT QU O KQADC, GII M
RETI
Gii thch lu :
H thng thc hin 2 chc nng m giy v o nhit . C 2 u x dng ngt, bi ny tng
hp ca bi 8-2 v 8-3 cho thy c th mt ng dng c th s dng nhiu ngt.
Khi timer m trn th tin hnh x l ngt ca timer thc hin vic x l giy.
Khi ADC chuyn i xong th tin hnh cng dn kt qu ADC.
Chng trnh:
#INCLUDE<TV_16F887.C>
UNSIGNED INT16 KQADC=0;
UNSIGNED INT GIAY,BDT,SOLANDO, MADONVI, MACHUC, MATRAM;
#int_timer1
void interrupt_timer1()
{
SET_TIMER1(3036);
BDT++;
IF(BDT>=10)
{
BDT = 0;
IF (GIAY == 59) GIAY = 0;
ELSE
GIAY++;
}
}
#INT_AD
void interrupt_ADC()
{
SOLANDO++;
KQADC=KQADC+READ_ADC(ADC_READ_ONLY);
}
Chng 8. Ngat.
155
Vi x ly
Nguyen nh Phu
VOID GIAIMA()
{
MATRAM = MA7DOAN[KQADC/100];
MACHUC = MA7DOAN[KQADC/10 % 10];
MADONVI= MA7DOAN[KQADC % 10];
IF (MATRAM == 0XC0) MATRAM=0XFF;
}
VOID HIENTHI ()
{
OUTPUT_B(MADONVI);
OUTPUT_LOW(PIN_D0);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D0);
OUTPUT_B(MACHUC);
OUTPUT_LOW(PIN_D1);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D1);
OUTPUT_B(MATRAM);
OUTPUT_LOW(PIN_D2);
DELAY_MS(1);
OUTPUT_HIGH(PIN_D2);
OUTPUT_B(MA7DOAN[GIAY %10]);
DELAY_MS(1);
OUTPUT_B(MA7DOAN[GIAY/10]);
DELAY_MS(1);
OUTPUT_LOW(PIN_D3);
OUTPUT_HIGH(PIN_D3);
OUTPUT_LOW(PIN_D4);
OUTPUT_HIGH(PIN_D4);
}
VOID MAIN()
{
SET_TRIS_B(0x00); SET_TRIS_D(0x00);
SET_TRIS_A(0x01);
SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(SAN0);
SET_ADC_CHANNEL(0);
SOLANDO=0; GIAY = 0; BDT=0;
ENABLE_INTERRUPTS(GLOBAL); ENABLE_INTERRUPTS(INT_AD);
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
SET_TIMER1(0);
ENABLE_INTERRUPTS(INT_TIMER1);
WHILE(TRUE)
{
IF (SOLANDO<100)
{
HIENTHI();
READ_ADC(ADC_START_ONLY);
}
ELSE
{
SOLANDO=0;
KQADC= KQADC /2.046;
KQADC=KQADC/100;
GIAIMA();
KQADC=0;
}
}
}
Chng 8. Ngat.
Nguyen nh Phu
Hy v mch, vit lu v chng trnh mch m gi pht giy hin th trn 6 led 7
on kt ni theo phng php qut v o nhit hin th trn 3 led 7 on. C 2 u
dng ngt.
Bi tp 8-4:
Bi tp 8-5:
Bi tp 8-6:
Mt vi iu khin PIC16F887 giao tip vi 4 led 7 on loi anode chung, 1 led hin
th s th t knh, 3 led cn li hin th nhit , 4 cm bin nhit LM35 ni vi 4
knh t AN0 n AN3, c 3 nt nhn: 1 nt chn ch t ng hay bng tay, 2 nt
cn li l UP v DW, nhn UP l tng ln chn knh ADC cao hn, DW th gim.
Hy vit lu v chng trnh chuyn i nhit ch t ng dng ngt ca
ADC bit qu trnh chuyn i xong, mi knh chuyn i trong thi gian 5 giy,
dng timer1 m thi gian v bo ngt chuyn knh.
ch bng tay th chuyn knh khi nhn UP hoc DW.
CU HI N TP
Cu 8-1:
Cu 8-2:
Hy cho bit chc nng cc bit trong cc thanh ghi ngt ca vi iu khin PIC16F887.
Cu 8-3:
Cu 8-4:
2.
CU HI M RNG
Cu 8-5:
Cu 8-6:
3.
CU HI TRC NGHIM
Cu 8-1:
(a) 17
Cu 8-2:
(b) 14
(c) 15
(d) 16
Chng 8. Ngat.
157
Vi x ly
(a) 3
Cu 8-3:
(b) 4
(b) 4
(d) 6
(c) 5
(d) 6
(a) Timer0
Cu 8-5:
(c) 5
(a) 3
Cu 8-4:
Nguyen nh Phu
(b) Timer1
(c) Timer2
(d) ADC
(a) RCIE
(b) Timer1
(c) Timer2
(d) INT
Cu 8-16: Bit no ca PIC 16F887 l bit cho php ngt ngoi vi:
(a) PEIE
Cu 8-7:
(d) ADIE
(b) Timer0
(c) INT
(d) Khng c
(a) PEIE
Cu 8-9:
(c) T0IE
(a) ADC
Cu 8-8:
(b) GIE
(b) GIE
(c) T0IE
(d) ADIE
(b) AND
(c) AND, OR
(b) 0003H
(c) 000BH
(d) 0004H
(b) Th 1
(c) Th 2
(d) Th 3
158
(b) Th 6
(c) Th 4
(d) Th 3
Chng 8. Ngat.
Chng 9
GII THIU
TNG QUAN V CC KIU TRUYN D LIU
TRUYN D LIU NI TIP NG B V KHNG NG B
TRUYN D LIU CA VI IU KHIN PIC 16F887
CU HI N TP
CU HI M RNG
CU HI TRC NGHIM
Nguyen nh Phu
I. GII THIU
Truyn d liu ni tip c nhiu tin ch trong iu khin nn hu ht cc vi iu khin u tch
hp, chng ny chng ta s kho st nguyn l hot ng truyn d liu ng b v khng ng b,
cch vit chng trnh truyn d liu cho cc ng dng.
Sau khi kt thc chng ny bn c th s dng c truyn d liu ni tip ca cc vi iu
khin.
TD
TD
CK
CK
GND
GND
HT1
MASTER
HT2
SLAVE
TxD
RxD
RxD
TxD
CK
CK
GND
HT1
GND
HT2
Truyn d liu khng ng b ging nh h thng truyn d liu ng b nhng khng c xung
CK. Khng cn phn bit ch v t cc h thng l ngang cp.
160
Nguyen nh Phu
1.
B m nhn cha c 2 k t.
B m pht cha 1 k t.
Khi EUSART c s dng cho cc cu trc m rng theo sau, thch hp cho h thng bus
mng kt ni cc b (LIN: Local Interconnect Network):
2.
Thanh ghi iu khin v trng thi ca khi pht (TXSTA transmit Status and Control).
Thanh ghi iu khin v trng thi ca khi nhn (RCSTA transmit Status and
Control).
a.
Thanh ghi iu khin v trng thi ca khi pht TXSTA
T chc ca thanh ghi nh hnh sau:
Chng 9. Truyen d lieu uart.
161
Nguyen nh Phu
R/W(0)
CSRS
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R(1)
R/W(0)
TX9
TXEN
SYNC
SENDB
BRGH
TRMT
TX9D
K hiu
CSRS
TXSTA.6
TX9
TXSTA.5
TXEN
TXSTA.4
SYNC
TXSTA.3
SENDB
TXSTA.2
BRGH
TXSTA.1
TRMT
TXSTA.0
TX9D
162
Cho php truyn d liu bt ng b bng cch xa bit SYNC lm bit SPEN ln 1.
Nu mun s dng ngt th cho bit TXIE ln 1, cho php ngt ngoi vi v cho php ngt
ton cc.
Tin hnh np gi tr cn truyn vo thanh ghi TXREG, khi qu trnh truyn d liu s
bt u.
Nguyen nh Phu
163
Nguyen nh Phu
R/W(0)
R/W(0)
R/W(0)
R/W(0)
R(0)
R(0)
R(x)
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
K hiu
SPEN
RCSTA.6
RX9
RCSTA.5
SREN
RCSTA.4
CREN
164
Nguyen nh Phu
RCSTA.3
ADDEN
RCSTA.2
FERR
RCSTA.1
OERR
RCSTA.0
RX9D
Cho php truyn d liu bt ng b bng cch xa bit SYNC lm bit SPEN ln 1.
Nu mun s dng ngt th cho bit RCIE ln 1, cho php ngt ngoi vi v cho php ngt
ton cc.
Khi to qu trnh nhn d liu ch pht hin 9 bit a ch: ch ny thng c dng
trong h thng truyn theo chun RS-485.
Cho php truyn d liu bt ng b bng cch xa bit SYNC lm bit SPEN ln 1.
Nu mun s dng ngt th cho bit RCIE ln 1, cho php ngt ngoi vi v cho php ngt
ton cc.
165
Nguyen nh Phu
Cho php pht hin a ch 9 bit bng cch cho bit ADDEN ln 1.
c thanh ghi trng thi nhn RCSTA kim tra cc c bo li. Bit th 9 lun l 1.
Nhn d liu 8 bit t thanh ghi RCREG, phn mm s tin hnh kim tra a ch ca thit
b.
Nguyen nh Phu
Dng sng tn hiu th ba: cho bit tn hiu RCIDL xung mc 0 khi pht hin bit start v ln 1
khi pht hin bit stop.
Dng sng tn hiu th nm: cho bit c nhn RCIF ln mc 1 khi nhn c 1 k t v xung
mc 0 khi tin hnh c xong cc k t nhn.
Dng sng tn hiu th su: cho bit bit bo li trn OERR ln mc 1 khi nhn ti 3 k t.
Dng sng tn hiu th by: cho bit khi xa bit CREN th xa lun bit bo li trn OERR.
Dng sng tn hiu th t: cho bit tin hnh c 2 byte d liu ( mt 1 byte), khi c xong th
xa lun c bo ngt.
c.
Thanh ghi iu khin tc truyn - BAUDCTL
T chc ca thanh ghi nh hnh 9-8:
R(0)
ABDOVF
R(1)
RCIDL
R/W(0)
R/W(0)
SCKP
BRG16
R/W(0)
R/W(0)
WUE
ABDEN
K hiu
ABDOVF
BAUDCTL.6
RCIDL
BAUDCTL.4
SCKP
BAUDCTL.3
BRG16
BAUDCTL.1
WUE
BAUDCTL.0
ABDEN
167
Nguyen nh Phu
B pht tc baud (Baud Rate Generator) l timer 8 bit hoc 16 bit to tc cho hot ng
truyn d liu ESUART ng b v bt ng b.
Mc nhin th khi to tc baud BRG hot ng ch 8 bit, nu cho bit BRG16 bng 1 th
hot ng ch 16 bit.
Cp thanh ghi SPBRGH v SPBRG xc nh chu k to tc baud ca timer.
Trong ch truyn ng b th b nhn chu k tc baud c xc nh bi c 2 bit BRGH
trong thanh ghi TXSTA v bit BRG16 trong thanh ghi BAUDCTL.
Trong ch truyn bt ng b th b nhn chu k tc baud ch c xc nh bi bit
BRGH.
Bng 9-4: Tm tt cc cng thc tnh tc baud:
ng vi tng trng thi ca 3 bit SYNC, BRG16 v BRGH m c cc cng thc tnh tc
baud tng ng. Trong cng thc tnh tc baud th n l gi tr ca cp thanh ghi SPBRGH v
SPBRG.
V d 9-1:
FOSC
FOSC
FOSC
16000000
1
1 25,041
64 TDBAUD
64 9600
Gi tr np cho cp thanh ghi l 25, khi tc thc l:
FOSC
16000000
TDBAUDTINH
9615
64([SPBGRH : SPBRG ] 1) 64(25 1)
0,16%
TDBAUD
9600
V.
C php:
Thng s:
Chc nng:
Nguyen nh Phu
2.
LNH PUTS(STRING)
C php:
puts(string)
Thng s:
string l chui k t gi i.
Chc nng:
puts( | HELLO| );
C php:
Thng s:
Chc nng:
kitu = getch();
C php:
value = KBHIT()
Thng s:
khng c
Chc nng:
// nu c k t th nhn
S mch:
Trong s mch c dng IC2 c tn l MAX232 dng chuyn i tn hiu RS232 ca cng
COM ca my tnh thnh chun TTL tng thch vi vi iu khin.
IC MAX232 c tch hp 2 b chuyn i, trong mch ny ch dng 1 b chuyn i. Cc t in
trong mch theo s tay ca IC do nh ch to cung cp.
Truyn d liu UART thng dng cng giao tip l 9 chn c tn l COM1 (trc dng cng
25 chn nhng b). Ch khi v mch in (PCB) th bn phi chn cng COM 9 chn loi hn vo
mch in v khi chn linh kin bn phi chn ng loi ci. Cc dy cp kt ni s dng u jack c
nn s gip bn kt ni ng.
S dng portD iu khin 8 led n, thch anh s dng l 20Mhz.
169
Nguyen nh Phu
Lu :
BEGIN - PC
BEGIN - VK
KHI TO PHN MM
TERMINAL
CHN CNG, CHN TC
C D LIU
GI D LIU
NHN D LIU GI RA PORT0
Nguyen nh Phu
171
Nguyen nh Phu
Bi 9-2:
Hnh 9-14: H thng truyn d liu gia my tnh v vi iu khin, hin th LCD.
S mch dng LCD hin th c m ASCII tng thch vi my tnh.
Lu :
BEGIN - PC
BEGIN - VK
KHI TO PHN MM
TERMINAL
CHN CNG, CHN TC
C D LIU
GI D LIU
NHN D LIU HIN TH TRN LCD
Nguyen nh Phu
{
SET_TRIS_E(0x00);
SET_TRIS_D(0x00);
LCD_SETUP();
LCD_COMMAND(ADDR_LINE1); DELAY_US(10);
FOR (I=0;I<16;I++)
{ LCD_DATA(HANG1[I]);}
LCD_COMMAND(ADDR_LINE2); DELAY_US(10);
WHILE(TRUE)
{
IF(KBHIT())
{
RDATA = GETCH();
LCD_DATA(RDATA);
}
}
}
Hnh 9-16: H thng truyn d liu gia my tnh v vi iu khin, c LCD, bn phm.
Chng 9. Truyen d lieu uart.
173
Nguyen nh Phu
S mch them phn giao tip bn phm ma trn 4x4 thc hin chc nng khi nhn phm
no th m phm s hin th trn LCD ng thi gi v my tnh.
Lu :
BEGIN - PC
M PHN MM TERMINAL
CHN CNG, CHN TC
BEGIN - VK
KHI TO TRUYN D
LIU, KHI TO PORT,
LCD
C D LIU
NHN PHM
S
GI D LIU
NHN D LIU HIN TH TRN LCD
Chng trnh:
#INCLUDE <TV_16F887.C>
#INCLUDE <TV_LCD.C>
#INCLUDE <TV_KEY4X4.C>
#USE
rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
UNSIGNED INT8 RDATA=0, MP, I, TDATA, VITRI_H1=0, VITRI_H2=0;
const unsigned char HANG1[16]={"GIAO TIEP MAY TINH"};
VOID MAIN()
{
SET_TRIS_E(0x00);
SET_TRIS_D(0x00);
SET_TRIS_B(0xF0);
PORT_B_PULLUPS(0XF0);
LCD_SETUP();
LCD_COMMAND(ADDR_LINE1); DELAY_US(10);
FOR (I=0;I<16;I++)
{ LCD_DATA(HANG1[I]);}
WHILE(TRUE)
{
IF(KBHIT())
{
LCD_COMMAND(ADDR_LINE2+VITRI_H2); DELAY_US(10);
RDATA = GETCH();
LCD_DATA(RDATA);
IF (VITRI_H2==16) VITRI_H2=0;
ELSE
VITRI_H2++;
}
MP= KEY_4X4();
IF (MP!=0XFF)
{
LCD_COMMAND(ADDR_LINE1+VITRI_H1); DELAY_US(10);
IF (MP<10)
TDATA = MP+0X30;
ELSE
TDATA = MP+0X37;
PUTC(TDATA);
LCD_DATA(TDATA);
IF (VITRI_H1==16) VITRI_H1=0;
ELSE
VITRI_H1++;
}
}
}
174
Nguyen nh Phu
Bi tp 9-2:
Bi tp 9-3:
CU HI N TP
Cu 9-1:
Hy cho bit tn cc thanh ghi lin quan n truyn d liu ca vi iu khin PIC16F887.
Cu 9-2:
Hy cho bit chc nng ca cc bit trong thanh ghi TXSTA ca vi iu khin PIC16F887.
Cu 9-3:
Hy cho bit chc nng ca cc bit trong thanh ghi RCSTA ca vi iu khin PIC16F887.
Cu 9-4: Hy cho bit chc nng ca cc bit trong thanh ghi BAUDCTL ca vi iu khin
PIC16F887.
2.
CU HI M RNG
Cu 9-5:
3.
CU HI TRC NGHIM
Cu 9-1:
(a) 2
Cu 9-2:
(b) 3
(b) RxD, CK
(c) TD, CK
(d) TD, TK
(d) 5
(c) 4
(b) RxD, CK
(c) TD, CK
(d) TD, TK
(a) TXSTA
Chng 9. Truyen d lieu uart.
(b) RCSTA
(c) BAUDCTL
(d) TMOD
175
Nguyen nh Phu
Cu 9-5:
(b) T1
(d) Khng dng timer
Cu 9-23: Bit cho php ngt v c ngt nhn d liu ca PIC 16F887:
(a) RCIF, TXIF
(c) RCIE, RCIF
Cu 9-24: Bit cho php ngt v c ngt pht d liu ca PIC 16F887:
(a) RCIF, TXIF
(c) RCIE, RCIF
176
Chng 10
GII THIU
KHO ST PWM
Nguyen nh Phu
I. GII THIU
Vi iu khin PIC h 16F887 c 2 b PWM (Pulse Width Modulation) c bn dng iu khin
tc ng c DC.
Phn ny s kho st chi tit khi PWM ca PIC v tp lnh lp trnh C cho PWM, cc ng dng
dng PWM.
Nguyn l iu ch rng xung l mch to ra xung vung c chu k l hng s nhng h s cng
tc (cn gi l h s chu k - duty cycle) c th thay i c. S thay i ca h s chu k lm thay i
in p trung bnh hoc dng in trung bnh.
S thay i in p hoc dng trung bnh dng iu khin cc ti nh ng c DC th lm thay
i tc ng c, iu khin bng n th lm thay i cng sng ca bng n,
Cc ng sng iu ch rng xung vi cc h s chu k khc nhau nh hnh 10-1.
0
1
2
3
4
5
6
7
1ms
10ms
Hnh 10-1: Dng sng iu ch rng xung.
Cho chu k 10ms, cp tc 0 th tn hiu bng 0. in p hay dng trung bnh s bng 0, nu tn
hiu ny iu khin n led th n led s tt.
cp tc 1 th tn hiu iu khin mc 1 ch c 1ms, mc 0 l 9ms. Gi s dng to ra l 10
mA khi mc 1, khi dng trung bnh l (10*1)/10 = 1mA. Led sng m vi dng l 1mA.
cp tc 2 th tn hiu iu khin mc 1 ch c 2ms, mc 0 l 8ms. Gi s dng to ra l 10
mA khi mc 1, khi dng trung bnh l (10*2)/10 = 2mA. Led sng hn vi dng l 2mA.
cp tc 5 th tn hiu iu khin mc 1 ch c 5ms, mc 0 l 5ms. Gi s dng to ra l 10
mA khi mc 1, khi dng trung bnh l (10*5)/10 = 5mA.
cp tc 10 th tn hiu iu khin mc 1 l 10ms, mc 0 l 0ms. Gi s dng to ra l 10
mA khi mc 1, khi dng trung bnh l (10*10)/10 = 10mA. Led sng cc i vi dng l 10mA.
Khi thay i h s chu k th ch thay i thi gian xung mc 1, cn chu k th khng i.
178
Nguyen nh Phu
Qua phn gii thiu ny cho chng ta bit r khi nim iu ch rng xung, phn tip theo
chng ta s kho st mch in c chc nng to ra dng sng PWM v cc phng trnh tnh ton to
ra chu k tn hiu v h s chu k.
2.
179
Nguyen nh Phu
(10-1)
Khi gi tr ca timer 2 (TMR2) bng gi tr ca thanh ghi PR2 th 3 s kin theo sau s xy ra:
4.
H s chu k c thit lp bi gi tr lu trong thanh ghi 10 bit gm thanh ghi 8 bit CCPRxL v 2
bit cn li l bit th 4 v th 5 lu trong thanh ghi CCPxCON k hiu l CCPxCON<5:4>.
Gi tr ca h s chu k l 10 bit nn c th thay i t 0 n 1023 to ra 1024 cp gi tr iu
khin.
Gi tr 10 bit th 8 bit c trng s ln lu trong thanh ghi CCPRxL v 2 bit cn li c trng s thp
th CCPxCON<5:4>.
H s chu k ca PIC16F887 c tnh theo cng thc:
DUTY _ CYCLEPWM (CCPRxL : CCPxCON 5 : 4 ) * TOSC * PVTMR2
C php:
Thng s:
C php:
Thng s:
180
set_pwm1_duty (value)
value c th l hng s 8 bit hoc 16 bit.
Chng 10. ieu che o rong xung pwm.
Nguyen nh Phu
Chc nng:
3.
C php:
Thng s:
Chc nng:
C php:
set_timerX(value)
; x l 0, 1, 2
Thng s:
Chc nng:
SET_TIMER2 (0);
//reset timer2
Tnh ton:
Tn s thch anh: fOSC 20MHz nn chu k l:
Chu k PWM:
Ch bit c
TOSC
1
1
0,05S 50ns
FOSC 20MHz
[( PR 2) 1]
PERIODPWM
800,000ns
250
4 * TOSC * PVTMR2 4 * 50ns *16
181
Nguyen nh Phu
Vy PR 2 249 .
Lnh khi to cho timer2 l: setup_timer_2(T2_DIV_BY_16, 249, 1)
Tnh h s chu k:
H s chu k thay i s lm gi tr trung bnh ca tn hiu thay i, h s chu k nh nht l bng 0
khi tn hiu ra CCPx mc 0, h s chu k tng lm tn hiu xut hin v gi tr trung bnh tng, h s
chu k ln nht bng chu k ca PWM.
Cho h s chu k bng chu k tnh ton gii hn h s chu k:
DUTY _ CYCLEPWM PERIODPWM _ MAX
Ta c cng thc:
(CCPRxL : CCPxCON 5 : 4 )
(CCPRxL : CCPxCON 5 : 4 )
PERIODPWM 800,000ns
1000
TOSC * PVTMR2 50ns *16
TOSC * PVTMR2
PERIODPWM
TOSC * PVTMR2
182
Nguyen nh Phu
BEGIN
KHI TO PWM, PORT
END
183
Nguyen nh Phu
NHN UP?
NHN DW?
S
<TV_16F887.C>
UP
PIN_A3
DW
PIN_A4
INT
CAPDO=0;
VOID PHIM_UP ()
{
IF (!INPUT(UP))
{
DELAY_MS (20);
184
Nguyen nh Phu
IF(!INPUT(UP))
{
IF (CAPDO<10)
{
CAPDO++;
DO {}
}
}
SET_PWM1_DUTY(CAPDO*10); OUTPUT_D(CAPDO);
WHILE (!INPUT(UP));
}
}
VOID PHIM_DW ()
{
IF (!INPUT(DW))
{
DELAY_MS (20);
IF(!INPUT(DW))
{
IF (CAPDO>0)
{
CAPDO--;
SET_PWM1_DUTY(CAPDO*10); OUTPUT_D(CAPDO);
DO {}
WHILE (!INPUT(DW));
}
}
}
}
VOID MAIN()
{
SET_TRIS_C(0X00); SET_TRIS_A(0xFF);
SET_TRIS_D(0X00); OUTPUT_D(CAPDO);
SETUP_CCP1(CCP_PWM);
SETUP_TIMER_2(T2_DIV_BY_16,249,1);
SET_PWM1_DUTY(CAPDO*10);
WHILE(TRUE)
{
PHIM_UP();
PHIM_DW();
}
}
Gii thch chng trnh:
Chng trnh chnh thc hin cc yu cu:
Khi to cc port, PWM, Timer2 v tc theo s cp ban u l 0.
Vng lp while thc hin kim tra nhn phm UP v DW.
Chng trnh con phm UP kim tra nu c nhn th tin hnh chng di v kim tra nu cha bng
cp 10 th tng cp ln 1, cp nht tc mi, xut ra port bit cp tc ang thc hin.
Chng trnh con phm DW kim tra nu c nhn th tin hnh chng di v kim tra nu cha bng
cp 0 th gim bt 1 cp , cp nht tc mi, xut ra port bit cp tc ang thc hin.
Bi tp 10-1:
Hy thit k mch v vit chng trnh ging bi 10-2 nhng khng hin th cp tc
led n m hin th 2 led 7 on v c thm 1 nt Stop khi nhn th tt led.
185
Bi 10-3:
Nguyen nh Phu
Nguyen nh Phu
Lu :
BEGIN
KHI TO PWM, PORT,
LCD
THIT LP TC CP 0 CHO PWM
IU KHIN NG C
HIN TH LCD HNG 1
NHN UP?
NHN DW?
S
NHN STOP?
S
CP TC = 0, NG C NGNG
HIN TH TC TRN LCD = 0
187
Nguyen nh Phu
IF (!INPUT(DW))
{
DELAY_MS (20);
IF(!INPUT(DW))
{
IF (CAPDO>0)
{
CAPDO--;
SET_PWM1_DUTY(CAPDO*10);
HIENTHI_CAP_TOCDO ();
DO {}
WHILE (!INPUT(DW));
}
}
}
}
VOID PHIM_STOP()
{
IF (!INPUT(STOP))
{
CAPDO=0;
SET_PWM1_DUTY(CAPDO*10);
HIENTHI_CAP_TOCDO ();
}
}
VOID MAIN()
{
SET_TRIS_C(0X00);
SET_TRIS_D(0X00); SET_TRIS_E(0X00);
SETUP_CCP1(CCP_PWM);
SETUP_TIMER_2(T2_DIV_BY_16,249,1);
SET_PWM1_DUTY(CAPDO*10);
LCD_SETUP();
LCD_COMMAND(ADDR_LINE1); DELAY_US(10);
FOR (I=0;I<16;I++)
{ LCD_DATA(HANG1[I]);}
OUTPUT_HIGH(MOTOR_ENA);
HIENTHI_CAP_TOCDO ();
WHILE(TRUE)
{
PHIM_UP();
PHIM_DW();
PHIM_STOP();
}
}
Gii thch chng trnh:
Chng trnh chnh thc hin cc yu cu:
Khi to cc port, PWM, Timer2 v tc theo s cp ban u l 0.
Khi to LCD, hin th thng tin cho hng 1.
Cho php motor sn sng hot ng v hin th cp ban u l 0.
Vng lp while thc hin kim tra nhn phm UP, DW v STOP.
Chng trnh con phm UP kim tra nu c nhn th tin hnh chng di v kim tra nu cha bng
cp 10 th tng cp ln 1, cp nht tc mi, hin th ra LCD cp tc ang thc hin.
188
Nguyen nh Phu
Chng trnh con phm DW kim tra nu c nhn th tin hnh chng di v kim tra nu cha bng
cp 0 th gim bt 1 cp , cp nht tc mi, hin th ra LCD cp tc ang thc hin.
Chng trnh con phm STOP kim tra nu c nhn th tin hnh cho cp tc bng 0, cho ng
c ngng, hin th LCD cp tc bng 0.
Bi tp 10-2:
Hy hiu chnh bi 10-3 sao cho khi nhn nt STOP th ng c ngng ng thi o
chiu ng c.
Khi ng c quay thun th hin th FOR trn LCD 3 k t u hng 2.
Khi ng c quay ngc th hin th REV trn LCD 3 k t u hng 2.
Bi tp 10-3:
Bi tp 10-4:
Hy hiu chnh bi 10-3 thay v dng 3 nt nhn th dng bn phm ma trn 4x4 ni vi
portB.
Khi ng c quay thun th hin th FOR trn LCD 3 k t u hng 2.
Khi ng c quay ngc th hin th REV trn LCD 3 k t u hng 2.
Bi tp 10-5:
Hy hiu chnh bi 10-3 thay v dng 3 nt nhn th dng bn phm ma trn 4x4 ni vi
portB.
11 phm s c m t 0x0 n 0xA dng iu khin 11 cp tng ng, khi nhn s 0 th
ng c ngng, khi nhn phm s 1 th ng c chy cp tc 1, khi nhn phm s 2 th
ng c chy cp 5, tng t cho cc phm cn li. Ch chy 1 chiu.
Bi tp 10-6:
Bi tp 10-7:
189
Nguyen nh Phu
CU HI N TP TRC NGHIM
V.
1.
CU HI N TP
Cu 10-1: Hy cho bit tn cc thanh ghi lin quan n khi CCP ca vi iu khin PIC16F887.
Cu 10-2: Hy cho bit ng dng ca PWM trong iu khin ng c.
2.
CU HI M RNG
Cu 10-3: Hy so snh vi iu khin khng tch hp chc nng PWM v c tch hp PWM trong iu
khin thay i tc ng c DC.
3.
190
CU HI TRC NGHIM