ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 1/14
Tutorial 01.03
G?i ??n: ?o¨¤n Hi?p, Do?n Minh ??ng, picvietnam@googlegroups.com
N?i dung: B?I 1: PIC16F877A T? D? T?I KH?
MICROSOFT WORD
T¨®m t?t:
Tutorial post l¨ºn lu?ng ¡°PIC16F877A T? D? T?I KH?¡± thu?c chuy¨ºn m?c ¡°C? B?N V? VI
?I?U KHI?N V? PIC¡±. B¨¤i ??u ti¨ºn bao g?m n?i dung sau:
?ng d?ng ??n gi?n nh?t d¨¤nh cho vi ?i?u khi?n PIC16F877A, ?¨® l¨¤ xu?t d? li?u ra m?t port
n¨¤o ?¨® c?a vi ?i?u khi?n. C¨¢c b??c ti?n h¨¤nh bao g?m:
_ B??c 1: X?y d?ng m?ch test.
_ B??c 2: X?y d?ng ch??ng tr¨¬nh.
_ B??c 3: Nh?n x¨¦t v¨¤ k?t lu?n.
M?t s? ??c ?i?m v? c¨¢c port ?i?u khi?n c?a vi ?i?u khi?n PIC16F877A.
Ch??ng tr¨¬nh v¨¤ s? ?? nguy¨ºn l¨ª m?ch test ?i k¨¨m.
1. ?i?u khi?n c¨¢c port I/O
??y l¨¤ m?t trong nh?ng ?ng d?ng ??n gi?n nh?t gi¨²p ta l¨¤m quen v?i vi ?i?u khi?n.
Trong ?ng d?ng n¨¤y ta s? xu?t m?t gi¨¢ tr? n¨¤o ?¨® ra m?t PORT c?a vi ?i?u khi?n, ch?ng
h?n nh? PORTB. Gi¨¢ tr? ??a ra PORTB s? ???c ki?m tra b?ng c¨¢ch g?n c¨¢c LED v¨¤o c¨¢c
ch?n I/O c?a PORT ?¨®.
1.1. X?y d?ng m?ch test cho ?ng d?ng
Tr??c ti¨ºn ta c¨´ng x?y d?ng m?ch test cho ?ng d?ng n¨¤y. Ngo?i tr? vi ?i?u khi?n
PIC16F877A, c¨¢c th¨¤nh ph?n c¨°n l?i trong m?ch ??u r?t th?ng d?ng v¨¤ d? d¨¤ng t¨¬m th?y
tr¨ºn th? tr??ng, do ?¨® h?y thi c?ng m?ch test n¨¤y ?? ta c¨® th? xem x¨¦t c¨¢c hi?u ?ng c? th?
c?a vi ?i?u khi?n m?t c¨¢ch tr?c quan v¨¤ nghi¨ºm t¨²c, v¨¬ sau b¨¤i n¨¤y, c¨¢c b?n s? th?y r?ng ta
kh?ng th? ng?i m?t ch? ??c s¨¢ch hay t¨¤i li?u m¨¤ c¨® th? l??ng tr??c ???c h?t nh?ng hi?u
?ng m¨¤ vi ?i?u khi?n t?o ra, th?m ch¨ª l¨¤ c¨¢c hi?u ?ng t? ?ng d?ng ??n gi?n nh?t n¨¤y.
Do ??y l¨¤ b¨¤i ??u ti¨ºn, cho n¨ºn c¨¢c b??c ti?n h¨¤nh s? r?t nghi¨ºm t¨²c v¨¤ th?n tr?ng. N¨¤o,
b?t ??u!
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 2/14
Ta c¨® vi ?i?u khi?n PIC16F877A v?i s? ?? ch?n nh? sau:
PIC16F877A
8
9
10
12
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
13
2
3
4
5
6
7 33
34
35
36
37
38
39
40
11
32
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
GND
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
GND
MCLR/VPP
OSC1/CLKIN
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI/C1OUT
RA5/AN4/SS/C2OUT RBO/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
VDD
VDD
H¨¬nh 1.1 Vi ?i?u khi?n PIC16F877A.
B?y gi? ta h?y c?p ngu?n cho vi ?i?u khi?n h?at ??ng, v¨¤ c?u h?i ??t ra l¨¤ c?p ngu?n
nh? th? n¨¤o? T?t nhi¨ºn, ngu?n cung c?p s? l¨¤ ngu?n 5V, v?n ?? ? ??y l¨¤, vi ?i?u khi?n
PIC16F877A c¨® ??n hai ch?n c?p ngu?n VCC v¨¤ hai ch?n GND. C¨¢c b?n c¨® c?m th?y b?i r?i
v¨¤ th?c m?c l¨¤ t?i sao l?i c¨® ??n 4 ch?n c?p ngu?n nh? v?y kh?ng? V¨¤ sau ??y l¨¤ c?u tr? l?i,
ta ph?i c?p ngu?n v¨¤o t?t c? c¨¢c ch?n ngu?n tr¨ºn, nh? v?y th¨¬ vi ?i?u khi?n m?i ho?t ??ng
???c. V¨¤ m?ch nguy¨ºn l¨ª sau khi c?p ngu?n nh? sau:
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 3/14
HI
PIC16F877A
8
9
10
12
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
13
2
3
4
5
6
7 33
34
35
36
37
38
39
40
11
32
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
GND
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
GND
MCLR/VPP
OSC1/CLKIN
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI/C1OUT
RA5/AN4/SS/C2OUT RBO/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
VDD
VDD
0
0
HI
H¨¬nh 1.2 Vi ?i?u khi?n PIC16F877A sau khi c?p ngu?n.
Ti?p theo, ngo¨¤i ngu?n cung c?p, ta c?n ph?i cung c?p xung ho?t ??ng cho vi ?i?u
khi?n. PIC16F877A v¨¤ c¨¢c vi ?i?u khi?n n¨®i chung cho ph¨¦p nhi?u c¨¢ch cung c?p xung ho?t
??ng kh¨¢c nhau. ? ??y ta s? d¨´ng th?ch anh l¨¤m ngu?n xung, v¨¤ c?ng vi?c c?a ta l¨¤ g?n
th?ch anh v¨¤o hai ch?n 13 v¨¤ 14 c?a vi ?i?u khi?n. Tuy nhi¨ºn c¨¢c b?n c?ng bi?t r?ng, c¨¢c
xung dao ??ng do th?ch anh t?o ra c?ng kh?ng th?c s? ?n ??nh m?t c¨¢ch tuy?t ??i, v¨¤ c¨¢ch
kh?c ph?c l¨¤ g?n th¨ºm c¨¢c t? l?c v¨¤o th?ch anh. Nh? v?y, c?n ph?i g?n c¨¢c t? nh? th? n¨¤o
v¨¤ gi¨¢ tr? bao nhi¨ºu? C?u tr? l?i n?m trong c¨¢i datasheet. C¨¢c b?n l?t c¨¢i datasheet
PIC16F87xA do Microchip cung c?p ra. Trang 145, h¨¬nh 4.1 h??ng d?n c¨¢ch g?n c¨¢c t? C1,
C2 v¨¤o th?ch anh, v¨¤ trang 146, b?ng 14-2 h??ng d?n c¨¢ch ch?n gi¨¢ tr? cho t?. ? ??y la
d¨´ng th?ch anh 4 MHz n¨ºn t? C1 v¨¤ C2 s? c¨® gi¨¢ tr? 15 pF. M?t ?i?m ?¨¢ng ch¨² ? n?a l¨¤
ch?t l??ng th?ch anh t?i th? tr??ng Vi?t Nam kh?ng th?c s? t?t, cho n¨ºn ?? t?ng s? ?n
??nh, ta s? d¨´ng t? 30 pF. Xong! V¨¤ sau ??y l¨¤ m?ch nguy¨ºn l¨ª sau khi g?n th¨ºm th?ch anh:
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 4/14
HI
PIC16F877A
8
9
10
12
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
13
2
3
4
5
6
7 33
34
35
36
37
38
39
40
11
32
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
GND
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
GND
MCLR/VPP
OSC1/CLKIN
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI/C1OUT
RA5/AN4/SS/C2OUT RBO/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
VDD
VDD
C1
30 pF
0
4 MHz
0
HI
0
C2
30 pF
H¨¬nh 1.3 PIC16F877A sau khi c?p ngu?n v¨¤ th¨ºm th?ch anh.
B?y gi? l¨¤ m?ch reset cho vi ?i?u khi?n s? d?ng ch? ?? reset t? ch?n MCLR c?a vi ?i?u
khi?n (ch?n s? 1). Ta ?? bi?t vi ?i?u khi?n s? ???c reset khi ch?n MCLR chuy?n t? m?c
logic 1 xu?ng m?c logic 0 v¨¤ ta s? d?ng m?t c?ng t?c c? kh¨ª ?? th?c hi?n vi¨ºc chuy?n ??i
?¨®, nh? v?y ta m?i c¨® th? t¨¢c ??ng cho vi ?i?u khi?n reset b?ng tay. L?i m?t c?u h?i n?a,
ph?i thi?t k? m?ch nh? th? n¨¤o ?? th?c hi?n ???c c?ng vi?c ?¨®? D? th?i, ta c¨® th? thi?t k?
nh? h¨¬nh 1.4. B¨¬nh th??ng c?ng t?c h?, ch?n MCLR c?a vi ?i?u khi?n mang m?c logic 1 (v¨¬
???c n?i v?i ngu?n qua ?i?n tr? h?n d¨°ng R1). ?i?n tr? R1 ph?i c¨® gi¨¢ tr? nh? h?n 40K ??
b?o ??m ?i?n ¨¢p cung c?p cho vi ?i?u khi?n. Khi ?n c?ng t?c, ch?n MCLR ???c n?i v?i
GND n¨ºn mang m?c logic 0, khi ?¨® vi ?i?u khi?n s? ???c reset.
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 5/14
4 MHz
HI
R1
0
HI
SW1
12
0
0
0
HI
PIC16F877A
8
9
10
12
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
13
2
3
4
5
6
7 33
34
35
36
37
38
39
40
11
32
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
GND
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
GND
MCLR/VPP
OSC1/CLKIN
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI/C1OUT
RA5/AN4/SS/C2OUT RBO/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
VDD
VDD
C1
30 pF
C2
30 pF
H¨¬nh 1.4 PIC16F877A sau khi ti?p t?c th¨ºm v¨¤o m?ch seset.
??n ??y xem nh? ta ?? ho¨¤n th¨¤nh nh?ng th¨¤nh ph?n c? b?n nh?t cho m?t m?ch test
d¨¤nh cho vi ?i?u khi?n PIC16F877A. Ta ti?p t?c ph¨¢t tri?n c¨¢c th¨¤nh ph?n ti?p theo ?? test
c¨¢c port c?a vi ?i?u khi?n.
PORTB c?a vi ?i?u khi?n s? ???c test ??u ti¨ºn. M?c ?¨ªch c?a m?ch test l¨¤ ki?m tra xem
c¨¢c gi¨¢ tr? ta xu?t ra port b?ng ch??ng tr¨¬nh c¨® ?¨²ng hay kh?ng, v¨¤ ?? ph¨¢t hi?n ???c c¨¢c
gi¨¢ tr? ?¨® m?t c¨¢ch tr?c quan, ta s? d?ng 8 LED g?n v¨¤o 8 ch?n trong PORTB c?a vi ?i?u
khi?n. Khi ta xu?t gi¨¢ tr? mang m?c logic 1 ra m?t ch?n n¨¤o ?¨® trong PORTB c?a vi ?i?u
khi?n, LED t??ng ?ng g?n v?i ch?n ?¨® s? s¨¢ng l¨ºn (do l¨²c n¨¤y ?i?n ¨¢p ? ch?n c?a vi ?i?u
khi?n l¨¤ 5V) v¨¤ ng??c l?i, n?u gi¨¢ tr? xu?t ra mang m?c logic 0 th¨¬ LED s? kh?ng s¨¢ng (do
l¨²c n¨¤y ?i?n ¨¢p ? ch?n c?a vi ?i?u khi?n l¨¤ 0V). Tuy nhi¨ºn, ta c?n ch¨² ? ??n m?t ?i?m quan
tr?ng n?a, ?¨® l¨¤ ?? LED s¨¢ng b¨¬nh th??ng, ?i?n ¨¢p ??t v¨¤o hai ??u c?a LED v¨¤o kho?ng
1,8V ??n 2,2V, trong khi ?i?n ¨¢p t?i ch?n I/O c?a vi ?i?u khi?n khi ta xu?t ra m?c logic 1 s?
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 6/14
l¨¤ 5V. Do ?¨® c?n m?c th¨ºm ?i?n tr? h?n d¨°ng cho LED (c¨® th? d¨´ng ?i?n tr? c¨® gi¨¢ tr? 0.33
K).
D?a v¨¤o c¨¢c ?i?m ?? ph?n t¨ªch ? tr¨ºn ta c¨® th? x?y d?ng ???c m?ch nguy¨ºn l¨ª ho¨¤n
ch?nh cho ?ng d?ng test PORTB nh? sau:
R5
D2
4 MHz
HI
R6
D7
D5
D4
0
R2
R1
0
R9
D3
HI
SW1
12
0 R7
D8
0
D1
0
R3
HI
R4
PIC16F877A
8
9
10
12
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
13
2
3
4
5
6
7 33
34
35
36
37
38
39
40
11
32
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
GND
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
GND
MCLR/VPP
OSC1/CLKIN
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI/C1OUT
RA5/AN4/SS/C2OUT RBO/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
VDD
VDD
R8
C1
30 pF
D6
C2
30 pF
H¨¬nh 1.5 M?ch nguy¨ºn l¨ª ho¨¤n ch?nh cho ?ng d?ng test PORTB.
Nh? v?y ??n ??y ta ?? ho¨¤n t?t vi?c thi?t k? ph?n c?ng cho ?ng d?ng. Trong ph?n ti?p
theo ta ti?p t?c b¨¤n ??n vi?c vi?t ch??ng tr¨¬nh cho ?ng d?ng tr¨ºn.
1.2. X?y d?ng ch??ng tr¨¬nh xu?t d? li?u ra PORTB vi ?i?u khi?n PIC16F877A
Tr??c ti¨ºn, ?? vi?t ???c ch??ng tr¨¬nh, ta c?n t¨¬m hi?u m?t s? ??c ?i?m v? c?u tr¨²c c?a
vi ?i?u khi?n PIC16F877A v¨¤ c¨² ph¨¢p c?a m?t s? l?nh s? d?ng trong ch??ng tr¨¬nh.
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 7/14
1.2.1 M?t s? ??c ?i?m v? c?u tr¨²c PORTB vi ?i?u khi?n PIC16F877A.
Ta c?n ch¨² ? ??n c¨¢c ?i?m sau:
- PORTB c?a vi ?i?u khi?n PIC16F877A c?ng nh? c¨¢c port ?i?u khi?n kh¨¢c ??u
cho ph¨¦p truy?n nh?n d? li?u theo hai h??ng, c¨® ngh?a l¨¤ ta ???c ph¨¦p ??c
v¨¤ xu?t d? li?u ra port ?i?u khi?n. H??ng truy?n nh?n ???c thi?t l?p b?ng
c¨¢ch ??a gi¨¢ tr? th¨ªch h?p v¨¤o thanh ghi TRISB. M?i bit trong thanh ghi ?i?u
khi?n h??ng xu?t/nh?p cho m?t ch?n c?a port (bit 7 c?a thanh ghi TRISB
?i?u khi?n ch?n RB7, bit 6 c?a thanh ghi TRISB ?i?u khi?n ch?n RB6, ... ). N?u
m?t bit trong thanh ghi TRISB mang m?c logic 0 th¨¬ vi ?i?u khi?n s? hi?u
r?ng ch?n ?i?u khi?n b?i bit ?¨® l¨¤ ch?n xu?t d? li?u v¨¤ ng??c l?i, n?u m?t bit
trong thanh ghi TRISB mang m?c logic 1 th¨¬ vi ?i?u khi?n s? hi?u r?ng ch?n
?i?u khi?n b?i bit ?¨® l¨¤ ch?n nh?p d? li?u. V¨ª d?, ta mu?n thi?t l?p ch?n
RB3, RB2, RB1, RB0 c?a PORTB l¨¤ nh?p, ch?n PB7, RB6, RB5, RB4 c?a
PORTB l¨¤ xu?t, khi ?¨® gi¨¢ tr? t??ng ?ng ??a v¨¤o thanh ghi TRISB s? l¨¤
¡®00001111¡¯.
- D? li?u nh?p v¨¤o hay xu?t ra PORTB s? ???c ch?a trong thanh ghi PORTB.
V¨ª d?, gi? s? nh? t?t c? c¨¢c ch?n c?a PORTB ??u l¨¤ ch?n xu?t d? li?u, khi ?¨®
mu?n ??a t?t c? c¨¢c ch?n c?a PORTB l¨ºn m?c logic 1, ta ch? vi?c ??a v¨¤o
thanh ghi PORTB gi¨¢ tr? ¡®11111111¡¯. N?u t?t c? c¨¢c ch?n trong PORTB ??u l¨¤
ch?n nh?p d? li?u, mu?n bi?t ???c tr?ng th¨¢i m?c logic c?a t?ng ch?n ta ch?
vi?c ??c gi¨¢ tr? c?a thanh ghi PORTB.
- Trong c?u tr¨²c b? nh? d? li?u c?a PIC16F877A, thanh ghi PORTB n?m ?
BANK 0, c¨°n thanh ghi TRISB n?m ? BANK 1. Ta ?? bi?t mu?n truy xu?t
gi¨¢ tr? c?a m?t thanh ghi n¨¤o ?¨® trong b? nh? d? li?u c?a vi ?i?u khi?n PIC,
tr??c ti¨ºn c?n ch?n BANK d? li?u ch?a thanh ghi ?¨®, v¨¤ vi?c ch?n BANK d?
li?u ???c ?i?u khi?n b?i hai bit RP1:RP0 c?a thanh ghi STATUS. C? th? nh?
sau:
RP1:RP0 = 00 ch?n BANK 0.
RP1:RP0 = 01 ch?n BANK 1.
RP1:RP0 = 10 ch?n BANK 2.
RP1:RP0 = 11 ch?n BANK 3.
C¨¢c ??c ?i?m n¨¤y s? l¨¤ c? s? cho vi?c h¨¬nh th¨¤nh ch??ng tr¨¬nh xu?t d? li?u ra
PORTB c?a vi ?i?u khi?n PIC16F877A.
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 8/14
1.2.2 C¨¢c l?nh s? d?ng cho ch??ng tr¨¬nh
Ph?n n¨¤y s? ?¨¨ c?p ??n c¨¢c l?nh s? d?ng trong ch??ng tr¨¬nh xu?t d? li?u ra PORTB
c?a vi ?i?u khi?n PIC16F877A. Ta c?n s? d?ng c¨¢c l?nh sau:
- L?nh BSF
C¨² ph¨¢p: BSF thanhghi,bit
(tham s? ¡°bit¡± mang gi¨¢ tr? t? 0 ??n 7).
Ch?c n?ng: l?nh n¨¤y d¨´ng ?? ??a bit c¨® s? th? t? ch?a trong tham s? ¡°bit¡±
c?a thanh ghi ch?a trong tham s? ¡°thanhghi¡± l¨ºn m?c logic 1.
V¨ª d?: BSF PORTB,7
(bit 7 c?a thanh ghi PORTB sau l?nh n¨¤y s? mang m?c logic 1).
- L?nh BCF
C¨² ph¨¢p: BCF thanhghi,bit
(tham s? bit mang gi¨¢ tr? t? 0 ??n 7)
Ch?c n?ng: l?nh n¨¤y d¨´ng ?? ??a bit c¨® s? th? t? ch?a trong tham s? ¡°bit¡±
c?a thanh ghi ch?a trong tham s? ¡°thanhghi¡± v? m?c logic 0.
V¨ª d?: BCF PORTB,7
(bit 7 c?a thanh ghi PORTB sau l?nh n¨¤y s? mang m?c logic 0).
- L?nh MOVLW
C¨² ph¨¢p: MOVLW hangso
(tham s? ¡°hangso¡± mang gi¨¢ tr? t? 0 ??n 255)
Ch?c n?ng: ??a gi¨¢ tr? c?a tham s? ¡°hangso¡± v¨¤o thanh ghi W. Ta c¨® m?t s?
??nh d?ng v? tham s? ¡°hangso¡± nh? sau:
??nh ??ng s? hex: th¨ºm k¨ª t? ¡°0x¡± v¨¤o tr??c tham s? ¡°hangso¡±.
V¨ª d?: MOVLW 0x5F
(??a gi¨¢ tr? hex 5F v¨¤o thanh ghi W).
??nh dang s? th?p ph?n: th¨ºm k¨ª t? ¡°d¡± v¨¤o tr??c tham s? ¡°hangso¡±.
V¨ª d?: MOVLW d¡¯15¡¯
(??a gi¨¢ tr? th?p ph?n 15 v¨¤o thanh ghi W).
??nh d?ng s? nh? ph?n: th¨ºm k¨ª t? ¡°b¡± tr??c tham s? ¡°hangso¡±
V¨ª d?: MOVLW b¡¯10101010¡¯
(??a gi¨¢ tr? nh? ph?n 10101010 v¨¤o thanh ghi W).
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 9/14
- L?nh MOVWF
C¨² ph¨¢p: MOVWF thanhghi
T¨¢c d?ng: ??a gi¨¢ tr? ch?a trong thanh ghi W v¨¤o thanh ghi ???c ch? ??nh
b?i tham s? ¡°thanhghi¡±.
V¨ª d?: MOVWF PORTB
(??a gi¨¢ tr? ch?a trong thanh ghi W v¨¤o thanh ghi PORTB).
- L?nh CLRF
C¨² ph¨¢p: CLRF thanhghi
T¨¢c dung: x¨®a thanh ghi ???c ch? ??nh b?i tham s? ¡°thanhghi¡±.
V¨ª d?: CLRF PORTB
(x¨®a thanh ghi PORTB).
- L?nh GOTO
C¨² ph¨¢p: GOTO label
T¨¢c d?ng: nh?y t?i label ???c ch? ??nh b?i tham s? ¡°label¡±.
V¨ª d?: GOTO next
(nh?y t?i label ¡°next¡±).
Ta th?y r?ng trong t?p l?nh c?a vi ?i?u khi?n PIC, kh?ng c¨® l?nh n¨¤o cho ph¨¦p ??a
tr?c ti?p m?t gi¨¢ tr? n¨¤o ?¨® v¨¤o m?t thanh ghi m¨¤ ph?i th?ng qua thanh ghi trung gian
l¨¤ thanh ghi W. V¨ª d?, ta mu?n ??a gi¨¢ tr? b¡¯00000000¡¯ v¨¤o thanh ghi TRISB (thao t¨¢c
n¨¤y c¨® ngh?a l¨¤ thi?t l?p t?t c? c¨¢c ch?n c?a PORTB l¨¤ ch?n xu?t d? li?u), ta c¨® th? d¨´ng
hai l?nh nh? sau:
MOVLW b¡¯00000000¡¯
MOVWF TRISB
T??ng t? ta c¨® th? d¨´ng ¡°c?p l?nh¡± tr¨ºn ?? ??a m?t gi¨¢ tr? 8 bit b?t k¨¬ v¨¤o m?t
thanh ghi b?t k¨¬ trong b? nh? d? li?u.
Tuy nhi¨ºn ??y l¨¤ m?t tr??ng h?p ??c bi?t. Vi?c ??a v¨¤o thanh ghi TRISB gi¨¢ tr?
b¡¯00000000¡¯ c?ng ??ng ngh?a v?i vi?c x¨®a thanh ghi TRISB, do ?¨® ta c¨® th? thay th? hai
l?nh tr¨ºn b?ng m?t l?nh duy nh?t:
CLRF TRISB
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 10/14
??n ??y ta ?? c¨® ???c c¨¢c th?ng tin c?n thi?t cho vi?c vi?t ch??ng tr¨¬nh ?i?u khi?n.
Ch??ng tr¨¬nh c? th? ???c tr¨¬nh b¨¤y ? ph?n ti?p theo.
1.2.3 Ch??ng tr¨¬nh test PORTB vi ?i?u khi?n PIC16F877A.
;-------------------------------------------------------------------------------------------
; Ghi ch¨² v? ch??ng tr¨¬nh
;-------------------------------------------------------------------------------------------
; Ch??ng tr¨¬nh 1.1
; PORTBTEST.ASM
; Ch??ng trinh d¨´ng ?? test PORTB c?a vi ?i?u khi?n PIC16F877A
;--------------------------------------------------------------------------------------------------
; Ph?n khai b¨¢o vi ?i?u khi?n
;-------------------------------------------------------------------------------------------------
processor 16f877a ; khai b¨¢o vi ?i?u khi?n s? d?ng ch??ng
; tr¨¬nh n¨¤y
include <p16f877a.inc> ; header file ?¨ªnh k¨¨m
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON &
_XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
; khai b¨¢o ¡°configuration bit¡±
;-------------------------------------------------------------------------------------------------
; Ch??ng tr¨¬nh b?t ??u t?i ??y
;-------------------------------------------------------------------------------------------------
ORG 0x000 ; ??a ch? b?t ??u ch??ng tr¨¬nh
GOTO start
start
BCF STATUS,RP1
BSF STATUS,RP0 ; ch?n BANK 1
CLRF TRISB ; kh?i t?o PORTB
; PORTB l¨¤ c?ng xu?t d? li?u
BCF STATUS,RP0 ; ch?n BANK 0
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 11/14
MOVLW b¡¯10001111¡¯ ; gi¨¢ tr? c?n xu?t ra PORTB
MOVWF PORTB ; PORTB <- 8Fh
loop
GOTO loop ; v¨°ng l?p v? h?n ?? d?ng ch??ng tr¨¬nh
END ; k?t th¨²c ch??ng tr¨¬nh
1.3. M?t s? nh?n ??nh
Nh? v?y ta ?? ho¨¤n t?t m?t ?ng d?ng d¨¤nh cho PORTB c?a vi ?i?u khi?n
PIC16F877A. B?y gi? h?y ki?m tra k?t qu? th?c hi?n c?a ch??ng tr¨¬nh b?ng c¨¢ch s?
d?ng m?ch test ta v?a thi?t k?. Theo t¨ªnh to¨¢n tr¨ºn l¨ª thuy?t, do ta xu?t ra PORTB gi¨¢ tr?
b¡¯10001111¡¯ n¨ºn c¨¢c LED g?n v¨¤o c¨¢c ch?n RB7, RB3, RB2, RB1, RB0 s? s¨¢ng, c¨°n c¨¢c
LED g?n v¨¤o c¨¢c ch?n RB6, RB5, RB4 s? t?t. C¨°n k?t qu? do vi ?i?u kh??n PIC t?o ra th¨¬
sao? ??y, c¨¢c LED ???c khoanh tr¨°n l¨¤ c¨¢c LED m¨¤ vi ?i?u khi?n PIC16F877A l¨¤m cho
s¨¢ng l¨ºn:
H¨¬nh 1.6 K?t qu? th? thi ch??ng tr¨¬nh 1.1 c?a PIC16F877A.
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 12/14
Ta th?y c¨® m?t ?i?m b?t h?p l¨ª ? ??y. ?¨® l¨¤ LED g?n v¨¤o ch?n RB3 c?a vi ?i?u
khi?n l?i kh?ng s¨¢ng. L¨ª do t?i sao? ?¨® l¨¤ do ch?n RB3 c?a PIC16F877A c¨°n c¨® th¨ºm
m?t ch?c n?ng l¨¤ ch?n n?p ch??ng tr¨¬nh cho vi ?i?u khi?n ? ch? ?? n?p LVP (Low
Voltage Programming). Khi ch? ?? n?p n¨¤y ???c k¨ªch ho?t, ch?n RB3 c?a vi ?i?u khi?n
s? kh?ng ???c ho?t ??ng nh? ch?n I/O b¨¬nh th??ng, cho n¨ºn m?c d¨´ ta c¨® xu?t d? li?u
ra ch?n RB3 th¨¬ vi ?i?u khi?n v?n kh?ng th? hi?n t¨¢c ??ng ?¨® ra ch?n RB3. V?y l¨¤m sao
?? kh?c ph?c? R?t ??n gi?n, ta ch? c?n t?t ch? ?? n?p LVP b?ng c¨¢ch khai b¨¢o ...
&_LVP_OFF .... khi khai b¨¢o c¨¢c ¡°Configuration bits¡± ? ph?n khai b¨¢o vi ?i?u khi?n.
??n ??y h?n c¨¢c b?n ?? hi?u t?i sao ta ph?i thi c?ng m?ch test v¨¤ ki?m tra k?t qu?
th?c thi ch??ng tr¨¬nh c?a vi ?i?u khi?n m?t c¨¢ch tr?c quan, cho d¨´ ch??ng tr¨¬nh ?ng
d?ng c¨® ??n gi?n nh? th? n¨¤o ?i n?a, c¨® nh? v?y ta m?i t¨¬m hi?u s?u h?n ???c c¨¢c
kh¨ªa c?nh, c¨¢c v?n ?? c?a vi ?i?u khi?n, ??ng th?i san b?ng kho?ng c¨¢ch gi?a l¨ª thuy?t
v¨¤ th?c t?.
B?y gi? ta th? kh?ng x¨®a h?t thanh ghi TRISB m¨¤ ??a v¨¤o thanh ghi TRISB m?t gi¨¢
tr? kh¨¢c, ch?ng h?n nh? gi¨¢ tr? b¡¯10000000¡¯. C¨¢c b?n ?? bi?t ph?i l¨¤m th? n¨¤o r?i ch??
Ch?n BANK 1 c?a b? nh? d? li?u v¨¤ s? d?ng ¡°c?p l?nh¡±:
MOVLW b¡¯10000000¡¯
MOVWF TRISB
K?t qu? th?c thi ch??ng tr¨¬nh l¨¤ LED g?n v¨¤o ch?n RB7 c?a PORTB kh?ng s¨¢ng. L¨ª
do nh? sau, ta v?a kh?i t?o ch?n RB7 c?a PORTB l¨¤ ch?n nh?p d? li?u (bit 7 c?a thanh
ghi TRISB mang gi¨¢ tr? logic 1), cho n¨ºn m?c d¨´ ta c¨® xu?t d? li?u ra ch?n RB7 (gi¨¢ tr?
xu?t ra v?n l¨¤ b¡¯10001111¡¯) th¨¬ ch?n ?¨® v?n kh?ng xu?t ???c d? li?u ra b¨ºn ngo¨¤i,
nhi?m v? c?a ch?n RB7 l¨²c n¨¤y ch? l¨¤ nh?p d? li?u t? b¨ºn ngo¨¤i. Nh? v?y t?i m?t th?i
?i?m, m?t ch?n I/O c?a vi ?i?u khi?n ch? c¨® th? th?c hi¨ºn m?t trong hai nhi?m v? xu?t
d? li?u (Output) ho?c nh?n d? li?u (Input) t¨´y theo ch?c n?ng m¨¤ ta kh?i t?o (??a d?
ki?u th¨ªch h?p v¨¤o thanh ghi TRISB).
T??ng t? ta c¨® th? xu?t ra PORTB m?t gi¨¢ tr? kh¨¢c b?ng c¨¢ch thay ??i gi¨¢ tr? ??a
v¨¤o thanh ghi PORTB.
C¨¢c port c¨°n l?i c?a vi ?i?u khi?n PIC16F877A c?ng nh? c¨¢c vi ?i?u khi?n PIC kh¨¢c
??u c¨® c?u tr¨²c t??ng t?, t?c l¨¤ c¨® thanh ghi TRISx ?? ?i?u khi?n ch?c n?ng (Input hay
Output) v¨¤ thanh ghi PORTx ch?a d? li?u c?a port ?¨®. D?a v¨¤o ??c ?i?m n¨¤y ta c¨® th?
vi?t ch??ng tr¨¬nh ?i?u khi?n c¨¢c port c¨°n l?i c?a PIC16F877A xu?t d? li?u ra b¨ºn ngo¨¤i
theo c?u tr¨²c nh? ch??ng tr¨¬nh 1.1. ??y l¨¤ thao t¨¢c n¨ºn th?c hi?n ?? ki?m tra l?i c¨¢c
??c t¨ªnh c?a t?ng port trong vi ?i?u khi?n PIC16F877A, ??ng th?i gi¨²p c¨¢c b?n l¨¤m
quen v?i c?u tr¨²c ch??ng tr¨¬nh c?ng nh? c¨¢ch vi?t ch??ng tr¨¬nh d¨´ng cho vi ?i?u khi?n
PIC.
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 13/14
Sau ??y l¨¤ m?t v¨¤i ??c ?i?m v? c¨¢c port c?a vi ?i?u khi?n PIC16F877A m¨¤ c¨¢c b?n
n¨ºn ch¨² ?:
- Ch?n RA4 c?a PORTA l¨¤ ch?n c¨® c?c thu ?? h?, cho n¨ºn khi test PORTA, ta
c?n g?n th¨ºm ?i?n tr? k¨¦o l¨ºn cho ch?n n¨¤y ?? ??m b?o k?t qu? hi?n th? ra
LED.
- PORTA v¨¤ PORTE m?c ??nh khi kh?i ??ng l¨¤ c¨¢c ch?n I/O c?a t¨ªn hi?u
analog, cho n¨ºn tr??c khi mu?n s? d?ng c¨¢c ch?n n¨¤y nh? c¨¢c ch?n I/O b¨¬nh
th??ng ta c?n ti?n h¨¤nh th¨ºm m?t b??c kh?i t?o n?a. Tuy nhi¨ºn trong b¨¤i
??u ti¨ºn ta ch? xu?t d? li?u ra LED n¨ºn ch?a c?n quan t?m ??n b??c kh?i t?o
n¨¤y (k?t qu? hi?n th? v?n kh?ng c¨® g¨¬ kh¨¢c bi?t so v?i t¨ªnh to¨¢n tr¨ºn l¨ª thuy?t),
ta s? b¨¤n k? ??n c¨¢c b??c kh?i t?o v¨¤ ??c t¨ªnh analog c?a c¨¢c ch?n trong
PORTA v¨¤ PORTE trong c¨¢c b¨¤i sau.
- C¨¢c ch?n trong PORTB, PORTC, PORTD c?ng c¨® c¨¢c ch?c n?ng kh¨¢c ngo¨¤i
ch?c n?ng I/O, tuy nhi¨ºn khi kh?i ??ng c¨¢c ch?n n¨¤y ???c m?c ??nh l¨¤ c¨¢c
ch?n I/O b¨¬nh th??ng n¨ºn trong qu¨¢ tr¨¬nh test port ta kh?ng c¨°n tr? ng?i g¨¬
n?a.
??y l¨¤ b¨¤i ??u ti¨ºn ??n gi?n nh?t nh?ng h?n c¨¢c b?n c?ng ?? nh?n th?y r?ng c¨® r?t
nhi¨ºu th?ng tin c?n ???c x? l¨ª ??n n?i ??n ch?n m?t c¨¢ch th?c t? v¨¤ v?i s? nghi¨ºm t¨²c
c?n thi?t. Vi?c th?c hi?n th¨¤nh c?ng ?ng d?ng ??n gi?n nh?ng c?ng r?t quan tr?ng n¨¤y
c¨® th? xem l¨¤ m?t ¡°b??c ngo?c¡± trong qu¨¢ tr¨¬nh b?n l¨¤m quen v?i vi ?i?u khi?n
PIC16F877A n¨®i ri¨ºng v¨¤ h? vi ?i?u khi?n PIC n¨®i chung.
B¨ºn c?nh ?¨® c¨¢c b?n c?ng n¨ºn l¨¤m quen d?n v?i c¨¢ch ghi ch¨² ch??ng tr¨¬nh, c?ng
vi?c n¨¤y c¨® v? th?a th?i nh?ng t¨¢c d?ng m¨¤ n¨® mang l?i l¨¤ r?t t¨ªch c?c. Th? nh?t, ta c¨®
th? d?n ??nh h??ng cho m¨¬nh m?t c?u tr¨²c ch??ng tr¨¬nh vi?t cho vi ?i?u khi?n PIC.
Th? hai, b?n c¨® th? bi?t ???c m¨¬nh v?a ra l?nh cho vi ?i?u khi?n PIC th?c hi?n c?ng
vi?c g¨¬ v?i l?nh m¨¬nh v?a vi?t ra. Th? ba, ng??i kh¨¢c khi d?c ch??ng tr¨¬nh c?a b?n
c?ng c?m th?y th?n thi?n v¨¤ d? hi?u h?n.
?ng d?ng n¨¤y ph?i ???c th?c hi?n th¨¤nh c?ng tr??c khi ta x?y d?ng c¨¢c ?ng d?ng
kh¨¢c ph?c t?p h?n. ??y c?ng l¨¤ m?c ?¨ªch x?y d?ng c?a lo?t b¨¤i ¡°PIC16F877A t? d? t?i
kh¨®¡±, ta s? b?t ??u t? ?ng d?ng ??n gi?n nh?t n¨¤y, v¨¤ l?y n¨® l¨¤m c? s? ?? x?y d?ng c¨¢c
?ng d?ng ng¨¤y c¨¤ng ph?c t?p h?n. Hy v?ng c¨¢c b?n c¨® th? bi?t ???c th¨ºm m?t s?
th?ng tin n¨¤o ?¨® v? vi ?i?u khi?n PIC16F877A sau b¨¤i ??u ti¨ºn n¨¤y.
H?t b¨¤i 1!
Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03
Ng¨¤y: 7/12/2005 Trang: 14/14

More Related Content

Tutorial 877 a_tudedenkho

  • 1. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 1/14 Tutorial 01.03 G?i ??n: ?o¨¤n Hi?p, Do?n Minh ??ng, picvietnam@googlegroups.com N?i dung: B?I 1: PIC16F877A T? D? T?I KH? MICROSOFT WORD T¨®m t?t: Tutorial post l¨ºn lu?ng ¡°PIC16F877A T? D? T?I KH?¡± thu?c chuy¨ºn m?c ¡°C? B?N V? VI ?I?U KHI?N V? PIC¡±. B¨¤i ??u ti¨ºn bao g?m n?i dung sau: ?ng d?ng ??n gi?n nh?t d¨¤nh cho vi ?i?u khi?n PIC16F877A, ?¨® l¨¤ xu?t d? li?u ra m?t port n¨¤o ?¨® c?a vi ?i?u khi?n. C¨¢c b??c ti?n h¨¤nh bao g?m: _ B??c 1: X?y d?ng m?ch test. _ B??c 2: X?y d?ng ch??ng tr¨¬nh. _ B??c 3: Nh?n x¨¦t v¨¤ k?t lu?n. M?t s? ??c ?i?m v? c¨¢c port ?i?u khi?n c?a vi ?i?u khi?n PIC16F877A. Ch??ng tr¨¬nh v¨¤ s? ?? nguy¨ºn l¨ª m?ch test ?i k¨¨m. 1. ?i?u khi?n c¨¢c port I/O ??y l¨¤ m?t trong nh?ng ?ng d?ng ??n gi?n nh?t gi¨²p ta l¨¤m quen v?i vi ?i?u khi?n. Trong ?ng d?ng n¨¤y ta s? xu?t m?t gi¨¢ tr? n¨¤o ?¨® ra m?t PORT c?a vi ?i?u khi?n, ch?ng h?n nh? PORTB. Gi¨¢ tr? ??a ra PORTB s? ???c ki?m tra b?ng c¨¢ch g?n c¨¢c LED v¨¤o c¨¢c ch?n I/O c?a PORT ?¨®. 1.1. X?y d?ng m?ch test cho ?ng d?ng Tr??c ti¨ºn ta c¨´ng x?y d?ng m?ch test cho ?ng d?ng n¨¤y. Ngo?i tr? vi ?i?u khi?n PIC16F877A, c¨¢c th¨¤nh ph?n c¨°n l?i trong m?ch ??u r?t th?ng d?ng v¨¤ d? d¨¤ng t¨¬m th?y tr¨ºn th? tr??ng, do ?¨® h?y thi c?ng m?ch test n¨¤y ?? ta c¨® th? xem x¨¦t c¨¢c hi?u ?ng c? th? c?a vi ?i?u khi?n m?t c¨¢ch tr?c quan v¨¤ nghi¨ºm t¨²c, v¨¬ sau b¨¤i n¨¤y, c¨¢c b?n s? th?y r?ng ta kh?ng th? ng?i m?t ch? ??c s¨¢ch hay t¨¤i li?u m¨¤ c¨® th? l??ng tr??c ???c h?t nh?ng hi?u ?ng m¨¤ vi ?i?u khi?n t?o ra, th?m ch¨ª l¨¤ c¨¢c hi?u ?ng t? ?ng d?ng ??n gi?n nh?t n¨¤y. Do ??y l¨¤ b¨¤i ??u ti¨ºn, cho n¨ºn c¨¢c b??c ti?n h¨¤nh s? r?t nghi¨ºm t¨²c v¨¤ th?n tr?ng. N¨¤o, b?t ??u!
  • 2. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 2/14 Ta c¨® vi ?i?u khi?n PIC16F877A v?i s? ?? ch?n nh? sau: PIC16F877A 8 9 10 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 13 2 3 4 5 6 7 33 34 35 36 37 38 39 40 11 32 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 GND OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 GND MCLR/VPP OSC1/CLKIN RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RBO/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD VDD VDD H¨¬nh 1.1 Vi ?i?u khi?n PIC16F877A. B?y gi? ta h?y c?p ngu?n cho vi ?i?u khi?n h?at ??ng, v¨¤ c?u h?i ??t ra l¨¤ c?p ngu?n nh? th? n¨¤o? T?t nhi¨ºn, ngu?n cung c?p s? l¨¤ ngu?n 5V, v?n ?? ? ??y l¨¤, vi ?i?u khi?n PIC16F877A c¨® ??n hai ch?n c?p ngu?n VCC v¨¤ hai ch?n GND. C¨¢c b?n c¨® c?m th?y b?i r?i v¨¤ th?c m?c l¨¤ t?i sao l?i c¨® ??n 4 ch?n c?p ngu?n nh? v?y kh?ng? V¨¤ sau ??y l¨¤ c?u tr? l?i, ta ph?i c?p ngu?n v¨¤o t?t c? c¨¢c ch?n ngu?n tr¨ºn, nh? v?y th¨¬ vi ?i?u khi?n m?i ho?t ??ng ???c. V¨¤ m?ch nguy¨ºn l¨ª sau khi c?p ngu?n nh? sau:
  • 3. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 3/14 HI PIC16F877A 8 9 10 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 13 2 3 4 5 6 7 33 34 35 36 37 38 39 40 11 32 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 GND OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 GND MCLR/VPP OSC1/CLKIN RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RBO/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD VDD VDD 0 0 HI H¨¬nh 1.2 Vi ?i?u khi?n PIC16F877A sau khi c?p ngu?n. Ti?p theo, ngo¨¤i ngu?n cung c?p, ta c?n ph?i cung c?p xung ho?t ??ng cho vi ?i?u khi?n. PIC16F877A v¨¤ c¨¢c vi ?i?u khi?n n¨®i chung cho ph¨¦p nhi?u c¨¢ch cung c?p xung ho?t ??ng kh¨¢c nhau. ? ??y ta s? d¨´ng th?ch anh l¨¤m ngu?n xung, v¨¤ c?ng vi?c c?a ta l¨¤ g?n th?ch anh v¨¤o hai ch?n 13 v¨¤ 14 c?a vi ?i?u khi?n. Tuy nhi¨ºn c¨¢c b?n c?ng bi?t r?ng, c¨¢c xung dao ??ng do th?ch anh t?o ra c?ng kh?ng th?c s? ?n ??nh m?t c¨¢ch tuy?t ??i, v¨¤ c¨¢ch kh?c ph?c l¨¤ g?n th¨ºm c¨¢c t? l?c v¨¤o th?ch anh. Nh? v?y, c?n ph?i g?n c¨¢c t? nh? th? n¨¤o v¨¤ gi¨¢ tr? bao nhi¨ºu? C?u tr? l?i n?m trong c¨¢i datasheet. C¨¢c b?n l?t c¨¢i datasheet PIC16F87xA do Microchip cung c?p ra. Trang 145, h¨¬nh 4.1 h??ng d?n c¨¢ch g?n c¨¢c t? C1, C2 v¨¤o th?ch anh, v¨¤ trang 146, b?ng 14-2 h??ng d?n c¨¢ch ch?n gi¨¢ tr? cho t?. ? ??y la d¨´ng th?ch anh 4 MHz n¨ºn t? C1 v¨¤ C2 s? c¨® gi¨¢ tr? 15 pF. M?t ?i?m ?¨¢ng ch¨² ? n?a l¨¤ ch?t l??ng th?ch anh t?i th? tr??ng Vi?t Nam kh?ng th?c s? t?t, cho n¨ºn ?? t?ng s? ?n ??nh, ta s? d¨´ng t? 30 pF. Xong! V¨¤ sau ??y l¨¤ m?ch nguy¨ºn l¨ª sau khi g?n th¨ºm th?ch anh:
  • 4. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 4/14 HI PIC16F877A 8 9 10 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 13 2 3 4 5 6 7 33 34 35 36 37 38 39 40 11 32 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 GND OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 GND MCLR/VPP OSC1/CLKIN RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RBO/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD VDD VDD C1 30 pF 0 4 MHz 0 HI 0 C2 30 pF H¨¬nh 1.3 PIC16F877A sau khi c?p ngu?n v¨¤ th¨ºm th?ch anh. B?y gi? l¨¤ m?ch reset cho vi ?i?u khi?n s? d?ng ch? ?? reset t? ch?n MCLR c?a vi ?i?u khi?n (ch?n s? 1). Ta ?? bi?t vi ?i?u khi?n s? ???c reset khi ch?n MCLR chuy?n t? m?c logic 1 xu?ng m?c logic 0 v¨¤ ta s? d?ng m?t c?ng t?c c? kh¨ª ?? th?c hi?n vi¨ºc chuy?n ??i ?¨®, nh? v?y ta m?i c¨® th? t¨¢c ??ng cho vi ?i?u khi?n reset b?ng tay. L?i m?t c?u h?i n?a, ph?i thi?t k? m?ch nh? th? n¨¤o ?? th?c hi?n ???c c?ng vi?c ?¨®? D? th?i, ta c¨® th? thi?t k? nh? h¨¬nh 1.4. B¨¬nh th??ng c?ng t?c h?, ch?n MCLR c?a vi ?i?u khi?n mang m?c logic 1 (v¨¬ ???c n?i v?i ngu?n qua ?i?n tr? h?n d¨°ng R1). ?i?n tr? R1 ph?i c¨® gi¨¢ tr? nh? h?n 40K ?? b?o ??m ?i?n ¨¢p cung c?p cho vi ?i?u khi?n. Khi ?n c?ng t?c, ch?n MCLR ???c n?i v?i GND n¨ºn mang m?c logic 0, khi ?¨® vi ?i?u khi?n s? ???c reset.
  • 5. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 5/14 4 MHz HI R1 0 HI SW1 12 0 0 0 HI PIC16F877A 8 9 10 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 13 2 3 4 5 6 7 33 34 35 36 37 38 39 40 11 32 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 GND OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 GND MCLR/VPP OSC1/CLKIN RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RBO/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD VDD VDD C1 30 pF C2 30 pF H¨¬nh 1.4 PIC16F877A sau khi ti?p t?c th¨ºm v¨¤o m?ch seset. ??n ??y xem nh? ta ?? ho¨¤n th¨¤nh nh?ng th¨¤nh ph?n c? b?n nh?t cho m?t m?ch test d¨¤nh cho vi ?i?u khi?n PIC16F877A. Ta ti?p t?c ph¨¢t tri?n c¨¢c th¨¤nh ph?n ti?p theo ?? test c¨¢c port c?a vi ?i?u khi?n. PORTB c?a vi ?i?u khi?n s? ???c test ??u ti¨ºn. M?c ?¨ªch c?a m?ch test l¨¤ ki?m tra xem c¨¢c gi¨¢ tr? ta xu?t ra port b?ng ch??ng tr¨¬nh c¨® ?¨²ng hay kh?ng, v¨¤ ?? ph¨¢t hi?n ???c c¨¢c gi¨¢ tr? ?¨® m?t c¨¢ch tr?c quan, ta s? d?ng 8 LED g?n v¨¤o 8 ch?n trong PORTB c?a vi ?i?u khi?n. Khi ta xu?t gi¨¢ tr? mang m?c logic 1 ra m?t ch?n n¨¤o ?¨® trong PORTB c?a vi ?i?u khi?n, LED t??ng ?ng g?n v?i ch?n ?¨® s? s¨¢ng l¨ºn (do l¨²c n¨¤y ?i?n ¨¢p ? ch?n c?a vi ?i?u khi?n l¨¤ 5V) v¨¤ ng??c l?i, n?u gi¨¢ tr? xu?t ra mang m?c logic 0 th¨¬ LED s? kh?ng s¨¢ng (do l¨²c n¨¤y ?i?n ¨¢p ? ch?n c?a vi ?i?u khi?n l¨¤ 0V). Tuy nhi¨ºn, ta c?n ch¨² ? ??n m?t ?i?m quan tr?ng n?a, ?¨® l¨¤ ?? LED s¨¢ng b¨¬nh th??ng, ?i?n ¨¢p ??t v¨¤o hai ??u c?a LED v¨¤o kho?ng 1,8V ??n 2,2V, trong khi ?i?n ¨¢p t?i ch?n I/O c?a vi ?i?u khi?n khi ta xu?t ra m?c logic 1 s?
  • 6. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 6/14 l¨¤ 5V. Do ?¨® c?n m?c th¨ºm ?i?n tr? h?n d¨°ng cho LED (c¨® th? d¨´ng ?i?n tr? c¨® gi¨¢ tr? 0.33 K). D?a v¨¤o c¨¢c ?i?m ?? ph?n t¨ªch ? tr¨ºn ta c¨® th? x?y d?ng ???c m?ch nguy¨ºn l¨ª ho¨¤n ch?nh cho ?ng d?ng test PORTB nh? sau: R5 D2 4 MHz HI R6 D7 D5 D4 0 R2 R1 0 R9 D3 HI SW1 12 0 R7 D8 0 D1 0 R3 HI R4 PIC16F877A 8 9 10 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 13 2 3 4 5 6 7 33 34 35 36 37 38 39 40 11 32 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 GND OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 GND MCLR/VPP OSC1/CLKIN RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RBO/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD VDD VDD R8 C1 30 pF D6 C2 30 pF H¨¬nh 1.5 M?ch nguy¨ºn l¨ª ho¨¤n ch?nh cho ?ng d?ng test PORTB. Nh? v?y ??n ??y ta ?? ho¨¤n t?t vi?c thi?t k? ph?n c?ng cho ?ng d?ng. Trong ph?n ti?p theo ta ti?p t?c b¨¤n ??n vi?c vi?t ch??ng tr¨¬nh cho ?ng d?ng tr¨ºn. 1.2. X?y d?ng ch??ng tr¨¬nh xu?t d? li?u ra PORTB vi ?i?u khi?n PIC16F877A Tr??c ti¨ºn, ?? vi?t ???c ch??ng tr¨¬nh, ta c?n t¨¬m hi?u m?t s? ??c ?i?m v? c?u tr¨²c c?a vi ?i?u khi?n PIC16F877A v¨¤ c¨² ph¨¢p c?a m?t s? l?nh s? d?ng trong ch??ng tr¨¬nh.
  • 7. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 7/14 1.2.1 M?t s? ??c ?i?m v? c?u tr¨²c PORTB vi ?i?u khi?n PIC16F877A. Ta c?n ch¨² ? ??n c¨¢c ?i?m sau: - PORTB c?a vi ?i?u khi?n PIC16F877A c?ng nh? c¨¢c port ?i?u khi?n kh¨¢c ??u cho ph¨¦p truy?n nh?n d? li?u theo hai h??ng, c¨® ngh?a l¨¤ ta ???c ph¨¦p ??c v¨¤ xu?t d? li?u ra port ?i?u khi?n. H??ng truy?n nh?n ???c thi?t l?p b?ng c¨¢ch ??a gi¨¢ tr? th¨ªch h?p v¨¤o thanh ghi TRISB. M?i bit trong thanh ghi ?i?u khi?n h??ng xu?t/nh?p cho m?t ch?n c?a port (bit 7 c?a thanh ghi TRISB ?i?u khi?n ch?n RB7, bit 6 c?a thanh ghi TRISB ?i?u khi?n ch?n RB6, ... ). N?u m?t bit trong thanh ghi TRISB mang m?c logic 0 th¨¬ vi ?i?u khi?n s? hi?u r?ng ch?n ?i?u khi?n b?i bit ?¨® l¨¤ ch?n xu?t d? li?u v¨¤ ng??c l?i, n?u m?t bit trong thanh ghi TRISB mang m?c logic 1 th¨¬ vi ?i?u khi?n s? hi?u r?ng ch?n ?i?u khi?n b?i bit ?¨® l¨¤ ch?n nh?p d? li?u. V¨ª d?, ta mu?n thi?t l?p ch?n RB3, RB2, RB1, RB0 c?a PORTB l¨¤ nh?p, ch?n PB7, RB6, RB5, RB4 c?a PORTB l¨¤ xu?t, khi ?¨® gi¨¢ tr? t??ng ?ng ??a v¨¤o thanh ghi TRISB s? l¨¤ ¡®00001111¡¯. - D? li?u nh?p v¨¤o hay xu?t ra PORTB s? ???c ch?a trong thanh ghi PORTB. V¨ª d?, gi? s? nh? t?t c? c¨¢c ch?n c?a PORTB ??u l¨¤ ch?n xu?t d? li?u, khi ?¨® mu?n ??a t?t c? c¨¢c ch?n c?a PORTB l¨ºn m?c logic 1, ta ch? vi?c ??a v¨¤o thanh ghi PORTB gi¨¢ tr? ¡®11111111¡¯. N?u t?t c? c¨¢c ch?n trong PORTB ??u l¨¤ ch?n nh?p d? li?u, mu?n bi?t ???c tr?ng th¨¢i m?c logic c?a t?ng ch?n ta ch? vi?c ??c gi¨¢ tr? c?a thanh ghi PORTB. - Trong c?u tr¨²c b? nh? d? li?u c?a PIC16F877A, thanh ghi PORTB n?m ? BANK 0, c¨°n thanh ghi TRISB n?m ? BANK 1. Ta ?? bi?t mu?n truy xu?t gi¨¢ tr? c?a m?t thanh ghi n¨¤o ?¨® trong b? nh? d? li?u c?a vi ?i?u khi?n PIC, tr??c ti¨ºn c?n ch?n BANK d? li?u ch?a thanh ghi ?¨®, v¨¤ vi?c ch?n BANK d? li?u ???c ?i?u khi?n b?i hai bit RP1:RP0 c?a thanh ghi STATUS. C? th? nh? sau: RP1:RP0 = 00 ch?n BANK 0. RP1:RP0 = 01 ch?n BANK 1. RP1:RP0 = 10 ch?n BANK 2. RP1:RP0 = 11 ch?n BANK 3. C¨¢c ??c ?i?m n¨¤y s? l¨¤ c? s? cho vi?c h¨¬nh th¨¤nh ch??ng tr¨¬nh xu?t d? li?u ra PORTB c?a vi ?i?u khi?n PIC16F877A.
  • 8. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 8/14 1.2.2 C¨¢c l?nh s? d?ng cho ch??ng tr¨¬nh Ph?n n¨¤y s? ?¨¨ c?p ??n c¨¢c l?nh s? d?ng trong ch??ng tr¨¬nh xu?t d? li?u ra PORTB c?a vi ?i?u khi?n PIC16F877A. Ta c?n s? d?ng c¨¢c l?nh sau: - L?nh BSF C¨² ph¨¢p: BSF thanhghi,bit (tham s? ¡°bit¡± mang gi¨¢ tr? t? 0 ??n 7). Ch?c n?ng: l?nh n¨¤y d¨´ng ?? ??a bit c¨® s? th? t? ch?a trong tham s? ¡°bit¡± c?a thanh ghi ch?a trong tham s? ¡°thanhghi¡± l¨ºn m?c logic 1. V¨ª d?: BSF PORTB,7 (bit 7 c?a thanh ghi PORTB sau l?nh n¨¤y s? mang m?c logic 1). - L?nh BCF C¨² ph¨¢p: BCF thanhghi,bit (tham s? bit mang gi¨¢ tr? t? 0 ??n 7) Ch?c n?ng: l?nh n¨¤y d¨´ng ?? ??a bit c¨® s? th? t? ch?a trong tham s? ¡°bit¡± c?a thanh ghi ch?a trong tham s? ¡°thanhghi¡± v? m?c logic 0. V¨ª d?: BCF PORTB,7 (bit 7 c?a thanh ghi PORTB sau l?nh n¨¤y s? mang m?c logic 0). - L?nh MOVLW C¨² ph¨¢p: MOVLW hangso (tham s? ¡°hangso¡± mang gi¨¢ tr? t? 0 ??n 255) Ch?c n?ng: ??a gi¨¢ tr? c?a tham s? ¡°hangso¡± v¨¤o thanh ghi W. Ta c¨® m?t s? ??nh d?ng v? tham s? ¡°hangso¡± nh? sau: ??nh ??ng s? hex: th¨ºm k¨ª t? ¡°0x¡± v¨¤o tr??c tham s? ¡°hangso¡±. V¨ª d?: MOVLW 0x5F (??a gi¨¢ tr? hex 5F v¨¤o thanh ghi W). ??nh dang s? th?p ph?n: th¨ºm k¨ª t? ¡°d¡± v¨¤o tr??c tham s? ¡°hangso¡±. V¨ª d?: MOVLW d¡¯15¡¯ (??a gi¨¢ tr? th?p ph?n 15 v¨¤o thanh ghi W). ??nh d?ng s? nh? ph?n: th¨ºm k¨ª t? ¡°b¡± tr??c tham s? ¡°hangso¡± V¨ª d?: MOVLW b¡¯10101010¡¯ (??a gi¨¢ tr? nh? ph?n 10101010 v¨¤o thanh ghi W).
  • 9. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 9/14 - L?nh MOVWF C¨² ph¨¢p: MOVWF thanhghi T¨¢c d?ng: ??a gi¨¢ tr? ch?a trong thanh ghi W v¨¤o thanh ghi ???c ch? ??nh b?i tham s? ¡°thanhghi¡±. V¨ª d?: MOVWF PORTB (??a gi¨¢ tr? ch?a trong thanh ghi W v¨¤o thanh ghi PORTB). - L?nh CLRF C¨² ph¨¢p: CLRF thanhghi T¨¢c dung: x¨®a thanh ghi ???c ch? ??nh b?i tham s? ¡°thanhghi¡±. V¨ª d?: CLRF PORTB (x¨®a thanh ghi PORTB). - L?nh GOTO C¨² ph¨¢p: GOTO label T¨¢c d?ng: nh?y t?i label ???c ch? ??nh b?i tham s? ¡°label¡±. V¨ª d?: GOTO next (nh?y t?i label ¡°next¡±). Ta th?y r?ng trong t?p l?nh c?a vi ?i?u khi?n PIC, kh?ng c¨® l?nh n¨¤o cho ph¨¦p ??a tr?c ti?p m?t gi¨¢ tr? n¨¤o ?¨® v¨¤o m?t thanh ghi m¨¤ ph?i th?ng qua thanh ghi trung gian l¨¤ thanh ghi W. V¨ª d?, ta mu?n ??a gi¨¢ tr? b¡¯00000000¡¯ v¨¤o thanh ghi TRISB (thao t¨¢c n¨¤y c¨® ngh?a l¨¤ thi?t l?p t?t c? c¨¢c ch?n c?a PORTB l¨¤ ch?n xu?t d? li?u), ta c¨® th? d¨´ng hai l?nh nh? sau: MOVLW b¡¯00000000¡¯ MOVWF TRISB T??ng t? ta c¨® th? d¨´ng ¡°c?p l?nh¡± tr¨ºn ?? ??a m?t gi¨¢ tr? 8 bit b?t k¨¬ v¨¤o m?t thanh ghi b?t k¨¬ trong b? nh? d? li?u. Tuy nhi¨ºn ??y l¨¤ m?t tr??ng h?p ??c bi?t. Vi?c ??a v¨¤o thanh ghi TRISB gi¨¢ tr? b¡¯00000000¡¯ c?ng ??ng ngh?a v?i vi?c x¨®a thanh ghi TRISB, do ?¨® ta c¨® th? thay th? hai l?nh tr¨ºn b?ng m?t l?nh duy nh?t: CLRF TRISB
  • 10. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 10/14 ??n ??y ta ?? c¨® ???c c¨¢c th?ng tin c?n thi?t cho vi?c vi?t ch??ng tr¨¬nh ?i?u khi?n. Ch??ng tr¨¬nh c? th? ???c tr¨¬nh b¨¤y ? ph?n ti?p theo. 1.2.3 Ch??ng tr¨¬nh test PORTB vi ?i?u khi?n PIC16F877A. ;------------------------------------------------------------------------------------------- ; Ghi ch¨² v? ch??ng tr¨¬nh ;------------------------------------------------------------------------------------------- ; Ch??ng tr¨¬nh 1.1 ; PORTBTEST.ASM ; Ch??ng trinh d¨´ng ?? test PORTB c?a vi ?i?u khi?n PIC16F877A ;-------------------------------------------------------------------------------------------------- ; Ph?n khai b¨¢o vi ?i?u khi?n ;------------------------------------------------------------------------------------------------- processor 16f877a ; khai b¨¢o vi ?i?u khi?n s? d?ng ch??ng ; tr¨¬nh n¨¤y include <p16f877a.inc> ; header file ?¨ªnh k¨¨m __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF ; khai b¨¢o ¡°configuration bit¡± ;------------------------------------------------------------------------------------------------- ; Ch??ng tr¨¬nh b?t ??u t?i ??y ;------------------------------------------------------------------------------------------------- ORG 0x000 ; ??a ch? b?t ??u ch??ng tr¨¬nh GOTO start start BCF STATUS,RP1 BSF STATUS,RP0 ; ch?n BANK 1 CLRF TRISB ; kh?i t?o PORTB ; PORTB l¨¤ c?ng xu?t d? li?u BCF STATUS,RP0 ; ch?n BANK 0
  • 11. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 11/14 MOVLW b¡¯10001111¡¯ ; gi¨¢ tr? c?n xu?t ra PORTB MOVWF PORTB ; PORTB <- 8Fh loop GOTO loop ; v¨°ng l?p v? h?n ?? d?ng ch??ng tr¨¬nh END ; k?t th¨²c ch??ng tr¨¬nh 1.3. M?t s? nh?n ??nh Nh? v?y ta ?? ho¨¤n t?t m?t ?ng d?ng d¨¤nh cho PORTB c?a vi ?i?u khi?n PIC16F877A. B?y gi? h?y ki?m tra k?t qu? th?c hi?n c?a ch??ng tr¨¬nh b?ng c¨¢ch s? d?ng m?ch test ta v?a thi?t k?. Theo t¨ªnh to¨¢n tr¨ºn l¨ª thuy?t, do ta xu?t ra PORTB gi¨¢ tr? b¡¯10001111¡¯ n¨ºn c¨¢c LED g?n v¨¤o c¨¢c ch?n RB7, RB3, RB2, RB1, RB0 s? s¨¢ng, c¨°n c¨¢c LED g?n v¨¤o c¨¢c ch?n RB6, RB5, RB4 s? t?t. C¨°n k?t qu? do vi ?i?u kh??n PIC t?o ra th¨¬ sao? ??y, c¨¢c LED ???c khoanh tr¨°n l¨¤ c¨¢c LED m¨¤ vi ?i?u khi?n PIC16F877A l¨¤m cho s¨¢ng l¨ºn: H¨¬nh 1.6 K?t qu? th? thi ch??ng tr¨¬nh 1.1 c?a PIC16F877A.
  • 12. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 12/14 Ta th?y c¨® m?t ?i?m b?t h?p l¨ª ? ??y. ?¨® l¨¤ LED g?n v¨¤o ch?n RB3 c?a vi ?i?u khi?n l?i kh?ng s¨¢ng. L¨ª do t?i sao? ?¨® l¨¤ do ch?n RB3 c?a PIC16F877A c¨°n c¨® th¨ºm m?t ch?c n?ng l¨¤ ch?n n?p ch??ng tr¨¬nh cho vi ?i?u khi?n ? ch? ?? n?p LVP (Low Voltage Programming). Khi ch? ?? n?p n¨¤y ???c k¨ªch ho?t, ch?n RB3 c?a vi ?i?u khi?n s? kh?ng ???c ho?t ??ng nh? ch?n I/O b¨¬nh th??ng, cho n¨ºn m?c d¨´ ta c¨® xu?t d? li?u ra ch?n RB3 th¨¬ vi ?i?u khi?n v?n kh?ng th? hi?n t¨¢c ??ng ?¨® ra ch?n RB3. V?y l¨¤m sao ?? kh?c ph?c? R?t ??n gi?n, ta ch? c?n t?t ch? ?? n?p LVP b?ng c¨¢ch khai b¨¢o ... &_LVP_OFF .... khi khai b¨¢o c¨¢c ¡°Configuration bits¡± ? ph?n khai b¨¢o vi ?i?u khi?n. ??n ??y h?n c¨¢c b?n ?? hi?u t?i sao ta ph?i thi c?ng m?ch test v¨¤ ki?m tra k?t qu? th?c thi ch??ng tr¨¬nh c?a vi ?i?u khi?n m?t c¨¢ch tr?c quan, cho d¨´ ch??ng tr¨¬nh ?ng d?ng c¨® ??n gi?n nh? th? n¨¤o ?i n?a, c¨® nh? v?y ta m?i t¨¬m hi?u s?u h?n ???c c¨¢c kh¨ªa c?nh, c¨¢c v?n ?? c?a vi ?i?u khi?n, ??ng th?i san b?ng kho?ng c¨¢ch gi?a l¨ª thuy?t v¨¤ th?c t?. B?y gi? ta th? kh?ng x¨®a h?t thanh ghi TRISB m¨¤ ??a v¨¤o thanh ghi TRISB m?t gi¨¢ tr? kh¨¢c, ch?ng h?n nh? gi¨¢ tr? b¡¯10000000¡¯. C¨¢c b?n ?? bi?t ph?i l¨¤m th? n¨¤o r?i ch?? Ch?n BANK 1 c?a b? nh? d? li?u v¨¤ s? d?ng ¡°c?p l?nh¡±: MOVLW b¡¯10000000¡¯ MOVWF TRISB K?t qu? th?c thi ch??ng tr¨¬nh l¨¤ LED g?n v¨¤o ch?n RB7 c?a PORTB kh?ng s¨¢ng. L¨ª do nh? sau, ta v?a kh?i t?o ch?n RB7 c?a PORTB l¨¤ ch?n nh?p d? li?u (bit 7 c?a thanh ghi TRISB mang gi¨¢ tr? logic 1), cho n¨ºn m?c d¨´ ta c¨® xu?t d? li?u ra ch?n RB7 (gi¨¢ tr? xu?t ra v?n l¨¤ b¡¯10001111¡¯) th¨¬ ch?n ?¨® v?n kh?ng xu?t ???c d? li?u ra b¨ºn ngo¨¤i, nhi?m v? c?a ch?n RB7 l¨²c n¨¤y ch? l¨¤ nh?p d? li?u t? b¨ºn ngo¨¤i. Nh? v?y t?i m?t th?i ?i?m, m?t ch?n I/O c?a vi ?i?u khi?n ch? c¨® th? th?c hi¨ºn m?t trong hai nhi?m v? xu?t d? li?u (Output) ho?c nh?n d? li?u (Input) t¨´y theo ch?c n?ng m¨¤ ta kh?i t?o (??a d? ki?u th¨ªch h?p v¨¤o thanh ghi TRISB). T??ng t? ta c¨® th? xu?t ra PORTB m?t gi¨¢ tr? kh¨¢c b?ng c¨¢ch thay ??i gi¨¢ tr? ??a v¨¤o thanh ghi PORTB. C¨¢c port c¨°n l?i c?a vi ?i?u khi?n PIC16F877A c?ng nh? c¨¢c vi ?i?u khi?n PIC kh¨¢c ??u c¨® c?u tr¨²c t??ng t?, t?c l¨¤ c¨® thanh ghi TRISx ?? ?i?u khi?n ch?c n?ng (Input hay Output) v¨¤ thanh ghi PORTx ch?a d? li?u c?a port ?¨®. D?a v¨¤o ??c ?i?m n¨¤y ta c¨® th? vi?t ch??ng tr¨¬nh ?i?u khi?n c¨¢c port c¨°n l?i c?a PIC16F877A xu?t d? li?u ra b¨ºn ngo¨¤i theo c?u tr¨²c nh? ch??ng tr¨¬nh 1.1. ??y l¨¤ thao t¨¢c n¨ºn th?c hi?n ?? ki?m tra l?i c¨¢c ??c t¨ªnh c?a t?ng port trong vi ?i?u khi?n PIC16F877A, ??ng th?i gi¨²p c¨¢c b?n l¨¤m quen v?i c?u tr¨²c ch??ng tr¨¬nh c?ng nh? c¨¢ch vi?t ch??ng tr¨¬nh d¨´ng cho vi ?i?u khi?n PIC.
  • 13. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 13/14 Sau ??y l¨¤ m?t v¨¤i ??c ?i?m v? c¨¢c port c?a vi ?i?u khi?n PIC16F877A m¨¤ c¨¢c b?n n¨ºn ch¨² ?: - Ch?n RA4 c?a PORTA l¨¤ ch?n c¨® c?c thu ?? h?, cho n¨ºn khi test PORTA, ta c?n g?n th¨ºm ?i?n tr? k¨¦o l¨ºn cho ch?n n¨¤y ?? ??m b?o k?t qu? hi?n th? ra LED. - PORTA v¨¤ PORTE m?c ??nh khi kh?i ??ng l¨¤ c¨¢c ch?n I/O c?a t¨ªn hi?u analog, cho n¨ºn tr??c khi mu?n s? d?ng c¨¢c ch?n n¨¤y nh? c¨¢c ch?n I/O b¨¬nh th??ng ta c?n ti?n h¨¤nh th¨ºm m?t b??c kh?i t?o n?a. Tuy nhi¨ºn trong b¨¤i ??u ti¨ºn ta ch? xu?t d? li?u ra LED n¨ºn ch?a c?n quan t?m ??n b??c kh?i t?o n¨¤y (k?t qu? hi?n th? v?n kh?ng c¨® g¨¬ kh¨¢c bi?t so v?i t¨ªnh to¨¢n tr¨ºn l¨ª thuy?t), ta s? b¨¤n k? ??n c¨¢c b??c kh?i t?o v¨¤ ??c t¨ªnh analog c?a c¨¢c ch?n trong PORTA v¨¤ PORTE trong c¨¢c b¨¤i sau. - C¨¢c ch?n trong PORTB, PORTC, PORTD c?ng c¨® c¨¢c ch?c n?ng kh¨¢c ngo¨¤i ch?c n?ng I/O, tuy nhi¨ºn khi kh?i ??ng c¨¢c ch?n n¨¤y ???c m?c ??nh l¨¤ c¨¢c ch?n I/O b¨¬nh th??ng n¨ºn trong qu¨¢ tr¨¬nh test port ta kh?ng c¨°n tr? ng?i g¨¬ n?a. ??y l¨¤ b¨¤i ??u ti¨ºn ??n gi?n nh?t nh?ng h?n c¨¢c b?n c?ng ?? nh?n th?y r?ng c¨® r?t nhi¨ºu th?ng tin c?n ???c x? l¨ª ??n n?i ??n ch?n m?t c¨¢ch th?c t? v¨¤ v?i s? nghi¨ºm t¨²c c?n thi?t. Vi?c th?c hi?n th¨¤nh c?ng ?ng d?ng ??n gi?n nh?ng c?ng r?t quan tr?ng n¨¤y c¨® th? xem l¨¤ m?t ¡°b??c ngo?c¡± trong qu¨¢ tr¨¬nh b?n l¨¤m quen v?i vi ?i?u khi?n PIC16F877A n¨®i ri¨ºng v¨¤ h? vi ?i?u khi?n PIC n¨®i chung. B¨ºn c?nh ?¨® c¨¢c b?n c?ng n¨ºn l¨¤m quen d?n v?i c¨¢ch ghi ch¨² ch??ng tr¨¬nh, c?ng vi?c n¨¤y c¨® v? th?a th?i nh?ng t¨¢c d?ng m¨¤ n¨® mang l?i l¨¤ r?t t¨ªch c?c. Th? nh?t, ta c¨® th? d?n ??nh h??ng cho m¨¬nh m?t c?u tr¨²c ch??ng tr¨¬nh vi?t cho vi ?i?u khi?n PIC. Th? hai, b?n c¨® th? bi?t ???c m¨¬nh v?a ra l?nh cho vi ?i?u khi?n PIC th?c hi?n c?ng vi?c g¨¬ v?i l?nh m¨¬nh v?a vi?t ra. Th? ba, ng??i kh¨¢c khi d?c ch??ng tr¨¬nh c?a b?n c?ng c?m th?y th?n thi?n v¨¤ d? hi?u h?n. ?ng d?ng n¨¤y ph?i ???c th?c hi?n th¨¤nh c?ng tr??c khi ta x?y d?ng c¨¢c ?ng d?ng kh¨¢c ph?c t?p h?n. ??y c?ng l¨¤ m?c ?¨ªch x?y d?ng c?a lo?t b¨¤i ¡°PIC16F877A t? d? t?i kh¨®¡±, ta s? b?t ??u t? ?ng d?ng ??n gi?n nh?t n¨¤y, v¨¤ l?y n¨® l¨¤m c? s? ?? x?y d?ng c¨¢c ?ng d?ng ng¨¤y c¨¤ng ph?c t?p h?n. Hy v?ng c¨¢c b?n c¨® th? bi?t ???c th¨ºm m?t s? th?ng tin n¨¤o ?¨® v? vi ?i?u khi?n PIC16F877A sau b¨¤i ??u ti¨ºn n¨¤y. H?t b¨¤i 1!
  • 14. Ng??i b¨¢o c¨¢o: Nguy?n Trung Ch¨ªnh T¨¤i li?u: TUT01.03 Ng¨¤y: 7/12/2005 Trang: 14/14