SlideShare una empresa de Scribd logo
1 de 119
Descargar para leer sin conexión
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 1 - www.EmbestDKS.com 04868
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 2 - www.EmbestDKS.com 04868
M C L C
Bài 1: Gi i thi u v vi i u khi n 3
1.1.Tiêu chu n trong l a ch n m t b vi i u khi n 3
1.2.Vi i u khi n và vi x lí 3
1.3.Sơ chân vi i u khi n 8051 3
1.4.M ch 8051 t i thi u 6
1.5.C u trúc sơ kh i c a vi i u khi n 7
1.6.Các thành viên khác c a h 8051 9
1.7.Ram n i và các thanh ghi SFR c a 8051 11
Bài 2.Ngôn ng l p trình cho vi i u khi n (Ph n 1) 12
2.1.C u trúc m t chương trình 12
2.2.Các lo i bi n trong C 13
2.3.Hàm trong C 15
2.4.Toán t cơ b n 15
2.5.C u trúc l nh r nhánh 15
2.6.B ti n x lý 16
Bài 2.Hư ng d n s d ng keil C (Ph n 2) 17
2.1.Kh i t o project 17
2.2.So n th o chương trình 36
2.3.D ch chương trình 41
2.4.Mô ph ng 45
Bài 3. i u khi n O(out) v i Led ơn 50
3.1.L p m ch 50
3.2.Nguyên lý ho t ng 51
3.3.L p trình 52
3.4.N p chương trình 60
3.5.K t qu 61
3.6. i u khi n Led t ng chi c 1 62
3.7. i u khi n Out 62
Bài 4. i u khi n led 7 thanh 67
4.1.L p m ch 67
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 3 - www.EmbestDKS.com 04868
4.2.Nguyên lý ho t ng 68
4.3.L p trình 69
4.4.N p chíp 75
4.5.K t qu 75
Bài 5. c bàn phím 78
5.1.L p m ch 78
5.2.Nguyên lý quét phím 79
5.3.L p trình 79
Bài 6. i u khi n LCD 16x2 94
6.1.L p m ch 94
6.2.Nguyên lý ho t ng c a LCD 97
6.3.L p trình 97
6.3.1. nh nghĩa con tr 99
6.3.2.Cách s d ng 99
Bài7. i u ch r ng xung 100
7.1.L p m ch theo sơ 101
7.2.Nguyên lý ho t ng 110
Bài 8.Led ma tr n 114
8.1.L p m ch 114
8.2.Nguyên lý ho t ng 116
8.2.Code 117
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 4 - www.EmbestDKS.com 04868
Chú ý : ây hoàn toàn là ph n lí thuy t, mình ã rút g n t i a, do ó các b n nên c
h t. Chưa nên th c hành v i vì tôi s hư ng dân sau.
1.1 Tiêu chu n trong l a ch n m t b vi i u khi n
Là kh năng s n sàng áp ng v s lư ng trong hi n t i và tương lai. i v i m t s
nhà thi t k i u này là quan trong hơn c . Hi n nay, các b vi i u khi n 8 bit ng
u là h 8051 có s lương l n nh t các nhà cung c p a d ng (nhi u ngu n). Nhà
cung c p có nghĩa là nhà s n xu t bên c nh nhà sáng ch c a b vi i u khi n. Trong
trư ng h p 8051 thì nhà sáng ch c a nó là Intel, nhưng hi n nay có r t nhi u hãng
s n xu t nó (cũng như trư c kia ã s n xu t).
Các hãng này bao g m: Intel, Atmel, Philips/signe-tics, AMD, Siemens, Matra
và Dallas, Semicndictior.
B ng a ch c a m t s hãng s n xu t các thành viên c a h 8051.
Hãng a ch Website
Intel
Antel
Plips/ Signetis
Siemens
Dallas Semiconductor
www.intel.com/design/mcs51
www.atmel.com
www.semiconductors.philips.com
www.sci.siemens.com
www.dalsemi.com
8051 là m t b x lý 8 bit có nghĩa là CPU ch có th làm vi c v i 8 bit d
li u t i m t th i i m. D li u l n hơn 8 bit ư c chia ra thành các d li u 8 bit
cho x lý. 8051 có t t c 4 c ng vào - ra I/O m i c ng r ng 8 bit. Các nhà s n xu t ã
cho xu t xư ng ch v i 4K byte ROM trên chíp.
B ng các c tính c a 8051 u tiên.
c tính S lư ng
ROM trên chíp
RAM
B nh th i
Các chân vào - ra
C ng n i ti p
Ngu n ng t
4K byte
128 byte
2
32
1
6
1.2.Vi i u khi n và vi x lí:
Xin nh c n cái máy tính c a b n, con chíp Intel hay ADM c a b n là 1 b vi x lí,
nó không có RAM, ROM,c ng IO và các thi t b ngo i vi on Chip. Còn vi i u khi n
ch a 1 b vi x lí và RAM,ROM, c ng IO, và có th có các thi t b ngo i vi.
1.3. Sơ chân vi i u khi n 8051:
Là IC óng v d ng DIP có 40 chân, m i chân có m t kí hi u tên và có các ch c năng
như sau:
Chân 40: n i v i ngu n nuôI +5V.
Chân 20: n i v i t(Mass, GND).
Chân 29 (PSEN)(program store enable) là tín hi u i u khi n xu t ra c a 8051, nó
cho phép ch n b nh ngoài và ư c n i chung v i chân c a OE (Outout Enable) c a
EPROM ngoài cho phép c các byte c a chương trình. Các xung tín hi u PSEN
h th p trong su t th i gian thi hành l nh. Nh ng mã nh phân c a chương trình ư c
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 5 - www.EmbestDKS.com 04868
c t EPROM i qua bus d li u và ư c ch t vào thanh ghi l nh c a 8051 b i mã
l nh.(chú ý vi c c ây là c các l nh (khác v i c d li u), khi ó VXL ch c
các bit opcode c a l nh và ưa chúng vào hàng i l nh thông qua các Bus a ch và
d li u)
Chân 30 (ALE : Adress Latch Enable) là tín hi u i u khi n xu t ra c a 8051, nó cho
phép phân kênh bus a ch và bus d li u c a Port 0.
Chân 31 (EA : Eternal Acess) ư c ưa xu ng th p cho phép ch n b nh mã ngoàI
i v i 8051.
i v i 8051 thì : EA = 5V : Ch n ROM n i. EA = 0V : Ch n ROM ngo i.
32 chân còn l i chia làm 4 c ng vào ra:
Vào ra t c là có th dùng chân ó c m c logic (0;1 tương ng v i 0V ; 5V)vào
hay xu t m c logic ra(0;1)
P0 t chân 39 32 tương ng là các chân P0_0 P0_7
P1 t chân 1 8 tương ng là các chân P1_0 P1_7
P2 t chân 21 28 tương ng là các chân P2_0 P2_7
P3 t chân 10 17 tương ng là các chân P3_0 P3_7
Riêng c ng 3 có 2 ch c năng m i chân như trên hình v :
P3.0 – RxD : chân nh n d li u n i ti p khi giao ti p RS232(C ng COM ).
P3.1 _ TxD : phân truy n d li u n i ti p khi giao ti p RS232.
P3.2 _ INTO : interrupt 0 , ng t ngoài 0.
P3.3 _ INT1: interrupt 1, ng t ngoài 1.
P3.4 _T0 : Timer0 , u vào timer0.
P3.5_T1 : Timer1, u vào timer 1.
P3.6_ WR: Write, i u khi n ghi d li u.
P3.7 _RD: Read , i u khi n c d li u.
Chân 18, 19 n i v i th ch anh t o thành m ch t o dao ng cho V K
P0 P1 P2 P3 Port's Bit
P0.0 P1.0 P2.0 P3.0 D0
P0.1 P1.1 P2.1 P3.1 D1
P0.2 P1.2 P2.2 P3.2 D2
P0.3 P1.3 P2.3 P3.3 D3
P0.4 P1.4 P2.4 P3.4 D4
P0.5 P1.5 P2.5 P3.5 D5
P0.6 P1.6 P2.6 P3.6 D6
P0.7 P1.7 P2.7 P3.7 D7
U1
AT89C51
31
19
18
9
12
13
14
15
1
2
3
4
5
6
7
8
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
17
16
29
3011
10
40
20
EA/VP
X1
X2
RESET
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
RD
WR
PSEN
ALE/PTXD
RXD
VCC
VSS
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 6 - www.EmbestDKS.com 04868
T n s th ch anh thư ng dùng trong các ng d ng là : 11.0592Mhz(giao ti p v i c ng
com máy tính) và 12Mhz T n s t i a 24Mhz. T n s càng l n V K x lí càng
nhanh.
Dao ng c a th ch anh
S1 S2 S3 S4 S5
S6
P1 P2
Riêng c ng 3 có thêm ch c năng như dư i ây
P3.0 – RxD : chân nh n d li u n i ti p khi giao ti p RS232(C ng COM ).
P3.1 _ TxD : ph n truy n d li u n i ti p khi giao ti p RS232.
P3.2 _ INTO : interrupt 0 , ng t ngoài 0.
P3.3 _ INT1: interrupt 1, ng t ngoài 1.
P3.4 _T0 : Timer0 , u vào timer0.
P3.5_T1 : Timer1, u vào timer 1.
P3.6_ WR: Write, i u khi n ghi d li u.
P3.7 _RD: Read , i u khi n c d li u.
Chân 18, 19 n i v i th ch anh t o thành m ch t o dao ng cho V K
T n s th ch anh thư ng ư c dùng trong các ng d ng là : 11.0592Mhz(giao ti p
v i c ng com máy tính) và 12Mhz
T n s t i a 24Mhz. T n s càng l n V K x lý càng nhanh.
U3
8051
31
19
18
9
39
38
37
36
35
34
33
32
20
40
EA/VP
X1
X2
RESET
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
GND
VCC
R1
10K
5VDC
C1
33p
+ C3
10uF/25V
C2
33p
R7
R4
10Kx9
R9
12Mhz
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 7 - www.EmbestDKS.com 04868
M ch này chưa có kh i ngu n t o ngu n 5V các b n dùng con IC sau:
Sơ chân:
Gi i thi u IC n áp 7805 : u vào > 7V u ra 5V 500mA. M ch n áp: c n cho
V K vì n u ngu n cho V K không n nh thì s treo V K, không ch y úng, ho c
reset liên t c, th m chí là ch t chíp.
M ch ngu n
U1
LM7805/TO
1
2
3
VIN
GND
VOUT
+ C3
10uF/25V
12VDC In
C2
104
5VDC Out
C1
104
1.4. M ch vi i u khi n cơ b n
12Mhz
U1
8051
19
18
9
40
20 X1
X2
RESET
VCC
VSS
+ C3
10uF/25V
5VDC
R1
10K
C2
33p
C1
33p
U6
LM7805/TO
1 3
2
VIN VOUT
GND
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 8 - www.EmbestDKS.com 04868
1.5. C u trúc vi i u khi n 89c51
Chú ý:Sơ kh i bên trong con 8051 có nh ng tài nguy n . Interrupt, Ram, Timer,
Serial prort.
1.6.Các thành viên khác c a h 8051:
Có hai b vi i u khi n thành viên khác c a h 8051 là 8052 và 8031.
B vi i u khi n 8052: 8052 có t t c các c tính chu n c a 8051 ngoài ra nó có
thêm 128 byte RAM và m t b nh th i n a. Hay nói cách khác là 8052 có 256 byte
RAM và 3 b nh th i. Nó cũng có 8K byte ROM. Trên chíp thay vì 4K byte như
8051.
B ng : So sánh các c tính c a các thành viên h 8051.
c tính 8051 8052
ROM trên chip 4K byte 8K byte
RAM 128 byte 256 byte
B nh th i 2 3
C ng n i ti p 1 1
Ngu n ng t 6 8
Do v y t t c m i chương trình vi t cho 8051 u ch y trên 8052 nhưng i u
ngư c l i là không úng. c bi t : M t nhà s n xu t chính c a h 8051 khác n a là
Philips Corporation. Hàng này có m t d i l a ch n d ng l n cho các b vi i u khi n
COUNTER
INPUTS
OS
C
INTERRUP
T
CONTROL
4 I/O
PORTS
BUS
CONTRO
L
SERIAL
PORT
EXTERNAL
INTERRUPTS
CPU
ON -
CHIP
RAM
ETC
TIMER
0
TIMER
1
ADDRESS/DAT
A
TXD RXDP P P P
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 9 - www.EmbestDKS.com 04868
h 8051. Nhi u s n ph m c a hãng ã có kèm theo các c tính như các b chuy n
i ADC, DAC, chân PWM, c ng I/0 m r ng .
Update s n ph m 8051 m i t i các trang web c a các nhà s n xu t a ch ã
có ph n gi i thi u. Ch y u:www.atmel.com
1.7.Ram n i và các thanh ghi
C c thanh ghi SFR
cú a ch n m gi a 80H
và FFH các a ch này
F0 F7 F6 F5 F4 F3 F2 F1 F0
E0 E7 E6 E5 E4 E3 E2 E1 E0
D0 D7 D6 6D 6C 6B 6A 69 68
B8 - - - BC BB BA B9 B8
B0 B7 B6 B5 B4 B3 B2 B1 B0
A8 AF AE AD AC AB AA A9 A8
A0 A7 A6 A5 A4 A3 A2 A1 A0
99 Không nh a ch t ng bít
98 9F 9E 9D 9C 9B 9A 99 98
90 97 96 95 94 93 92 91 90
8D Không nh a ch t ng bít
8C Không nh a ch t ng bít
8B Không nh a ch t ng bít
8A Không nh a ch t ng bít
89 Không nh a ch t ng bít
88 8F 8
E
8D 8C 8B 8A 89 88
87 Không nh a ch t ng bít
83 Không nh a ch t ng bít
82 Không nh a ch t ng bít
81 Không nh a ch t ng bít
80 87 86 8
5
84 83 82 81 80
THANH GHI CH C NĂNG ĂC BIÊT
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 10 - www.EmbestDKS.com 04868
trên 80H, vì các a ch t 00 n 7FH là a ch c a b nh RAM bên trong
8051. Không ph i t t c m i a ch t 80H n FFH u do SFR s d ng, nhưng
v trí ngăn nh t 80H n FFH chưa dùnglà d tr và l p trình viên 8051 cũng
không ư c s d ng.
B ng : ch c năng c a thanh ghi ch c năng c bi t SFR
SFR nh a ch t ng bit( nh ng thanh ghi c n nh i khi l p trình cơ b n C)
Thanh ghi /
Bit
Ký hi u Ch c năng
TMOD Ch n model cho b nh th i 1
7 GATE Bít i u khi n c ng. Khi ư c set lên 1, b nh
th i ch ho t ng trong khi INT1 m c cao
6 C/T Bít ch n ch c năng m ho c nh th i:
1= m s ki n
0= nh th i trong m t kho ng th i gian
5 M1 Bit ch n ch th nh t
4 M0 Bit ch n ch th 2
M1 M0 Châ
®Ð
Chøc n¨ng
0 0 0 Ch nh th i 13 bit
0 1 1 Ch nh th i 16 bit
1 0 2 Ch t ng n p l i 8
bit
1 1 3 Ch nh th i chia x
3 GATE Bit i u khi n c ng cho b nh th i 0
2 C/T Bit ch n ch c năng m / nh th i cho b nh
th i 0
1 M1 Bit ch n ch th nh t cho b nh th i 0
0 M0 Bit ch n ch th 2 cho b nh th i 0
TF1 TR1 TF1 TR0 IE1 IT1 IE0 IT0
Thanh ghi / Bit Ký hi u Ch c năng
TCON i u khi n b inh th i
TCON.7 TF1 C tràn c a b nh th i 1. C này ư c set b i
ph n c ng khi có tràn, ư c xoá b i ph n m m,
ho c b i ph n c ng khi b vi x lý tr n trình
ph c v ng t
TCON.6 TR1 Bit i u khi n ho t ng c a b nh th i 1. Bit
này ư c set ho c xoá b i ph n m m i u
khi n b nh th i ho t ng hay ngưng
TCON.5 TF0 C tràn c a b nh th i 0
TCON.4 TR0 Bit i u khi n ho t ng c a b nh th i 0
TCON.3 IE1 C ng t bên ngoài 1 (kích kh i c nh). C này
ư c set b i ph n c ng khi có c nh âm (cu ng)
xu t hi n trên chân INT1, ư c xoá b i ph n
m m, ho c ph n c ng khi CPU tr n trình
ph c v ng t
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 11 - www.EmbestDKS.com 04868
TCON.2 IT1 C ng t bên ngoài 1 (kích kh i c nh ho c m c).
C này ư c set ho c xoá b i ph n m m khi x y
ra c nh âm ho c m c th p t i chân ng t ngoài
TCON.1 IE0 C ng t bên ngoài 0 (kích kh i c nh)
TCON.0 IT0 C ng t bên ngoài 0 ( kích kh i c nh ho c m c)
EA ET2 ES ET1 EX1 EX0 ET0
i u khi n các ngu n ng t
IE (0: không cho phép; 1: cho phép)
IE.7 EA Cho phép/ không cho phép toàn c c
IE.6 --- Không s d ng
IE.5 ET2 Cho phép ng t do b nh th i 2
IE.4 ES Cho phép ng t do port n i ti p
IE.3 ET1 Cho phép ng t cho b nh th i 1
IE.2 EX1 Cho phép ng t t bên ngoài (ng t ngoài 1)
IE.1 EX0 Cho phép ng t t bên ngoài (ng t ngoài 0)
IE.0 ET0 Cho phép ng t do b nh th i 0
CHÚ Ý
3 thanh ghi này cũng r t cơ b n, nh tên thanh ghi, tên các bít trong thanh ghi,
ch c năng t ng thanh ghi và t ng bít trong thanh ghi.
1.8.Gi i thi u sơ qua các ngu n ng t:
Ng t do C a ch vector
Reset h th ng RST 0000H
Ng t ngoài 0 IE0 0003H
B nh th i 0 TF0 000BH
Ng t ngoài 1 IE1 0013H
B nh th i 1 TF1 001BH
Port n i ti p RI ho c TI 0023H
B nh th i 2 TF2 ho c EXF2 002BH
Timer
* ** * ** * **
Main Program
Main
ISR
Main
ISR
Main
ISR
Main
Program excution without interrut
Program excution with interrupt.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 12 - www.EmbestDKS.com 04868
M t chương trình chính không có ng t thì ch y liên t c, còn chương trình có
ng t thì c khi nào i u ki n ng t ư c m bào thì con tr s nh y sang hàm ng t
th c hi n xong hàm ng t l i quay v úng ch cũ và th c hi n ti p chương trình. Ta
có 1 ví d như sau: B n ang ăn cơm , có ti ng i n tho i , b n t bát cơm ra nghe
i n tho i , nghe xong l i quay v bưng bát cơm lên ăn ti p. Thì quá trình ăn cơm c a
b n là chương trình chính,có i n tho i g i n là i u ki n ng t, b n ra nghe i n
tho i là th c hi n chương trình ng t(Interrupt Service Rountine),quay v ăn cơm ti p
là ti p t c th c hi n chương trình chính.
Ng t i v i ngư i m i h c vi i u khi n là r t khó hi u, vì a s các tài li u u
không gi i thích ng t làm gì. Có nhi u lo i ng t khác nhau nhưng t t c u có
chung 1 c i m, ng t dùng cho m c ích a nhi m. a t c là nhi u, nhi m t c là
nhi m v . Th c hi n nhi u nhi m v .Các b n nhìn vào ti n trình c a hàm main v i
chương trình có ng t :
Chương trình chính ang ch y, ng t x y ra, th c hi n hàm ng t r i quay l i chương
trình chính. Chương trình trong vi i u khi n khác v i ví d ăn cơm nghe i n tho i
c a tôi ch , th i gian th c hi n hàm chính là r t l n,th i gian th c hi n hàm ng t
là r t nh , cho nên th i gian th c thi hàm ng t không nh hư ng nhi u l m ên ch c
năng hàm chính. Như v y trong hàm ng t các b n làm 1 vi c, trong hàm chính các
b n làm 1 vi c
như v y coi như các b n làm ư c 2 vi c( a nhi m) trong 1 quang th i gian tương i
ng n cõ mS, ch th c ra t i 1 th i i m vi i u khi n ch th c thi 1 l nh.
Ví d : B n th nghĩ xem làm th nào v a i u ch xung PWM i u ch nh t c
ng cơ , v a c các c m bi n u vào mà t c ng cơ ph thu c u vào c m
bi n.
2.1.C u trúc m t chương trình:
// ính kèm các file
#include <file.h>
#include <file.c>
//Khai báo bi n toàn c c
unsigned char x,y;
int z;
long n=0;
//Khai báo và nh nghĩa các hàm
void Hàm1(void)
{
…//Các câu l nh
}
void Hàm2(unsigned char x)
{
…//Các câu l nh
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 13 - www.EmbestDKS.com 04868
//Hàm chính b t bu c chương trình nào cũng ph I có
void main(void)
{
…//Các câu l nh
}
Các câu l nh trong hàm chính có th có l i g i các hàm ã khai báo trên
ho c không
Khi có l i g i hàm nào thì chương trình nh y n hàm ó th c hi n hàm ó xong con
tr l i quay v chương trình chính(hàm main) th c hi n ti p các hàm ho c câu l nh.
Các câu l nh trong C k t thúc b ng d u “;”
Các l i gi I thích ư c t trong d u: M u b ng “/*” k t thúc b ng “*/”
N u l i gi I thích trên 1 dòng thì có th dùng d u: “//”
Khi l p trình nên gi I thích các câu l nh kh i l nh làm gì v sau khi chương trình
l n d s a l i.
2.2.Các lo i bi n trong C:
D ng bi n S Bit S Byte Mi n giá tr
char 8 1 -128 n +127
unsigned char 8 1 0 n 255
short 16 2 -32,768 n +32,767
unsigned short 16 2 0 n 65,535
int 16 2 -32,768 n +32,767
unsigned int 16 2 0 n 65,535
long 32 4
-2,147,483,648
n+2,147,483,647
unsigned long 32 4 0 n 4,294,697,295
Khai báo bi n
C u trúc : Ki u bi n Tên bi n
VD: unsigned char x;
Khi khai báo bi n có th gán luôn cho bi n giá tr ban u.
VD :
Thay vì: unsigned char x;
x=0;
Ta ch c n : unsigned char x=0;
Có th khai báo nhi u bi n cùng m t ki u m t lúc
VD: unsigned int x,y,z;
Ngoài ra dùng cho vi i u khi n trình d ch chuyên d ng còn h tr các lo i bi n
sau:
D ng bi n S Bit S Byte Mi n giá tr
bit 1 0 0 ; 1
sbit 1 0 0 ; 1
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 14 - www.EmbestDKS.com 04868
sfr 8 1 0 n 255
sf16 16 2 0 n 65,535
VD:
Ngoài ra ,chúng ta có th nh nghĩa bi n ki u bít hay ki u SFR (special function
register)
Bit Kiemtra;
Sfr P10=0x90;
VD:
Bit Kiemtra;
Sfr P10=0x90;
Các SFR không c n ph i h c thu c ch c n bi t, và chúng ư c khai báo trong thư
vi n
AT89X51.H và AT89X52.H
2.3.Hàm trong C:
Hàm trong C có c u trúc như sau
Có 2 lo i hàm
Hàm tr l i giá tr :
C u trúc: Ki u giá tr hàm tr l ii Tên hàm (Bi n truy n vào hàm)
{
// Các l nh x lý ây
}
VD : unsigned char Cong(unsigned char x, unsigned char y)
{
// Các l nh x lý ây
}
Hàm không tr l i giá tr
C u trúc: void Tên hàm (Bi n truy n vào hàm)
{
// Các câu l nh x lý ây
}
VD d : void Cong(unsigned char x, unsigned char y)
{
// Các câu l nh x lý ây
}
Hàm có th truy n vào bi n ho c không
VD
Hàm không có bi n truy n vào:
unsigned char Tênhàm(void)
{
// Các câu l nh x lí ây
}
Hàm có bi n truy n vào:
void Tênhàm(unsigned char x)
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 15 - www.EmbestDKS.com 04868
{
// Các câu l nh x lí ây
}
S bi n truy n vào tùy ý(mi n b nh ), ngăn cách b i d u “,”
Ví d :
Void TênHàm(unsigned char x, unsigned char y, unsigned char z)
{
// Các câu l nh x lí ây
}
Ngoài ra riêng cho vi i u khi n ph n ph m Keil C còn có m t lo i hàm ó là hàm
ng t:
C u trúc:
Void Tênhàm(void) interrupt ngu nng t using băngthanhghi
{
}
Hàm ng t không ư c phép tr l i giá tr hay truy n tham bi n vào hàm.
Tên hàm b t kì
Interrupt là t khóa ch hàm ng t
Ngu n ng t t 0 t i 5 theo b ng vector ng t
Ng t do C a ch vector
Reset h th ng RST 0000H
Ng t ngoài 0 IE0 0003H
B nh th i 0 TF0 000BH
Ng t ngoài 1 IE1 0013H
B nh th i 1 TF1 001BH
Port n i ti p RI ho c TI 0023H
B nh th i 2 TF2 ho c EXF2 002BH
Không tính ng t reset h th ng b t u m t ng t ngoài 0
Băng thanh ghi trên ram ch n t 0 n 3
2.4.Các toán t cơ b n:
PhÐp g¸n: =
VD: x=y; // x ph¶i là bi n y có th là bi n ho c giá tr nhưng ph i phù h p ki u
Phép c ng: +
Phép tr : -
Phép nhân: *
Phép chia: /
Các toán t logic:
B ng : ==
And: &&
Or: ||
Not: !
D ch trái: <<
D ch ph i: >>
2.5.Các c u trúc l nh r nhánh, ki m tra thư ng dùng:
Câu l nh r nhánh if:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 16 - www.EmbestDKS.com 04868
C u trúc: if ( i uki n) { // Các câu l nh x lí }
Gi i thích: N u i uki n úng thì x lí các câu l nh bên trong còn sai thì nh y
qua
Câu l nh l a ch n switch:
C u trúc: switch(Bi n)
{
case giatr 1: { // Các câu l nh break; }
case giatr 2: { // Các câu l nh break; }
case giatr 3: { // Các câu l nh break; }
…
case giatr n: { // Các câu l nh break; }
}
Gi i thích : Tùy vào Bi n có giatr 1 thì th c hi n các câu l nh sau ó tương ng r i
thoát kh i c u trúc nh câu l nh break;
Bi n có giatr 2 thì th c hi n các câu l nh sau ó tương ng r i
thoát
….
Bi n có giatr n thì th c hi n các câu l nh sau ó tương ng r i
thoát
Câu l nh vòng l p xác nh for:
C u trúc: for( n=m; n<l; n++) {// Các câu l nh x lí }
Gi I thích:
Trong ó m,l là giá tr (m>l), còn n là bi n
Th c hi n l p các câu l nh (l-m) l n
Câu l nh vòng l p không xác nh while:
C u trúc:
While( i u ki n)
{
//Các câu l nh
}
Gi I thích:
Th c hi n l p các câu l nh khi i u ki n úng, n u câu l nh sai thi thoát kh i
vòng l p
2.6. B ti n x lý:
#define : Dùng nh nghĩa. Ví d :
#define dung 1
#define sai 0
có nghĩa là dung có giá tr b ng 1. Trong chương trình có th có o n code như sau:
bit kiemtra
if (bit==dung) { // Các câu l nh}
if (bit==sai) { // Các câu l nh}
Vi c này giúp l p trình d s a l i hơn.
M t s web hay :
www.dientuvietnam.net www.atmel.com
www.svbkol.org www.keil.com
www.diendandientu.com www.iguanalabs.com
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 17 - www.EmbestDKS.com 04868
www.microchip.com
www.elechtro-tech-online.com
www.diendansv.hutech.edu.vn
www.ttvnol.com
www.8052.com
www.kmitl.ac.th
www.ftdichip.com
Bài 2 (Ti p)
Ph n 2: S d ng Keil C.
Sau khi cài t
1> Kh i t o cho Project:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 18 - www.EmbestDKS.com 04868
t o 1 project m i ch n Project New project như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 19 - www.EmbestDKS.com 04868
ư c hình sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 20 - www.EmbestDKS.com 04868
ánh tên và chuy n n thư m c b n lưu project. B n nên t o m i m t thư m c cho 1 project.
R i ch n Save.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 21 - www.EmbestDKS.com 04868
ư c hình sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 22 - www.EmbestDKS.com 04868
Trong này có 1 lo t các hãng i n t s n xu t 8051. B n l p trình cho con nào thì ch n con y
,kích chu t vào các d u + m r ng các con IC c a các hãng. ây ta l p trình cho
AT89C51 c a hãng Atmel nên ta ch n như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 23 - www.EmbestDKS.com 04868
Khi ch n chip thì ngay l p t c cái b ng hi n ra 1 s tính năng c a chíp các b n có th nhìn
th y. 8051 based Fully Static 24Mhz … . Nhap OK ư c c a s như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 24 - www.EmbestDKS.com 04868
Ch n No. Ch n Yes ch làm cho file l p trình c a b n thêm n ng . ư c c a s sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 25 - www.EmbestDKS.com 04868
t o 1 file code các b n ch n File New ho c n Ctrl+N. Như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 26 - www.EmbestDKS.com 04868
ư c c a s như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 27 - www.EmbestDKS.com 04868
Cho c a s Text 1 to ra ư c như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 28 - www.EmbestDKS.com 04868
Ti p theo b n ch n File Save As… ho c Ctrl+S. nh file m c dù chưa có gì. Như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 29 - www.EmbestDKS.com 04868
ư c c a s sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 30 - www.EmbestDKS.com 04868
Các b n nh p tên vào text box file name. Chú ý tên gì cũng ư c nhưng không ư c thi u uôi
m r ng .C . Nh n Save. ư c c a s sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 31 - www.EmbestDKS.com 04868
Trong ô bên trái màn hình, c a s project workspace, các b n m r ng cái target 1 ra ư c như
sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 32 - www.EmbestDKS.com 04868
Nh p chu t ph i vào thư m c Suorce Group1 ư c hình như trên. Ch n Add files to Group
“Source Group1” add file vào project. ư c như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 33 - www.EmbestDKS.com 04868
Ch n file .C mà các b n v a nh . C a tôi là Dieukhienled_IO . Nh n Add 1 l n r i n Close.
N u b n n Add 2 l n nó s thông báo là file ã add b n ch vi c OK r i nh n Close. ư c như
sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 34 - www.EmbestDKS.com 04868
Bây gi nhìn trong Source Group 1 ã th y file Dieukhienled_IO.C . Các b n nh p chu t ph i
vào vùng so n th o file Dieukhienled_IO.C như sau, thêm file thư vi n.Ch n Insert
‘#include <AT89X51.H>”
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 35 - www.EmbestDKS.com 04868
Các b n ã bi t file ó là gì n u các b n ã h c bài trư c kí theo yêu c u c a tôi. ư c như
sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 36 - www.EmbestDKS.com 04868
Ph n cu i cùng c a công vi c kh i t o là các b n vi t l i gi i thích cho d án c a mình .Ph n
này r t c n thi t vì nó ngư i khác hi u mình làm gì tron project này và khi mình c n s d ng
l i code c l i mình còn bi t nó là cái gì.
Các b n t o l i gi i thích theo m u sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 37 - www.EmbestDKS.com 04868
2> So n th o chương trình:
Các b n vi t chương trình c a bài 3 vào ây làm ví d . Khi vi t xong 1 dòng l nh nên
gi i thích dòng l nh ó làm gì. Như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 38 - www.EmbestDKS.com 04868
Các b n nên chia chương trình như tôi làm. V i 1 file nh thì nó hơi rư m rà. Nhưng v i 1 file
l n kho ng 1000 dòng code thì nó l i r t sáng s a. Các b n nên t o 1 file m u r i nh vào 1 file
text âu ó m i l n dùng ch vi c copy r i paste qua ch không nên m i l n t o m t cái
như v y l i ph n tác d ng. Phía trên là ph n b ti n x lí và khai báo bi n. Ti p theo là vi t
hàm tr .
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 39 - www.EmbestDKS.com 04868
Ti p theo là vi t hàm main. Như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 40 - www.EmbestDKS.com 04868
R i nh n Ctrl+S. Ho c ch n File Save nh file v a so n th o.
Các b n nhìn vào code có th các b n ã hi u con AT89C51 nó làm gì n u các b n ã n m
v ng các bài trư c. Còn n u không hi u thì tôi s gi i thích l i cho các b n.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 41 - www.EmbestDKS.com 04868
ây là sơ nguyên lí c a 1 led. Project là 8 led(vì ph c v cho bài 3) nhưng tôi ch gi i
thích 1 led là các b n hi u. M c ích là làm con led nh p nháy.
+ C3
10uF/25V
C2
33p
C1
33p X1
19
X2
18
RESET
9
P1.0
1
VCC
40
VSS
20
U1
8051
R1
10K
5VDC
12Mhz
D1
LED
R2
470
Bi n Led1 ư c khai báo (gán cho) ch n P0_1 c a vi i u khi n b ng câu l nh sbit
Led1=P1^0; . Giá tr b t bat ư c nh nghĩa là 0.
Khi các b n gán : Led1=bat; trong hàm main thì chân P1_0 c a AT89C51 có m c logic là 0V.
Theo sơ nguyên lí: 5V Tr 470 Led1 P1_0 (0 V). Có chênh l ch áp có dòng
i n qua led Led sáng. Các b n có th tính tóan ch này d dàng là t i sao l i là tr 470 Ôm.
i n áp m t led là Uak (0,6 n 0,7V) l y =0,6V. i n áp chân P1_0 là 0V. i n áp hai u
tr : 5V -0,6V = 4,4V. Dòng qua tr = dòng qua led = 4,4V/470 Ôm x p x 10 mA. V i dòng
10mA n 15mA là led dòng sáng và sáng r t p. N u dòng y u thì led m , còn dòng
l n thì các b n bi t sao r i y.
Khi các b n gán: Led1= tat; t c là chân P1_0 có giá tr 1 tương ng i n áp c a nó là
5V . Hi u i n th gi a hai u +5V và P1_0 là 0V . Nên không có dòng qua led Led
t t.Nhưng n u trong hàm main các b n vi t ch có như sau:
While(1)
{
Led1=bat;
Led1=tat;
}
Khi ch y debug thì v n th y led nh p nháy. Nhưng khi n p chương trình vào chíp l p vào m ch
thì led không nháy ho c ch sáng m ho c t t ngóm. Vì l nh Led1=bat; là l nh 1 chu kì máy ,
t n s th ch anh là 12 Mhz, 1 chu kì máy có th i gian là 1uS. V a b t lên 1 uS r i l i t t ngay.
Led không áp ng ư c t n s cao v y nên không nh p nháy. Do ó c n t i hàm tr . B t led
lên tr 1 th i gian khá lâu(0,5 gi y), r i t t led i khá lâu(0,5s) r i l i b t l i t o thành vòng l p
s ư c led nh p nháy.
Tác d ng c a câu l nh while(1) . i u ki n bên trong vòng while là 1 luôn luôn úng nên nó là
vòng l p vô h n l n. N u không có vòng while(1) thì led c a các b n ch sáng lên 1 l n r i t t
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 42 - www.EmbestDKS.com 04868
vì h t chương trình r i còn âu. Ph n này n u b n nào m i h c i n t th nào cũng có câu h i
th c m c c nh n tin ho c g i mail.
3> D ch chương trình:
So n th o song nh n Ctrl +S nh . Nh xong các b n biên d ch chương trình b ng cách n
phím F7 ho c ch n Build target là bi u tư ng ngay trên c a s workspace như trên hình:
Các b n s th y như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 43 - www.EmbestDKS.com 04868
Trong c a s Output Window ngay phía trên dòng ch này có các dòng ch Compiling …
Linking…
Program Size: data =17.0 code =96
… 0 error , 0 Warning .
Như v y là OK. N u không ư c như v y nó s báo l i và các b n ki m tra xem so n th o
úng chưa. Tôi ví d xóa 1 d u ; trong hàm main dòng : Led1=bat; , gi b i thành Led1=
bat .R i d ch l i ( n F7) trình biên d ch s báo như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 44 - www.EmbestDKS.com 04868
Syntax error near tre. Sai cú pháp g n tr . Các b n nh p úp trái chu t vào dòng thông báo này
con tr s ngay dòng dư i dòng có l i thêm d u nhìn d u mũi tên màu xanh hình dư i ây,
gõ vào d u ; và d ch l i là OK.” Trong chương trình l n ôi khi con tr ch n g n ch có l i
thôi và b n ph i t tìm ra l i.”
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 45 - www.EmbestDKS.com 04868
Sau khi d ch l i ư c hình sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 46 - www.EmbestDKS.com 04868
4> Ch y mô ph ng và s a l i.
Trư c khi debug chúng ta kh i t o như sau. Các ban vào Option for target 1.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 47 - www.EmbestDKS.com 04868
ư c b ng sau. Nh p t n s th ch anh là 12 Mhz úng v i t n s th ch anh.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 48 - www.EmbestDKS.com 04868
Ch n OK.
debug các b n nh n t h p phím Ctrl + F5. Ho c nh n vào icon có ch D m u trong cái
kính lúp trên thanh công c . ư c c a s sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 49 - www.EmbestDKS.com 04868
Trong menu Peripherals(các thi t b ngo i vi) ch n IO port , Port 1. ư c như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 50 - www.EmbestDKS.com 04868
Các b n th y 1 c a s nh Parallel Port 1 xu t hi n ó là cái mô ph ng cho c ng 1 c a
AT89C51. D u tích tương ương chân m c cao(5V) , không tích chân m c th p (0V).
Trong menu peripherals còn các ngo i vi khác như timer , interrupt, serial. Các bài sau dùng
n các b n nh l y trong này.
ch y chương trình các b n nh p chu t ph i vào màn hình so n th o.
R i n F11. M i l n n s ch y 1 l nh. Khi debug n u các b n ch hàm delay lâu quá 1000 l n
l p . Các b n nh n Ctrl + F11 b qua hàm.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 51 - www.EmbestDKS.com 04868
Ho c n F10 ch y t ng dòng l nh. Các b n s th y chân P1_0 thay i giá tr .
B ng bên trái , ô Project workspace bây gi có các thanh ghi. Các b n có th th y chúng thay
i. Nhưng các b n không c n quan tâm n các thanh ghi này. Vì mình h c ngôn ng C mà.
N u h c asembly thì m i ph i s d ng chúng. Cũng m t y. Cái b n quan tâm nh t là cái sec.
Nó cũng thay i. Vì th ch anh là 12Mhz, nên m i chu kì máy là 10-6
giây. Các b n căn c vào
y bi t l nh nào m t bao nhiêu chu kì máy, làm th i gian th c thì c n l m y. Thoát kh i
debug l i n Ctrl+F5 ho c n vào icon debug.
.
3.1.L p m ch :
-Kh i ngu n 5V các b n như l p m ch èn nháy.
-Các b n l p m ch theo sơ sau:
+ C3
10uF/25V
C2
33p
C1
33p X1
19
X2
18
RESET
9
P1.0
1
VCC
40
VSS
20
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
EA
31
P0.0
39
P0.1
38
P0.2
37
P0.3
36
P0.4
35
P0.5
34
P0.6
33
P0.7
32
U1
8051
R1
10K
5VDC
12Mhz
D1
D2
D3
D4
D5
D6
D7
D8
12
3
4
5
6
7
8
9
10
R11
RESISTOR SIP 10
- Hư ng d n l p m ch:
* Qui nh : n u linh ki n nào tôi không nh c n chi u thì các b n l p linh ki n chi u
nào cũng ư c.
Hàng d c ngoài là ngu n 5 V.
Hàng d c trong là GND.
Th t chân các b n ph i nh không gi ng th t s p x p tronh hình v m ch.
Cách m chân các b n con chip xuôi mà các b n nhìn dòng ch AT89C51/52
xuôi, chân 1 là chân g n d u tròn và hình tam giác nh m u tr ng. m t trên xu ng
dư i trái qua ph i. Sơ chân con IC th t s m úng th này. Khi l p m ch ph i
m chân.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 52 - www.EmbestDKS.com 04868
Không nên l p ngu n 12V vào v i ch khi n p chíp xong l p vào m ch m i l p
ngu n.
Khi mu n g chíp ra ph i rút ngu n ra r i m i g chíp.
* Chu n b board như sau:
L p 4 dây n i ng n n i các sông.
L p 1 dây n i n i hàng trên cùng v i hàng dư i cùng làm ngu n +5V.
L p 1 dây n i n i hàng g n trên cùng v i hàng g n dư i cùng làm GND.
L p chíp như hình.
* Bư c 1 l p m ch dao ng:
L p 1 con t 33pF t chân 19 xu ng chân 20.( ng h i t i sao).
L p 1 con t 33pF t chân 18 xu ng chân 20.
L y dây câu t chân 20 xu ng GND.
L p 1 con th ch anh 12M vào chân 18 và 19.
* Bư c 2 l p m ch reset.
L p 1 con tr 10K(nâu en cam) t chân 9 xu ng GND.
L p 1 con t 10uF/50V c c dương lên +5V, c c âm vào chân 9.
* Bư c 3 l p tr băng.
chíp ch y v i ROM trong chân EA ph i lên +5V qua 1 i n tr .
C ng 0 là c ng có c c máng h mu n th c hi n ư c IO thì ph i có i n tr
treo.(Th y cái này l xem l i bài 2). Nên l p 1 con tr băng 10 chân vào c ng 0 và
chân EA.
Chân 1 c a tr băng ( Chân u tiên có n t tròn m u tr ng) vào chân 40. Chân 10 c a
tr băng vào chân 31.
N u không có tr băng các b n có th thay tr băng 10 chân b ng 9 con tr thư ng vì
tr băng 10 chân chính là 9 con tr u chung 1 u như trong sơ m ch phía trên.
* Bư c 4 l p led:
d dàng khi l p m ch nên chúng ta l p led theo sơ như trên.
L p chân dài c a 1 led vào chân 1 vi i u khi n chân ng n vào GND.
Tương t l p 7 led còn l i vào chân 2 n chân 8.
* Bư c 5 câu 1 dây nh t chân 40 lên ngu n 5V.
3.2. Nguyên lí ho t ng:
Led n i t chân v k xu ng t v y n u chân vi i u khi n 5V thì led s sáng,
n u chân vi i u khi n 0V thì led s t i.
i n áp 5V vì sao led không cháy mà l i còn sáng y u?
U1
AT89C51
31
19
18
9
12
13
14
15
1
2
3
4
5
6
7
8
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
17
16
29
3011
10
40
20
EA/VP
X1
X2
RESET
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
RD
WR
PSEN
ALE/PTXD
RXD
VCC
VSS
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 53 - www.EmbestDKS.com 04868
Vì vi i u khi n 8051 ch có th cung c p dòng nh không 10mA 1 chân nên led
sáng y u. Còn n u mu n led sáng p thì l p như sau t dương 5V Chân dài c a
led Chân ng n c a led Chân vi i u khi n. Cái này s nói sau.
* Bư c 5 l p ngu n:
L p 1 dây t chân 40 lên hàng ngu n 5V.
3.3. L p trình :
Trư c h t i u khi n 1 led. i u khi n 1 led thì các b n ch vi c gán chân n i v i
led ó b ng 0 ho c 1, thì i n áp chân ó s là 0V ho c 5V, tùy vào i n áp èn s
sáng ho c t i.
Code như sau:
/* ====================================================
Mo ta:
Dieu khien den led.
Phan cung:
8 led noi tu +5V qua dien tro han dong vao 8 chan cong 1.
Thach anh:
12 Mhz
Tac gia:
Nguyen Huy Thanh.
Thoi gian:
Bat dau: 1h03 16/7/2005
Hoan thanh: 1h07 16/7/2005
=====================================================*/
/******************Bo tien xu li*******************************/
#include <AT89X51.H>// Dinh kem file thu vien
#define bat 1 // Dinh nghia gia tri bat den led
#define tat 0// Dinh nghia gia tri tat den led
/************************************************************/
/*******************Khai bao bien toan cuc**********************/
sbit Led1=P1^0; //Khai bao bien Led1 kieu bit chan P1_0
sbit Led2=P1^1; // ...
sbit Led3=P1^2;
sbit Led4=P1^3;
sbit Led5=P1^4;
sbit Led6=P1^5;
sbit Led7=P1^6;
sbit Led8=P1^7;//Khai bao bien Led8 kieu bit chan P1_7
/***********************************************************/
/********************Khai bao ham****************************/
/*----------------Ham tre-------------------------------
Ham tao thoi gian tre.
Dau vao: 1 bien thoi gian.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 54 - www.EmbestDKS.com 04868
Dau ra:khong
------------------------------------------------------*/
void tre(long time)
{
long n;// Khai bao bien cuc bo
for(n=0; n<time; n++)//Lap time lan
{
; // Khong lam gi nop
}
}
/***********************************************************/
/*******************Ham chinh**************************/
void main(void)
{
while(1)// Lap vo han
{
Led1= bat;// Bat led 1
tre(1000);// Tre 1 khoang thoi gian
Led1= tat;// Tat led 1
tre(1000);// Tre 1 khoang thoi gian
}
}
/************************************************************/
Nên t gõ ch không nên copy paste.
* CHÚ Ý: Code này khác code trong bài 3 s d ng Keil C y nhé. Ch #define bat 1
và #define tat 0. Vì led l p ki u khác mà.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 55 - www.EmbestDKS.com 04868
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 56 - www.EmbestDKS.com 04868
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 57 - www.EmbestDKS.com 04868
* có th n p chương trình vào chíp thì f i t o ra file .hex. t o ra file .hex làm
như sau . Vào Option for target ch ch nh t n s th ch anh.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 58 - www.EmbestDKS.com 04868
ư c hình sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 59 - www.EmbestDKS.com 04868
Kích vào tab Output. ư c hình sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 60 - www.EmbestDKS.com 04868
Tích vào check : Create Hex File. Nh p OK. Nh n fím F7 biên d ch l i . Khi ó dư i c a
s output window ư c ch Creating hex file…
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 61 - www.EmbestDKS.com 04868
Creating hex file from “Dieukhienled_IO” như ngay trên hình.
3.4.N p chíp:
C m u c ng COM vào c ng COM máy tính.
C m ngu n vào m ch n p.
Cho chíp vào socket 40 chân màu xanh. R t chú ý ph i cho úng chi u chíp không là
h ng. Chi u chíp gi ng chi u con chíp có s n trong m ch(Chíp MASTER).
M ph n m m EZDL4 lên. Th y có ch identifing target chip …. Nháy. G t c n nh
socket 40 chân k p chíp cho ti p xúc.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 62 - www.EmbestDKS.com 04868
Trên EZDL4 s th y ch AT89C51 ho c AT89C52 tùy các b n dùng lo i chíp
nào.
Kích vào Send. Ch n ư ng d n n thư m c lưu project c a b n ch n file :
Dieukhienled_IO.hex . Nh n OK. Ch m ch báo ch Complete thì g t n y trên socket
l y chíp ra c m vào m ch.
3.5. K t qu :
C m ngu n vào m ch . Chú ý không c m ngư c âm dương.
N u m ch không ch y rút ngu n ra ki m tra các ch sau:
1) Ki m tra m ch dao ng xem t úng giá tr không, l p úng sơ không,
l p có l ng không.
2) Ki m tra xem t m ch reset chân 9 l p úng c c không, có l ng không.
Dùng ng h o chân 9 n u 0V ho c x p x 0V là OK.
3) Tr băng l p úng chi u chưa, chân 1 vào chân 40. Dùng ng h o chân
31(EA) xem có b ng 5V không , n u 5V thì OK.
4) Ki m tra chân 20 n i GND chưa, chân 40 n i +5V chưa dùng ng h
o i n áp.
5) Ki m tra xem l p úng chi u led chưa.
6) Các b n có th l p l ng chíp ho c do ch t lư ng board l y tay tì m nh con
chíp xu ng board .
N u v n không ch y thì liên l c v i tôi.
3.6. i u khi n 8 led t ng chi c 1:
Các b n có th s a l i hàm main như sau:
void main(void)
{
while(1)// Lap vo han
{
Led1= bat;// Bat led 1
tre(1000);// Tre 1 khoang thoi gian
Led1= tat;// Tat led 1
tre(1000);// Tre 1 khoang thoi gian
Led2= bat;// Bat led 2
tre(1000);// Tre 1 khoang thoi gian
Led2= tat;// Tat led 2
tre(1000);// Tre 1 khoang thoi gian
Led3= bat;// Bat led 3
tre(1000);// Tre 1 khoang thoi gian
Led3= tat;// Tat led 3
tre(1000);// Tre 1 khoang thoi gian
Led4= bat;// Bat led 4
tre(1000);// Tre 1 khoang thoi gian
Led4= tat;// Tat led 4
tre(1000);// Tre 1 khoang thoi gian
Led5= bat;// Bat led 5
tre(1000);// Tre 1 khoang thoi gian
Led5= tat;// Tat led 5
tre(1000);// Tre 1 khoang thoi gian
Led6= bat;// Bat led 6
tre(1000);// Tre 1 khoang thoi gian
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 63 - www.EmbestDKS.com 04868
Led6= tat;// Tat led 6
tre(1000);// Tre 1 khoang thoi gian
Led7= bat;// Bat led 7
tre(1000);// Tre 1 khoang thoi gian
Led7= tat;// Tat led 7
tre(1000);// Tre 1 khoang thoi gian
Led8= bat;// Bat led 8
tre(1000);// Tre 1 khoang thoi gian
Led8= tat;// Tat led 8
tre(1000);// Tre 1 khoang thoi gian
}
}
i u khi n 8 led.
V i chương trình này các b n có th cho th t các led t t b t khác nhau có các
ki u nháy khác nhau.
3.7. i u khi n out c c ng:
N u các b n nhàm chán v i vi c i u khi n t ng chân 1 vi t code r t t n công
các b n có th xu t giá tr ra c c ng.
Trư c h t các b n c n n m các i u như sau:
- 1 c ng có 8 bit t h p 8bit có 28
= 256 tr ng thái. Khi các b n ưa ra c ng 1
giá tr a(th p phân) t 0 n 255 thì s a s ư c i ra h nh phân r i ưa ra
các bit( chân) c a c ng. Ví d :
N u có l nh: P1=1; vì 1(10) = 0000 0001(2) nên chân P1_0(bit 0) s b ng 1(5V)
còn l i các t P1_1(bit 1) n P1_7(bit 7) s b ng 0(0V).
P1=10; vì 10(10) = 0000 1001(2) thì s có P1_0 và P1_3 b ng 1(5V) còn
l i các chân khác s là 0(0V).
- Các b n có th ưa ra c ng 1 giá tr s hex t 0 n ff tương ng t 0 n 255.
Các s cơ s trong h hex.
(HEX)0 1 2 3 4 5 6 7 8 9 A B C D E F
(10) 10 11 12 13 14 15
Cách s hex ra s th p phân: có s hex : N(16)=abf1 i ra h s 10
N(10)=1.160
+ 15.161
+ 11.162
+ 10.163
= B m máy tính h nhé.
i s nh phân sang hex: G p 4 s nh phân thành 1 s hex
Ví d : 0010 0001(2) = 21(16) 4 s u có bit 1 = 1 nên 1x21
= 2
4 s sau có bit 0 =1 nên 1x20
=1.
“Các b n th y v t v v i ph n này dù b n có hi u hay không hi u 1 lát n a s bi t
cách làm li n.”
Cách ưa ra như sau:
Ví d l nh P1=1; tương ương v i P1=0x01;
P1=10; tương ương v i P1=0x0A;
Chương trình xu t ra c c ng tương ương v i chương trình i u khi n 8 led t ng cái
1 như sau:
void main(void)
{
while(1)// Lap vo han
{
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 64 - www.EmbestDKS.com 04868
P1=0x01;// Bat led 1
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 1
tre(1000);// Tre 1 khoang thoi gian
P1=0x02;// Bat led 2
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 2
tre(1000);// Tre 1 khoang thoi gian
P1=0x04;// Bat led 3
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 3
tre(1000);// Tre 1 khoang thoi gian
P1=0x08;// Bat led 4
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 4
tre(1000);// Tre 1 khoang thoi gian
P1=0x10;// Bat led 5
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 5
tre(1000);// Tre 1 khoang thoi gian
P1=0x20;// Bat led 6
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 6
tre(1000);// Tre 1 khoang thoi gian
P1=0x40;// Bat led 7
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 7
tre(1000);// Tre 1 khoang thoi gian
P1=0x80;// Bat led 8
tre(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 8
tre(1000);// Tre 1 khoang thoi gian
}
}
Như v y gõ code v n m i tay l m t ư c m c ích 8 èn nháy liên ti p các b n
có th làm như sau:
/******************Ham chinh****************************/
void main(void)
{
unsigned char n; // Khai bao them bien n cho vong for
while(1)// Lap vo han
{
P1=0x01;// Bat led 1
for(n=0 ; n<8;n++)// Lap 8 lan
{
P1=P1<<1; // Dich bit xang trai
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 65 - www.EmbestDKS.com 04868
tre(1000);
}
}
}
/***********************************************************/
Debug quan sát s thay i c a c ng 1 th y ư c l i h i c a phép d ch bit xang
trái.
hi u thao tác xu t ra c ng , chân, các các b n làm cho mình 1 ví d n a như sau:
/***********************Ham chinh*******************************/
void main(void)
{
unsigned char n; // Khai bao them bien n cho vong for
while(1)// Lap vo han
{
P1=0x01;// Bat led 1
for(n=0 ; n<256;n++)// Lap 8 lan
{
P1=n; // Dich bit xang trai
tre(5000);
}
}
}
/****************************************************************/
Debug th y s thay i các c ng.
3.8. Kinh nghi m :
* chuy n i gi a các h sô nhanh các b n dùng cái calculator có ngay
trong window. Ch n Start All programs Accessories Calculator.
Trong Calculator các b n ch n menu View Ch n scienctific. Cách chuy n i t
khám phá nhé.
* tính ra s hex nhanh nh t .
Tôi ví d mu n ưa chân P3.5 và chân P3.2 xu ng 0(0V) còn các chân còn l i ta làm
như sau:
C cho P3= 100 ; hay 1 giá tr b t kì .Vì code d ch không l i cú pháp m i debug ư c
nên ph i cho giá tr b t kì vào. D ch chương trình r i nh n Debug. Ra ư c như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 66 - www.EmbestDKS.com 04868
Các b n th y trong c a s mô ph ng c ng 3 có ghi giá tr c a c ng 3 là : 0xFF tương
ng t t c 8 bit là 1111 1111. Gi các b n b d u tích trên chân 3.5 và 3.2 i . m t
trái qua ph i nhé.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 67 - www.EmbestDKS.com 04868
Th y c ng 3 có giá tr là 0xDB. Như v y các b n m t công nh m i s nh phân ra s hex.
N u không dùng cách này là như trên các b n ph i nghĩ trong u ra ư c dãy s 1101
1011 r i i qua s HEX k t qu s là 0xDB nhưng m t l m.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 68 - www.EmbestDKS.com 04868
4.1 L p m ch :
a b
dotcV-de
f g V-
1 2 3 4 5
678910
A
B
C
DOTD
E
F
G
D10
LED CATOT Chung
a b
dotcV+de
f g V+
1 2 3 4 5
678910
A
B
C
DOTD
E
F
G
D11
LED CATOT Chung
Có hai lo i led 7 thanh: An t chung và Cat t chung. Hình trên là sơ chân
c a hai lo i led. Nó có c u t o như sau:
3
7 6 4 2 1 10 9 5
A B C D E F G DP
8
D12A
Catot chung
3
7 6 4 2 1 10 9 5
8
D13A
Anot chung
Ch là 8 con led u chung 1 u: An t ho c Cat t.
M ch l p s d ng led An t chung như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 69 - www.EmbestDKS.com 04868
+ C3
10uF/25V
C2
33p
C1
33p
R1
10K
5VDC
EA/VP
31
X1
19
X2
18
RESET
9
P2.0
21
P2.1
22
P2.2
23
P2.3
24
P2.4
25
P2.5
26
P2.6
27
VCC
40
VSS
20
U3
8051
R3
10K
12Mhz
A
B
D
C
G
F
E
- L p m ch: M ch bài trư c( i u khi n led ơn) nguyên,ch l p thêm vào.
+ Bư c1: L p 7 i n vào 7 chân c ng P2 t P2.0 n P2.7( T chân 21 Chân
27) c a vi i u khi n. Chú ý m bit c a c ng 2 t dư i lên trên.
+ Bư c2: L p led 7 thanh 5 chân phía trên sông, 5 chân phía dư i sông(Gi ng l p
AT89C51).
+ Bư c 3: Dùng dây i n câu t các chân theo sơ . Chân i u khi n thanh A
vào i n tr n i vào P2.0 và c th n chân i u khi n thanh G vào i n tr n i
vào P2.7. B qua chân i u khi n d u ch m(Dot chân 5 c a led 7 thanh).
+ Bư c 4: Dùng dây câu chân 3(ho c chân 8, ho c c hai chân 3 và 8) lên +5V.
L p m ch nên dây câu khác màu và rõ ràng tránh nh m l n.
- Test led:
Cho ngu n vào( Dĩ nhiên led ơn bài trư c v n nh p nháy).
Rút 1 u i n tr n i v i chân P2.0 c a V K c m xuông t th y led 7
thanh sáng èn A,c m l i i n tr v v trí cũ. Tương t test 6 thanh còn
l i. Thanh nào không sáng thì ki m tra l i xem c m dây ti p xúc chưa. V n
không sáng thì led ã h ng thay led khác vào.
4.2. Nguyên lí ho t ng:
Khi c m ngu n vào m ch t t c các chân c a các c ng IO c a V K là 5V(
N u c ng 0 không l p i n tr treo thì s là 0V). Nhìn sơ m ch không có chênh
l ch i n áp nên không có èn nào sáng. Chúng ta mu n sáng thanh nào ch vi c ưa
ra i n áp 0V chân vi i u khi n n i v i thanh ó.
Thanh hi n Thanh t t Giá tr (P2)
hi n th s 1: B,C các thanh còn l i 1111 1001
hi n th s 2: A,B,D,E,G các thanh còn l i 1010 0100
….
hi n th s 8: T t c các thanh không thanh nào 1000 0000
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 70 - www.EmbestDKS.com 04868
gfe dcba
Bít th 8 P2.7 không
dùng.
Ngoài ra led 7 thanh còn có th hi n th 1 s ch
ê hi n th ch B: Gi ng sô 8
Hi n th ch A: A,B,C,E,F,G D 1000 1000
4.3.L p trình :
Cách 1: L p trình d hi u không c n ph i tính toán nhưng ph i vi t và copy,
past và s a nhìu.
Code như sau:
#include <AT89X52.H>
/* Khai bao cac bien bit gan voi chan vi dieu khien*/
sbit ThanhA = P2^0;
sbit ThanhB = P2^1;
sbit ThanhC = P3^5;
sbit ThanhD = P3^4;
sbit ThanhE = P3^3;
sbit ThanhF = P2^2;
sbit ThanhG = P2^3;
/* Khai bao bien */
long n;// Cho vong for
/* Khai bao ham */
/* Ham tre */
void delay(long time)
{
for(n=0; n<time; n++)
{
;
}
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 71 - www.EmbestDKS.com 048
/* Ham tat tat ca cac thanh */
void tat(void)
{
ThanhA =1;
ThanhB =1;
ThanhC =1;
ThanhD =1;
ThanhE =1;
ThanhF =1;
ThanhG =1;
}
/* Cac ham hien thi chu va so */
void so1(void)
{
tat();
ThanhA =1;
ThanhB =0;
ThanhC =0;
ThanhD =1;
ThanhE =1;
ThanhF =1;
ThanhG =1;
}
void so2(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =1;
ThanhD =0;
ThanhE =0;
ThanhF =1;
ThanhG =0;
}
void so3(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =0;
ThanhE =1;
ThanhF =1;
ThanhG =0;
}
void so4(void)
{
tat();
ThanhA =1;
ThanhB =0;
ThanhC =0;
ThanhD =1;
ThanhE =1;
ThanhF =0;
ThanhG =0;
}
void so5(void)
{
tat();
ThanhA =0;
ThanhB =1;
ThanhC =0;
ThanhD =0;
ThanhE =1;
ThanhF =0;
ThanhG =0;
}
void so6(void)
{
tat();
ThanhA =0;
ThanhB =1;
ThanhC =0;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
void so7(void)
{
tat();
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 72 - www.EmbestDKS.com 048
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =1;
ThanhE =1;
ThanhF =1;
ThanhG =1;
}
void so8(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
void so9(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =0;
ThanhE =1;
ThanhF =0;
ThanhG =0;
}
void chuA(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =1;
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
void chuB(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
void chuC(void)
{
tat();
ThanhA =0;
ThanhB =1;
ThanhC =1;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =1;
}
void chuD(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =1;
}
void chuE(void)
{
tat();
ThanhA =0;
ThanhB =1;
ThanhC =1;
ThanhD =0;
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 73 - www.EmbestDKS.com 048
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
void chuF(void)
{
tat();
ThanhA =0;
ThanhB =1;
ThanhC =1;
ThanhD =1;
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
void chuG(void)
{
tat();
ThanhA =0;
ThanhB =1;
ThanhC =0;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =1;
}
void chuH(void)
{
tat();
ThanhA =1;
ThanhB =0;
ThanhC =0;
ThanhD =1;
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
void chuI(void)
{
tat();
ThanhA =1;
ThanhB =1;
ThanhC =1;
ThanhD =1;
ThanhE =0;
ThanhF =0;
ThanhG =1;
}
void chuL(void)
{
tat();
ThanhA =1;
ThanhB =1;
ThanhC =1;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =1;
}
void chuO(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =1;
}
void chuP(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =1;
ThanhD =1;
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 74 - www.EmbestDKS.com 048
void chuR(void)
{
tat();
ThanhA =0;
ThanhB =0;
ThanhC =0;
ThanhD =1;
ThanhE =0;
ThanhF =0;
ThanhG =0;
}
void chuS(void)
{
tat();
ThanhA =0;
ThanhB =1;
ThanhC =0;
ThanhD =0;
ThanhE =1;
ThanhF =0;
ThanhG =0;
}
void chuU(void)
{
tat();
ThanhA =1;
ThanhB =0;
ThanhC =0;
ThanhD =0;
ThanhE =0;
ThanhF =0;
ThanhG =1;
}
void chuY(void)
{
tat();
ThanhA =1;
ThanhB =0;
ThanhC =0;
ThanhD =0;
ThanhE =1;
ThanhF =0;
ThanhG =0;
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 75 - www.EmbestDKS.com 048
/* Ham chinh */
void main(void)
{
while(1)
{
so0();
delay(20000);
so1();
delay(20000);
so2();
delay(20000);
so3();
delay(20000);
so4();
delay(20000);
so5();
delay(20000);
so6();
delay(20000);
so7();
delay(20000);
so8();
delay(20000);
so9();
delay(20000);
chuA();
delay(20000);
chuB();
delay(20000);
chuC();
delay(20000);
chuD();
delay(20000);
chuE();
delay(20000);
chuF();
delay(20000);
chuG();
delay(20000);
chuH();
delay(20000);
chuI();
delay(20000);
chuL();
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 76 - www.EmbestDKS.com 048
delay(20000);
chuO();
delay(20000);
chuP();
delay(20000);
chuR();
delay(20000);
chuS();
delay(20000);
chuU();
delay(20000);
chuY();
delay(20000);
}
}
Cách 2: Các b n vi t 1 chương trình ơn gi n r i dùng công c Debug xem s hex r i
vi t vào r t ng n g n.
Ví d :
Hàm hi n th s 1:
void so1(void)
{
tat();
P2=0xF5;
}
Các b n debug cho hi n th c ng P2 lên. d u tích các èn t t(1) , b d u tích các
èn c n b t(0). R i c giá tr hex như tôi hư ng d n bài trư c.
4.4.N p chíp:
ã hư ng d n. N u các b n g p ph i v n c a m ch n p. Thư ng là:
+ Treo chip Master: Rút ngu n m ch n p ra, i chút r i c m l i.
+ Không nh n c ng COM. Các b n nh p chu t ph i vào Mycomputer, ch n
Properties Device manage. Nh n vào Scan for hardware change máy tính nh n
l i c ng COM. R i kh i ng l i máy.
+ Lý do khác các b n th ki m tra ph n c ng m ch n p.
+ V n không ư c tôi ch u.
T bài sau s không có ph n này.
4.5.K t qu :
Nhìn vào hàm main các b n th y chương trình s hi n th s 1 led 7 thanh, tr 1
kho ng th i gian, r i nh y sang s 2 n sô 9 , r i n ch . N u các b n không có hàm
tr thì led s hi n th ra sao?
Led s hi n s 8. Vì t t c 8 led ư c b t t t quá nhanh (ch c n >24 Hz) do hi n tư ng
lưu nh m t các b n s nhìn th y t t c các led sáng ch không hi n s .
4.6.Kinh nghi m :
Sau khi ã th c hi n theo các rút g n như vi t hàm s 1 trên các b n áp d ng
c u trúc l nh switch case vi t l i chương trình thì chương trình s r t g n.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 77 - www.EmbestDKS.com 048
void Hienthiled(unsigned char x) // Co 1 bien dau vao de xac dinh xem la hien thi so nao
{
switch(x)
{
case 1: { tat(); P2=0xF5; break;} // So 1
case 2: { tat(); P2=0xFF; break;}// So 2
…
case 9: { tat(); P2=0xFF; break;}// So 9
case 10: { tat(); P2=0xFF; break;}// Chu A
….
case 20: { tat(); P2=0xFF; break; }// Chu Y
}
}
Các giá tr trên ch là ví d các b n ã rút g n và t copy vào. V i hàm hi n th led các
b n ã vi t hi n các s và các ch gi hàm main ch c n như sau:
void main (void)
{
while(1)
{
for(n=0; n<20; n++)
{
Hienthiled(n);
delay(20000);
}
}
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 78 - www.EmbestDKS.com 048
Ph n 1: c 1 phím.
Nhi m v :
m s l n phím b m gi i h n t 0 n 9 hi n th ra led 7 thanh.
5.1.L p m ch như sau:
+ C3
10uF/25V
C2
33p
C1
33p X1
19
X2
18
RESET
9
P2.0
21
VCC
40
VSS
20
P2.1
22
P1.0
1
P1.1
2
P2.2
23
P2.3
24
P2.4
25
P2.5
26
P2.6
27
U1
8051
R1
10K
5VDC
12Mhz
1 2
SW1
C4
CAP NP
D12
LED
R29
1K
a b
dotcV+de
f g V+
1 2 3 4 5
678910
A
B
C
DOTD
E
F
G
D11
LED ANOT Chung
- M ch bài 5 led 7 thanh gi nguyên.
L p m ch: quá ơn gi n.
Bư c 1: L p 1 nút b m âu ó trên m ch.
Bư c 2: Dùng dây câu 1 chân nút b m v i P1.0( Thay th led bài 4).
Bư c 3: Dùng dây câu 1 chân nút b m xu ng t.
Bư c 4: L p 1 t 104 gi a 2 chân nút b m.
Bư c 5: L p tr vào chân P1.0 và led t +5V vào u tr còn l i(Chú ý úng
chi u led.
- Test nút b m: C m ngu n vào, nh n nút èn sáng. Nh nút èn t t.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 79 - www.EmbestDKS.com 048
5.2.Nguyên lí ho t ng:
- Ph n nút b m: (khi không có t 104) ban u chân P1.0 m c cao +5V, n u
b m nút 2 u nút b m thông v i nhau. Chân P1.0 thông v i GND. Led sáng do có chênh
áp. Chân P1.0 thông t.
N u có t 104 t i n ư c n p i n, khi b m nút t i n s phóng i n t c c
dương sang c c âm làm chân P1.0 thông v i GND nhưng lâu v 0 V hơn 1 chút( tr
c ng).
- Khi b m nút theo nguyên lí thi b m 1 cái là xu ng 0 li n, nhưng do ti p i m
cơ khí c a nút b m nên khi b m nút nó s có 1 s xung i n ch không ph i là
b m cái là nó xu ng 0 luôn. T 104 gi m nhi u ó. T 104 cũng có th b
i không l p vì ta có th kh nhi u b ng ph n m m.
5.3.L p trình:
Code bài 5 gi nguyên: so n thêm m t s hàm như sau hàm c phím b m.
Hàm c s l n n phím
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 80 - www.EmbestDKS.com 048
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 81 - www.EmbestDKS.com 048
Hàm hi n th s tương ng.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 82 - www.EmbestDKS.com 048
Hàm main ư c s a l i như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 83 - www.EmbestDKS.com 048
ây là code các hàm b sung:
unsigned char i=0;// Khai bao them bien toan cuc de dem so lan an nut
unsigned char Doccongtac(void)// Ham tra lai gia tri unsigned char
{
if( P1_0 ==0)// Neu nut duoc bam
{
delay(300);// Tre 1 khoang thoi gian qua xung nhieu
while(P1_0 ==0) // Cho toi khi nha tay khoi nut bam
{
;//Khong lam gi
}
i++;// Nha ty thi tang i
if( i ==10) i=0;// Quay vong gia tri cua i
}
return i;
}
void hienthisolannhanphim(unsigned char solan)
{
switch(solan)// Tuy vao so lan
{
case 0: { so0(); break; }// Neu so lan =0 hien so 0 thoat khoi switch
case 1: { so1(); break; }// Neu so lan =1 hien so 1 thoat khoi switch
case 2: { so2(); break; }// ....
case 3: { so3(); break; }
case 4: { so4(); break; }
case 5: { so5(); break; }
case 6: { so6(); break; }
case 7: { so7(); break; }
case 8: { so8(); break; }
case 9: { so9(); break; }// Neu so lan =9 hien so 9 thoat khoi switch
}
}
void main(void)
{
while(1)
{
Doccongtac(); // Goi ham doc so lan nhan phim
hienthisolannhanphim(i);// Hien thi so lan nhan phim, bien i la bien toan cuc
}
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 84 - www.EmbestDKS.com 048
5.4) Kinh nghi m:
- Xem các giá tr c a bi n trong Debug.
Sau khi vi t xong chương trình và biên d ch chương trình các b n vào công c Debug c a
Keil C. ư c màn hình sau: Ch n View Watch& Call Stack Window.
ư c như sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 85 - www.EmbestDKS.com 048
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 86 - www.EmbestDKS.com 048
Trong khung phía dư i chính là Watch& Call Stack Window. Chuy n sang tab watch#1,
nh p chu t vào ch F2 to edit,nh n F2 và gõ vào tên bi n c n quan sát.
Ph n 1 k t thúc.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 87 - www.EmbestDKS.com 048
Chúng ta quan sát bi n I, nên gõ I vào và ư c hình như trên. Các b n nh n F11 ch y
mô ph ng. M i l n n phím, cho chân P1.0 xu ng 0 r i lên 1, tương ương v i n phím
và nh phím I s tăng 1 như sau: (Khi n phím ph i ch hàm delay(300) và hàm
while(P1_0 ==0) xong I m i tăng vì mình l p trình th mà.
Giá tr c a I hi n th theo s hex.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 88 - www.EmbestDKS.com 048
Ph n 2: c ma tr n phím.
Nhi m v :
Quét bàn phím 16 phím b m(4x4), xem phím nào ư c b m, các phím ư c ánh
s t 0 n 15 r i hi n th giá tr ra led 7 thanh.
6.1. L p m ch theo sơ sau:
5V
5V
C1
33p
C2
33p
+ C3
10uF/25V
R1
10K
5VDC
5V5V5V
EA/VP
31
X1
19
X2
18
RESET
9
P2.0
21
P2.1
22
P2.2
23
P2.3
24
P2.4
25
P2.5
26
P2.6
27
VCC40
VSS
20
P3.1
11
P3.2
12
P3.3
13
P3.4
14
P3.5
15
P3.6
16
P3.7
17
P3.0
10
U3
8051
R3
10K
12Mhz
C
B
A
E
D
G
F
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
5V
LED 7 THANH
HANG 2
HANG 1
COT 4
COT 3
COT 2
COT 1
HANG 4
HANG 3P3.2
R21
R
R22
R
R23
R
R24
R
R25
R
R26
10Kx8
R27
R
R28
R
P3.0
P3.1
1 2
PHIM 1
1 2
PHIM 2
1 2
PHIM 3
1 2
PHIM 4
1 2
PHIM 5
P3.3
1 2
PHIM 6
P3.4
1 2
PHIM 7
1 2
PHIM 8
1 2
PHIM 9
1 2
PHIM 10
1 2
PHIM 11
1 2
PHIM 12
P3.5
1 2
PHIM 13
P3.6
1 2
PHIM 14
1 2
PHIM 15
1 2
PHIM 16
P3.7
- L p m ch:m ch bài led 7 thanh gi nguyên và v i bàn phím các b n hàn ư c ch c n
câu vào c ng 3 úng th t chân và câu chân 5V lên +5V.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 89 - www.EmbestDKS.com 048
6.2 Nguyên lí quét phím:
- Vì sao m ch phím u theo ma tr n. N u c t 16 nút b m bình thư ng ph i
dùng 16 chân vi i u khi n. N u u theo d ng ma tr n thì ch m t 8 chân ta cũng có th
c ư c 16 phím b m.
- Có 2 cách quét phím theo c t và theo hàng, tôi ch n cách quét theo hàng, quét
theo c t các b n có th làm tương t .
- Bư c 1 : Ta ưa chân P3.0 n i v i Hàng 1 xu ng 0V.R i ta ki m tra giá tr logic
c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 1 ư c b m thì C t 1_ P3.4 s có giá tr b ng
0. N u phím 2 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 3 ư c b m thì
C t 3_ P3.6 s có giá tr b ng 0. N u phím 4 ư c b m thì C t 4_ P3.7 s có giá tr b ng
0. Ta căn c vào ó xác nh xem phím nào ư c b m.
- Bư c 2 : Ta ưa chân P3.1 n i v i Hàng 2 xu ng 0V.R i ta ki m tra giá tr logic
c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 5 ư c b m thì C t 1_ P3.4 s có giá tr b ng
0. N u phím 6 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 7 ư c b m thì
C t 3_ P3.6 s có giá tr b ng 0. N u phím 8 ư c b m thì C t 4_ P3.7 s có giá tr b ng
0. Ta căn c vào ó xác nh xem phím nào ư c b m.
- Bư c 3 : Ta ưa chân P3.2 n i v i Hàng 3 xu ng 0V.R i ta ki m tra giá tr logic
c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 9 ư c b m thì C t 1_ P3.4 s có giá tr b ng
0. N u phím 10 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 11 ư c b m thì
C t 3_ P3.6 s có giá tr b ng 0. N u phím 12 ư c b m thì C t 4_ P3.7 s có giá tr b ng
0. Ta căn c vào ó xác nh xem phím nào ư c b m.
- Bư c 4 : Ta ưa chân P3.3 n i v i Hàng 1 xu ng 0V.R i ta ki m tra giá tr logic
c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 13 ư c b m thì C t 1_ P3.4 s có giá tr
b ng 0. N u phím 14 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 15 ư c
b m thì C t 3_ P3.6 s có giá tr b ng 0. N u phím 16 ư c b m thì C t 4_ P3.7 s có giá
tr b ng 0. Ta căn c vào ó xác nh xem phím nào ư c b m.
Ta s dùng câu l nh if ki m tra.
6.3. L p trình:
- T o 1 project m i, copy ph n hi n th các sô 0…9 các ch A…Y c a bài tr ơc. R i b
sung các hàm sau. Hàm hi n th phím n.
void phim_duoc_an(unsigned char phim)
{
switch(phim)// Tuy vao so lan
{
case 0: { so0(); break; }// Neu so lan =0 hien so 0 thoat khoi switch
case 1: { so1(); break; }// Neu so lan =1 hien so 1 thoat khoi switch
case 2: { so2(); break; }// ....
case 3: { so3(); break; }
case 4: { so4(); break; }
case 5: { so5(); break; }
case 6: { so6(); break; }
case 7: { so7(); break; }
case 8: { so8(); break; }
case 9: { so9(); break; }// Neu so lan =9 hien so 9 thoat khoi switch
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 90 - www.EmbestDKS.com 048
}
}
Hàm quét phím:
/*Khai bao 1 mang 4 phan tu nhu sau: quetphim[4]={P0=0xFE,0xFD,0xFB,0xF7}
De dua 0 ra lan luot cac hang phim, khi do neu nut nao duoc an thi chan vi dieu khien se
xuong 0.Chu y fai kiem tra phim khoang 100 lan.*/
unsigned char quetphim[4]={0xFE,0xFD,0xFB,0xF7};
// Dinh nghia so lan quet phim
#define solanquetphim 100 // Cac ban co the thay doi gia tri nay cho phu hop
unsigned char quetbanphim(void)
{
unsigned char giatribanphim;// Bien de luu gia tri phim an tu 0 den 15 ma hoa 16 phim
unsigned char x,y;
//Quet 4 hang phim
for(x=0; x<4;x++)
{
P3=quetphim[x];// Dua lan luot cac hang xuong 0
for(y=0;y<solanquetphim;y++)// Kiem tra solanquetphim lan
{
if(P3_4==0) giatribanphim=0+4*x;// Gia tri phim tuong ung
if(P3_5==0) giatribanphim=1+4*x;// Tuy thuoc vao hang x
if(P3_6==0) giatribanphim=2+4*x;// La may ma gia tri cua
if(P3_7==0) giatribanphim=3+4*x;// gia tri ban phim tuong ung.
}
}
return(giatribanphim);
}
Hàm Main.
void main(void)
{
unsigned char i;
while(1)
{
i=quetbanphim();
phim_duoc_an(i);
}
}
Thêm câu l nh #define vào u chương trình:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 91 - www.EmbestDKS.com 048
Vi t hàm phím ư c n:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 92 - www.EmbestDKS.com 048
Vi t hàm quét bàn phím và hàm main.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 93 - www.EmbestDKS.com 048
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 94 - www.EmbestDKS.com 048
5.4. Kinh nghi m:
- Các b n ch y Debug xem s thay i giá tr c a bi n giá tr bàn phím.
- Các b n m i dùng 10 phím t 0…9 . Bài t p cho các b n là dùng phím 16
ch n mode: nh n phím 16 thì thay i ch hi n s thành hi n ch và phím 1 tương
ương ch A,phím 2 tương ương ch B và c như v y.
- Các b n th thay i giá tr #define solanquetphim 100 xem sao.
- ng lo l ng v các warning. Các warning nó c nh báo là b n có khai báo 1 s
hàm mà b n không dùng n. Như hàm delay(); hàm ch A, vv.
Nhi m v : i u khi n hi n th LCD 16x2 dòng ch “www.EmbestDKS.com”
ch y trên màn hình LCD.
Có 16 chân như sau:
Chân Ký hi u I/O Mô t
1 VSS - t
2 VCC - Dương ngu n 5v
3 VEE - C p ngu n i u khi n ph n
4 RS I RS = 0 ch n thanh ghi l nh. RS = 1 ch n
thanh d li u
5 R/W I R/W = 1 c d li u. R/W = 0 ghi
6 E I/O Cho phép
7 DB0 I/O Các bít d li u
8 DB1 I/O Các bít d li u
9 DB2 I/O Các bít d li u
10 DB3 I/O Các bít d li u
11 DB4 I/O Các bít d li u
12 DB5 I/O Các bít d li u
13 DB6 I/O Các bít d li u
14 DB7 I/O Các bít d li u
Chân 15 và chân 16: ghi là A và K. Nó là an t và kat t c a 1 con led dùng sáng LCD
trong bóng t i. Chúng ta không s d ng. N u các b n mu n dùng thì n i chân A qua 1
i n tr t 1K n 5K lên dương 5V, chân K xu ng t èn s sáng.
6.1.L p m ch theo sơ sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 95 - www.EmbestDKS.com 048
D5
D6
D7
RS
Rw
EN
EN Rw RS
RST
9
XTAL2
18
XTAL1
19
GND20
PSEN
29ALE/PROG
30EA/VPP
31
VCC40
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P2.0/A8
21P2.1/A9
22P2.2/A10
23P2.3/A11
24P2.4/A12
25P2.5/A13
26P2.6/A14
27P2.7/A15
28
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.5/T1
15
P3.6/WR
16
P3.7/RD
17
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
U1
AT89C51
12
3
4
5
6
7
8
9
10
R1 10K
5V
VCC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
J1
LCD
R2
5K
Y1
12Mhz
C1
33p
C2
33p
R3
10K
5V
LCD16x02
+ C3
CAPACITOR POL
5V5V
C6
104
D0
D1
D2
D3
D4
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 96 - www.EmbestDKS.com 048
- Hư ng d n: C m luôn 8 bit d li u c a LCD t D0 n D7 vào c ng 2 c a 8051 mà
không c n câu dây. th a 6 chân ra ngoài là: EN,RW,RS,Ve, Vcc, GND ra ngoài. R i
dùng dây câu chân 1 xu ng GND, chân 2 lên +5V, chân 3 vào chân gi a c a bi n tr
tinh 5K, 2 chân còn l i c a bi n tr tinh 1 chân lên +5V,1 chân xu ng 0V.
6.2.Nguyên lý ho t ng c a LCD:
- Chân VCC, VSS và VEE: Các chân VCC, VSS và VEE: C p dương ngu n - 5v và t
tương ng thì VEE ư c dùng i u khi n tương ph n c a LCD.
- Chân ch n thanh ghi RS (Register Select): Có hai thanh ghi trong LCD, chân
RS(Register Select) ư c dùng ch n thanh ghi, như sau: N u RS = 0 thì thanh ghi mà
l nh ư c ch n cho phép ngư i dùng g i m t l nh ch ng h n như xoá màn hình, ưa
con tr v u dòng v.v… N u RS = 1 thì thanh ghi d li u ư c ch n cho phép ngư i
dùng g i d li u c n hi n th trên LCD.
- Chân c/ ghi (R/W): u vào c/ ghi cho phép ngư i dùng ghi thông tin lên
LCD khi R/W = 0 ho c c thông tin t nó khi R/W = 1.
- Chân cho phép E (Enable): Chân cho phép E ư c s d ng b i LCD ch t d
li u c a nó. Khi d li u ư c c p n chân d li u thì m t xung m c cao xu ng th p ph i
ư c áp n chân này LCD ch t d li u trên các chân d liêu. Xung này ph i r ng t i
thi u là 450ns.
- Chân D0 - D7: ây là 8 chân d li u 8 bít, ư c dùng g i thông tin lên LCD
ho c c n i dung c a các thanh ghi trong LCD. hi n th các ch cái và các con s ,
chúng ta g i các mã ASCII c a các ch cái t A n Z, a n f và các con s t 0 - 9 n
các chân này khi b t RS = 1.
Cũng có các mã l nh mà có th ư c g i n LCD xoá màn hình ho c ưa con
tr v u dòng ho c nh p nháy con tr .
- Chú ý:Chúng ta cũng s d ng RS = 0 ki m tra bít c b n xem LCD có s n
sàng nhân thông tin. C b n là bít D7 và có th ư c c khi R/W = 1 và RS = 0 như
sau:
N u R/W = 1, RS = 0 khi D7 = 1 (c b n 1) thì LCD b n b i các công vi c bên
trong và s không nh n b t kỳ thông tin m i nào. Khi D7 = 0 thì LCD s n sàng nh n
thông tin m i. Lưu ý chúng ta nên ki m tra c b n trư c khi ghi b t kỳ d li u nào lên
LCD.
- Sau ây là b ng mã l nh c a LCD:
Mã (Hex) L nh n thanh ghi c a LCD
1 Xoá màn hình hi n th
2 Tr v u dòng
4 Gi m con tr (d ch con tr sang trái)
6 Tăng con tr (d ch con tr sang ph i)
5 D ch hi n th sang ph i
7 D ch hi n th sang trái
8 T t con tr , t t hi n th
A T t hi n th , b t con tr
C B t hi n th , t t con tr
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 97 - www.EmbestDKS.com 048
E B t hi n th , nh p nháy con tr
F T t con tr , nh p nháy con tr
10 D ch v trí con tr sang trái
14 D ch v trí con tr sang ph i
18 D ch toàn b hi n th sang trái
1C D ch toàn b hi n th sang ph i
80 ép con tr v u dòng th nh t
C0 ép con tr v u dòng th hai
38 Hai dòng và ma tr n 5 × 7
- i u khi n LCD qua các bư c sau:
Bư c 0 : Chu n b ph n c ng. Dùng tu c vít hay cái gì b n có xoay bi n tr 5 K
i u ch nh tương ph n c a LCD. Xoay cho n khi các ô vuông(các i m nh) c a
LCD hi n lên thì xoay ngư c bi n tr l i 1 chút.
Bư c 1 : Kh i t o cho LCD.
Bư c 2 : Gán các giá tr cho các bit i u khi n các chân RS,RW,EN cho phù h p
v i các ch : Hi n th kí t lên LCD hay Th c hi n 1 l nh c a LCD.
Bư c 3: Xu t byte d li u ra c ng i u khi n 8 bit d li u c a LCD.
Bư c 4: Ki m tra c b n xem LCD s n sàng nh n d li u m i chưa.
Bư c 5: Quay vòng l i bư c 1.
6.3.L p trình:
- có th l p trình cho LCD ta thêm vào thư vi n string.h c a trình biên d ch
b ng câu l nh:
#include <string.h>
- Khai báo các chân c a LCD g n v i các c ng:
/*
RS chon thanh ghi
=0 ghi lenh
=1 ghi du lieu
RW doc ghi
=0 ghi
=1 doc
E cho fep chot du lieu
xung cao xuong thap toi thieu 450 ns.
Bit co ban D7
khi RS=0 RW=1 neu D7=1 LCD ban
D7=0 LCD san sang.
*/
sfr LCDdata = 0xA0;// Cong 2 , 8 bit du lieu P0 co dia chi 0x80, P1 0x90 , P2 0xA0
sbit BF = 0xA7; // Co ban bit 7
sbit RS = P3^5;
sbit RW = P3^4;
sbit EN = P3^3;
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 98 - www.EmbestDKS.com 048
- Vi t 1 s hàm i u khi n LCD như sau:
* Hàm ki m tra LCD có b n hay không:
void wait(void)
{
long n = 0;
EN=1;// Dua chan cho fep len cao
RS=0;// Chon thanh ghi lenh
RW=1;// Doc tu LCD
LCDdata=0xFF;// Gia tri 0xFF
while(BF){n++; if(n>100) break;}// Kiem tra co ban
// Neu ban dem n den 100 roi thoat khoi while
EN=0;// Dua xung cao xuong thap de chot
RW=0;// Doc tu LCD
}
* Hàm i u khi n LCD th c hi n 1 l nh:
void LCDcontrol(unsigned char x)
{
EN=1;// Dua chan cho fep len cao
RS=0;// Chon thanh ghi lenh
RW=0;// Ghi len LCD
LCDdata=x;// Gia tri x
EN=0;// Xung cao xuong thap
wait();// Doi LCD san sang
}
Hàm có 1 bi n u vào là các giá tr trong b ng mã l nh c a LCD.
* Hàm kh i t o LCD:
void LCDinit(void)
{
LCDcontrol(0x30);//Che do 8 bit.
LCDcontrol(0x30);
LCDcontrol(0x30);
LCDcontrol(0x38);// 2 dong va ma tran 5x7
LCDcontrol(0x0C);// Bat con tro
LCDcontrol(0x06);// Tang con tro xang fai
LCDcontrol(0x01);// Xoa man hinh
}
* Hàm l nh cho LCD hi n th 1 kí t :
void LCDwrite(unsigned char c)
{
EN=1;// Cho fep muc cao
RS=1;// Ghi du lieu
RW=0;// Ghi len LCD
LCDdata=c;// Gia tri C
EN=0;// Xung cao xuong thap
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 99 - www.EmbestDKS.com 048
wait();// Cho
}
Hàm có 1 bi n u vào là mã c a kí t trong b ng ASCII.
* Hàm l nh cho LCD hi n th 1 xâu kí t ( dòng ch ):
void LCDputs(unsigned char *s,unsigned char row)
{
unsigned char len;
if(row==1) LCDcontrol(0x80);// Ep con tro ve dau dong 1
else LCDcontrol(0xC0);// Ep con tro ve dau dong 2
len=strlen(s);// Lay do dai bien duoc tro boi con tro
while(len!=0)// Khi do dai van con
{
LCDwrite(*s);// Ghi ra LCD gia tri duoc tro boi con tro
s++;// Tang con tro
len--;// Tru do dai
}
}
Hàm có hai bi n u vào là : xâu kí t c n hi n th và dòng c n hi n th xâu ó(1 ho c 2).
*s là con tr , tr t i bi n s
6.3.1. nh nghĩa con tr
B nh c a V K các b n tư ng tư ng như 1 cái t nhi u ngăn. Khi khai báo 1
bi n, ví d bi n ki u unsigned char i; thì v k lưu bi n I vào 1 ngăn trong t _ 1 ô nh
trong b nh , dĩ nhiên xác nh các ngăn t ngư i ta ánh s cho t ng ngăn, còn v k
c p cho các ô nh trong b nh 1 a ch xác nh ô nh ó.Ví d ti p: I có giá tr là
100, thì n i dung c a ô nh lưu bi n I là 100,i=100, còn con tr tr n I có giá tr là a
ch c a ô nh ch a bi n I ó.
6.3.2. Cách s d ng con tr :
khai báo con tr có thêm d u * trư c tên bi n. *I là bi n ki u con tr , tr t i
bi n i(unsigned char). I mang giá tr t 0 n 255, *I mang i ch c a ô nh ch a i.
* Hàm hi n th 1 s integer:
void LCDwritei(int d)
{
unsigned char i,j,k,l;
i=d%10;// Chia lay phan du, duoc chu so hang don vi
d=d/10;// Chia lay phan nguyen, duoc nhung chu so da bo hang don vi
j=d%10;// Duoc chu so hang chuc
d=d/10;// Nhung chu so da bo hang don vi va hang chuc
k=d%10;// Duoc hang tram
l=d/10;// Duoc hang nghin
LCDwrite(48+l);// Hien thi ki tu trong bang ascii
LCDwrite(48+k);// Trong bang ascii so 0 co co so thu tu la 48
LCDwrite(48+j);
LCDwrite(48+i);
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 100 - www.EmbestDKS.com 048
}
Hàm có 1 bi n u vào là s int l n n hàng nghìn c n hi n th .
* Hàm tr :
void delay(long time)
{
long n;
for(n=0;n<time;n++) ;
}
* Hàm main:
void main(void)
{
char x;
LCDinit();
LCDputs("8052 MCU",1);
delay(30000);
while(1)
{
for(x=0;x<16;x++)// Dich 16 lan.
{
LCDputs("8052 MCU",1);
LCDcontrol(0x18);// Dich hien thi sang trai.
delay(5000);// Tre
}
}
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 101 - www.EmbestDKS.com 048
Nhi m v :
T o ra xung có r ng thay i, 10 c p, t n s 1Khz, i u khi n t c ng
cơ (10 c p t c ).
7.1. L p m ch theo sơ sau:
+ C3
10uF/25V
C2
33p
C1
33p
R1
10K
5VDC
1 2
SW1
1 2
SW2
X1
19
X2
18
RESET
9
P2.0
21
VCC
40
VSS
20
EA
31
P1.0
1
P1.1
2
U1
8051
12Mhz
3 B
2C1E
C828
12
A
-
+
DC Motor
12V
R2
10K
- Hư ng d n: Chân c a C828 là ECB, n u c m xuôi transitor nhìn vào m t có ch , tính t
bên trái sang.
7.2.L p trình:
- Cách t o xung có r ng thay i b ng V K.
+ Cách 1: Như các b n i u khi n nh p nháy 1 con led, ó là t o ra 1 xung 1
chân c a vi i u khi n, nhưng xung ó có r ng c nh, t n s l n, cách b n có th
i u ch nh l i hàm delay t n s c a nó úng 1 Khz. Tuy nhiên vì là dùng hàm delay
nên trong th i gian có xung lên 1(5V) và th i gian không có xung(0V) vi i u khi n
không làm gì c , hơn n a t o xung b ng vi c delay mà các b n có nhu c u c n 2 b phát
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 102 - www.EmbestDKS.com 048
xung 2 kênh, có cùng t n s mà khác r ng xung thì tr nên r t khó khăn. Cho nên
chúng ta dùng b nh th i Timer c a vi i u khi n trong trư ng h p này r t ti n.
+ Cách 2: Dùng ng t Timer c a b vi i u khi n.
Trư c h t nh c l i v ng t c a vi i u khi n:
+ Ng t là gì ? tr l i câu h i này tôi xin trích an v ng t trong bài 2 ví d cho
ng t timer:
Timer
* ** * ** * **
M t chương trình chính không có ng t thì ch y liên t c, còn chương trình có ng t
thì c khi nào i u ki n ng t ư c m bào thì con tr s nh y sang hàm ng t th c hi n
xong hàm ng t l i quay v úng ch cũ th c hi n ti p chương trình chính. Tôi có 1 ví d
như sau: B n ang ăn cơm , có ti ng i n tho i , b n t bát cơm ra nghe i n tho i ,
nghe xong l i quay v bưng bát cơm lên ăn ti p. Thì quá trình ăn cơm c a b n là chương
trình chính,có i n tho i g i n là i u ki n ng t, b n ra nghe i n tho i là th c hi n
chương trình ng t(Interrupt Service Rountine),quay v ăn cơm ti p là ti p t c th c hi n
chương trình chính.
Ng t i v i ngư i m i h c vi i u khi n là r t khó hi u, vì a s các tài li u u
không gi i thích ng t làm gì. Có nhi u lo i ng t khác nhau nhưng t t c u có chung
1 c i m, ng t dùng cho m c ích a nhi m. a t c là nhi u, nhi m t c là nhi m v .
Th c hi n nhi u nhi m v .
Các b n nhìn vào ti n trình c a hàm main v i chương trình có ng t :
Chương trình chính ang ch y, ng t x y ra, th c hi n hàm ng t r i quay l i chương trình
chính. Chương trình trong vi i u khi n khác v i ví d ăn cơm nghe i n tho i c a tôi
ch , th i gian th c hi n hàm chính là r t l n,th i gian th c hi n hàm ng t là r t nh , cho
nên th i gian th c hi n hàm ng t không nh hư ng gì n th i gian th c hi n hàm chính
Như v y trong hàm ng t các b n làm 1 vi c, trong hàm chính c c b n làm 1 vi c
Main Program
Main
ISR
Main
ISR
Main
ISR
Main
Program excution without interrut
Program excution with interrupt.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 103 - www.EmbestDKS.com 048
như v y coi như các b n làm ư c 2 vi c( a nhi m) trong 1 quãng th i gian tương i
ng n c mS, ch th c ra t i 1 th i i m vi i u khi n ch th c thi 1 l nh.
Ví d : B n th nghĩ xem làm th nào v a i u ch xung PWM i u ch nh t c
ng cơ , v a c các c m bi n u vào mà t c ng cơ ph thu c u vào c m bi n.
V y ng t là 1 i u ki n nào ó x y ra ng u nhiên mà vi i u khi n có th bi t do
ph n c ng c a vi i u khi n, r i ta căn c vào ó l p tr nh.
* Ví d : V i ng t b nh th i timer, hay b m counter là khi tràn b m thì
ph n c ng c a vi i u khi n s b o có ng t x y ra và nh y n chương trình ph c v
ng t( ISR_ Interrupt Sevice Rountine) 1 cách t ng.
V i ng t ngoài, chân P3.2 ch ng h n, n u ta khai báo trư c chân s d ng chân
P3.2 s d ng cho ng t ngoài ch không ph i s d ng cho m c ích IO thi c khi cú 1
xung xu t hi n t m ch ngo i vi truy n vào chõn P3.2 thì ph n c ng c a vi i u khi n
nh n ra và chuy n t i chương trình ph c v ng t.
V i ng t n i ti p thì c khi có kí t truy n t máy tính xu ng vi i u khi n thì s
có hi n tư ng ng t x y ra.
- Hàm ng t:
C u trúc:
Void Tênhàm(void) interrupt ngu nng t using băngthanhghi
{
// Chuong trinh phuc vu ngat o day
}
Chỳ ý v hàm ng t:
+ Hàm ng t không ư c phép tr l i giá tr hay truy n bi n vào hàm.
+ Tên hàm b t kì.
+ interrupt là t khóa phân bi t hàm ng t v i hàm thư ng.
+ Ngu n ng t t 0 t i 5 theo b ng vector ng t.
+ Băng thanh ghi trên ram ch n t 0 n 3.
T y theo b n vi t hàm ng t cho ngu n nào b n ch n ngu n ng t t b ng sau:
Ng t do C a ch vector
Reset h th ng RST 0000H
Ng t ngoài 0 IE0 0003H
B nh th i 0 TF0 000BH
Ng t ngoài 1 IE1 0013H
B nh th i 1 TF1 001BH
Port n i ti p RI ho c TI 0023H
B nh th i 2 TF2 ho c EXF2 002BH
Riêng ng t Reset không tính, b t u m t 0 và t ng t ngoài 0. Ví d : tôi c n vi t hàm
ng t cho b nh th i timer 1 hàm ng t s là.
void timer1_isr(void) interrupt 3 using 0
{
// Lenh can thuc hien.
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 104 - www.EmbestDKS.com 048
- V using 0: Có 4 băng thanh ghi b n có th ch n cho chương trình ph c v ng t, cái này
cũng không quan tr ng. Trong hàm ng t các b n có th b i t using 0, khi ó vi i u
khi n s t s p x p là dùng băng thanh ghi nào.
- Hàm ng t khác hàm bình thư ng ch nào. Hàm bình thư ng ví d hàm delay, c khi
b n g i nó thì nó s ư c th c hi n, có nghĩa là nó có v trí c nh trong ti n trình hàm
main, có nghĩa là b n bi t nó x y ra khi nào. Còn hàm ng t thì không có ti n trình c
nh, i u ki n ng t có th x y ra b t kì lúc nào trong ti n trình hàm main và c khi nào
có i u ki n ng t thì hàm ng t s ư c g i t ng.
- s d ng ng t ta ph i làm các công vi c sau:
1) Kh i t o ng t: dùng ng t nào thì cho phép ng t ó ho t ng b ng cách gán giá
tr tương ng cho thanh ghi cho phép ng t IE( Interrupt Enable):
EA ET2 ES ET1 EX1 EX0 ET0
i u khi n các ngu n ng t
IE (0: không cho phép; 1: cho phép)
IE.7 EA Cho phép/ không cho phép toàn c c
IE.6 --- Không s d ng
IE.5 ET2 Cho phép ng t do b nh th i 2
IE.4 ES Cho phép ng t do port n i ti p
IE.3 ET1 Cho phép ng t cho b nh th i 1
IE.2 EX1 Cho phép ng t t bên ngoài (ng t ngoài 1)
IE.1 EX0 Cho phép ng t t bên ngoài (ng t ngoài 0)
IE.0 ET0 Cho phép ng t do b nh th i 0
IE là thanh ghi có th x lí t ng bít. Ví d : b n mu n cho phép ngăt timer 1 b n dùng
l nh: ET1=1; Không cho phép n a b n dùng l nh : ET1=0; Ho c b n có th dùng l nh
IE= 0x08; thì bit 3 c a thanh ghi IE t c(IE) s lên 1. Nhưng cách th nh t ti n hơn.
2) C u hình cho ng t: Trong 1 ng t nó l i có nhi u ch ví d : v i ng t timer.
B n ph i c u hình cho nó ch y ch nào, ch timer hay counter, ch 16 bit, hay
8 bit,… b ng cách gán các giá tr tương ng cho thanh ghi TMOD( Timer MODe).
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 105 - www.EmbestDKS.com 048
TMOD Ch n model cho b nh th i 1
7 GATE Ch n model cho b nh th i 1
6 C/T Bít ch n ch c năng m ho c nh th i:
5 M1 Bit ch n ch th nh t
4 M0 Bit ch n ch th 2
M1 M0 Ch Ch c năng
0 0 0 Ch nh th i 13 bit
0 1 1 Ch nh th i 16 bit
1 0 2 Ch t ng n p l i 8
bit
1 1 3 Ch nh th i chia x
3 GATE Bit i u khi n c ng cho b nh th i 0
2 C/T Bit ch n ch c năng m / nh th i cho b nh
th i 0
1 M1 Bit ch n ch th nh t cho b nh th i 0
0 M0 Bit ch n ch th 2 cho b nh th i 0
Ví d tôi c u hình cho b nh th i 1 ch timer,v i b m 8 bit t ng n p l i(auto
reload) dùng l nh sau: TMOD=0x20.
Các b n ng lo vì vi c ph i nh b ng thanh ghi này, các b n không ph i nh nói tr ng
ra như v y, chuy n sang ph n l p trình các b n s ư c hư ng d n làm th nào không
ph i nh , nhưng ch l p trình v i C m i làm ư c còn l p trình Asem thì b t bu c ph i
nh .
3)B t u chương trình có ng t:
-Trư c khi b t u cho ch y chương trình ta ph i cho phép ng t toàn c c ư c
x y ra b ng cách gán EA(Enable All interrupt) b ng 1, thì ng t m i x y ra.
-Thư ng thì ngay vào u chương trình(hàm main) trư c vòng while(1) chúng ta
t công vi c kh i t o, c u hình và cho phép ki m tra ng t. Ví d v i b nh th i timer
ta gán các giá tr phù h p cho thanh ghi TCON( Timer CONtrol).
TCON i u khi n b inh th i
TCON.7 TF1 C tràn c a b nh th i 1. C này ư c set b i
ph n c ng khi có tràn, ư c xoá b i ph n m m,
ho c b i ph n c ng khi b vi x lý tr n trình
ph c v ng t
TCON.6 TR1 Bit i u khi n ho t ng c a b nh th i 1. Bit
này ư c set ho c xoá b i ph n m m i u khi n
b nh th i ho t ng hay ngưng
TCON.5 TF0 C tràn c a b nh th i 0
TCON.4 TR0 Bit i u khi n ho t ng c a b nh th i 0
TCON.3 IE1 C ng t bên ngoài 1 (kích kh i c nh). C này ư c
set b i ph n c ng khi có c nh âm (cu ng) xu t hi n
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 106 - www.EmbestDKS.com 048
trên chân INT1, ư c xoá b i ph n m m, ho c
ph n c ng khi CPU tr n trình ph c v ng t
TCON.2 IT1 C ng t bên ngoài 1 (kích kh i c nh ho c m c). C
này ư c set ho c xoá b i ph n m m khi x y ra
c nh âm ho c m c th p t i chân ng t ngoài
TCON.1 IE0 C ng t bên ngoài 0 (kích kh i c nh)
TCON.0 IT0 C ng t bên ngoài 0 ( kích kh i c nh ho c m c)
Ví d ch y b nh th i timer 1 ta dùng câu l nh: TR1=0;
TR1(Timer Run 1). Còn b n nào thích khó thì:TCON=0xxx;
Còn các lo i ng t khác quá trình tương t , ây là khóa h c cơ b n ch làm vi c v i ng t
timer, trong khóa nâng cao s có các ng t còn l i, tuy nhiên làm vi c ư c v i ng t timer
thì các ng t khác các b n cũng có th làm tương t , các b n làm n ng t nào thì dùng tài
li u tra b ng thanh ghi c a ng t ó. Tài li u tôi s g i cùng bài này.
- Quay tr l i bài h c:
Sau khi kh i t o song và cho ng t timer 1 ch y thì i u gì x y ra?
Khi b t u cho timer 1 ch y thì b m c a timer s m dao ng c a th ch anh, c 12
dao ng c a th ch anh(1 chu kì máy), b m c a timer 1 TL1(Timer Low1) s tăng
1,có th n nói timer 1 m s chu kì máy. i v i ch 8 bít.
TL1 là 1 thanh ghi 8 bít, là b m c a b nh th i rõ r i. Nó m ư c t 0, n 255.
N u nó m n 256 thì b m tràn, TL1 quay vòng l i b ng 0, và c ng t TF1(Timer
Flag 1) t ng ư c gán lên 1(b ng ph n c ng c a vi i u khi n) như 1 công t c t ng
b t, và ng t x y ra.
Còn v i ch 16 bít, b m c a b nh th i còn 1 thanh ghi 8 bít n a là
TH1(Timer high 1), n u c u hình cho timer 1 ho t ng ch 16 bit thì khi TL1 tràn
nó s m sang TH1(TH1 s tăng 1). Như v y ta có th m: 216
chu kì máy( 2 thanh ghi
8+8=16 bít).
Chú ý là khi b m tràn ng t s x y ra. N u ta c n m 256 chu kì máy thì khi kh i t o
ta cho TL1=0; , còn n u không mu n m 256 chu kì mày mà ta ch c n m 100 thôi
ng t ã x y ra r i thì ta f i làm như sau: 256-100 = 156; và khi kh i t o ta gán :
TL1=155; vì m t 155 n 255 là 100 l n thì ng t x y ra.
V i yêu c u c a bài. T o xung t n s 1Khz Chu kì = 1/103
= 0,001 giây= 1 mili
giây=1000 uS= 1000 chu kì máy. V i 10 c p t c , t c là b n ph i t o ra ư c xung
10%, 20%, 30%, 40%, …, 90%, 100%. 1 xung như sau:
5V
0V
T : Chu kì
1000 miro giây.
Kho ng th i gian xung kéo dài 5V là T1. Xung 10% t c là T1/ T= 10%=1/10. Xung 20%
T2/T=2/10…PWM(Thay i r ng xung)
Bây gi tôi m i xin nói v ph n 2.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 107 - www.EmbestDKS.com 048
7.3) Nguyên lí ho t ng:
- Xung PWM: ưa ra m transitor, xung v i r ng l n hơn transitor s m lâu
hơn ng cơ s quay nhanh hơn,dĩ nhiên không tuy n tính. Không có xung ng cơ s
không quay, có xung 100% ng cơ s quay max.Tuy nhiên xung ph i l n hơn 1 m c
nào ó thì m i kh i ng cho ng cơ. Các c tính này các b n tham kh o trong giáo
trình v máy i n, khí c i n, n u các b n c n thông s chính xác.
có th thay i 10 c p t c v i chu kì 1000uS, ta kh i t o cho ng t timer: 100 uS
ng t 1 l n. Trong hàm ng t ki m tra xem ta c n c p xung bao nhiêu % thì ta s gán giá tr
cho nó. C th như sau:
* Hàm kh i t o ng t.
Dùng ng t timer 0, 100 uS ng t 1 l n, dùng ch 2 8 bit t ng n p l i c a
timer (vì mình ch c n m n 100).TL0 n p b ng 156. i v i ch 2 khi tràn b m
TL0 s quay vòng giá tr b ng 0, nhưng sau ó nó l i ư c n p giá tr lưu trong TH0(giá
tr n p l i), do ó ta ch c n gán giá tr choTL0 và TH0 trong hàm kh i t o, còn các ch
khác 16 bit, 2 timer counter 8 bit, khi tràn b m TL0 không ư c n p l i mà ta ph i
t gán l i giá tr cho nó trong hàm ng t.
void khoitaotimer0(void)// Ham khoi tao
{
EA=0;// Cam ngat toan cuc
TMOD=0x02;// Timer 0 che do 2 8 bit auto reload
TH0=0x9B;// Gia tri nap lai 155 doi ra so hex
TL0=0x9B;// Gia tri khoi tao 155 doi ra so hex
ET0=1;// Cho phep ngat timer 0
EA=1;// Cho phep ngat toan cuc
TR0=1;// Chay timer 0 bat dau dem so chu ki may
}
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 108 - www.EmbestDKS.com 048
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 109 - www.EmbestDKS.com 048
* Hàm ng t:
unsigned char dem=0;// Khai bao bien dem de dem tu 1 den 10
unsigned char phantramxung;// Bien chua phan tram xung(0...10)
void timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0;// Dung chay timer 0
TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day
dem++;
if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else P2_0=0;// Neu dem = phan tram xung
if(dem==10) dem=0;// Neu dem du 10 thi gan lai bang 0 de bat dau chu ki moi
TR0=1;// Cho chay timer
}
có th thay i r ng xung thì ta lưu r ng xung vào 1 bi n, vì hàm ng t không
cho truy n bi n vào ta khai báo bi n ó là bi n toàn c c có th gán giá tr m i hàm.
100 uS ng t 1 l n xác nh chu kì 1000 uS ta c n m t 1 n 10 ta khai báo bi n
m.
void timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0;// Dung chay timer 0
TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day
TH0=0xAB;
TL0=0xAB;
….
TR0=1;// Cho chay timer
}
C u trúc hàm ng t timer nào cũng ph i theo, do ch 2 t ng n p l i nên kô c n gán
giá tr cho TH0 và TL0.
V bi n dem s m t 1 n 10 n u b ng 10 k t thúc 1 chu kì 10*100 =1000 uS, ta gán
l i nó b ng 0 sang chu kì m i.
if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else P2_0=0;// Neu dem = phan tram xung
Câu l nh này ki m tra n u m nh hơn phantramxung thì s ưa ra c ng giá tr 1, b ng
ho c l n hơn s ưa ra giá tr 0. Khi vào chương trình chính ta ch vi c thay i giá tr
bi n phantramxung thì r ng xung s thay i.
* Hàm main:
void main(void)
{
khoitaotimer0();
while(1)
{
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 110 - www.EmbestDKS.com 048
phantramxung=9;
delaylong(20000);
phantramxung=4;
delaylong(20000);
}
}
Gi s khi các b n gán phantramxung=4; Thì c m i 100uS ng t x y ra 1 l n, và ki m tra
bi n m. L n u dem=1 <4 nên giá tr P2_0 = 1 m c cao, l n th 2 , 200 uS, dem =2<4
P2_0 = 1 m c cao, l n th 3, 300uS, dem=3<4, P2_0=1 m c cao, l n th 4, 400uS, dem
=4 <4 sai, P2_0=0, b t u xu ng m c th p, có xung t cao xuông th p, dem = 5<4 sai ,
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 111 - www.EmbestDKS.com 048
P2_0=0 m c th p, …, dem =10 <4 sai P2_0 m c th p 1000 uS , 400uS cao, 600uS
th p quay vòng dem=0, ng t l n th 11, dem=1 < 4 , P2_0=1 m c cao, có xung th p lên
cao….
PWM 2 chân P2_0 và P3_5, các b n khai báo thêm 1 bi n phantramxung2 và ưa
thêm dòng l nh sau vào hàm ng t.
if(dem<phantramxung) P3_5=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else P3_5=0;// Neu dem = phan tram xung
Chú ý: Th c ra 1 chu kí như ta v a làm không chính xác 100% là 1Khz, vì ta chưa tính
n dài c a hàm ng t,m i l n ng t 100uS, 10 l n là 1000uS ã , còn th i gian th c
hi n hàm ng t n a, như v y là chu kì c a ta l n hơn 1000uS, t n s s <1Khz, nhưng
th c s sai s ó không áng k . N u các b n mu n chính xác tôi cũng chi u lòng các
b n. Các b n ch y debug, th ch anh úng 12Mhz, quan sat dòng sec xem hàm ng t
di n ra trong bao nhiêu chu kì máy, khi n p giá tr cho TL0 và TH0 các b n l y 155 tr i
giá tr ó ư c gía tr a gán vào, như v y a+th i gian th c hi n hàm ng t úng 100uS.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 112 - www.EmbestDKS.com 048
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 113 - www.EmbestDKS.com 048
Ch vào list mode: Ch n ch , r i quan sát giá tr TMOD r i quay l i i n vào
chương trình.
Chú ý: Vô cùng quan tr ng các b n ch ư c ch y v i ng cơ lo i nh , n u ng cơ lo i
to ph i có m ch i u khi n riêng không là s cháy chip. N u không có m ch i u khi n
các b n có th làm, có th mư n c a tôi, không thì ch u khó ch y mô ph ng.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 114 - www.EmbestDKS.com 048
Nhi m v :
i u khi n Led ma tr n 8x8. Hi n th dòng ch ch y “MTC”
Chu n b :
Led ma tr n 8x8
12345678
9 10 11 12 13 14 15 16
LED MATRIX 1
8x8
Sơ chân led ma tr n 8x8:
Chân C t Hàng Chân C t Hàng
1 4 9 8
2 2 10 5
3 7 11 3
4 6 12 5
5 1 13 8
6 4 14 7
7 3 15 2
8 6 16 6
8.1. L p m ch theo sơ sau:
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 115 - www.EmbestDKS.com 048
Hang6
VCC
Cot3
Cot4
Hang1
Hang3
Hang4
Hang8
Cot7
Hang7
Cot3 Hang3
C2
33p
Cot2
Cot2
Hang1
Hang6
12345678
9 10 11 12 13 14 15 16
LED MATRIX1
8x8
Cot1
Hang5
Cot5
10K
Hang2
Cot1
Hang7
Cot5
C1
33p
Cot6Cot8
Hang5
R2
10K
Hang2
U1
8051
29
30
40
20
31
19
18
9
39
38
37
36
35
34
33
32
1
2
3
4
5
6
7
8
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
PSEN
ALE
VCC
GND
EA
X1
X2
RST
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
Cot6
Hang4
Cot4
+ C3
10uF
R312
3
4
5
6
7
8
9
Cot8
Y1
12M
Cot7
Hang8
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 116 - www.EmbestDKS.com 048
8.2. Nguyªn lý ho¹t ®Ðng:
Hang 1
D4
LED
Cot6
D4
LED
D3
LED
Cot3
D6
LED
D8
LEDCot5
D8
LED
D6
LED
D5
LED
Cot4
Hang 3
D7
LED
D5
LED
D8
LED
D4
LED
D5
LED
D2
LED
D8
LED
D7
LED
D6
LED
D5
LED
Hang 7
D4
LED
D2
LED
D4
LED
D6
LED
D2
LED
D3
LED
D6
LED
D5
LED
D2
LED
D7
LED
D2
LED
D8
LED
Hang 5
D8
LED
D8
LED
D5
LED
D8
LED
D8
LED
Cot8
Cot2
D2
LED
D5
LED
D6
LED
D7
LED
D2
LED
D8
LED
D8
LED
D3
LED
D8
LED
D2
LED
Hang 2
D4
LED
D4
LED
D8
LED
D3
LED
Hang 4
D3
LED
D3
LED
Cot1
D8
LED
D6
LED
D4
LED
D6
LED
D7
LED
D7
LED
Hang 6
D8
LED
D3
LED
D7
LED
D8
LED
Hang 8
D7
LED
Cot7
D3
LED
D5
LED
Mu n cho led sáng, c p i n dương 5V vào hàng, 0V vào c t, dòng 10mA n 15 mA.
Ví d : mu n èn led v trí 5x4 sáng, ta ưa i n áp c t 4(P0_3) xu ng 0V, i n áp hàng
5(P2_5) lên 5V.
Hi n th ch : th ng kê các i m sáng thành ch r i cho các hàng c t i n áp tương ng.
Có th dùng công c debug l y giá tr c ng tương ng v i các led sáng.
Gi ng như quét bàn phím, ưa i n áp 0V ra t ng c t n i v i c ng 0. Như v y s có 8 giá
tr : 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F ph I ưa vào 1 m ng 8 ph n t ,
r i sau ó ưa vào 1 vòng for tăng d n 1 bi n tăng ph n t m ng cot[8].
V i m i l n 1 chân c ng 0 xu ng 0V ta dùng c ng 2 ưa ra 1 giá tr 8 bít i u khi n
trong 1 c t nh ng èn nào sáng. Ví d mu n hàng 1 và hàng 3 sáng thì hàng 1 và 3 có giá
tr 5V còn các hàng khác 0V, ta ư c giá tr 8 bít sau: 0x05 ( 1010 000).
T i m i th i i m ch có m t s èn trên 1 c t sáng, nhưng do ta quét 8 c t v i t n s
nhanh, vì m t có hi n tư ng lưu nh nên ta th y trong 1 th i i m ta th y toàn b kí t .
V i 8 c t l n lư t b ng 0V ta ph I ưa ra tương ng 8 giá tr 8 bit ra c ng 2, do ó ta f I
lưu 8 giá tr ó vào 1 m ng 8 kí t _ kytu1[8], ta s vi t các ký t trên 7 c t. m i kí t
s cách nhau 1 c t không sáng. Ta khai báo m ng kytu1[9] có 9 ph n t và ph n t u
tiên có giá tr y ra c ng 2 là 0x00 t t toàn b c t ó.
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 117 - www.EmbestDKS.com 048
Quá trình i u khi n hi n th như sau:
C t 1, hàng 1, c t 2 hàng 2, …, c t 8 , hàng 8.
làm ch ch y:
Thêm 1 bi n vào i u khi n th t hi n th hàng.
Hi n 1 ch trên led như trên ã ưa ra:
C t 1, hàng 1, c t 2 hàng 2, …, c t 8 , hàng 8.
Mu n ch ó d ch chuy n sang tráI ta hi n th như sau:
C t 1, hàng 2, c t 2 hàng 3, …, c t 7, hàng 8,c t 8 , hàng 1 ký t sau.
C t 1, hàng 3, c t 2 hàng 4, …, c t 7 hàng 1 ký t sau,c t 8 , hàng 2 ký t sau.
8.3) Code:
#include <REGX51.H>
/* Cot tu P0.0 den P0.7
Hang tu P2.0 den P2.7
De quet dua muc logic 0 lan luot ra cong 0
*/
/* Ham tre */
void delay(long time)
{
long n;
for(n=0; n<time; n++)
{
;
}
}
unsigned char kytu1[9];// Mang 9 phan tu chua gia tri cac hang day ra cong 2
unsigned char k=0;// Bien xac dinh cac ky tu
/* Ham nap gia tri hien thi cac ky tu vao mang kytu1
co 8 gia tri dua ra va 1 gia tri khong bat den nao de cac ky tu cach nhau 1 cot */
void mahoa(unsigned char x)
{
switch(x)
{
// Dau trang
case 0: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00;
kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
// Chu M
case 1: { kytu1[0]=0x00; kytu1[1]=0xFF; kytu1[2]=0x02; kytu1[3]=0x04;
kytu1[4]=0x08; kytu1[5]=0x04; kytu1[6]=0x02; kytu1[7]=0xFF; kytu1[8]=0x00;
break;
}
// Chu T
case 2: { kytu1[0]=0x00; kytu1[1]=0x01; kytu1[2]=0x01; kytu1[3]=0x01;
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 118 - www.EmbestDKS.com 048
kytu1[4]=0xFF; kytu1[5]=0x01; kytu1[6]=0x01; kytu1[7]=0x01; kytu1[8]=0x00;
break;
}
// Chu C
case 3: { kytu1[0]=0x00; kytu1[1]=0x7E; kytu1[2]=0x81; kytu1[3]=0x81;
kytu1[4]=0x81; kytu1[5]=0x81; kytu1[6]=0x42; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
// Dau trang
case 4: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00;
kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break; }
}
}
/* Ham quet led ma tran_ vua hien thi vua dich ky tu dan sang trai*/
void hienthi(void)
{
unsigned char n,m,lap;
unsigned char cot[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; // Cac
phan tu
quet cot
for(m=0; m<8 ; m++)// Dich hien thi
{
for(lap=0; lap<10; lap ++) // Lap hien thi
{
for(n=0; n<8 ; n++)// Quet cot
{
if((n+m)<9 )// Neu n+m < 9 hien thi ky tu 1
{
mahoa(k); // Nap cac gia tri ma hoa ky tu dua ra cac hang (Cong 2)
P0=cot[n]; // Day gia tri 0V ra cong 0 (cac cot)
P2=kytu1[n+m];// Day cac gia tri cac hang (ma hoa ky tu) ra cong 2(cac hang)
delay(45);// Tre du de led sang
}
if((n+m) > 7)// Neu n+m >7 hien thi ky tu 2
{
mahoa(k+1);// Nap gia tri ma hoa ky tu tiep de dua ra cac hang(Cong 2)
P0=cot[n];// Day gia tri logic 0V ra cong 0(cac cot)
P2=kytu1[n+m-8];// Day cac gia tri cac hang (ma hoa ky tu) ra cong 2(cac hang)
delay(45);// Tre du de led sang
DKS_GROUP Microcontroller Training Center
DKS_GROUP - 119 - www.EmbestDKS.com 048
}
P0=0xFF;// Day cac cot len cao
P2=0x00;// Dua cac hang xuong thap de tat toan bo cac led.
}
}
}
}
void main(void)
{
while(1)// Vong lap vo han.
{
hienthi(); // Hien thi 2 ky tu dau tien dau trang va chu M
k=k+1; // Tang k de hien thi chu M va chu T lan tiep
if(k==4) k=0;// Quay vong hien thi
}
}
Chú ý:
M ch led sáng u tuy nhiên sáng y u, do l p trên board chúng ta
không l p các linh ki n khuyêch i dòng v_ n dòng led sáng p, u.
Khi l_m m ch các b n thêm các linh ki n khuyêch i ho c n dòng èn
sáng u nh− ULN2003 ho c ULN 2803 −a giá tr logic ra h_ng, dùng
transitor ho c dùng luôn ULN quét c t.

Más contenido relacionado

La actualidad más candente

Đề tài Lập trình C cho họ vi điều khiển 8051
Đề tài Lập trình C cho họ vi điều khiển 8051Đề tài Lập trình C cho họ vi điều khiển 8051
Đề tài Lập trình C cho họ vi điều khiển 8051
Brooklyn Abbott
 
Ly thuyet mach dao dong
Ly thuyet mach dao dongLy thuyet mach dao dong
Ly thuyet mach dao dong
Sy Nam Nguyen
 

La actualidad más candente (20)

Luận văn: Biến tần điều khiển tốc độ cho động cơ không đồng bộ
Luận văn: Biến tần điều khiển tốc độ cho động cơ không đồng bộ Luận văn: Biến tần điều khiển tốc độ cho động cơ không đồng bộ
Luận văn: Biến tần điều khiển tốc độ cho động cơ không đồng bộ
 
Đề tài Lập trình C cho họ vi điều khiển 8051
Đề tài Lập trình C cho họ vi điều khiển 8051Đề tài Lập trình C cho họ vi điều khiển 8051
Đề tài Lập trình C cho họ vi điều khiển 8051
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 6 profinet
Lập trình PLC S7 1200 tiếng Việt-Chuong 6 profinetLập trình PLC S7 1200 tiếng Việt-Chuong 6 profinet
Lập trình PLC S7 1200 tiếng Việt-Chuong 6 profinet
 
Cau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xxCau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xx
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 7 truyền thông điểm điểm
Lập trình PLC S7 1200 tiếng Việt-Chuong 7 truyền thông điểm điểmLập trình PLC S7 1200 tiếng Việt-Chuong 7 truyền thông điểm điểm
Lập trình PLC S7 1200 tiếng Việt-Chuong 7 truyền thông điểm điểm
 
Tài liệu thiết kế mạch in altium
Tài liệu thiết kế mạch in altiumTài liệu thiết kế mạch in altium
Tài liệu thiết kế mạch in altium
 
Bao cao đồ án môn học
Bao cao đồ án môn họcBao cao đồ án môn học
Bao cao đồ án môn học
 
Đồ Án Điều Khiển Động Cơ Bước Dùng IC Số _08304012092019
Đồ Án Điều Khiển Động Cơ Bước Dùng IC Số _08304012092019Đồ Án Điều Khiển Động Cơ Bước Dùng IC Số _08304012092019
Đồ Án Điều Khiển Động Cơ Bước Dùng IC Số _08304012092019
 
Đồ Án Điều Khiển Động Cơ Bước Dùng IC Số
Đồ Án Điều Khiển Động Cơ Bước Dùng IC Số Đồ Án Điều Khiển Động Cơ Bước Dùng IC Số
Đồ Án Điều Khiển Động Cơ Bước Dùng IC Số
 
Ly thuyet mach dao dong
Ly thuyet mach dao dongLy thuyet mach dao dong
Ly thuyet mach dao dong
 
Giao trinh 8051.doc
Giao trinh 8051.docGiao trinh 8051.doc
Giao trinh 8051.doc
 
Đề tài: Đồ án mạch cảm biến ánh sáng, HAY
Đề tài: Đồ án mạch cảm biến ánh sáng, HAYĐề tài: Đồ án mạch cảm biến ánh sáng, HAY
Đề tài: Đồ án mạch cảm biến ánh sáng, HAY
 
đIều khiển logic và plc ts. nguyễn như hiền
đIều khiển logic và plc ts. nguyễn như hiềnđIều khiển logic và plc ts. nguyễn như hiền
đIều khiển logic và plc ts. nguyễn như hiền
 
ĐỒ ÁN: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại!
ĐỒ ÁN: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại!ĐỒ ÁN: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại!
ĐỒ ÁN: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại!
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoán
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoánLập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoán
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoán
 
Đề tài: Đo và điều khiển tốc độ động cơ dùng 8051, HAY
Đề tài: Đo và điều khiển tốc độ động cơ dùng 8051, HAYĐề tài: Đo và điều khiển tốc độ động cơ dùng 8051, HAY
Đề tài: Đo và điều khiển tốc độ động cơ dùng 8051, HAY
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 5 tập lệnh lập trình
Lập trình PLC S7 1200 tiếng Việt-Chuong 5 tập lệnh lập trìnhLập trình PLC S7 1200 tiếng Việt-Chuong 5 tập lệnh lập trình
Lập trình PLC S7 1200 tiếng Việt-Chuong 5 tập lệnh lập trình
 
Đề tài: Thiết kế mạch điều khiển máy bơm nước tự động, HAY
Đề tài: Thiết kế mạch điều khiển máy bơm nước tự động, HAYĐề tài: Thiết kế mạch điều khiển máy bơm nước tự động, HAY
Đề tài: Thiết kế mạch điều khiển máy bơm nước tự động, HAY
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 4 khái niệm lập trình
Lập trình PLC S7 1200 tiếng Việt-Chuong 4 khái niệm lập trìnhLập trình PLC S7 1200 tiếng Việt-Chuong 4 khái niệm lập trình
Lập trình PLC S7 1200 tiếng Việt-Chuong 4 khái niệm lập trình
 
PLC mitsubishi
PLC mitsubishiPLC mitsubishi
PLC mitsubishi
 

Similar a Vdk 8051

Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Nguyen Luc
 
Ky thuat vi dieu khien ----- Thiet ke he thong voi vi dieu khien
Ky thuat vi dieu khien ----- Thiet ke he thong voi vi dieu khien Ky thuat vi dieu khien ----- Thiet ke he thong voi vi dieu khien
Ky thuat vi dieu khien ----- Thiet ke he thong voi vi dieu khien
tiểu minh
 
Nguyen van chinh tran duc thang vy duc loi
Nguyen van chinh tran duc thang vy duc loiNguyen van chinh tran duc thang vy duc loi
Nguyen van chinh tran duc thang vy duc loi
kiencuongk
 
Giáo trình vi điều khiển avr
Giáo trình vi điều khiển avr Giáo trình vi điều khiển avr
Giáo trình vi điều khiển avr
Ky Nguyen Ad
 
Mitsubishi
MitsubishiMitsubishi
Mitsubishi
ddungd4
 
[Giao trinh] vi dieu-khien_8051 - dh tra vinh
[Giao trinh]   vi dieu-khien_8051 - dh tra vinh[Giao trinh]   vi dieu-khien_8051 - dh tra vinh
[Giao trinh] vi dieu-khien_8051 - dh tra vinh
cry_viem
 

Similar a Vdk 8051 (20)

Đề tài: Thiết kế Hệ Thống Quảng Cáo, HAY, 9đ
Đề tài: Thiết kế Hệ Thống Quảng Cáo, HAY, 9đĐề tài: Thiết kế Hệ Thống Quảng Cáo, HAY, 9đ
Đề tài: Thiết kế Hệ Thống Quảng Cáo, HAY, 9đ
 
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thuTailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
 
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
 
ky thuat vi xu lychuong4.ppt
ky thuat vi xu lychuong4.pptky thuat vi xu lychuong4.ppt
ky thuat vi xu lychuong4.ppt
 
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
 
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
 
418 giaotrinh avr
418 giaotrinh avr418 giaotrinh avr
418 giaotrinh avr
 
Giaotrinh avr tech24.vn
Giaotrinh avr tech24.vnGiaotrinh avr tech24.vn
Giaotrinh avr tech24.vn
 
Ky thuat vi dieu khien ----- Thiet ke he thong voi vi dieu khien
Ky thuat vi dieu khien ----- Thiet ke he thong voi vi dieu khien Ky thuat vi dieu khien ----- Thiet ke he thong voi vi dieu khien
Ky thuat vi dieu khien ----- Thiet ke he thong voi vi dieu khien
 
Atmel avr
Atmel avrAtmel avr
Atmel avr
 
Chuong 2 gioi thieu ve cau truc ho vdk 8051
Chuong 2 gioi thieu ve cau truc ho vdk 8051Chuong 2 gioi thieu ve cau truc ho vdk 8051
Chuong 2 gioi thieu ve cau truc ho vdk 8051
 
Nguyen van chinh tran duc thang vy duc loi
Nguyen van chinh tran duc thang vy duc loiNguyen van chinh tran duc thang vy duc loi
Nguyen van chinh tran duc thang vy duc loi
 
Giao tiếp máy tính.pdf
Giao tiếp máy tính.pdfGiao tiếp máy tính.pdf
Giao tiếp máy tính.pdf
 
Giáo trình vi điều khiển avr
Giáo trình vi điều khiển avr Giáo trình vi điều khiển avr
Giáo trình vi điều khiển avr
 
Lap trinh-c-cho-vdk
Lap trinh-c-cho-vdkLap trinh-c-cho-vdk
Lap trinh-c-cho-vdk
 
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVRViết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
 
Bai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucBai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautruc
 
Đố Án Thiết Kế, Xây Dựng Hệ Thống Phun Sương Làm Mát Tự Động.doc
Đố Án Thiết Kế, Xây Dựng Hệ Thống Phun Sương Làm Mát Tự Động.docĐố Án Thiết Kế, Xây Dựng Hệ Thống Phun Sương Làm Mát Tự Động.doc
Đố Án Thiết Kế, Xây Dựng Hệ Thống Phun Sương Làm Mát Tự Động.doc
 
Mitsubishi
MitsubishiMitsubishi
Mitsubishi
 
[Giao trinh] vi dieu-khien_8051 - dh tra vinh
[Giao trinh]   vi dieu-khien_8051 - dh tra vinh[Giao trinh]   vi dieu-khien_8051 - dh tra vinh
[Giao trinh] vi dieu-khien_8051 - dh tra vinh
 

Vdk 8051

  • 1. DKS_GROUP Microcontroller Training Center DKS_GROUP - 1 - www.EmbestDKS.com 04868
  • 2. DKS_GROUP Microcontroller Training Center DKS_GROUP - 2 - www.EmbestDKS.com 04868 M C L C Bài 1: Gi i thi u v vi i u khi n 3 1.1.Tiêu chu n trong l a ch n m t b vi i u khi n 3 1.2.Vi i u khi n và vi x lí 3 1.3.Sơ chân vi i u khi n 8051 3 1.4.M ch 8051 t i thi u 6 1.5.C u trúc sơ kh i c a vi i u khi n 7 1.6.Các thành viên khác c a h 8051 9 1.7.Ram n i và các thanh ghi SFR c a 8051 11 Bài 2.Ngôn ng l p trình cho vi i u khi n (Ph n 1) 12 2.1.C u trúc m t chương trình 12 2.2.Các lo i bi n trong C 13 2.3.Hàm trong C 15 2.4.Toán t cơ b n 15 2.5.C u trúc l nh r nhánh 15 2.6.B ti n x lý 16 Bài 2.Hư ng d n s d ng keil C (Ph n 2) 17 2.1.Kh i t o project 17 2.2.So n th o chương trình 36 2.3.D ch chương trình 41 2.4.Mô ph ng 45 Bài 3. i u khi n O(out) v i Led ơn 50 3.1.L p m ch 50 3.2.Nguyên lý ho t ng 51 3.3.L p trình 52 3.4.N p chương trình 60 3.5.K t qu 61 3.6. i u khi n Led t ng chi c 1 62 3.7. i u khi n Out 62 Bài 4. i u khi n led 7 thanh 67 4.1.L p m ch 67
  • 3. DKS_GROUP Microcontroller Training Center DKS_GROUP - 3 - www.EmbestDKS.com 04868 4.2.Nguyên lý ho t ng 68 4.3.L p trình 69 4.4.N p chíp 75 4.5.K t qu 75 Bài 5. c bàn phím 78 5.1.L p m ch 78 5.2.Nguyên lý quét phím 79 5.3.L p trình 79 Bài 6. i u khi n LCD 16x2 94 6.1.L p m ch 94 6.2.Nguyên lý ho t ng c a LCD 97 6.3.L p trình 97 6.3.1. nh nghĩa con tr 99 6.3.2.Cách s d ng 99 Bài7. i u ch r ng xung 100 7.1.L p m ch theo sơ 101 7.2.Nguyên lý ho t ng 110 Bài 8.Led ma tr n 114 8.1.L p m ch 114 8.2.Nguyên lý ho t ng 116 8.2.Code 117
  • 4. DKS_GROUP Microcontroller Training Center DKS_GROUP - 4 - www.EmbestDKS.com 04868 Chú ý : ây hoàn toàn là ph n lí thuy t, mình ã rút g n t i a, do ó các b n nên c h t. Chưa nên th c hành v i vì tôi s hư ng dân sau. 1.1 Tiêu chu n trong l a ch n m t b vi i u khi n Là kh năng s n sàng áp ng v s lư ng trong hi n t i và tương lai. i v i m t s nhà thi t k i u này là quan trong hơn c . Hi n nay, các b vi i u khi n 8 bit ng u là h 8051 có s lương l n nh t các nhà cung c p a d ng (nhi u ngu n). Nhà cung c p có nghĩa là nhà s n xu t bên c nh nhà sáng ch c a b vi i u khi n. Trong trư ng h p 8051 thì nhà sáng ch c a nó là Intel, nhưng hi n nay có r t nhi u hãng s n xu t nó (cũng như trư c kia ã s n xu t). Các hãng này bao g m: Intel, Atmel, Philips/signe-tics, AMD, Siemens, Matra và Dallas, Semicndictior. B ng a ch c a m t s hãng s n xu t các thành viên c a h 8051. Hãng a ch Website Intel Antel Plips/ Signetis Siemens Dallas Semiconductor www.intel.com/design/mcs51 www.atmel.com www.semiconductors.philips.com www.sci.siemens.com www.dalsemi.com 8051 là m t b x lý 8 bit có nghĩa là CPU ch có th làm vi c v i 8 bit d li u t i m t th i i m. D li u l n hơn 8 bit ư c chia ra thành các d li u 8 bit cho x lý. 8051 có t t c 4 c ng vào - ra I/O m i c ng r ng 8 bit. Các nhà s n xu t ã cho xu t xư ng ch v i 4K byte ROM trên chíp. B ng các c tính c a 8051 u tiên. c tính S lư ng ROM trên chíp RAM B nh th i Các chân vào - ra C ng n i ti p Ngu n ng t 4K byte 128 byte 2 32 1 6 1.2.Vi i u khi n và vi x lí: Xin nh c n cái máy tính c a b n, con chíp Intel hay ADM c a b n là 1 b vi x lí, nó không có RAM, ROM,c ng IO và các thi t b ngo i vi on Chip. Còn vi i u khi n ch a 1 b vi x lí và RAM,ROM, c ng IO, và có th có các thi t b ngo i vi. 1.3. Sơ chân vi i u khi n 8051: Là IC óng v d ng DIP có 40 chân, m i chân có m t kí hi u tên và có các ch c năng như sau: Chân 40: n i v i ngu n nuôI +5V. Chân 20: n i v i t(Mass, GND). Chân 29 (PSEN)(program store enable) là tín hi u i u khi n xu t ra c a 8051, nó cho phép ch n b nh ngoài và ư c n i chung v i chân c a OE (Outout Enable) c a EPROM ngoài cho phép c các byte c a chương trình. Các xung tín hi u PSEN h th p trong su t th i gian thi hành l nh. Nh ng mã nh phân c a chương trình ư c
  • 5. DKS_GROUP Microcontroller Training Center DKS_GROUP - 5 - www.EmbestDKS.com 04868 c t EPROM i qua bus d li u và ư c ch t vào thanh ghi l nh c a 8051 b i mã l nh.(chú ý vi c c ây là c các l nh (khác v i c d li u), khi ó VXL ch c các bit opcode c a l nh và ưa chúng vào hàng i l nh thông qua các Bus a ch và d li u) Chân 30 (ALE : Adress Latch Enable) là tín hi u i u khi n xu t ra c a 8051, nó cho phép phân kênh bus a ch và bus d li u c a Port 0. Chân 31 (EA : Eternal Acess) ư c ưa xu ng th p cho phép ch n b nh mã ngoàI i v i 8051. i v i 8051 thì : EA = 5V : Ch n ROM n i. EA = 0V : Ch n ROM ngo i. 32 chân còn l i chia làm 4 c ng vào ra: Vào ra t c là có th dùng chân ó c m c logic (0;1 tương ng v i 0V ; 5V)vào hay xu t m c logic ra(0;1) P0 t chân 39 32 tương ng là các chân P0_0 P0_7 P1 t chân 1 8 tương ng là các chân P1_0 P1_7 P2 t chân 21 28 tương ng là các chân P2_0 P2_7 P3 t chân 10 17 tương ng là các chân P3_0 P3_7 Riêng c ng 3 có 2 ch c năng m i chân như trên hình v : P3.0 – RxD : chân nh n d li u n i ti p khi giao ti p RS232(C ng COM ). P3.1 _ TxD : phân truy n d li u n i ti p khi giao ti p RS232. P3.2 _ INTO : interrupt 0 , ng t ngoài 0. P3.3 _ INT1: interrupt 1, ng t ngoài 1. P3.4 _T0 : Timer0 , u vào timer0. P3.5_T1 : Timer1, u vào timer 1. P3.6_ WR: Write, i u khi n ghi d li u. P3.7 _RD: Read , i u khi n c d li u. Chân 18, 19 n i v i th ch anh t o thành m ch t o dao ng cho V K P0 P1 P2 P3 Port's Bit P0.0 P1.0 P2.0 P3.0 D0 P0.1 P1.1 P2.1 P3.1 D1 P0.2 P1.2 P2.2 P3.2 D2 P0.3 P1.3 P2.3 P3.3 D3 P0.4 P1.4 P2.4 P3.4 D4 P0.5 P1.5 P2.5 P3.5 D5 P0.6 P1.6 P2.6 P3.6 D6 P0.7 P1.7 P2.7 P3.7 D7 U1 AT89C51 31 19 18 9 12 13 14 15 1 2 3 4 5 6 7 8 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 3011 10 40 20 EA/VP X1 X2 RESET INT0 INT1 T0 T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/PTXD RXD VCC VSS
  • 6. DKS_GROUP Microcontroller Training Center DKS_GROUP - 6 - www.EmbestDKS.com 04868 T n s th ch anh thư ng dùng trong các ng d ng là : 11.0592Mhz(giao ti p v i c ng com máy tính) và 12Mhz T n s t i a 24Mhz. T n s càng l n V K x lí càng nhanh. Dao ng c a th ch anh S1 S2 S3 S4 S5 S6 P1 P2 Riêng c ng 3 có thêm ch c năng như dư i ây P3.0 – RxD : chân nh n d li u n i ti p khi giao ti p RS232(C ng COM ). P3.1 _ TxD : ph n truy n d li u n i ti p khi giao ti p RS232. P3.2 _ INTO : interrupt 0 , ng t ngoài 0. P3.3 _ INT1: interrupt 1, ng t ngoài 1. P3.4 _T0 : Timer0 , u vào timer0. P3.5_T1 : Timer1, u vào timer 1. P3.6_ WR: Write, i u khi n ghi d li u. P3.7 _RD: Read , i u khi n c d li u. Chân 18, 19 n i v i th ch anh t o thành m ch t o dao ng cho V K T n s th ch anh thư ng ư c dùng trong các ng d ng là : 11.0592Mhz(giao ti p v i c ng com máy tính) và 12Mhz T n s t i a 24Mhz. T n s càng l n V K x lý càng nhanh. U3 8051 31 19 18 9 39 38 37 36 35 34 33 32 20 40 EA/VP X1 X2 RESET P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 GND VCC R1 10K 5VDC C1 33p + C3 10uF/25V C2 33p R7 R4 10Kx9 R9 12Mhz
  • 7. DKS_GROUP Microcontroller Training Center DKS_GROUP - 7 - www.EmbestDKS.com 04868 M ch này chưa có kh i ngu n t o ngu n 5V các b n dùng con IC sau: Sơ chân: Gi i thi u IC n áp 7805 : u vào > 7V u ra 5V 500mA. M ch n áp: c n cho V K vì n u ngu n cho V K không n nh thì s treo V K, không ch y úng, ho c reset liên t c, th m chí là ch t chíp. M ch ngu n U1 LM7805/TO 1 2 3 VIN GND VOUT + C3 10uF/25V 12VDC In C2 104 5VDC Out C1 104 1.4. M ch vi i u khi n cơ b n 12Mhz U1 8051 19 18 9 40 20 X1 X2 RESET VCC VSS + C3 10uF/25V 5VDC R1 10K C2 33p C1 33p U6 LM7805/TO 1 3 2 VIN VOUT GND
  • 8. DKS_GROUP Microcontroller Training Center DKS_GROUP - 8 - www.EmbestDKS.com 04868 1.5. C u trúc vi i u khi n 89c51 Chú ý:Sơ kh i bên trong con 8051 có nh ng tài nguy n . Interrupt, Ram, Timer, Serial prort. 1.6.Các thành viên khác c a h 8051: Có hai b vi i u khi n thành viên khác c a h 8051 là 8052 và 8031. B vi i u khi n 8052: 8052 có t t c các c tính chu n c a 8051 ngoài ra nó có thêm 128 byte RAM và m t b nh th i n a. Hay nói cách khác là 8052 có 256 byte RAM và 3 b nh th i. Nó cũng có 8K byte ROM. Trên chíp thay vì 4K byte như 8051. B ng : So sánh các c tính c a các thành viên h 8051. c tính 8051 8052 ROM trên chip 4K byte 8K byte RAM 128 byte 256 byte B nh th i 2 3 C ng n i ti p 1 1 Ngu n ng t 6 8 Do v y t t c m i chương trình vi t cho 8051 u ch y trên 8052 nhưng i u ngư c l i là không úng. c bi t : M t nhà s n xu t chính c a h 8051 khác n a là Philips Corporation. Hàng này có m t d i l a ch n d ng l n cho các b vi i u khi n COUNTER INPUTS OS C INTERRUP T CONTROL 4 I/O PORTS BUS CONTRO L SERIAL PORT EXTERNAL INTERRUPTS CPU ON - CHIP RAM ETC TIMER 0 TIMER 1 ADDRESS/DAT A TXD RXDP P P P
  • 9. DKS_GROUP Microcontroller Training Center DKS_GROUP - 9 - www.EmbestDKS.com 04868 h 8051. Nhi u s n ph m c a hãng ã có kèm theo các c tính như các b chuy n i ADC, DAC, chân PWM, c ng I/0 m r ng . Update s n ph m 8051 m i t i các trang web c a các nhà s n xu t a ch ã có ph n gi i thi u. Ch y u:www.atmel.com 1.7.Ram n i và các thanh ghi C c thanh ghi SFR cú a ch n m gi a 80H và FFH các a ch này F0 F7 F6 F5 F4 F3 F2 F1 F0 E0 E7 E6 E5 E4 E3 E2 E1 E0 D0 D7 D6 6D 6C 6B 6A 69 68 B8 - - - BC BB BA B9 B8 B0 B7 B6 B5 B4 B3 B2 B1 B0 A8 AF AE AD AC AB AA A9 A8 A0 A7 A6 A5 A4 A3 A2 A1 A0 99 Không nh a ch t ng bít 98 9F 9E 9D 9C 9B 9A 99 98 90 97 96 95 94 93 92 91 90 8D Không nh a ch t ng bít 8C Không nh a ch t ng bít 8B Không nh a ch t ng bít 8A Không nh a ch t ng bít 89 Không nh a ch t ng bít 88 8F 8 E 8D 8C 8B 8A 89 88 87 Không nh a ch t ng bít 83 Không nh a ch t ng bít 82 Không nh a ch t ng bít 81 Không nh a ch t ng bít 80 87 86 8 5 84 83 82 81 80 THANH GHI CH C NĂNG ĂC BIÊT
  • 10. DKS_GROUP Microcontroller Training Center DKS_GROUP - 10 - www.EmbestDKS.com 04868 trên 80H, vì các a ch t 00 n 7FH là a ch c a b nh RAM bên trong 8051. Không ph i t t c m i a ch t 80H n FFH u do SFR s d ng, nhưng v trí ngăn nh t 80H n FFH chưa dùnglà d tr và l p trình viên 8051 cũng không ư c s d ng. B ng : ch c năng c a thanh ghi ch c năng c bi t SFR SFR nh a ch t ng bit( nh ng thanh ghi c n nh i khi l p trình cơ b n C) Thanh ghi / Bit Ký hi u Ch c năng TMOD Ch n model cho b nh th i 1 7 GATE Bít i u khi n c ng. Khi ư c set lên 1, b nh th i ch ho t ng trong khi INT1 m c cao 6 C/T Bít ch n ch c năng m ho c nh th i: 1= m s ki n 0= nh th i trong m t kho ng th i gian 5 M1 Bit ch n ch th nh t 4 M0 Bit ch n ch th 2 M1 M0 Ch⠮РChøc n¨ng 0 0 0 Ch nh th i 13 bit 0 1 1 Ch nh th i 16 bit 1 0 2 Ch t ng n p l i 8 bit 1 1 3 Ch nh th i chia x 3 GATE Bit i u khi n c ng cho b nh th i 0 2 C/T Bit ch n ch c năng m / nh th i cho b nh th i 0 1 M1 Bit ch n ch th nh t cho b nh th i 0 0 M0 Bit ch n ch th 2 cho b nh th i 0 TF1 TR1 TF1 TR0 IE1 IT1 IE0 IT0 Thanh ghi / Bit Ký hi u Ch c năng TCON i u khi n b inh th i TCON.7 TF1 C tràn c a b nh th i 1. C này ư c set b i ph n c ng khi có tràn, ư c xoá b i ph n m m, ho c b i ph n c ng khi b vi x lý tr n trình ph c v ng t TCON.6 TR1 Bit i u khi n ho t ng c a b nh th i 1. Bit này ư c set ho c xoá b i ph n m m i u khi n b nh th i ho t ng hay ngưng TCON.5 TF0 C tràn c a b nh th i 0 TCON.4 TR0 Bit i u khi n ho t ng c a b nh th i 0 TCON.3 IE1 C ng t bên ngoài 1 (kích kh i c nh). C này ư c set b i ph n c ng khi có c nh âm (cu ng) xu t hi n trên chân INT1, ư c xoá b i ph n m m, ho c ph n c ng khi CPU tr n trình ph c v ng t
  • 11. DKS_GROUP Microcontroller Training Center DKS_GROUP - 11 - www.EmbestDKS.com 04868 TCON.2 IT1 C ng t bên ngoài 1 (kích kh i c nh ho c m c). C này ư c set ho c xoá b i ph n m m khi x y ra c nh âm ho c m c th p t i chân ng t ngoài TCON.1 IE0 C ng t bên ngoài 0 (kích kh i c nh) TCON.0 IT0 C ng t bên ngoài 0 ( kích kh i c nh ho c m c) EA ET2 ES ET1 EX1 EX0 ET0 i u khi n các ngu n ng t IE (0: không cho phép; 1: cho phép) IE.7 EA Cho phép/ không cho phép toàn c c IE.6 --- Không s d ng IE.5 ET2 Cho phép ng t do b nh th i 2 IE.4 ES Cho phép ng t do port n i ti p IE.3 ET1 Cho phép ng t cho b nh th i 1 IE.2 EX1 Cho phép ng t t bên ngoài (ng t ngoài 1) IE.1 EX0 Cho phép ng t t bên ngoài (ng t ngoài 0) IE.0 ET0 Cho phép ng t do b nh th i 0 CHÚ Ý 3 thanh ghi này cũng r t cơ b n, nh tên thanh ghi, tên các bít trong thanh ghi, ch c năng t ng thanh ghi và t ng bít trong thanh ghi. 1.8.Gi i thi u sơ qua các ngu n ng t: Ng t do C a ch vector Reset h th ng RST 0000H Ng t ngoài 0 IE0 0003H B nh th i 0 TF0 000BH Ng t ngoài 1 IE1 0013H B nh th i 1 TF1 001BH Port n i ti p RI ho c TI 0023H B nh th i 2 TF2 ho c EXF2 002BH Timer * ** * ** * ** Main Program Main ISR Main ISR Main ISR Main Program excution without interrut Program excution with interrupt.
  • 12. DKS_GROUP Microcontroller Training Center DKS_GROUP - 12 - www.EmbestDKS.com 04868 M t chương trình chính không có ng t thì ch y liên t c, còn chương trình có ng t thì c khi nào i u ki n ng t ư c m bào thì con tr s nh y sang hàm ng t th c hi n xong hàm ng t l i quay v úng ch cũ và th c hi n ti p chương trình. Ta có 1 ví d như sau: B n ang ăn cơm , có ti ng i n tho i , b n t bát cơm ra nghe i n tho i , nghe xong l i quay v bưng bát cơm lên ăn ti p. Thì quá trình ăn cơm c a b n là chương trình chính,có i n tho i g i n là i u ki n ng t, b n ra nghe i n tho i là th c hi n chương trình ng t(Interrupt Service Rountine),quay v ăn cơm ti p là ti p t c th c hi n chương trình chính. Ng t i v i ngư i m i h c vi i u khi n là r t khó hi u, vì a s các tài li u u không gi i thích ng t làm gì. Có nhi u lo i ng t khác nhau nhưng t t c u có chung 1 c i m, ng t dùng cho m c ích a nhi m. a t c là nhi u, nhi m t c là nhi m v . Th c hi n nhi u nhi m v .Các b n nhìn vào ti n trình c a hàm main v i chương trình có ng t : Chương trình chính ang ch y, ng t x y ra, th c hi n hàm ng t r i quay l i chương trình chính. Chương trình trong vi i u khi n khác v i ví d ăn cơm nghe i n tho i c a tôi ch , th i gian th c hi n hàm chính là r t l n,th i gian th c hi n hàm ng t là r t nh , cho nên th i gian th c thi hàm ng t không nh hư ng nhi u l m ên ch c năng hàm chính. Như v y trong hàm ng t các b n làm 1 vi c, trong hàm chính các b n làm 1 vi c như v y coi như các b n làm ư c 2 vi c( a nhi m) trong 1 quang th i gian tương i ng n cõ mS, ch th c ra t i 1 th i i m vi i u khi n ch th c thi 1 l nh. Ví d : B n th nghĩ xem làm th nào v a i u ch xung PWM i u ch nh t c ng cơ , v a c các c m bi n u vào mà t c ng cơ ph thu c u vào c m bi n. 2.1.C u trúc m t chương trình: // ính kèm các file #include <file.h> #include <file.c> //Khai báo bi n toàn c c unsigned char x,y; int z; long n=0; //Khai báo và nh nghĩa các hàm void Hàm1(void) { …//Các câu l nh } void Hàm2(unsigned char x) { …//Các câu l nh }
  • 13. DKS_GROUP Microcontroller Training Center DKS_GROUP - 13 - www.EmbestDKS.com 04868 //Hàm chính b t bu c chương trình nào cũng ph I có void main(void) { …//Các câu l nh } Các câu l nh trong hàm chính có th có l i g i các hàm ã khai báo trên ho c không Khi có l i g i hàm nào thì chương trình nh y n hàm ó th c hi n hàm ó xong con tr l i quay v chương trình chính(hàm main) th c hi n ti p các hàm ho c câu l nh. Các câu l nh trong C k t thúc b ng d u “;” Các l i gi I thích ư c t trong d u: M u b ng “/*” k t thúc b ng “*/” N u l i gi I thích trên 1 dòng thì có th dùng d u: “//” Khi l p trình nên gi I thích các câu l nh kh i l nh làm gì v sau khi chương trình l n d s a l i. 2.2.Các lo i bi n trong C: D ng bi n S Bit S Byte Mi n giá tr char 8 1 -128 n +127 unsigned char 8 1 0 n 255 short 16 2 -32,768 n +32,767 unsigned short 16 2 0 n 65,535 int 16 2 -32,768 n +32,767 unsigned int 16 2 0 n 65,535 long 32 4 -2,147,483,648 n+2,147,483,647 unsigned long 32 4 0 n 4,294,697,295 Khai báo bi n C u trúc : Ki u bi n Tên bi n VD: unsigned char x; Khi khai báo bi n có th gán luôn cho bi n giá tr ban u. VD : Thay vì: unsigned char x; x=0; Ta ch c n : unsigned char x=0; Có th khai báo nhi u bi n cùng m t ki u m t lúc VD: unsigned int x,y,z; Ngoài ra dùng cho vi i u khi n trình d ch chuyên d ng còn h tr các lo i bi n sau: D ng bi n S Bit S Byte Mi n giá tr bit 1 0 0 ; 1 sbit 1 0 0 ; 1
  • 14. DKS_GROUP Microcontroller Training Center DKS_GROUP - 14 - www.EmbestDKS.com 04868 sfr 8 1 0 n 255 sf16 16 2 0 n 65,535 VD: Ngoài ra ,chúng ta có th nh nghĩa bi n ki u bít hay ki u SFR (special function register) Bit Kiemtra; Sfr P10=0x90; VD: Bit Kiemtra; Sfr P10=0x90; Các SFR không c n ph i h c thu c ch c n bi t, và chúng ư c khai báo trong thư vi n AT89X51.H và AT89X52.H 2.3.Hàm trong C: Hàm trong C có c u trúc như sau Có 2 lo i hàm Hàm tr l i giá tr : C u trúc: Ki u giá tr hàm tr l ii Tên hàm (Bi n truy n vào hàm) { // Các l nh x lý ây } VD : unsigned char Cong(unsigned char x, unsigned char y) { // Các l nh x lý ây } Hàm không tr l i giá tr C u trúc: void Tên hàm (Bi n truy n vào hàm) { // Các câu l nh x lý ây } VD d : void Cong(unsigned char x, unsigned char y) { // Các câu l nh x lý ây } Hàm có th truy n vào bi n ho c không VD Hàm không có bi n truy n vào: unsigned char Tênhàm(void) { // Các câu l nh x lí ây } Hàm có bi n truy n vào: void Tênhàm(unsigned char x)
  • 15. DKS_GROUP Microcontroller Training Center DKS_GROUP - 15 - www.EmbestDKS.com 04868 { // Các câu l nh x lí ây } S bi n truy n vào tùy ý(mi n b nh ), ngăn cách b i d u “,” Ví d : Void TênHàm(unsigned char x, unsigned char y, unsigned char z) { // Các câu l nh x lí ây } Ngoài ra riêng cho vi i u khi n ph n ph m Keil C còn có m t lo i hàm ó là hàm ng t: C u trúc: Void Tênhàm(void) interrupt ngu nng t using băngthanhghi { } Hàm ng t không ư c phép tr l i giá tr hay truy n tham bi n vào hàm. Tên hàm b t kì Interrupt là t khóa ch hàm ng t Ngu n ng t t 0 t i 5 theo b ng vector ng t Ng t do C a ch vector Reset h th ng RST 0000H Ng t ngoài 0 IE0 0003H B nh th i 0 TF0 000BH Ng t ngoài 1 IE1 0013H B nh th i 1 TF1 001BH Port n i ti p RI ho c TI 0023H B nh th i 2 TF2 ho c EXF2 002BH Không tính ng t reset h th ng b t u m t ng t ngoài 0 Băng thanh ghi trên ram ch n t 0 n 3 2.4.Các toán t cơ b n: PhÐp g¸n: = VD: x=y; // x ph¶i là bi n y có th là bi n ho c giá tr nhưng ph i phù h p ki u Phép c ng: + Phép tr : - Phép nhân: * Phép chia: / Các toán t logic: B ng : == And: && Or: || Not: ! D ch trái: << D ch ph i: >> 2.5.Các c u trúc l nh r nhánh, ki m tra thư ng dùng: Câu l nh r nhánh if:
  • 16. DKS_GROUP Microcontroller Training Center DKS_GROUP - 16 - www.EmbestDKS.com 04868 C u trúc: if ( i uki n) { // Các câu l nh x lí } Gi i thích: N u i uki n úng thì x lí các câu l nh bên trong còn sai thì nh y qua Câu l nh l a ch n switch: C u trúc: switch(Bi n) { case giatr 1: { // Các câu l nh break; } case giatr 2: { // Các câu l nh break; } case giatr 3: { // Các câu l nh break; } … case giatr n: { // Các câu l nh break; } } Gi i thích : Tùy vào Bi n có giatr 1 thì th c hi n các câu l nh sau ó tương ng r i thoát kh i c u trúc nh câu l nh break; Bi n có giatr 2 thì th c hi n các câu l nh sau ó tương ng r i thoát …. Bi n có giatr n thì th c hi n các câu l nh sau ó tương ng r i thoát Câu l nh vòng l p xác nh for: C u trúc: for( n=m; n<l; n++) {// Các câu l nh x lí } Gi I thích: Trong ó m,l là giá tr (m>l), còn n là bi n Th c hi n l p các câu l nh (l-m) l n Câu l nh vòng l p không xác nh while: C u trúc: While( i u ki n) { //Các câu l nh } Gi I thích: Th c hi n l p các câu l nh khi i u ki n úng, n u câu l nh sai thi thoát kh i vòng l p 2.6. B ti n x lý: #define : Dùng nh nghĩa. Ví d : #define dung 1 #define sai 0 có nghĩa là dung có giá tr b ng 1. Trong chương trình có th có o n code như sau: bit kiemtra if (bit==dung) { // Các câu l nh} if (bit==sai) { // Các câu l nh} Vi c này giúp l p trình d s a l i hơn. M t s web hay : www.dientuvietnam.net www.atmel.com www.svbkol.org www.keil.com www.diendandientu.com www.iguanalabs.com
  • 17. DKS_GROUP Microcontroller Training Center DKS_GROUP - 17 - www.EmbestDKS.com 04868 www.microchip.com www.elechtro-tech-online.com www.diendansv.hutech.edu.vn www.ttvnol.com www.8052.com www.kmitl.ac.th www.ftdichip.com Bài 2 (Ti p) Ph n 2: S d ng Keil C. Sau khi cài t 1> Kh i t o cho Project:
  • 18. DKS_GROUP Microcontroller Training Center DKS_GROUP - 18 - www.EmbestDKS.com 04868 t o 1 project m i ch n Project New project như sau:
  • 19. DKS_GROUP Microcontroller Training Center DKS_GROUP - 19 - www.EmbestDKS.com 04868 ư c hình sau:
  • 20. DKS_GROUP Microcontroller Training Center DKS_GROUP - 20 - www.EmbestDKS.com 04868 ánh tên và chuy n n thư m c b n lưu project. B n nên t o m i m t thư m c cho 1 project. R i ch n Save.
  • 21. DKS_GROUP Microcontroller Training Center DKS_GROUP - 21 - www.EmbestDKS.com 04868 ư c hình sau:
  • 22. DKS_GROUP Microcontroller Training Center DKS_GROUP - 22 - www.EmbestDKS.com 04868 Trong này có 1 lo t các hãng i n t s n xu t 8051. B n l p trình cho con nào thì ch n con y ,kích chu t vào các d u + m r ng các con IC c a các hãng. ây ta l p trình cho AT89C51 c a hãng Atmel nên ta ch n như sau:
  • 23. DKS_GROUP Microcontroller Training Center DKS_GROUP - 23 - www.EmbestDKS.com 04868 Khi ch n chip thì ngay l p t c cái b ng hi n ra 1 s tính năng c a chíp các b n có th nhìn th y. 8051 based Fully Static 24Mhz … . Nhap OK ư c c a s như sau:
  • 24. DKS_GROUP Microcontroller Training Center DKS_GROUP - 24 - www.EmbestDKS.com 04868 Ch n No. Ch n Yes ch làm cho file l p trình c a b n thêm n ng . ư c c a s sau:
  • 25. DKS_GROUP Microcontroller Training Center DKS_GROUP - 25 - www.EmbestDKS.com 04868 t o 1 file code các b n ch n File New ho c n Ctrl+N. Như sau:
  • 26. DKS_GROUP Microcontroller Training Center DKS_GROUP - 26 - www.EmbestDKS.com 04868 ư c c a s như sau:
  • 27. DKS_GROUP Microcontroller Training Center DKS_GROUP - 27 - www.EmbestDKS.com 04868 Cho c a s Text 1 to ra ư c như sau:
  • 28. DKS_GROUP Microcontroller Training Center DKS_GROUP - 28 - www.EmbestDKS.com 04868 Ti p theo b n ch n File Save As… ho c Ctrl+S. nh file m c dù chưa có gì. Như sau:
  • 29. DKS_GROUP Microcontroller Training Center DKS_GROUP - 29 - www.EmbestDKS.com 04868 ư c c a s sau:
  • 30. DKS_GROUP Microcontroller Training Center DKS_GROUP - 30 - www.EmbestDKS.com 04868 Các b n nh p tên vào text box file name. Chú ý tên gì cũng ư c nhưng không ư c thi u uôi m r ng .C . Nh n Save. ư c c a s sau:
  • 31. DKS_GROUP Microcontroller Training Center DKS_GROUP - 31 - www.EmbestDKS.com 04868 Trong ô bên trái màn hình, c a s project workspace, các b n m r ng cái target 1 ra ư c như sau:
  • 32. DKS_GROUP Microcontroller Training Center DKS_GROUP - 32 - www.EmbestDKS.com 04868 Nh p chu t ph i vào thư m c Suorce Group1 ư c hình như trên. Ch n Add files to Group “Source Group1” add file vào project. ư c như sau:
  • 33. DKS_GROUP Microcontroller Training Center DKS_GROUP - 33 - www.EmbestDKS.com 04868 Ch n file .C mà các b n v a nh . C a tôi là Dieukhienled_IO . Nh n Add 1 l n r i n Close. N u b n n Add 2 l n nó s thông báo là file ã add b n ch vi c OK r i nh n Close. ư c như sau:
  • 34. DKS_GROUP Microcontroller Training Center DKS_GROUP - 34 - www.EmbestDKS.com 04868 Bây gi nhìn trong Source Group 1 ã th y file Dieukhienled_IO.C . Các b n nh p chu t ph i vào vùng so n th o file Dieukhienled_IO.C như sau, thêm file thư vi n.Ch n Insert ‘#include <AT89X51.H>”
  • 35. DKS_GROUP Microcontroller Training Center DKS_GROUP - 35 - www.EmbestDKS.com 04868 Các b n ã bi t file ó là gì n u các b n ã h c bài trư c kí theo yêu c u c a tôi. ư c như sau:
  • 36. DKS_GROUP Microcontroller Training Center DKS_GROUP - 36 - www.EmbestDKS.com 04868 Ph n cu i cùng c a công vi c kh i t o là các b n vi t l i gi i thích cho d án c a mình .Ph n này r t c n thi t vì nó ngư i khác hi u mình làm gì tron project này và khi mình c n s d ng l i code c l i mình còn bi t nó là cái gì. Các b n t o l i gi i thích theo m u sau:
  • 37. DKS_GROUP Microcontroller Training Center DKS_GROUP - 37 - www.EmbestDKS.com 04868 2> So n th o chương trình: Các b n vi t chương trình c a bài 3 vào ây làm ví d . Khi vi t xong 1 dòng l nh nên gi i thích dòng l nh ó làm gì. Như sau:
  • 38. DKS_GROUP Microcontroller Training Center DKS_GROUP - 38 - www.EmbestDKS.com 04868 Các b n nên chia chương trình như tôi làm. V i 1 file nh thì nó hơi rư m rà. Nhưng v i 1 file l n kho ng 1000 dòng code thì nó l i r t sáng s a. Các b n nên t o 1 file m u r i nh vào 1 file text âu ó m i l n dùng ch vi c copy r i paste qua ch không nên m i l n t o m t cái như v y l i ph n tác d ng. Phía trên là ph n b ti n x lí và khai báo bi n. Ti p theo là vi t hàm tr .
  • 39. DKS_GROUP Microcontroller Training Center DKS_GROUP - 39 - www.EmbestDKS.com 04868 Ti p theo là vi t hàm main. Như sau:
  • 40. DKS_GROUP Microcontroller Training Center DKS_GROUP - 40 - www.EmbestDKS.com 04868 R i nh n Ctrl+S. Ho c ch n File Save nh file v a so n th o. Các b n nhìn vào code có th các b n ã hi u con AT89C51 nó làm gì n u các b n ã n m v ng các bài trư c. Còn n u không hi u thì tôi s gi i thích l i cho các b n.
  • 41. DKS_GROUP Microcontroller Training Center DKS_GROUP - 41 - www.EmbestDKS.com 04868 ây là sơ nguyên lí c a 1 led. Project là 8 led(vì ph c v cho bài 3) nhưng tôi ch gi i thích 1 led là các b n hi u. M c ích là làm con led nh p nháy. + C3 10uF/25V C2 33p C1 33p X1 19 X2 18 RESET 9 P1.0 1 VCC 40 VSS 20 U1 8051 R1 10K 5VDC 12Mhz D1 LED R2 470 Bi n Led1 ư c khai báo (gán cho) ch n P0_1 c a vi i u khi n b ng câu l nh sbit Led1=P1^0; . Giá tr b t bat ư c nh nghĩa là 0. Khi các b n gán : Led1=bat; trong hàm main thì chân P1_0 c a AT89C51 có m c logic là 0V. Theo sơ nguyên lí: 5V Tr 470 Led1 P1_0 (0 V). Có chênh l ch áp có dòng i n qua led Led sáng. Các b n có th tính tóan ch này d dàng là t i sao l i là tr 470 Ôm. i n áp m t led là Uak (0,6 n 0,7V) l y =0,6V. i n áp chân P1_0 là 0V. i n áp hai u tr : 5V -0,6V = 4,4V. Dòng qua tr = dòng qua led = 4,4V/470 Ôm x p x 10 mA. V i dòng 10mA n 15mA là led dòng sáng và sáng r t p. N u dòng y u thì led m , còn dòng l n thì các b n bi t sao r i y. Khi các b n gán: Led1= tat; t c là chân P1_0 có giá tr 1 tương ng i n áp c a nó là 5V . Hi u i n th gi a hai u +5V và P1_0 là 0V . Nên không có dòng qua led Led t t.Nhưng n u trong hàm main các b n vi t ch có như sau: While(1) { Led1=bat; Led1=tat; } Khi ch y debug thì v n th y led nh p nháy. Nhưng khi n p chương trình vào chíp l p vào m ch thì led không nháy ho c ch sáng m ho c t t ngóm. Vì l nh Led1=bat; là l nh 1 chu kì máy , t n s th ch anh là 12 Mhz, 1 chu kì máy có th i gian là 1uS. V a b t lên 1 uS r i l i t t ngay. Led không áp ng ư c t n s cao v y nên không nh p nháy. Do ó c n t i hàm tr . B t led lên tr 1 th i gian khá lâu(0,5 gi y), r i t t led i khá lâu(0,5s) r i l i b t l i t o thành vòng l p s ư c led nh p nháy. Tác d ng c a câu l nh while(1) . i u ki n bên trong vòng while là 1 luôn luôn úng nên nó là vòng l p vô h n l n. N u không có vòng while(1) thì led c a các b n ch sáng lên 1 l n r i t t
  • 42. DKS_GROUP Microcontroller Training Center DKS_GROUP - 42 - www.EmbestDKS.com 04868 vì h t chương trình r i còn âu. Ph n này n u b n nào m i h c i n t th nào cũng có câu h i th c m c c nh n tin ho c g i mail. 3> D ch chương trình: So n th o song nh n Ctrl +S nh . Nh xong các b n biên d ch chương trình b ng cách n phím F7 ho c ch n Build target là bi u tư ng ngay trên c a s workspace như trên hình: Các b n s th y như sau:
  • 43. DKS_GROUP Microcontroller Training Center DKS_GROUP - 43 - www.EmbestDKS.com 04868 Trong c a s Output Window ngay phía trên dòng ch này có các dòng ch Compiling … Linking… Program Size: data =17.0 code =96 … 0 error , 0 Warning . Như v y là OK. N u không ư c như v y nó s báo l i và các b n ki m tra xem so n th o úng chưa. Tôi ví d xóa 1 d u ; trong hàm main dòng : Led1=bat; , gi b i thành Led1= bat .R i d ch l i ( n F7) trình biên d ch s báo như sau:
  • 44. DKS_GROUP Microcontroller Training Center DKS_GROUP - 44 - www.EmbestDKS.com 04868 Syntax error near tre. Sai cú pháp g n tr . Các b n nh p úp trái chu t vào dòng thông báo này con tr s ngay dòng dư i dòng có l i thêm d u nhìn d u mũi tên màu xanh hình dư i ây, gõ vào d u ; và d ch l i là OK.” Trong chương trình l n ôi khi con tr ch n g n ch có l i thôi và b n ph i t tìm ra l i.”
  • 45. DKS_GROUP Microcontroller Training Center DKS_GROUP - 45 - www.EmbestDKS.com 04868 Sau khi d ch l i ư c hình sau:
  • 46. DKS_GROUP Microcontroller Training Center DKS_GROUP - 46 - www.EmbestDKS.com 04868 4> Ch y mô ph ng và s a l i. Trư c khi debug chúng ta kh i t o như sau. Các ban vào Option for target 1.
  • 47. DKS_GROUP Microcontroller Training Center DKS_GROUP - 47 - www.EmbestDKS.com 04868 ư c b ng sau. Nh p t n s th ch anh là 12 Mhz úng v i t n s th ch anh.
  • 48. DKS_GROUP Microcontroller Training Center DKS_GROUP - 48 - www.EmbestDKS.com 04868 Ch n OK. debug các b n nh n t h p phím Ctrl + F5. Ho c nh n vào icon có ch D m u trong cái kính lúp trên thanh công c . ư c c a s sau:
  • 49. DKS_GROUP Microcontroller Training Center DKS_GROUP - 49 - www.EmbestDKS.com 04868 Trong menu Peripherals(các thi t b ngo i vi) ch n IO port , Port 1. ư c như sau:
  • 50. DKS_GROUP Microcontroller Training Center DKS_GROUP - 50 - www.EmbestDKS.com 04868 Các b n th y 1 c a s nh Parallel Port 1 xu t hi n ó là cái mô ph ng cho c ng 1 c a AT89C51. D u tích tương ương chân m c cao(5V) , không tích chân m c th p (0V). Trong menu peripherals còn các ngo i vi khác như timer , interrupt, serial. Các bài sau dùng n các b n nh l y trong này. ch y chương trình các b n nh p chu t ph i vào màn hình so n th o. R i n F11. M i l n n s ch y 1 l nh. Khi debug n u các b n ch hàm delay lâu quá 1000 l n l p . Các b n nh n Ctrl + F11 b qua hàm.
  • 51. DKS_GROUP Microcontroller Training Center DKS_GROUP - 51 - www.EmbestDKS.com 04868 Ho c n F10 ch y t ng dòng l nh. Các b n s th y chân P1_0 thay i giá tr . B ng bên trái , ô Project workspace bây gi có các thanh ghi. Các b n có th th y chúng thay i. Nhưng các b n không c n quan tâm n các thanh ghi này. Vì mình h c ngôn ng C mà. N u h c asembly thì m i ph i s d ng chúng. Cũng m t y. Cái b n quan tâm nh t là cái sec. Nó cũng thay i. Vì th ch anh là 12Mhz, nên m i chu kì máy là 10-6 giây. Các b n căn c vào y bi t l nh nào m t bao nhiêu chu kì máy, làm th i gian th c thì c n l m y. Thoát kh i debug l i n Ctrl+F5 ho c n vào icon debug. . 3.1.L p m ch : -Kh i ngu n 5V các b n như l p m ch èn nháy. -Các b n l p m ch theo sơ sau: + C3 10uF/25V C2 33p C1 33p X1 19 X2 18 RESET 9 P1.0 1 VCC 40 VSS 20 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 EA 31 P0.0 39 P0.1 38 P0.2 37 P0.3 36 P0.4 35 P0.5 34 P0.6 33 P0.7 32 U1 8051 R1 10K 5VDC 12Mhz D1 D2 D3 D4 D5 D6 D7 D8 12 3 4 5 6 7 8 9 10 R11 RESISTOR SIP 10 - Hư ng d n l p m ch: * Qui nh : n u linh ki n nào tôi không nh c n chi u thì các b n l p linh ki n chi u nào cũng ư c. Hàng d c ngoài là ngu n 5 V. Hàng d c trong là GND. Th t chân các b n ph i nh không gi ng th t s p x p tronh hình v m ch. Cách m chân các b n con chip xuôi mà các b n nhìn dòng ch AT89C51/52 xuôi, chân 1 là chân g n d u tròn và hình tam giác nh m u tr ng. m t trên xu ng dư i trái qua ph i. Sơ chân con IC th t s m úng th này. Khi l p m ch ph i m chân.
  • 52. DKS_GROUP Microcontroller Training Center DKS_GROUP - 52 - www.EmbestDKS.com 04868 Không nên l p ngu n 12V vào v i ch khi n p chíp xong l p vào m ch m i l p ngu n. Khi mu n g chíp ra ph i rút ngu n ra r i m i g chíp. * Chu n b board như sau: L p 4 dây n i ng n n i các sông. L p 1 dây n i n i hàng trên cùng v i hàng dư i cùng làm ngu n +5V. L p 1 dây n i n i hàng g n trên cùng v i hàng g n dư i cùng làm GND. L p chíp như hình. * Bư c 1 l p m ch dao ng: L p 1 con t 33pF t chân 19 xu ng chân 20.( ng h i t i sao). L p 1 con t 33pF t chân 18 xu ng chân 20. L y dây câu t chân 20 xu ng GND. L p 1 con th ch anh 12M vào chân 18 và 19. * Bư c 2 l p m ch reset. L p 1 con tr 10K(nâu en cam) t chân 9 xu ng GND. L p 1 con t 10uF/50V c c dương lên +5V, c c âm vào chân 9. * Bư c 3 l p tr băng. chíp ch y v i ROM trong chân EA ph i lên +5V qua 1 i n tr . C ng 0 là c ng có c c máng h mu n th c hi n ư c IO thì ph i có i n tr treo.(Th y cái này l xem l i bài 2). Nên l p 1 con tr băng 10 chân vào c ng 0 và chân EA. Chân 1 c a tr băng ( Chân u tiên có n t tròn m u tr ng) vào chân 40. Chân 10 c a tr băng vào chân 31. N u không có tr băng các b n có th thay tr băng 10 chân b ng 9 con tr thư ng vì tr băng 10 chân chính là 9 con tr u chung 1 u như trong sơ m ch phía trên. * Bư c 4 l p led: d dàng khi l p m ch nên chúng ta l p led theo sơ như trên. L p chân dài c a 1 led vào chân 1 vi i u khi n chân ng n vào GND. Tương t l p 7 led còn l i vào chân 2 n chân 8. * Bư c 5 câu 1 dây nh t chân 40 lên ngu n 5V. 3.2. Nguyên lí ho t ng: Led n i t chân v k xu ng t v y n u chân vi i u khi n 5V thì led s sáng, n u chân vi i u khi n 0V thì led s t i. i n áp 5V vì sao led không cháy mà l i còn sáng y u? U1 AT89C51 31 19 18 9 12 13 14 15 1 2 3 4 5 6 7 8 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 3011 10 40 20 EA/VP X1 X2 RESET INT0 INT1 T0 T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/PTXD RXD VCC VSS
  • 53. DKS_GROUP Microcontroller Training Center DKS_GROUP - 53 - www.EmbestDKS.com 04868 Vì vi i u khi n 8051 ch có th cung c p dòng nh không 10mA 1 chân nên led sáng y u. Còn n u mu n led sáng p thì l p như sau t dương 5V Chân dài c a led Chân ng n c a led Chân vi i u khi n. Cái này s nói sau. * Bư c 5 l p ngu n: L p 1 dây t chân 40 lên hàng ngu n 5V. 3.3. L p trình : Trư c h t i u khi n 1 led. i u khi n 1 led thì các b n ch vi c gán chân n i v i led ó b ng 0 ho c 1, thì i n áp chân ó s là 0V ho c 5V, tùy vào i n áp èn s sáng ho c t i. Code như sau: /* ==================================================== Mo ta: Dieu khien den led. Phan cung: 8 led noi tu +5V qua dien tro han dong vao 8 chan cong 1. Thach anh: 12 Mhz Tac gia: Nguyen Huy Thanh. Thoi gian: Bat dau: 1h03 16/7/2005 Hoan thanh: 1h07 16/7/2005 =====================================================*/ /******************Bo tien xu li*******************************/ #include <AT89X51.H>// Dinh kem file thu vien #define bat 1 // Dinh nghia gia tri bat den led #define tat 0// Dinh nghia gia tri tat den led /************************************************************/ /*******************Khai bao bien toan cuc**********************/ sbit Led1=P1^0; //Khai bao bien Led1 kieu bit chan P1_0 sbit Led2=P1^1; // ... sbit Led3=P1^2; sbit Led4=P1^3; sbit Led5=P1^4; sbit Led6=P1^5; sbit Led7=P1^6; sbit Led8=P1^7;//Khai bao bien Led8 kieu bit chan P1_7 /***********************************************************/ /********************Khai bao ham****************************/ /*----------------Ham tre------------------------------- Ham tao thoi gian tre. Dau vao: 1 bien thoi gian.
  • 54. DKS_GROUP Microcontroller Training Center DKS_GROUP - 54 - www.EmbestDKS.com 04868 Dau ra:khong ------------------------------------------------------*/ void tre(long time) { long n;// Khai bao bien cuc bo for(n=0; n<time; n++)//Lap time lan { ; // Khong lam gi nop } } /***********************************************************/ /*******************Ham chinh**************************/ void main(void) { while(1)// Lap vo han { Led1= bat;// Bat led 1 tre(1000);// Tre 1 khoang thoi gian Led1= tat;// Tat led 1 tre(1000);// Tre 1 khoang thoi gian } } /************************************************************/ Nên t gõ ch không nên copy paste. * CHÚ Ý: Code này khác code trong bài 3 s d ng Keil C y nhé. Ch #define bat 1 và #define tat 0. Vì led l p ki u khác mà.
  • 55. DKS_GROUP Microcontroller Training Center DKS_GROUP - 55 - www.EmbestDKS.com 04868
  • 56. DKS_GROUP Microcontroller Training Center DKS_GROUP - 56 - www.EmbestDKS.com 04868
  • 57. DKS_GROUP Microcontroller Training Center DKS_GROUP - 57 - www.EmbestDKS.com 04868 * có th n p chương trình vào chíp thì f i t o ra file .hex. t o ra file .hex làm như sau . Vào Option for target ch ch nh t n s th ch anh.
  • 58. DKS_GROUP Microcontroller Training Center DKS_GROUP - 58 - www.EmbestDKS.com 04868 ư c hình sau:
  • 59. DKS_GROUP Microcontroller Training Center DKS_GROUP - 59 - www.EmbestDKS.com 04868 Kích vào tab Output. ư c hình sau:
  • 60. DKS_GROUP Microcontroller Training Center DKS_GROUP - 60 - www.EmbestDKS.com 04868 Tích vào check : Create Hex File. Nh p OK. Nh n fím F7 biên d ch l i . Khi ó dư i c a s output window ư c ch Creating hex file…
  • 61. DKS_GROUP Microcontroller Training Center DKS_GROUP - 61 - www.EmbestDKS.com 04868 Creating hex file from “Dieukhienled_IO” như ngay trên hình. 3.4.N p chíp: C m u c ng COM vào c ng COM máy tính. C m ngu n vào m ch n p. Cho chíp vào socket 40 chân màu xanh. R t chú ý ph i cho úng chi u chíp không là h ng. Chi u chíp gi ng chi u con chíp có s n trong m ch(Chíp MASTER). M ph n m m EZDL4 lên. Th y có ch identifing target chip …. Nháy. G t c n nh socket 40 chân k p chíp cho ti p xúc.
  • 62. DKS_GROUP Microcontroller Training Center DKS_GROUP - 62 - www.EmbestDKS.com 04868 Trên EZDL4 s th y ch AT89C51 ho c AT89C52 tùy các b n dùng lo i chíp nào. Kích vào Send. Ch n ư ng d n n thư m c lưu project c a b n ch n file : Dieukhienled_IO.hex . Nh n OK. Ch m ch báo ch Complete thì g t n y trên socket l y chíp ra c m vào m ch. 3.5. K t qu : C m ngu n vào m ch . Chú ý không c m ngư c âm dương. N u m ch không ch y rút ngu n ra ki m tra các ch sau: 1) Ki m tra m ch dao ng xem t úng giá tr không, l p úng sơ không, l p có l ng không. 2) Ki m tra xem t m ch reset chân 9 l p úng c c không, có l ng không. Dùng ng h o chân 9 n u 0V ho c x p x 0V là OK. 3) Tr băng l p úng chi u chưa, chân 1 vào chân 40. Dùng ng h o chân 31(EA) xem có b ng 5V không , n u 5V thì OK. 4) Ki m tra chân 20 n i GND chưa, chân 40 n i +5V chưa dùng ng h o i n áp. 5) Ki m tra xem l p úng chi u led chưa. 6) Các b n có th l p l ng chíp ho c do ch t lư ng board l y tay tì m nh con chíp xu ng board . N u v n không ch y thì liên l c v i tôi. 3.6. i u khi n 8 led t ng chi c 1: Các b n có th s a l i hàm main như sau: void main(void) { while(1)// Lap vo han { Led1= bat;// Bat led 1 tre(1000);// Tre 1 khoang thoi gian Led1= tat;// Tat led 1 tre(1000);// Tre 1 khoang thoi gian Led2= bat;// Bat led 2 tre(1000);// Tre 1 khoang thoi gian Led2= tat;// Tat led 2 tre(1000);// Tre 1 khoang thoi gian Led3= bat;// Bat led 3 tre(1000);// Tre 1 khoang thoi gian Led3= tat;// Tat led 3 tre(1000);// Tre 1 khoang thoi gian Led4= bat;// Bat led 4 tre(1000);// Tre 1 khoang thoi gian Led4= tat;// Tat led 4 tre(1000);// Tre 1 khoang thoi gian Led5= bat;// Bat led 5 tre(1000);// Tre 1 khoang thoi gian Led5= tat;// Tat led 5 tre(1000);// Tre 1 khoang thoi gian Led6= bat;// Bat led 6 tre(1000);// Tre 1 khoang thoi gian
  • 63. DKS_GROUP Microcontroller Training Center DKS_GROUP - 63 - www.EmbestDKS.com 04868 Led6= tat;// Tat led 6 tre(1000);// Tre 1 khoang thoi gian Led7= bat;// Bat led 7 tre(1000);// Tre 1 khoang thoi gian Led7= tat;// Tat led 7 tre(1000);// Tre 1 khoang thoi gian Led8= bat;// Bat led 8 tre(1000);// Tre 1 khoang thoi gian Led8= tat;// Tat led 8 tre(1000);// Tre 1 khoang thoi gian } } i u khi n 8 led. V i chương trình này các b n có th cho th t các led t t b t khác nhau có các ki u nháy khác nhau. 3.7. i u khi n out c c ng: N u các b n nhàm chán v i vi c i u khi n t ng chân 1 vi t code r t t n công các b n có th xu t giá tr ra c c ng. Trư c h t các b n c n n m các i u như sau: - 1 c ng có 8 bit t h p 8bit có 28 = 256 tr ng thái. Khi các b n ưa ra c ng 1 giá tr a(th p phân) t 0 n 255 thì s a s ư c i ra h nh phân r i ưa ra các bit( chân) c a c ng. Ví d : N u có l nh: P1=1; vì 1(10) = 0000 0001(2) nên chân P1_0(bit 0) s b ng 1(5V) còn l i các t P1_1(bit 1) n P1_7(bit 7) s b ng 0(0V). P1=10; vì 10(10) = 0000 1001(2) thì s có P1_0 và P1_3 b ng 1(5V) còn l i các chân khác s là 0(0V). - Các b n có th ưa ra c ng 1 giá tr s hex t 0 n ff tương ng t 0 n 255. Các s cơ s trong h hex. (HEX)0 1 2 3 4 5 6 7 8 9 A B C D E F (10) 10 11 12 13 14 15 Cách s hex ra s th p phân: có s hex : N(16)=abf1 i ra h s 10 N(10)=1.160 + 15.161 + 11.162 + 10.163 = B m máy tính h nhé. i s nh phân sang hex: G p 4 s nh phân thành 1 s hex Ví d : 0010 0001(2) = 21(16) 4 s u có bit 1 = 1 nên 1x21 = 2 4 s sau có bit 0 =1 nên 1x20 =1. “Các b n th y v t v v i ph n này dù b n có hi u hay không hi u 1 lát n a s bi t cách làm li n.” Cách ưa ra như sau: Ví d l nh P1=1; tương ương v i P1=0x01; P1=10; tương ương v i P1=0x0A; Chương trình xu t ra c c ng tương ương v i chương trình i u khi n 8 led t ng cái 1 như sau: void main(void) { while(1)// Lap vo han {
  • 64. DKS_GROUP Microcontroller Training Center DKS_GROUP - 64 - www.EmbestDKS.com 04868 P1=0x01;// Bat led 1 tre(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 1 tre(1000);// Tre 1 khoang thoi gian P1=0x02;// Bat led 2 tre(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 2 tre(1000);// Tre 1 khoang thoi gian P1=0x04;// Bat led 3 tre(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 3 tre(1000);// Tre 1 khoang thoi gian P1=0x08;// Bat led 4 tre(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 4 tre(1000);// Tre 1 khoang thoi gian P1=0x10;// Bat led 5 tre(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 5 tre(1000);// Tre 1 khoang thoi gian P1=0x20;// Bat led 6 tre(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 6 tre(1000);// Tre 1 khoang thoi gian P1=0x40;// Bat led 7 tre(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 7 tre(1000);// Tre 1 khoang thoi gian P1=0x80;// Bat led 8 tre(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 8 tre(1000);// Tre 1 khoang thoi gian } } Như v y gõ code v n m i tay l m t ư c m c ích 8 èn nháy liên ti p các b n có th làm như sau: /******************Ham chinh****************************/ void main(void) { unsigned char n; // Khai bao them bien n cho vong for while(1)// Lap vo han { P1=0x01;// Bat led 1 for(n=0 ; n<8;n++)// Lap 8 lan { P1=P1<<1; // Dich bit xang trai
  • 65. DKS_GROUP Microcontroller Training Center DKS_GROUP - 65 - www.EmbestDKS.com 04868 tre(1000); } } } /***********************************************************/ Debug quan sát s thay i c a c ng 1 th y ư c l i h i c a phép d ch bit xang trái. hi u thao tác xu t ra c ng , chân, các các b n làm cho mình 1 ví d n a như sau: /***********************Ham chinh*******************************/ void main(void) { unsigned char n; // Khai bao them bien n cho vong for while(1)// Lap vo han { P1=0x01;// Bat led 1 for(n=0 ; n<256;n++)// Lap 8 lan { P1=n; // Dich bit xang trai tre(5000); } } } /****************************************************************/ Debug th y s thay i các c ng. 3.8. Kinh nghi m : * chuy n i gi a các h sô nhanh các b n dùng cái calculator có ngay trong window. Ch n Start All programs Accessories Calculator. Trong Calculator các b n ch n menu View Ch n scienctific. Cách chuy n i t khám phá nhé. * tính ra s hex nhanh nh t . Tôi ví d mu n ưa chân P3.5 và chân P3.2 xu ng 0(0V) còn các chân còn l i ta làm như sau: C cho P3= 100 ; hay 1 giá tr b t kì .Vì code d ch không l i cú pháp m i debug ư c nên ph i cho giá tr b t kì vào. D ch chương trình r i nh n Debug. Ra ư c như sau:
  • 66. DKS_GROUP Microcontroller Training Center DKS_GROUP - 66 - www.EmbestDKS.com 04868 Các b n th y trong c a s mô ph ng c ng 3 có ghi giá tr c a c ng 3 là : 0xFF tương ng t t c 8 bit là 1111 1111. Gi các b n b d u tích trên chân 3.5 và 3.2 i . m t trái qua ph i nhé.
  • 67. DKS_GROUP Microcontroller Training Center DKS_GROUP - 67 - www.EmbestDKS.com 04868 Th y c ng 3 có giá tr là 0xDB. Như v y các b n m t công nh m i s nh phân ra s hex. N u không dùng cách này là như trên các b n ph i nghĩ trong u ra ư c dãy s 1101 1011 r i i qua s HEX k t qu s là 0xDB nhưng m t l m.
  • 68. DKS_GROUP Microcontroller Training Center DKS_GROUP - 68 - www.EmbestDKS.com 04868 4.1 L p m ch : a b dotcV-de f g V- 1 2 3 4 5 678910 A B C DOTD E F G D10 LED CATOT Chung a b dotcV+de f g V+ 1 2 3 4 5 678910 A B C DOTD E F G D11 LED CATOT Chung Có hai lo i led 7 thanh: An t chung và Cat t chung. Hình trên là sơ chân c a hai lo i led. Nó có c u t o như sau: 3 7 6 4 2 1 10 9 5 A B C D E F G DP 8 D12A Catot chung 3 7 6 4 2 1 10 9 5 8 D13A Anot chung Ch là 8 con led u chung 1 u: An t ho c Cat t. M ch l p s d ng led An t chung như sau:
  • 69. DKS_GROUP Microcontroller Training Center DKS_GROUP - 69 - www.EmbestDKS.com 04868 + C3 10uF/25V C2 33p C1 33p R1 10K 5VDC EA/VP 31 X1 19 X2 18 RESET 9 P2.0 21 P2.1 22 P2.2 23 P2.3 24 P2.4 25 P2.5 26 P2.6 27 VCC 40 VSS 20 U3 8051 R3 10K 12Mhz A B D C G F E - L p m ch: M ch bài trư c( i u khi n led ơn) nguyên,ch l p thêm vào. + Bư c1: L p 7 i n vào 7 chân c ng P2 t P2.0 n P2.7( T chân 21 Chân 27) c a vi i u khi n. Chú ý m bit c a c ng 2 t dư i lên trên. + Bư c2: L p led 7 thanh 5 chân phía trên sông, 5 chân phía dư i sông(Gi ng l p AT89C51). + Bư c 3: Dùng dây i n câu t các chân theo sơ . Chân i u khi n thanh A vào i n tr n i vào P2.0 và c th n chân i u khi n thanh G vào i n tr n i vào P2.7. B qua chân i u khi n d u ch m(Dot chân 5 c a led 7 thanh). + Bư c 4: Dùng dây câu chân 3(ho c chân 8, ho c c hai chân 3 và 8) lên +5V. L p m ch nên dây câu khác màu và rõ ràng tránh nh m l n. - Test led: Cho ngu n vào( Dĩ nhiên led ơn bài trư c v n nh p nháy). Rút 1 u i n tr n i v i chân P2.0 c a V K c m xuông t th y led 7 thanh sáng èn A,c m l i i n tr v v trí cũ. Tương t test 6 thanh còn l i. Thanh nào không sáng thì ki m tra l i xem c m dây ti p xúc chưa. V n không sáng thì led ã h ng thay led khác vào. 4.2. Nguyên lí ho t ng: Khi c m ngu n vào m ch t t c các chân c a các c ng IO c a V K là 5V( N u c ng 0 không l p i n tr treo thì s là 0V). Nhìn sơ m ch không có chênh l ch i n áp nên không có èn nào sáng. Chúng ta mu n sáng thanh nào ch vi c ưa ra i n áp 0V chân vi i u khi n n i v i thanh ó. Thanh hi n Thanh t t Giá tr (P2) hi n th s 1: B,C các thanh còn l i 1111 1001 hi n th s 2: A,B,D,E,G các thanh còn l i 1010 0100 …. hi n th s 8: T t c các thanh không thanh nào 1000 0000
  • 70. DKS_GROUP Microcontroller Training Center DKS_GROUP - 70 - www.EmbestDKS.com 04868 gfe dcba Bít th 8 P2.7 không dùng. Ngoài ra led 7 thanh còn có th hi n th 1 s ch ê hi n th ch B: Gi ng sô 8 Hi n th ch A: A,B,C,E,F,G D 1000 1000 4.3.L p trình : Cách 1: L p trình d hi u không c n ph i tính toán nhưng ph i vi t và copy, past và s a nhìu. Code như sau: #include <AT89X52.H> /* Khai bao cac bien bit gan voi chan vi dieu khien*/ sbit ThanhA = P2^0; sbit ThanhB = P2^1; sbit ThanhC = P3^5; sbit ThanhD = P3^4; sbit ThanhE = P3^3; sbit ThanhF = P2^2; sbit ThanhG = P2^3; /* Khai bao bien */ long n;// Cho vong for /* Khai bao ham */ /* Ham tre */ void delay(long time) { for(n=0; n<time; n++) { ; } }
  • 71. DKS_GROUP Microcontroller Training Center DKS_GROUP - 71 - www.EmbestDKS.com 048 /* Ham tat tat ca cac thanh */ void tat(void) { ThanhA =1; ThanhB =1; ThanhC =1; ThanhD =1; ThanhE =1; ThanhF =1; ThanhG =1; } /* Cac ham hien thi chu va so */ void so1(void) { tat(); ThanhA =1; ThanhB =0; ThanhC =0; ThanhD =1; ThanhE =1; ThanhF =1; ThanhG =1; } void so2(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =1; ThanhD =0; ThanhE =0; ThanhF =1; ThanhG =0; } void so3(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =0; ThanhE =1; ThanhF =1; ThanhG =0; } void so4(void) { tat(); ThanhA =1; ThanhB =0; ThanhC =0; ThanhD =1; ThanhE =1; ThanhF =0; ThanhG =0; } void so5(void) { tat(); ThanhA =0; ThanhB =1; ThanhC =0; ThanhD =0; ThanhE =1; ThanhF =0; ThanhG =0; } void so6(void) { tat(); ThanhA =0; ThanhB =1; ThanhC =0; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =0; } void so7(void) { tat();
  • 72. DKS_GROUP Microcontroller Training Center DKS_GROUP - 72 - www.EmbestDKS.com 048 ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =1; ThanhE =1; ThanhF =1; ThanhG =1; } void so8(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =0; } void so9(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =0; ThanhE =1; ThanhF =0; ThanhG =0; } void chuA(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =1; ThanhE =0; ThanhF =0; ThanhG =0; } void chuB(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =0; } void chuC(void) { tat(); ThanhA =0; ThanhB =1; ThanhC =1; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =1; } void chuD(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =1; } void chuE(void) { tat(); ThanhA =0; ThanhB =1; ThanhC =1; ThanhD =0;
  • 73. DKS_GROUP Microcontroller Training Center DKS_GROUP - 73 - www.EmbestDKS.com 048 ThanhE =0; ThanhF =0; ThanhG =0; } void chuF(void) { tat(); ThanhA =0; ThanhB =1; ThanhC =1; ThanhD =1; ThanhE =0; ThanhF =0; ThanhG =0; } void chuG(void) { tat(); ThanhA =0; ThanhB =1; ThanhC =0; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =1; } void chuH(void) { tat(); ThanhA =1; ThanhB =0; ThanhC =0; ThanhD =1; ThanhE =0; ThanhF =0; ThanhG =0; } void chuI(void) { tat(); ThanhA =1; ThanhB =1; ThanhC =1; ThanhD =1; ThanhE =0; ThanhF =0; ThanhG =1; } void chuL(void) { tat(); ThanhA =1; ThanhB =1; ThanhC =1; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =1; } void chuO(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =1; } void chuP(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =1; ThanhD =1; ThanhE =0; ThanhF =0; ThanhG =0; }
  • 74. DKS_GROUP Microcontroller Training Center DKS_GROUP - 74 - www.EmbestDKS.com 048 void chuR(void) { tat(); ThanhA =0; ThanhB =0; ThanhC =0; ThanhD =1; ThanhE =0; ThanhF =0; ThanhG =0; } void chuS(void) { tat(); ThanhA =0; ThanhB =1; ThanhC =0; ThanhD =0; ThanhE =1; ThanhF =0; ThanhG =0; } void chuU(void) { tat(); ThanhA =1; ThanhB =0; ThanhC =0; ThanhD =0; ThanhE =0; ThanhF =0; ThanhG =1; } void chuY(void) { tat(); ThanhA =1; ThanhB =0; ThanhC =0; ThanhD =0; ThanhE =1; ThanhF =0; ThanhG =0; }
  • 75. DKS_GROUP Microcontroller Training Center DKS_GROUP - 75 - www.EmbestDKS.com 048 /* Ham chinh */ void main(void) { while(1) { so0(); delay(20000); so1(); delay(20000); so2(); delay(20000); so3(); delay(20000); so4(); delay(20000); so5(); delay(20000); so6(); delay(20000); so7(); delay(20000); so8(); delay(20000); so9(); delay(20000); chuA(); delay(20000); chuB(); delay(20000); chuC(); delay(20000); chuD(); delay(20000); chuE(); delay(20000); chuF(); delay(20000); chuG(); delay(20000); chuH(); delay(20000); chuI(); delay(20000); chuL();
  • 76. DKS_GROUP Microcontroller Training Center DKS_GROUP - 76 - www.EmbestDKS.com 048 delay(20000); chuO(); delay(20000); chuP(); delay(20000); chuR(); delay(20000); chuS(); delay(20000); chuU(); delay(20000); chuY(); delay(20000); } } Cách 2: Các b n vi t 1 chương trình ơn gi n r i dùng công c Debug xem s hex r i vi t vào r t ng n g n. Ví d : Hàm hi n th s 1: void so1(void) { tat(); P2=0xF5; } Các b n debug cho hi n th c ng P2 lên. d u tích các èn t t(1) , b d u tích các èn c n b t(0). R i c giá tr hex như tôi hư ng d n bài trư c. 4.4.N p chíp: ã hư ng d n. N u các b n g p ph i v n c a m ch n p. Thư ng là: + Treo chip Master: Rút ngu n m ch n p ra, i chút r i c m l i. + Không nh n c ng COM. Các b n nh p chu t ph i vào Mycomputer, ch n Properties Device manage. Nh n vào Scan for hardware change máy tính nh n l i c ng COM. R i kh i ng l i máy. + Lý do khác các b n th ki m tra ph n c ng m ch n p. + V n không ư c tôi ch u. T bài sau s không có ph n này. 4.5.K t qu : Nhìn vào hàm main các b n th y chương trình s hi n th s 1 led 7 thanh, tr 1 kho ng th i gian, r i nh y sang s 2 n sô 9 , r i n ch . N u các b n không có hàm tr thì led s hi n th ra sao? Led s hi n s 8. Vì t t c 8 led ư c b t t t quá nhanh (ch c n >24 Hz) do hi n tư ng lưu nh m t các b n s nhìn th y t t c các led sáng ch không hi n s . 4.6.Kinh nghi m : Sau khi ã th c hi n theo các rút g n như vi t hàm s 1 trên các b n áp d ng c u trúc l nh switch case vi t l i chương trình thì chương trình s r t g n.
  • 77. DKS_GROUP Microcontroller Training Center DKS_GROUP - 77 - www.EmbestDKS.com 048 void Hienthiled(unsigned char x) // Co 1 bien dau vao de xac dinh xem la hien thi so nao { switch(x) { case 1: { tat(); P2=0xF5; break;} // So 1 case 2: { tat(); P2=0xFF; break;}// So 2 … case 9: { tat(); P2=0xFF; break;}// So 9 case 10: { tat(); P2=0xFF; break;}// Chu A …. case 20: { tat(); P2=0xFF; break; }// Chu Y } } Các giá tr trên ch là ví d các b n ã rút g n và t copy vào. V i hàm hi n th led các b n ã vi t hi n các s và các ch gi hàm main ch c n như sau: void main (void) { while(1) { for(n=0; n<20; n++) { Hienthiled(n); delay(20000); } } }
  • 78. DKS_GROUP Microcontroller Training Center DKS_GROUP - 78 - www.EmbestDKS.com 048 Ph n 1: c 1 phím. Nhi m v : m s l n phím b m gi i h n t 0 n 9 hi n th ra led 7 thanh. 5.1.L p m ch như sau: + C3 10uF/25V C2 33p C1 33p X1 19 X2 18 RESET 9 P2.0 21 VCC 40 VSS 20 P2.1 22 P1.0 1 P1.1 2 P2.2 23 P2.3 24 P2.4 25 P2.5 26 P2.6 27 U1 8051 R1 10K 5VDC 12Mhz 1 2 SW1 C4 CAP NP D12 LED R29 1K a b dotcV+de f g V+ 1 2 3 4 5 678910 A B C DOTD E F G D11 LED ANOT Chung - M ch bài 5 led 7 thanh gi nguyên. L p m ch: quá ơn gi n. Bư c 1: L p 1 nút b m âu ó trên m ch. Bư c 2: Dùng dây câu 1 chân nút b m v i P1.0( Thay th led bài 4). Bư c 3: Dùng dây câu 1 chân nút b m xu ng t. Bư c 4: L p 1 t 104 gi a 2 chân nút b m. Bư c 5: L p tr vào chân P1.0 và led t +5V vào u tr còn l i(Chú ý úng chi u led. - Test nút b m: C m ngu n vào, nh n nút èn sáng. Nh nút èn t t.
  • 79. DKS_GROUP Microcontroller Training Center DKS_GROUP - 79 - www.EmbestDKS.com 048 5.2.Nguyên lí ho t ng: - Ph n nút b m: (khi không có t 104) ban u chân P1.0 m c cao +5V, n u b m nút 2 u nút b m thông v i nhau. Chân P1.0 thông v i GND. Led sáng do có chênh áp. Chân P1.0 thông t. N u có t 104 t i n ư c n p i n, khi b m nút t i n s phóng i n t c c dương sang c c âm làm chân P1.0 thông v i GND nhưng lâu v 0 V hơn 1 chút( tr c ng). - Khi b m nút theo nguyên lí thi b m 1 cái là xu ng 0 li n, nhưng do ti p i m cơ khí c a nút b m nên khi b m nút nó s có 1 s xung i n ch không ph i là b m cái là nó xu ng 0 luôn. T 104 gi m nhi u ó. T 104 cũng có th b i không l p vì ta có th kh nhi u b ng ph n m m. 5.3.L p trình: Code bài 5 gi nguyên: so n thêm m t s hàm như sau hàm c phím b m. Hàm c s l n n phím
  • 80. DKS_GROUP Microcontroller Training Center DKS_GROUP - 80 - www.EmbestDKS.com 048
  • 81. DKS_GROUP Microcontroller Training Center DKS_GROUP - 81 - www.EmbestDKS.com 048 Hàm hi n th s tương ng.
  • 82. DKS_GROUP Microcontroller Training Center DKS_GROUP - 82 - www.EmbestDKS.com 048 Hàm main ư c s a l i như sau:
  • 83. DKS_GROUP Microcontroller Training Center DKS_GROUP - 83 - www.EmbestDKS.com 048 ây là code các hàm b sung: unsigned char i=0;// Khai bao them bien toan cuc de dem so lan an nut unsigned char Doccongtac(void)// Ham tra lai gia tri unsigned char { if( P1_0 ==0)// Neu nut duoc bam { delay(300);// Tre 1 khoang thoi gian qua xung nhieu while(P1_0 ==0) // Cho toi khi nha tay khoi nut bam { ;//Khong lam gi } i++;// Nha ty thi tang i if( i ==10) i=0;// Quay vong gia tri cua i } return i; } void hienthisolannhanphim(unsigned char solan) { switch(solan)// Tuy vao so lan { case 0: { so0(); break; }// Neu so lan =0 hien so 0 thoat khoi switch case 1: { so1(); break; }// Neu so lan =1 hien so 1 thoat khoi switch case 2: { so2(); break; }// .... case 3: { so3(); break; } case 4: { so4(); break; } case 5: { so5(); break; } case 6: { so6(); break; } case 7: { so7(); break; } case 8: { so8(); break; } case 9: { so9(); break; }// Neu so lan =9 hien so 9 thoat khoi switch } } void main(void) { while(1) { Doccongtac(); // Goi ham doc so lan nhan phim hienthisolannhanphim(i);// Hien thi so lan nhan phim, bien i la bien toan cuc } }
  • 84. DKS_GROUP Microcontroller Training Center DKS_GROUP - 84 - www.EmbestDKS.com 048 5.4) Kinh nghi m: - Xem các giá tr c a bi n trong Debug. Sau khi vi t xong chương trình và biên d ch chương trình các b n vào công c Debug c a Keil C. ư c màn hình sau: Ch n View Watch& Call Stack Window. ư c như sau:
  • 85. DKS_GROUP Microcontroller Training Center DKS_GROUP - 85 - www.EmbestDKS.com 048
  • 86. DKS_GROUP Microcontroller Training Center DKS_GROUP - 86 - www.EmbestDKS.com 048 Trong khung phía dư i chính là Watch& Call Stack Window. Chuy n sang tab watch#1, nh p chu t vào ch F2 to edit,nh n F2 và gõ vào tên bi n c n quan sát. Ph n 1 k t thúc.
  • 87. DKS_GROUP Microcontroller Training Center DKS_GROUP - 87 - www.EmbestDKS.com 048 Chúng ta quan sát bi n I, nên gõ I vào và ư c hình như trên. Các b n nh n F11 ch y mô ph ng. M i l n n phím, cho chân P1.0 xu ng 0 r i lên 1, tương ương v i n phím và nh phím I s tăng 1 như sau: (Khi n phím ph i ch hàm delay(300) và hàm while(P1_0 ==0) xong I m i tăng vì mình l p trình th mà. Giá tr c a I hi n th theo s hex.
  • 88. DKS_GROUP Microcontroller Training Center DKS_GROUP - 88 - www.EmbestDKS.com 048 Ph n 2: c ma tr n phím. Nhi m v : Quét bàn phím 16 phím b m(4x4), xem phím nào ư c b m, các phím ư c ánh s t 0 n 15 r i hi n th giá tr ra led 7 thanh. 6.1. L p m ch theo sơ sau: 5V 5V C1 33p C2 33p + C3 10uF/25V R1 10K 5VDC 5V5V5V EA/VP 31 X1 19 X2 18 RESET 9 P2.0 21 P2.1 22 P2.2 23 P2.3 24 P2.4 25 P2.5 26 P2.6 27 VCC40 VSS 20 P3.1 11 P3.2 12 P3.3 13 P3.4 14 P3.5 15 P3.6 16 P3.7 17 P3.0 10 U3 8051 R3 10K 12Mhz C B A E D G F P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 5V LED 7 THANH HANG 2 HANG 1 COT 4 COT 3 COT 2 COT 1 HANG 4 HANG 3P3.2 R21 R R22 R R23 R R24 R R25 R R26 10Kx8 R27 R R28 R P3.0 P3.1 1 2 PHIM 1 1 2 PHIM 2 1 2 PHIM 3 1 2 PHIM 4 1 2 PHIM 5 P3.3 1 2 PHIM 6 P3.4 1 2 PHIM 7 1 2 PHIM 8 1 2 PHIM 9 1 2 PHIM 10 1 2 PHIM 11 1 2 PHIM 12 P3.5 1 2 PHIM 13 P3.6 1 2 PHIM 14 1 2 PHIM 15 1 2 PHIM 16 P3.7 - L p m ch:m ch bài led 7 thanh gi nguyên và v i bàn phím các b n hàn ư c ch c n câu vào c ng 3 úng th t chân và câu chân 5V lên +5V.
  • 89. DKS_GROUP Microcontroller Training Center DKS_GROUP - 89 - www.EmbestDKS.com 048 6.2 Nguyên lí quét phím: - Vì sao m ch phím u theo ma tr n. N u c t 16 nút b m bình thư ng ph i dùng 16 chân vi i u khi n. N u u theo d ng ma tr n thì ch m t 8 chân ta cũng có th c ư c 16 phím b m. - Có 2 cách quét phím theo c t và theo hàng, tôi ch n cách quét theo hàng, quét theo c t các b n có th làm tương t . - Bư c 1 : Ta ưa chân P3.0 n i v i Hàng 1 xu ng 0V.R i ta ki m tra giá tr logic c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 1 ư c b m thì C t 1_ P3.4 s có giá tr b ng 0. N u phím 2 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 3 ư c b m thì C t 3_ P3.6 s có giá tr b ng 0. N u phím 4 ư c b m thì C t 4_ P3.7 s có giá tr b ng 0. Ta căn c vào ó xác nh xem phím nào ư c b m. - Bư c 2 : Ta ưa chân P3.1 n i v i Hàng 2 xu ng 0V.R i ta ki m tra giá tr logic c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 5 ư c b m thì C t 1_ P3.4 s có giá tr b ng 0. N u phím 6 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 7 ư c b m thì C t 3_ P3.6 s có giá tr b ng 0. N u phím 8 ư c b m thì C t 4_ P3.7 s có giá tr b ng 0. Ta căn c vào ó xác nh xem phím nào ư c b m. - Bư c 3 : Ta ưa chân P3.2 n i v i Hàng 3 xu ng 0V.R i ta ki m tra giá tr logic c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 9 ư c b m thì C t 1_ P3.4 s có giá tr b ng 0. N u phím 10 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 11 ư c b m thì C t 3_ P3.6 s có giá tr b ng 0. N u phím 12 ư c b m thì C t 4_ P3.7 s có giá tr b ng 0. Ta căn c vào ó xác nh xem phím nào ư c b m. - Bư c 4 : Ta ưa chân P3.3 n i v i Hàng 1 xu ng 0V.R i ta ki m tra giá tr logic c a các chân P3.4,P3.5,P3.6,P3.7.N u phím 13 ư c b m thì C t 1_ P3.4 s có giá tr b ng 0. N u phím 14 ư c b m thì C t 2_ P3.5 s có giá tr b ng 0. N u phím 15 ư c b m thì C t 3_ P3.6 s có giá tr b ng 0. N u phím 16 ư c b m thì C t 4_ P3.7 s có giá tr b ng 0. Ta căn c vào ó xác nh xem phím nào ư c b m. Ta s dùng câu l nh if ki m tra. 6.3. L p trình: - T o 1 project m i, copy ph n hi n th các sô 0…9 các ch A…Y c a bài tr ơc. R i b sung các hàm sau. Hàm hi n th phím n. void phim_duoc_an(unsigned char phim) { switch(phim)// Tuy vao so lan { case 0: { so0(); break; }// Neu so lan =0 hien so 0 thoat khoi switch case 1: { so1(); break; }// Neu so lan =1 hien so 1 thoat khoi switch case 2: { so2(); break; }// .... case 3: { so3(); break; } case 4: { so4(); break; } case 5: { so5(); break; } case 6: { so6(); break; } case 7: { so7(); break; } case 8: { so8(); break; } case 9: { so9(); break; }// Neu so lan =9 hien so 9 thoat khoi switch
  • 90. DKS_GROUP Microcontroller Training Center DKS_GROUP - 90 - www.EmbestDKS.com 048 } } Hàm quét phím: /*Khai bao 1 mang 4 phan tu nhu sau: quetphim[4]={P0=0xFE,0xFD,0xFB,0xF7} De dua 0 ra lan luot cac hang phim, khi do neu nut nao duoc an thi chan vi dieu khien se xuong 0.Chu y fai kiem tra phim khoang 100 lan.*/ unsigned char quetphim[4]={0xFE,0xFD,0xFB,0xF7}; // Dinh nghia so lan quet phim #define solanquetphim 100 // Cac ban co the thay doi gia tri nay cho phu hop unsigned char quetbanphim(void) { unsigned char giatribanphim;// Bien de luu gia tri phim an tu 0 den 15 ma hoa 16 phim unsigned char x,y; //Quet 4 hang phim for(x=0; x<4;x++) { P3=quetphim[x];// Dua lan luot cac hang xuong 0 for(y=0;y<solanquetphim;y++)// Kiem tra solanquetphim lan { if(P3_4==0) giatribanphim=0+4*x;// Gia tri phim tuong ung if(P3_5==0) giatribanphim=1+4*x;// Tuy thuoc vao hang x if(P3_6==0) giatribanphim=2+4*x;// La may ma gia tri cua if(P3_7==0) giatribanphim=3+4*x;// gia tri ban phim tuong ung. } } return(giatribanphim); } Hàm Main. void main(void) { unsigned char i; while(1) { i=quetbanphim(); phim_duoc_an(i); } } Thêm câu l nh #define vào u chương trình:
  • 91. DKS_GROUP Microcontroller Training Center DKS_GROUP - 91 - www.EmbestDKS.com 048 Vi t hàm phím ư c n:
  • 92. DKS_GROUP Microcontroller Training Center DKS_GROUP - 92 - www.EmbestDKS.com 048 Vi t hàm quét bàn phím và hàm main.
  • 93. DKS_GROUP Microcontroller Training Center DKS_GROUP - 93 - www.EmbestDKS.com 048
  • 94. DKS_GROUP Microcontroller Training Center DKS_GROUP - 94 - www.EmbestDKS.com 048 5.4. Kinh nghi m: - Các b n ch y Debug xem s thay i giá tr c a bi n giá tr bàn phím. - Các b n m i dùng 10 phím t 0…9 . Bài t p cho các b n là dùng phím 16 ch n mode: nh n phím 16 thì thay i ch hi n s thành hi n ch và phím 1 tương ương ch A,phím 2 tương ương ch B và c như v y. - Các b n th thay i giá tr #define solanquetphim 100 xem sao. - ng lo l ng v các warning. Các warning nó c nh báo là b n có khai báo 1 s hàm mà b n không dùng n. Như hàm delay(); hàm ch A, vv. Nhi m v : i u khi n hi n th LCD 16x2 dòng ch “www.EmbestDKS.com” ch y trên màn hình LCD. Có 16 chân như sau: Chân Ký hi u I/O Mô t 1 VSS - t 2 VCC - Dương ngu n 5v 3 VEE - C p ngu n i u khi n ph n 4 RS I RS = 0 ch n thanh ghi l nh. RS = 1 ch n thanh d li u 5 R/W I R/W = 1 c d li u. R/W = 0 ghi 6 E I/O Cho phép 7 DB0 I/O Các bít d li u 8 DB1 I/O Các bít d li u 9 DB2 I/O Các bít d li u 10 DB3 I/O Các bít d li u 11 DB4 I/O Các bít d li u 12 DB5 I/O Các bít d li u 13 DB6 I/O Các bít d li u 14 DB7 I/O Các bít d li u Chân 15 và chân 16: ghi là A và K. Nó là an t và kat t c a 1 con led dùng sáng LCD trong bóng t i. Chúng ta không s d ng. N u các b n mu n dùng thì n i chân A qua 1 i n tr t 1K n 5K lên dương 5V, chân K xu ng t èn s sáng. 6.1.L p m ch theo sơ sau:
  • 95. DKS_GROUP Microcontroller Training Center DKS_GROUP - 95 - www.EmbestDKS.com 048 D5 D6 D7 RS Rw EN EN Rw RS RST 9 XTAL2 18 XTAL1 19 GND20 PSEN 29ALE/PROG 30EA/VPP 31 VCC40 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27P2.7/A15 28 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.5/T1 15 P3.6/WR 16 P3.7/RD 17 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 U1 AT89C51 12 3 4 5 6 7 8 9 10 R1 10K 5V VCC 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 J1 LCD R2 5K Y1 12Mhz C1 33p C2 33p R3 10K 5V LCD16x02 + C3 CAPACITOR POL 5V5V C6 104 D0 D1 D2 D3 D4
  • 96. DKS_GROUP Microcontroller Training Center DKS_GROUP - 96 - www.EmbestDKS.com 048 - Hư ng d n: C m luôn 8 bit d li u c a LCD t D0 n D7 vào c ng 2 c a 8051 mà không c n câu dây. th a 6 chân ra ngoài là: EN,RW,RS,Ve, Vcc, GND ra ngoài. R i dùng dây câu chân 1 xu ng GND, chân 2 lên +5V, chân 3 vào chân gi a c a bi n tr tinh 5K, 2 chân còn l i c a bi n tr tinh 1 chân lên +5V,1 chân xu ng 0V. 6.2.Nguyên lý ho t ng c a LCD: - Chân VCC, VSS và VEE: Các chân VCC, VSS và VEE: C p dương ngu n - 5v và t tương ng thì VEE ư c dùng i u khi n tương ph n c a LCD. - Chân ch n thanh ghi RS (Register Select): Có hai thanh ghi trong LCD, chân RS(Register Select) ư c dùng ch n thanh ghi, như sau: N u RS = 0 thì thanh ghi mà l nh ư c ch n cho phép ngư i dùng g i m t l nh ch ng h n như xoá màn hình, ưa con tr v u dòng v.v… N u RS = 1 thì thanh ghi d li u ư c ch n cho phép ngư i dùng g i d li u c n hi n th trên LCD. - Chân c/ ghi (R/W): u vào c/ ghi cho phép ngư i dùng ghi thông tin lên LCD khi R/W = 0 ho c c thông tin t nó khi R/W = 1. - Chân cho phép E (Enable): Chân cho phép E ư c s d ng b i LCD ch t d li u c a nó. Khi d li u ư c c p n chân d li u thì m t xung m c cao xu ng th p ph i ư c áp n chân này LCD ch t d li u trên các chân d liêu. Xung này ph i r ng t i thi u là 450ns. - Chân D0 - D7: ây là 8 chân d li u 8 bít, ư c dùng g i thông tin lên LCD ho c c n i dung c a các thanh ghi trong LCD. hi n th các ch cái và các con s , chúng ta g i các mã ASCII c a các ch cái t A n Z, a n f và các con s t 0 - 9 n các chân này khi b t RS = 1. Cũng có các mã l nh mà có th ư c g i n LCD xoá màn hình ho c ưa con tr v u dòng ho c nh p nháy con tr . - Chú ý:Chúng ta cũng s d ng RS = 0 ki m tra bít c b n xem LCD có s n sàng nhân thông tin. C b n là bít D7 và có th ư c c khi R/W = 1 và RS = 0 như sau: N u R/W = 1, RS = 0 khi D7 = 1 (c b n 1) thì LCD b n b i các công vi c bên trong và s không nh n b t kỳ thông tin m i nào. Khi D7 = 0 thì LCD s n sàng nh n thông tin m i. Lưu ý chúng ta nên ki m tra c b n trư c khi ghi b t kỳ d li u nào lên LCD. - Sau ây là b ng mã l nh c a LCD: Mã (Hex) L nh n thanh ghi c a LCD 1 Xoá màn hình hi n th 2 Tr v u dòng 4 Gi m con tr (d ch con tr sang trái) 6 Tăng con tr (d ch con tr sang ph i) 5 D ch hi n th sang ph i 7 D ch hi n th sang trái 8 T t con tr , t t hi n th A T t hi n th , b t con tr C B t hi n th , t t con tr
  • 97. DKS_GROUP Microcontroller Training Center DKS_GROUP - 97 - www.EmbestDKS.com 048 E B t hi n th , nh p nháy con tr F T t con tr , nh p nháy con tr 10 D ch v trí con tr sang trái 14 D ch v trí con tr sang ph i 18 D ch toàn b hi n th sang trái 1C D ch toàn b hi n th sang ph i 80 ép con tr v u dòng th nh t C0 ép con tr v u dòng th hai 38 Hai dòng và ma tr n 5 × 7 - i u khi n LCD qua các bư c sau: Bư c 0 : Chu n b ph n c ng. Dùng tu c vít hay cái gì b n có xoay bi n tr 5 K i u ch nh tương ph n c a LCD. Xoay cho n khi các ô vuông(các i m nh) c a LCD hi n lên thì xoay ngư c bi n tr l i 1 chút. Bư c 1 : Kh i t o cho LCD. Bư c 2 : Gán các giá tr cho các bit i u khi n các chân RS,RW,EN cho phù h p v i các ch : Hi n th kí t lên LCD hay Th c hi n 1 l nh c a LCD. Bư c 3: Xu t byte d li u ra c ng i u khi n 8 bit d li u c a LCD. Bư c 4: Ki m tra c b n xem LCD s n sàng nh n d li u m i chưa. Bư c 5: Quay vòng l i bư c 1. 6.3.L p trình: - có th l p trình cho LCD ta thêm vào thư vi n string.h c a trình biên d ch b ng câu l nh: #include <string.h> - Khai báo các chân c a LCD g n v i các c ng: /* RS chon thanh ghi =0 ghi lenh =1 ghi du lieu RW doc ghi =0 ghi =1 doc E cho fep chot du lieu xung cao xuong thap toi thieu 450 ns. Bit co ban D7 khi RS=0 RW=1 neu D7=1 LCD ban D7=0 LCD san sang. */ sfr LCDdata = 0xA0;// Cong 2 , 8 bit du lieu P0 co dia chi 0x80, P1 0x90 , P2 0xA0 sbit BF = 0xA7; // Co ban bit 7 sbit RS = P3^5; sbit RW = P3^4; sbit EN = P3^3;
  • 98. DKS_GROUP Microcontroller Training Center DKS_GROUP - 98 - www.EmbestDKS.com 048 - Vi t 1 s hàm i u khi n LCD như sau: * Hàm ki m tra LCD có b n hay không: void wait(void) { long n = 0; EN=1;// Dua chan cho fep len cao RS=0;// Chon thanh ghi lenh RW=1;// Doc tu LCD LCDdata=0xFF;// Gia tri 0xFF while(BF){n++; if(n>100) break;}// Kiem tra co ban // Neu ban dem n den 100 roi thoat khoi while EN=0;// Dua xung cao xuong thap de chot RW=0;// Doc tu LCD } * Hàm i u khi n LCD th c hi n 1 l nh: void LCDcontrol(unsigned char x) { EN=1;// Dua chan cho fep len cao RS=0;// Chon thanh ghi lenh RW=0;// Ghi len LCD LCDdata=x;// Gia tri x EN=0;// Xung cao xuong thap wait();// Doi LCD san sang } Hàm có 1 bi n u vào là các giá tr trong b ng mã l nh c a LCD. * Hàm kh i t o LCD: void LCDinit(void) { LCDcontrol(0x30);//Che do 8 bit. LCDcontrol(0x30); LCDcontrol(0x30); LCDcontrol(0x38);// 2 dong va ma tran 5x7 LCDcontrol(0x0C);// Bat con tro LCDcontrol(0x06);// Tang con tro xang fai LCDcontrol(0x01);// Xoa man hinh } * Hàm l nh cho LCD hi n th 1 kí t : void LCDwrite(unsigned char c) { EN=1;// Cho fep muc cao RS=1;// Ghi du lieu RW=0;// Ghi len LCD LCDdata=c;// Gia tri C EN=0;// Xung cao xuong thap
  • 99. DKS_GROUP Microcontroller Training Center DKS_GROUP - 99 - www.EmbestDKS.com 048 wait();// Cho } Hàm có 1 bi n u vào là mã c a kí t trong b ng ASCII. * Hàm l nh cho LCD hi n th 1 xâu kí t ( dòng ch ): void LCDputs(unsigned char *s,unsigned char row) { unsigned char len; if(row==1) LCDcontrol(0x80);// Ep con tro ve dau dong 1 else LCDcontrol(0xC0);// Ep con tro ve dau dong 2 len=strlen(s);// Lay do dai bien duoc tro boi con tro while(len!=0)// Khi do dai van con { LCDwrite(*s);// Ghi ra LCD gia tri duoc tro boi con tro s++;// Tang con tro len--;// Tru do dai } } Hàm có hai bi n u vào là : xâu kí t c n hi n th và dòng c n hi n th xâu ó(1 ho c 2). *s là con tr , tr t i bi n s 6.3.1. nh nghĩa con tr B nh c a V K các b n tư ng tư ng như 1 cái t nhi u ngăn. Khi khai báo 1 bi n, ví d bi n ki u unsigned char i; thì v k lưu bi n I vào 1 ngăn trong t _ 1 ô nh trong b nh , dĩ nhiên xác nh các ngăn t ngư i ta ánh s cho t ng ngăn, còn v k c p cho các ô nh trong b nh 1 a ch xác nh ô nh ó.Ví d ti p: I có giá tr là 100, thì n i dung c a ô nh lưu bi n I là 100,i=100, còn con tr tr n I có giá tr là a ch c a ô nh ch a bi n I ó. 6.3.2. Cách s d ng con tr : khai báo con tr có thêm d u * trư c tên bi n. *I là bi n ki u con tr , tr t i bi n i(unsigned char). I mang giá tr t 0 n 255, *I mang i ch c a ô nh ch a i. * Hàm hi n th 1 s integer: void LCDwritei(int d) { unsigned char i,j,k,l; i=d%10;// Chia lay phan du, duoc chu so hang don vi d=d/10;// Chia lay phan nguyen, duoc nhung chu so da bo hang don vi j=d%10;// Duoc chu so hang chuc d=d/10;// Nhung chu so da bo hang don vi va hang chuc k=d%10;// Duoc hang tram l=d/10;// Duoc hang nghin LCDwrite(48+l);// Hien thi ki tu trong bang ascii LCDwrite(48+k);// Trong bang ascii so 0 co co so thu tu la 48 LCDwrite(48+j); LCDwrite(48+i);
  • 100. DKS_GROUP Microcontroller Training Center DKS_GROUP - 100 - www.EmbestDKS.com 048 } Hàm có 1 bi n u vào là s int l n n hàng nghìn c n hi n th . * Hàm tr : void delay(long time) { long n; for(n=0;n<time;n++) ; } * Hàm main: void main(void) { char x; LCDinit(); LCDputs("8052 MCU",1); delay(30000); while(1) { for(x=0;x<16;x++)// Dich 16 lan. { LCDputs("8052 MCU",1); LCDcontrol(0x18);// Dich hien thi sang trai. delay(5000);// Tre } } }
  • 101. DKS_GROUP Microcontroller Training Center DKS_GROUP - 101 - www.EmbestDKS.com 048 Nhi m v : T o ra xung có r ng thay i, 10 c p, t n s 1Khz, i u khi n t c ng cơ (10 c p t c ). 7.1. L p m ch theo sơ sau: + C3 10uF/25V C2 33p C1 33p R1 10K 5VDC 1 2 SW1 1 2 SW2 X1 19 X2 18 RESET 9 P2.0 21 VCC 40 VSS 20 EA 31 P1.0 1 P1.1 2 U1 8051 12Mhz 3 B 2C1E C828 12 A - + DC Motor 12V R2 10K - Hư ng d n: Chân c a C828 là ECB, n u c m xuôi transitor nhìn vào m t có ch , tính t bên trái sang. 7.2.L p trình: - Cách t o xung có r ng thay i b ng V K. + Cách 1: Như các b n i u khi n nh p nháy 1 con led, ó là t o ra 1 xung 1 chân c a vi i u khi n, nhưng xung ó có r ng c nh, t n s l n, cách b n có th i u ch nh l i hàm delay t n s c a nó úng 1 Khz. Tuy nhiên vì là dùng hàm delay nên trong th i gian có xung lên 1(5V) và th i gian không có xung(0V) vi i u khi n không làm gì c , hơn n a t o xung b ng vi c delay mà các b n có nhu c u c n 2 b phát
  • 102. DKS_GROUP Microcontroller Training Center DKS_GROUP - 102 - www.EmbestDKS.com 048 xung 2 kênh, có cùng t n s mà khác r ng xung thì tr nên r t khó khăn. Cho nên chúng ta dùng b nh th i Timer c a vi i u khi n trong trư ng h p này r t ti n. + Cách 2: Dùng ng t Timer c a b vi i u khi n. Trư c h t nh c l i v ng t c a vi i u khi n: + Ng t là gì ? tr l i câu h i này tôi xin trích an v ng t trong bài 2 ví d cho ng t timer: Timer * ** * ** * ** M t chương trình chính không có ng t thì ch y liên t c, còn chương trình có ng t thì c khi nào i u ki n ng t ư c m bào thì con tr s nh y sang hàm ng t th c hi n xong hàm ng t l i quay v úng ch cũ th c hi n ti p chương trình chính. Tôi có 1 ví d như sau: B n ang ăn cơm , có ti ng i n tho i , b n t bát cơm ra nghe i n tho i , nghe xong l i quay v bưng bát cơm lên ăn ti p. Thì quá trình ăn cơm c a b n là chương trình chính,có i n tho i g i n là i u ki n ng t, b n ra nghe i n tho i là th c hi n chương trình ng t(Interrupt Service Rountine),quay v ăn cơm ti p là ti p t c th c hi n chương trình chính. Ng t i v i ngư i m i h c vi i u khi n là r t khó hi u, vì a s các tài li u u không gi i thích ng t làm gì. Có nhi u lo i ng t khác nhau nhưng t t c u có chung 1 c i m, ng t dùng cho m c ích a nhi m. a t c là nhi u, nhi m t c là nhi m v . Th c hi n nhi u nhi m v . Các b n nhìn vào ti n trình c a hàm main v i chương trình có ng t : Chương trình chính ang ch y, ng t x y ra, th c hi n hàm ng t r i quay l i chương trình chính. Chương trình trong vi i u khi n khác v i ví d ăn cơm nghe i n tho i c a tôi ch , th i gian th c hi n hàm chính là r t l n,th i gian th c hi n hàm ng t là r t nh , cho nên th i gian th c hi n hàm ng t không nh hư ng gì n th i gian th c hi n hàm chính Như v y trong hàm ng t các b n làm 1 vi c, trong hàm chính c c b n làm 1 vi c Main Program Main ISR Main ISR Main ISR Main Program excution without interrut Program excution with interrupt.
  • 103. DKS_GROUP Microcontroller Training Center DKS_GROUP - 103 - www.EmbestDKS.com 048 như v y coi như các b n làm ư c 2 vi c( a nhi m) trong 1 quãng th i gian tương i ng n c mS, ch th c ra t i 1 th i i m vi i u khi n ch th c thi 1 l nh. Ví d : B n th nghĩ xem làm th nào v a i u ch xung PWM i u ch nh t c ng cơ , v a c các c m bi n u vào mà t c ng cơ ph thu c u vào c m bi n. V y ng t là 1 i u ki n nào ó x y ra ng u nhiên mà vi i u khi n có th bi t do ph n c ng c a vi i u khi n, r i ta căn c vào ó l p tr nh. * Ví d : V i ng t b nh th i timer, hay b m counter là khi tràn b m thì ph n c ng c a vi i u khi n s b o có ng t x y ra và nh y n chương trình ph c v ng t( ISR_ Interrupt Sevice Rountine) 1 cách t ng. V i ng t ngoài, chân P3.2 ch ng h n, n u ta khai báo trư c chân s d ng chân P3.2 s d ng cho ng t ngoài ch không ph i s d ng cho m c ích IO thi c khi cú 1 xung xu t hi n t m ch ngo i vi truy n vào chõn P3.2 thì ph n c ng c a vi i u khi n nh n ra và chuy n t i chương trình ph c v ng t. V i ng t n i ti p thì c khi có kí t truy n t máy tính xu ng vi i u khi n thì s có hi n tư ng ng t x y ra. - Hàm ng t: C u trúc: Void Tênhàm(void) interrupt ngu nng t using băngthanhghi { // Chuong trinh phuc vu ngat o day } Chỳ ý v hàm ng t: + Hàm ng t không ư c phép tr l i giá tr hay truy n bi n vào hàm. + Tên hàm b t kì. + interrupt là t khóa phân bi t hàm ng t v i hàm thư ng. + Ngu n ng t t 0 t i 5 theo b ng vector ng t. + Băng thanh ghi trên ram ch n t 0 n 3. T y theo b n vi t hàm ng t cho ngu n nào b n ch n ngu n ng t t b ng sau: Ng t do C a ch vector Reset h th ng RST 0000H Ng t ngoài 0 IE0 0003H B nh th i 0 TF0 000BH Ng t ngoài 1 IE1 0013H B nh th i 1 TF1 001BH Port n i ti p RI ho c TI 0023H B nh th i 2 TF2 ho c EXF2 002BH Riêng ng t Reset không tính, b t u m t 0 và t ng t ngoài 0. Ví d : tôi c n vi t hàm ng t cho b nh th i timer 1 hàm ng t s là. void timer1_isr(void) interrupt 3 using 0 { // Lenh can thuc hien. }
  • 104. DKS_GROUP Microcontroller Training Center DKS_GROUP - 104 - www.EmbestDKS.com 048 - V using 0: Có 4 băng thanh ghi b n có th ch n cho chương trình ph c v ng t, cái này cũng không quan tr ng. Trong hàm ng t các b n có th b i t using 0, khi ó vi i u khi n s t s p x p là dùng băng thanh ghi nào. - Hàm ng t khác hàm bình thư ng ch nào. Hàm bình thư ng ví d hàm delay, c khi b n g i nó thì nó s ư c th c hi n, có nghĩa là nó có v trí c nh trong ti n trình hàm main, có nghĩa là b n bi t nó x y ra khi nào. Còn hàm ng t thì không có ti n trình c nh, i u ki n ng t có th x y ra b t kì lúc nào trong ti n trình hàm main và c khi nào có i u ki n ng t thì hàm ng t s ư c g i t ng. - s d ng ng t ta ph i làm các công vi c sau: 1) Kh i t o ng t: dùng ng t nào thì cho phép ng t ó ho t ng b ng cách gán giá tr tương ng cho thanh ghi cho phép ng t IE( Interrupt Enable): EA ET2 ES ET1 EX1 EX0 ET0 i u khi n các ngu n ng t IE (0: không cho phép; 1: cho phép) IE.7 EA Cho phép/ không cho phép toàn c c IE.6 --- Không s d ng IE.5 ET2 Cho phép ng t do b nh th i 2 IE.4 ES Cho phép ng t do port n i ti p IE.3 ET1 Cho phép ng t cho b nh th i 1 IE.2 EX1 Cho phép ng t t bên ngoài (ng t ngoài 1) IE.1 EX0 Cho phép ng t t bên ngoài (ng t ngoài 0) IE.0 ET0 Cho phép ng t do b nh th i 0 IE là thanh ghi có th x lí t ng bít. Ví d : b n mu n cho phép ngăt timer 1 b n dùng l nh: ET1=1; Không cho phép n a b n dùng l nh : ET1=0; Ho c b n có th dùng l nh IE= 0x08; thì bit 3 c a thanh ghi IE t c(IE) s lên 1. Nhưng cách th nh t ti n hơn. 2) C u hình cho ng t: Trong 1 ng t nó l i có nhi u ch ví d : v i ng t timer. B n ph i c u hình cho nó ch y ch nào, ch timer hay counter, ch 16 bit, hay 8 bit,… b ng cách gán các giá tr tương ng cho thanh ghi TMOD( Timer MODe).
  • 105. DKS_GROUP Microcontroller Training Center DKS_GROUP - 105 - www.EmbestDKS.com 048 TMOD Ch n model cho b nh th i 1 7 GATE Ch n model cho b nh th i 1 6 C/T Bít ch n ch c năng m ho c nh th i: 5 M1 Bit ch n ch th nh t 4 M0 Bit ch n ch th 2 M1 M0 Ch Ch c năng 0 0 0 Ch nh th i 13 bit 0 1 1 Ch nh th i 16 bit 1 0 2 Ch t ng n p l i 8 bit 1 1 3 Ch nh th i chia x 3 GATE Bit i u khi n c ng cho b nh th i 0 2 C/T Bit ch n ch c năng m / nh th i cho b nh th i 0 1 M1 Bit ch n ch th nh t cho b nh th i 0 0 M0 Bit ch n ch th 2 cho b nh th i 0 Ví d tôi c u hình cho b nh th i 1 ch timer,v i b m 8 bit t ng n p l i(auto reload) dùng l nh sau: TMOD=0x20. Các b n ng lo vì vi c ph i nh b ng thanh ghi này, các b n không ph i nh nói tr ng ra như v y, chuy n sang ph n l p trình các b n s ư c hư ng d n làm th nào không ph i nh , nhưng ch l p trình v i C m i làm ư c còn l p trình Asem thì b t bu c ph i nh . 3)B t u chương trình có ng t: -Trư c khi b t u cho ch y chương trình ta ph i cho phép ng t toàn c c ư c x y ra b ng cách gán EA(Enable All interrupt) b ng 1, thì ng t m i x y ra. -Thư ng thì ngay vào u chương trình(hàm main) trư c vòng while(1) chúng ta t công vi c kh i t o, c u hình và cho phép ki m tra ng t. Ví d v i b nh th i timer ta gán các giá tr phù h p cho thanh ghi TCON( Timer CONtrol). TCON i u khi n b inh th i TCON.7 TF1 C tràn c a b nh th i 1. C này ư c set b i ph n c ng khi có tràn, ư c xoá b i ph n m m, ho c b i ph n c ng khi b vi x lý tr n trình ph c v ng t TCON.6 TR1 Bit i u khi n ho t ng c a b nh th i 1. Bit này ư c set ho c xoá b i ph n m m i u khi n b nh th i ho t ng hay ngưng TCON.5 TF0 C tràn c a b nh th i 0 TCON.4 TR0 Bit i u khi n ho t ng c a b nh th i 0 TCON.3 IE1 C ng t bên ngoài 1 (kích kh i c nh). C này ư c set b i ph n c ng khi có c nh âm (cu ng) xu t hi n
  • 106. DKS_GROUP Microcontroller Training Center DKS_GROUP - 106 - www.EmbestDKS.com 048 trên chân INT1, ư c xoá b i ph n m m, ho c ph n c ng khi CPU tr n trình ph c v ng t TCON.2 IT1 C ng t bên ngoài 1 (kích kh i c nh ho c m c). C này ư c set ho c xoá b i ph n m m khi x y ra c nh âm ho c m c th p t i chân ng t ngoài TCON.1 IE0 C ng t bên ngoài 0 (kích kh i c nh) TCON.0 IT0 C ng t bên ngoài 0 ( kích kh i c nh ho c m c) Ví d ch y b nh th i timer 1 ta dùng câu l nh: TR1=0; TR1(Timer Run 1). Còn b n nào thích khó thì:TCON=0xxx; Còn các lo i ng t khác quá trình tương t , ây là khóa h c cơ b n ch làm vi c v i ng t timer, trong khóa nâng cao s có các ng t còn l i, tuy nhiên làm vi c ư c v i ng t timer thì các ng t khác các b n cũng có th làm tương t , các b n làm n ng t nào thì dùng tài li u tra b ng thanh ghi c a ng t ó. Tài li u tôi s g i cùng bài này. - Quay tr l i bài h c: Sau khi kh i t o song và cho ng t timer 1 ch y thì i u gì x y ra? Khi b t u cho timer 1 ch y thì b m c a timer s m dao ng c a th ch anh, c 12 dao ng c a th ch anh(1 chu kì máy), b m c a timer 1 TL1(Timer Low1) s tăng 1,có th n nói timer 1 m s chu kì máy. i v i ch 8 bít. TL1 là 1 thanh ghi 8 bít, là b m c a b nh th i rõ r i. Nó m ư c t 0, n 255. N u nó m n 256 thì b m tràn, TL1 quay vòng l i b ng 0, và c ng t TF1(Timer Flag 1) t ng ư c gán lên 1(b ng ph n c ng c a vi i u khi n) như 1 công t c t ng b t, và ng t x y ra. Còn v i ch 16 bít, b m c a b nh th i còn 1 thanh ghi 8 bít n a là TH1(Timer high 1), n u c u hình cho timer 1 ho t ng ch 16 bit thì khi TL1 tràn nó s m sang TH1(TH1 s tăng 1). Như v y ta có th m: 216 chu kì máy( 2 thanh ghi 8+8=16 bít). Chú ý là khi b m tràn ng t s x y ra. N u ta c n m 256 chu kì máy thì khi kh i t o ta cho TL1=0; , còn n u không mu n m 256 chu kì mày mà ta ch c n m 100 thôi ng t ã x y ra r i thì ta f i làm như sau: 256-100 = 156; và khi kh i t o ta gán : TL1=155; vì m t 155 n 255 là 100 l n thì ng t x y ra. V i yêu c u c a bài. T o xung t n s 1Khz Chu kì = 1/103 = 0,001 giây= 1 mili giây=1000 uS= 1000 chu kì máy. V i 10 c p t c , t c là b n ph i t o ra ư c xung 10%, 20%, 30%, 40%, …, 90%, 100%. 1 xung như sau: 5V 0V T : Chu kì 1000 miro giây. Kho ng th i gian xung kéo dài 5V là T1. Xung 10% t c là T1/ T= 10%=1/10. Xung 20% T2/T=2/10…PWM(Thay i r ng xung) Bây gi tôi m i xin nói v ph n 2.
  • 107. DKS_GROUP Microcontroller Training Center DKS_GROUP - 107 - www.EmbestDKS.com 048 7.3) Nguyên lí ho t ng: - Xung PWM: ưa ra m transitor, xung v i r ng l n hơn transitor s m lâu hơn ng cơ s quay nhanh hơn,dĩ nhiên không tuy n tính. Không có xung ng cơ s không quay, có xung 100% ng cơ s quay max.Tuy nhiên xung ph i l n hơn 1 m c nào ó thì m i kh i ng cho ng cơ. Các c tính này các b n tham kh o trong giáo trình v máy i n, khí c i n, n u các b n c n thông s chính xác. có th thay i 10 c p t c v i chu kì 1000uS, ta kh i t o cho ng t timer: 100 uS ng t 1 l n. Trong hàm ng t ki m tra xem ta c n c p xung bao nhiêu % thì ta s gán giá tr cho nó. C th như sau: * Hàm kh i t o ng t. Dùng ng t timer 0, 100 uS ng t 1 l n, dùng ch 2 8 bit t ng n p l i c a timer (vì mình ch c n m n 100).TL0 n p b ng 156. i v i ch 2 khi tràn b m TL0 s quay vòng giá tr b ng 0, nhưng sau ó nó l i ư c n p giá tr lưu trong TH0(giá tr n p l i), do ó ta ch c n gán giá tr choTL0 và TH0 trong hàm kh i t o, còn các ch khác 16 bit, 2 timer counter 8 bit, khi tràn b m TL0 không ư c n p l i mà ta ph i t gán l i giá tr cho nó trong hàm ng t. void khoitaotimer0(void)// Ham khoi tao { EA=0;// Cam ngat toan cuc TMOD=0x02;// Timer 0 che do 2 8 bit auto reload TH0=0x9B;// Gia tri nap lai 155 doi ra so hex TL0=0x9B;// Gia tri khoi tao 155 doi ra so hex ET0=1;// Cho phep ngat timer 0 EA=1;// Cho phep ngat toan cuc TR0=1;// Chay timer 0 bat dau dem so chu ki may }
  • 108. DKS_GROUP Microcontroller Training Center DKS_GROUP - 108 - www.EmbestDKS.com 048
  • 109. DKS_GROUP Microcontroller Training Center DKS_GROUP - 109 - www.EmbestDKS.com 048 * Hàm ng t: unsigned char dem=0;// Khai bao bien dem de dem tu 1 den 10 unsigned char phantramxung;// Bien chua phan tram xung(0...10) void timer0(void) interrupt 1 //Ngat timer 0 { TR0=0;// Dung chay timer 0 TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day dem++; if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra chan, xung 5V else P2_0=0;// Neu dem = phan tram xung if(dem==10) dem=0;// Neu dem du 10 thi gan lai bang 0 de bat dau chu ki moi TR0=1;// Cho chay timer } có th thay i r ng xung thì ta lưu r ng xung vào 1 bi n, vì hàm ng t không cho truy n bi n vào ta khai báo bi n ó là bi n toàn c c có th gán giá tr m i hàm. 100 uS ng t 1 l n xác nh chu kì 1000 uS ta c n m t 1 n 10 ta khai báo bi n m. void timer0(void) interrupt 1 //Ngat timer 0 { TR0=0;// Dung chay timer 0 TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day TH0=0xAB; TL0=0xAB; …. TR0=1;// Cho chay timer } C u trúc hàm ng t timer nào cũng ph i theo, do ch 2 t ng n p l i nên kô c n gán giá tr cho TH0 và TL0. V bi n dem s m t 1 n 10 n u b ng 10 k t thúc 1 chu kì 10*100 =1000 uS, ta gán l i nó b ng 0 sang chu kì m i. if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra chan, xung 5V else P2_0=0;// Neu dem = phan tram xung Câu l nh này ki m tra n u m nh hơn phantramxung thì s ưa ra c ng giá tr 1, b ng ho c l n hơn s ưa ra giá tr 0. Khi vào chương trình chính ta ch vi c thay i giá tr bi n phantramxung thì r ng xung s thay i. * Hàm main: void main(void) { khoitaotimer0(); while(1) {
  • 110. DKS_GROUP Microcontroller Training Center DKS_GROUP - 110 - www.EmbestDKS.com 048 phantramxung=9; delaylong(20000); phantramxung=4; delaylong(20000); } } Gi s khi các b n gán phantramxung=4; Thì c m i 100uS ng t x y ra 1 l n, và ki m tra bi n m. L n u dem=1 <4 nên giá tr P2_0 = 1 m c cao, l n th 2 , 200 uS, dem =2<4 P2_0 = 1 m c cao, l n th 3, 300uS, dem=3<4, P2_0=1 m c cao, l n th 4, 400uS, dem =4 <4 sai, P2_0=0, b t u xu ng m c th p, có xung t cao xuông th p, dem = 5<4 sai ,
  • 111. DKS_GROUP Microcontroller Training Center DKS_GROUP - 111 - www.EmbestDKS.com 048 P2_0=0 m c th p, …, dem =10 <4 sai P2_0 m c th p 1000 uS , 400uS cao, 600uS th p quay vòng dem=0, ng t l n th 11, dem=1 < 4 , P2_0=1 m c cao, có xung th p lên cao…. PWM 2 chân P2_0 và P3_5, các b n khai báo thêm 1 bi n phantramxung2 và ưa thêm dòng l nh sau vào hàm ng t. if(dem<phantramxung) P3_5=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra chan, xung 5V else P3_5=0;// Neu dem = phan tram xung Chú ý: Th c ra 1 chu kí như ta v a làm không chính xác 100% là 1Khz, vì ta chưa tính n dài c a hàm ng t,m i l n ng t 100uS, 10 l n là 1000uS ã , còn th i gian th c hi n hàm ng t n a, như v y là chu kì c a ta l n hơn 1000uS, t n s s <1Khz, nhưng th c s sai s ó không áng k . N u các b n mu n chính xác tôi cũng chi u lòng các b n. Các b n ch y debug, th ch anh úng 12Mhz, quan sat dòng sec xem hàm ng t di n ra trong bao nhiêu chu kì máy, khi n p giá tr cho TL0 và TH0 các b n l y 155 tr i giá tr ó ư c gía tr a gán vào, như v y a+th i gian th c hi n hàm ng t úng 100uS.
  • 112. DKS_GROUP Microcontroller Training Center DKS_GROUP - 112 - www.EmbestDKS.com 048
  • 113. DKS_GROUP Microcontroller Training Center DKS_GROUP - 113 - www.EmbestDKS.com 048 Ch vào list mode: Ch n ch , r i quan sát giá tr TMOD r i quay l i i n vào chương trình. Chú ý: Vô cùng quan tr ng các b n ch ư c ch y v i ng cơ lo i nh , n u ng cơ lo i to ph i có m ch i u khi n riêng không là s cháy chip. N u không có m ch i u khi n các b n có th làm, có th mư n c a tôi, không thì ch u khó ch y mô ph ng.
  • 114. DKS_GROUP Microcontroller Training Center DKS_GROUP - 114 - www.EmbestDKS.com 048 Nhi m v : i u khi n Led ma tr n 8x8. Hi n th dòng ch ch y “MTC” Chu n b : Led ma tr n 8x8 12345678 9 10 11 12 13 14 15 16 LED MATRIX 1 8x8 Sơ chân led ma tr n 8x8: Chân C t Hàng Chân C t Hàng 1 4 9 8 2 2 10 5 3 7 11 3 4 6 12 5 5 1 13 8 6 4 14 7 7 3 15 2 8 6 16 6 8.1. L p m ch theo sơ sau:
  • 115. DKS_GROUP Microcontroller Training Center DKS_GROUP - 115 - www.EmbestDKS.com 048 Hang6 VCC Cot3 Cot4 Hang1 Hang3 Hang4 Hang8 Cot7 Hang7 Cot3 Hang3 C2 33p Cot2 Cot2 Hang1 Hang6 12345678 9 10 11 12 13 14 15 16 LED MATRIX1 8x8 Cot1 Hang5 Cot5 10K Hang2 Cot1 Hang7 Cot5 C1 33p Cot6Cot8 Hang5 R2 10K Hang2 U1 8051 29 30 40 20 31 19 18 9 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 PSEN ALE VCC GND EA X1 X2 RST P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD Cot6 Hang4 Cot4 + C3 10uF R312 3 4 5 6 7 8 9 Cot8 Y1 12M Cot7 Hang8
  • 116. DKS_GROUP Microcontroller Training Center DKS_GROUP - 116 - www.EmbestDKS.com 048 8.2. Nguyªn lý ho¹t ®Ðng: Hang 1 D4 LED Cot6 D4 LED D3 LED Cot3 D6 LED D8 LEDCot5 D8 LED D6 LED D5 LED Cot4 Hang 3 D7 LED D5 LED D8 LED D4 LED D5 LED D2 LED D8 LED D7 LED D6 LED D5 LED Hang 7 D4 LED D2 LED D4 LED D6 LED D2 LED D3 LED D6 LED D5 LED D2 LED D7 LED D2 LED D8 LED Hang 5 D8 LED D8 LED D5 LED D8 LED D8 LED Cot8 Cot2 D2 LED D5 LED D6 LED D7 LED D2 LED D8 LED D8 LED D3 LED D8 LED D2 LED Hang 2 D4 LED D4 LED D8 LED D3 LED Hang 4 D3 LED D3 LED Cot1 D8 LED D6 LED D4 LED D6 LED D7 LED D7 LED Hang 6 D8 LED D3 LED D7 LED D8 LED Hang 8 D7 LED Cot7 D3 LED D5 LED Mu n cho led sáng, c p i n dương 5V vào hàng, 0V vào c t, dòng 10mA n 15 mA. Ví d : mu n èn led v trí 5x4 sáng, ta ưa i n áp c t 4(P0_3) xu ng 0V, i n áp hàng 5(P2_5) lên 5V. Hi n th ch : th ng kê các i m sáng thành ch r i cho các hàng c t i n áp tương ng. Có th dùng công c debug l y giá tr c ng tương ng v i các led sáng. Gi ng như quét bàn phím, ưa i n áp 0V ra t ng c t n i v i c ng 0. Như v y s có 8 giá tr : 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F ph I ưa vào 1 m ng 8 ph n t , r i sau ó ưa vào 1 vòng for tăng d n 1 bi n tăng ph n t m ng cot[8]. V i m i l n 1 chân c ng 0 xu ng 0V ta dùng c ng 2 ưa ra 1 giá tr 8 bít i u khi n trong 1 c t nh ng èn nào sáng. Ví d mu n hàng 1 và hàng 3 sáng thì hàng 1 và 3 có giá tr 5V còn các hàng khác 0V, ta ư c giá tr 8 bít sau: 0x05 ( 1010 000). T i m i th i i m ch có m t s èn trên 1 c t sáng, nhưng do ta quét 8 c t v i t n s nhanh, vì m t có hi n tư ng lưu nh nên ta th y trong 1 th i i m ta th y toàn b kí t . V i 8 c t l n lư t b ng 0V ta ph I ưa ra tương ng 8 giá tr 8 bit ra c ng 2, do ó ta f I lưu 8 giá tr ó vào 1 m ng 8 kí t _ kytu1[8], ta s vi t các ký t trên 7 c t. m i kí t s cách nhau 1 c t không sáng. Ta khai báo m ng kytu1[9] có 9 ph n t và ph n t u tiên có giá tr y ra c ng 2 là 0x00 t t toàn b c t ó.
  • 117. DKS_GROUP Microcontroller Training Center DKS_GROUP - 117 - www.EmbestDKS.com 048 Quá trình i u khi n hi n th như sau: C t 1, hàng 1, c t 2 hàng 2, …, c t 8 , hàng 8. làm ch ch y: Thêm 1 bi n vào i u khi n th t hi n th hàng. Hi n 1 ch trên led như trên ã ưa ra: C t 1, hàng 1, c t 2 hàng 2, …, c t 8 , hàng 8. Mu n ch ó d ch chuy n sang tráI ta hi n th như sau: C t 1, hàng 2, c t 2 hàng 3, …, c t 7, hàng 8,c t 8 , hàng 1 ký t sau. C t 1, hàng 3, c t 2 hàng 4, …, c t 7 hàng 1 ký t sau,c t 8 , hàng 2 ký t sau. 8.3) Code: #include <REGX51.H> /* Cot tu P0.0 den P0.7 Hang tu P2.0 den P2.7 De quet dua muc logic 0 lan luot ra cong 0 */ /* Ham tre */ void delay(long time) { long n; for(n=0; n<time; n++) { ; } } unsigned char kytu1[9];// Mang 9 phan tu chua gia tri cac hang day ra cong 2 unsigned char k=0;// Bien xac dinh cac ky tu /* Ham nap gia tri hien thi cac ky tu vao mang kytu1 co 8 gia tri dua ra va 1 gia tri khong bat den nao de cac ky tu cach nhau 1 cot */ void mahoa(unsigned char x) { switch(x) { // Dau trang case 0: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00; kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00; break; } // Chu M case 1: { kytu1[0]=0x00; kytu1[1]=0xFF; kytu1[2]=0x02; kytu1[3]=0x04; kytu1[4]=0x08; kytu1[5]=0x04; kytu1[6]=0x02; kytu1[7]=0xFF; kytu1[8]=0x00; break; } // Chu T case 2: { kytu1[0]=0x00; kytu1[1]=0x01; kytu1[2]=0x01; kytu1[3]=0x01;
  • 118. DKS_GROUP Microcontroller Training Center DKS_GROUP - 118 - www.EmbestDKS.com 048 kytu1[4]=0xFF; kytu1[5]=0x01; kytu1[6]=0x01; kytu1[7]=0x01; kytu1[8]=0x00; break; } // Chu C case 3: { kytu1[0]=0x00; kytu1[1]=0x7E; kytu1[2]=0x81; kytu1[3]=0x81; kytu1[4]=0x81; kytu1[5]=0x81; kytu1[6]=0x42; kytu1[7]=0x00; kytu1[8]=0x00; break; } // Dau trang case 4: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00; kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00; break; } } } /* Ham quet led ma tran_ vua hien thi vua dich ky tu dan sang trai*/ void hienthi(void) { unsigned char n,m,lap; unsigned char cot[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; // Cac phan tu quet cot for(m=0; m<8 ; m++)// Dich hien thi { for(lap=0; lap<10; lap ++) // Lap hien thi { for(n=0; n<8 ; n++)// Quet cot { if((n+m)<9 )// Neu n+m < 9 hien thi ky tu 1 { mahoa(k); // Nap cac gia tri ma hoa ky tu dua ra cac hang (Cong 2) P0=cot[n]; // Day gia tri 0V ra cong 0 (cac cot) P2=kytu1[n+m];// Day cac gia tri cac hang (ma hoa ky tu) ra cong 2(cac hang) delay(45);// Tre du de led sang } if((n+m) > 7)// Neu n+m >7 hien thi ky tu 2 { mahoa(k+1);// Nap gia tri ma hoa ky tu tiep de dua ra cac hang(Cong 2) P0=cot[n];// Day gia tri logic 0V ra cong 0(cac cot) P2=kytu1[n+m-8];// Day cac gia tri cac hang (ma hoa ky tu) ra cong 2(cac hang) delay(45);// Tre du de led sang
  • 119. DKS_GROUP Microcontroller Training Center DKS_GROUP - 119 - www.EmbestDKS.com 048 } P0=0xFF;// Day cac cot len cao P2=0x00;// Dua cac hang xuong thap de tat toan bo cac led. } } } } void main(void) { while(1)// Vong lap vo han. { hienthi(); // Hien thi 2 ky tu dau tien dau trang va chu M k=k+1; // Tang k de hien thi chu M va chu T lan tiep if(k==4) k=0;// Quay vong hien thi } } Chú ý: M ch led sáng u tuy nhiên sáng y u, do l p trên board chúng ta không l p các linh ki n khuyêch i dòng v_ n dòng led sáng p, u. Khi l_m m ch các b n thêm các linh ki n khuyêch i ho c n dòng èn sáng u nh− ULN2003 ho c ULN 2803 −a giá tr logic ra h_ng, dùng transitor ho c dùng luôn ULN quét c t.