DKS_GROUP

Microcontroller Training Center

DKS_GROUP

-1-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

M CL C
Bài 1: Gi i thi u v vi i u khi n 1.1.Tiêu chu n trong l a ch n m t b vi i u khi n 1.2.Vi i u khi n và vi x lí 1.3.Sơ chân vi i u khi n 8051 1.4.M ch 8051 t i thi u 1.5.C u trúc sơ kh i c a vi i u khi n 1.6.Các thành viên khác c a h 8051 1.7.Ram n i và các thanh ghi SFR c a 8051 Bài 2.Ngôn ng l p trình cho vi i u khi n (Ph n 1) 2.1.C u trúc m t chương trình 2.2.Các lo i bi n trong C 2.3.Hàm trong C 2.4.Toán t cơ b n 2.5.C u trúc l nh r nhánh 2.6.B ti n x lý Bài 2.Hư ng d n s d ng keil C (Ph n 2) 2.1.Kh i t o project 2.2.So n th o chương trình 2.3.D ch chương trình 2.4.Mô ph ng Bài 3. i u khi n O(out) v i Led ơn 3.1.L p m ch 3.2.Nguyên lý ho t 3.3.L p trình 3.4.N p chương trình 3.5.K t qu 3.6. i u khi n Led t ng chi c 1 3.7. i u khi n Out Bài 4. i u khi n led 7 thanh 4.1.L p m ch ng 3 3 3 3 6 7 9 11 12 12 13 15 15 15 16 17 17 36 41 45 50 50 51 52 60 61 62 62 67 67

DKS_GROUP

-2-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

4.2.Nguyên lý ho t 4.3.L p trình 4.4.N p chíp 4.5.K t qu Bài 5. c bàn phím 5.1.L p m ch

ng

68 69 75 75 78 78 79 79 94 94 97 97 99 99 100 101 110 114 114

5.2.Nguyên lý quét phím 5.3.L p trình Bài 6. i u khi n LCD 16x2 6.1.L p m ch 6.2.Nguyên lý ho t 6.3.L p trình 6.3.1. nh nghĩa con tr r ng xung ng 6.3.2.Cách s d ng Bài7. i u ch 7.1.L p m ch theo sơ 7.2.Nguyên lý ho t Bài 8.Led ma tr n 8.1.L p m ch 8.2.Nguyên lý ho t 8.2.Code ng ng c a LCD

116 117

DKS_GROUP

-3-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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 www.intel.com/design/mcs51 Antel www.atmel.com www.semiconductors.philips.com Plips/ Signetis Siemens www.sci.siemens.com Dallas Semiconductor 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 4K byte RAM 128 byte B nh th i 2 Các chân vào - ra 32 C ng n i ti p 1 Ngu n ng t 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

-4-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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 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 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 ó hay xu t m c logic ra(0;1) P0 t P1 t P2 t P3 t
U1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RESET RXD TXD INT0 INT1 T0 T1 WR RD X2 X1 VSS VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA/VP ALE/P PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21

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à

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

c m c logic (0;1 tương ng v i 0V ; 5V)vào

chân 39 32 tương ng là các chân P0_0 P0_7 chân 1 8 tương ng là các chân P1_0 P1_7 chân 21 28 tương ng là các chân P2_0 P2_7 chân 10 17 tương ng là các chân P3_0 P3_7

AT89C51

P0 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

P1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

P2 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7

P3 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

Port's Bit D0 D1 D2 D3 D4 D5 D6 D7

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

DKS_GROUP

-5-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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 S1 S6 S2 ng c a th ch anh S3 S4 S5

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.
5VDC

40 U3 VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA/VP RESET 10Kx9 39 38 37 36 35 34 33 32 31 9 R4 R7 R9 + C3 10uF/25V

R1 10K C2 33p 12Mhz C1 33p

19 18 20

X1 X2 GND 8051

DKS_GROUP

-6-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

M ch này chưa có kh i ngu n Sơ chân:

t o ngu n 5V các b n dùng con IC sau:
U6 LM7805/TO 1 VIN GND VOUT 3

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
12VDC In 1 U1 LM7805/TO VIN GND VOUT 3 C1 104 5VDC Out C3 10uF/25V

2
+ C2 104

1.4. M ch vi i u khi n cơ b n
5VDC

2

U1

VCC

40

+ C3 RESET 9 10uF/25V R1 10K

C2 33p

18

X2

12Mhz C1 33p 19 20 X1 VSS 8051

DKS_GROUP

-7-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

1.5. C u trúc vi i u khi n 89c51
EXTERNAL INTERRUPTS INTERRUP T CONTROL ON CHIP RAM

ETC COUNTER INPUTS TIMER 0 TIMER 1

CPU

OS C

BUS CONTRO L

4 I/O PORTS

SERIAL PORT

P P P P
ADDRESS/DAT A

TXD RXD

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 ROM trên chip RAM B nh th i C ng n i ti p Ngu n ng t 8051 4K byte 128 byte 2 1 6 8052 8K byte 256 byte 3 1 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

DKS_GROUP

-8-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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 F0 E0 D0 B8 B0 A8 A0 99 98 90 8D 8C 8B 8A 89 88 87 83 82 81 80 F7 E7 D7 B7 AF A7 F6 E6 D6 B6 F5 E5 6D B5 F4 E4 6C F3 E3 6B F2 E2 6A F1 E1 69 F0 E0 68 B8 B0 A8 A0 98 90

C c cú a ch và FFH

thanh ghi SFR n m gi a 80H các a ch này

BC BB B4 B3

BA B9 B2 B1

AE AD AC AB AA A9 A6 A5 A4 A3 A2 A1 99 91

Không nh a ch t ng bít 9F 9E 9D 9C 9B 9A 97 96 95 94 Không nh a ch t Không nh a ch t Không nh a ch t Không nh a ch t Không nh a ch t 8F 8 8D 8C E Không nh a ch t 93 92 ng bít ng bít ng bít ng bít ng bít 8B 8A ng bít

89

88

Không nh a ch t ng bít Không nh a ch t ng bít Không nh a ch t ng bít 87 86 8 84 83 82 5

81

80

THANH GHI CH C NĂNG ĂC BIÊT

DKS_GROUP

-9-

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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 SFR nh Thanh ghi / Bit TMOD 7 6 5 4 Ký hi u GATE C/T M1 M0 c bi t SFR i khi l p trình cơ b n C) Ch c năng Ch n model cho b nh th i 1 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 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 Bit ch n ch th nh t Bit ch n ch th 2 Chøc n¨ng M0 Châ M1 ®Ð 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 Bit i u khi n c ng cho b nh th i 0 Bit ch n ch c năng m / nh th i cho b nh th i 0 Bit ch n ch th nh t cho b nh th i 0 Bit ch n ch th 2 cho b nh th i 0 TR0 IE1 IT1 IE0 IT0 Ch c năng i u khi n b inh th i 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 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 C tràn c a b nh th i 0 Bit i u khi n ho t ng c a b nh th i 0 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 a ch t ng bit( nh ng thanh ghi c n nh

3 2 1 0 TF1 TR1 Thanh ghi / Bit TCON TCON.7

GATE C/T M1 M0 TF1 Ký hi u TF1

TCON.6 TCON.5 TCON.4 TCON.3

TR1 TF0 TR0 IE1

DKS_GROUP

- 10 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

TCON.2 TCON.1 TCON.0 EA IE IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0

IT1 IE0 IT0 ET2 EA --ET2 ES ET1 EX1 EX0 ET0

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 C ng t bên ngoài 0 (kích kh i c nh) C ng t bên ngoài 0 ( kích kh i c nh ho c m c) ES ET1 EX1 EX0 ET0 i u khi n các ngu n ng t (0: không cho phép; 1: cho phép) Cho phép/ không cho phép toàn c c Không s d ng Cho phép ng t do b nh th i 2 Cho phép ng t do port n i ti p Cho phép ng t cho b nh th i 1 Cho phép ng t t bên ngoài (ng t ngoài 1) Cho phép ng t t bên ngoài (ng t ngoài 0) 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 Reset h th ng Ng t ngoài 0 B nh th i 0 Ng t ngoài 1 B nh th i 1 Port n i ti p B nh th i 2 Timer Program excution without interrut Main Program C RST IE0 TF0 IE1 TF1 RI ho c TI TF2 ho c EXF2 a ch vector 0000H 0003H 000BH 0013H 001BH 0023H 002BH

ISR

ISR

ISR

*
Main

**

*
Main

**
Main

*

**
Main

Program excution with interrupt.

DKS_GROUP

- 11 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 12 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

//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 char unsigned char short unsigned short int unsigned int long S Bit 8 8 16 16 16 16 32 S Byte Mi n giá tr 1 1 2 2 2 2 4 -128 0 0 0 -32,768 -32,768 n +127 n +32,767 n +32,767 n 255 n 65,535 n 65,535

-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 sbit 1 1 0 0 0;1 0;1 - 13 -

DKS_GROUP

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

sfr sf16

8 16

1 2

0 0

n 255 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 } 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 } VD :

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

- 14 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

{ // Các câu l nh x lí } S bi n truy n vào tùy ý(mi n Ví d : ây b nh ), ngăn cách b i d u “,”

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

- 15 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

n switch: 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.svbkol.org www.diendandientu.com

C u trúc: Gi i thích: qua Câu l nh l a ch C u trúc:

if ( i uki n) { // Các câu l nh x lí } N u i uki n úng thì x lí các câu l nh bên trong còn sai thì nh y

www.atmel.com www.keil.com www.iguanalabs.com - 16 -

DKS_GROUP

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 17 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

t o 1 project m i ch n Project

New project như sau:

DKS_GROUP

- 18 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

ư c hình sau:

DKS_GROUP

- 19 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

ánh tên và chuy n R i ch n Save.

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.

DKS_GROUP

- 20 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

ư c hình sau:

DKS_GROUP

- 21 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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 ,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:

y

DKS_GROUP

- 22 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 23 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 24 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

t o 1 file code các b n ch n File

New ho c n Ctrl+N. Như sau:

DKS_GROUP

- 25 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

ư c c a s như sau:

DKS_GROUP

- 26 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

Cho c a s Text 1 to ra ư c như sau:

DKS_GROUP

- 27 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 28 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

ư c c a s sau:

DKS_GROUP

- 29 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 30 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 31 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 32 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 33 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 34 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 35 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 36 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 37 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 38 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

Ti p theo là vi t hàm main. Như sau:

DKS_GROUP

- 39 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 40 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

â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.
R2 5VDC

U1

D1 1 LED RESET 9 P1.0 + C3 10uF/25V R1 10K

C2 33p

18

X2

12Mhz C1 33p 19 20 X1 VSS 8051

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

VCC

40

470

- 41 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 42 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 43 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 44 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

Sau khi d ch l i ư c hình sau:

DKS_GROUP

- 45 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 46 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

ư 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

- 47 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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 kính lúp trên thanh công c . ư c c a s sau:

trong cái

DKS_GROUP

- 48 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

Trong menu Peripherals(các thi t b ngo i vi) ch n IO port , Port 1. ư c như sau:

DKS_GROUP

- 49 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 50 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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:
5VDC R11 RESISTOR SIP 10 1 U1 D2 D3 D4 D5 D6 D7 D8 1 2 3 4 5 6 7 8 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 EA 39 38 37 36 35 34 33 32 31 VCC 2 3 4 5 6 7 8 9 10 D1 40

+ C3 10uF/25V

RESET

9 R1 10K

C2 33p

18

X2

12Mhz C1 33p 19 20 X1 VSS 8051

- 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

- 51 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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.
U1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RESET RXD TXD INT0 INT1 T0 T1 WR RD X2 X1 VSS VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA/VP ALE/P PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21

AT89C51

* 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?

DKS_GROUP

- 52 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 53 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 54 -

www.EmbestDKS.com

04868

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

* có th n p chương trình vào chíp thì f i t o ra file .hex. như sau . Vào Option for target ch ch nh t n s th ch anh.

t o ra file .hex làm

DKS_GROUP

- 57 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

ư c hình sau:

DKS_GROUP

- 58 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

Kích vào tab Output. ư c hình sau:

DKS_GROUP

- 59 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

Tích vào check : Create Hex File. Nh p OK. Nh n fím F7 s output window ư c ch Creating hex file…

biên d ch l i . Khi ó dư i c a

DKS_GROUP

- 60 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 61 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 62 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 63 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 64 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

tre(1000); } } } /***********************************************************/ Debug quan sát s thay 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: i c a c ng 1 th y ư c l i h i c a phép d ch bit xang

DKS_GROUP

- 65 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 66 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 67 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

4.1 L p m ch :
109 8 7 6 D11 f g V+a b A F G B F G 109 8 7 6 D10 f g V-a b A B

E

C

E

C

D DOT LED CATOT Chung e d V+c dot 1 2 3 4 5

D DOT LED CATOT Chung e d V-c dot 1 2 3 4 5

Có hai lo i led 7 thanh: An t chung và Cat t chung. Hình trên là sơ c a hai lo i led. Nó có c u t o như sau:
7 6 4 2 1 10 9 5 D13A Anot chung A B C D E F G DP 7 6 4 2 1 10 9 5 D12A Catot chung

chân

83

83

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

- 68 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

5VDC

U3 21 22 23 24 25 26 27 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6

VCC

B C D E F G

40

A

R3 10K 31 + C3 9 10uF/25V R1 10K

EA/VP RESET

C2 33p 18 12Mhz C1 33p 19 20 X1 VSS 8051 X2

- 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

- 69 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

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

- 70 -

www.EmbestDKS.com

04868

DKS_GROUP

Microcontroller Training Center

/* 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(); - 71 -

DKS_GROUP

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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; - 72 -

DKS_GROUP

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 73 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 74 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

/* 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

- 75 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 76 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 77 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

Ph n 1: Nhi m v : m s l n phím b m gi i h n t 0 5.1.L p m ch như sau:

c 1 phím. n 9 hi n th ra led 7 thanh.

5VDC

U1 A F G B 21 22 23 24 25 26 27 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6

VCC

40

109 8 7 6 D11 f g V+a b

D12 LED

R29 1K + C3 RESET 9 10uF/25V R1 10K

E

C

D DOT LED ANOT Chung e d V+c dot 1 2 3 4 5

SW1 C2 33p 18 P1.0 X2 P1.1 12Mhz C1 33p 19 20 X1 VSS 8051 CAP NP 1 2 1 C4 2

- 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

- 78 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 79 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

DKS_GROUP

- 80 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

Hàm hi n th s tương ng.

DKS_GROUP

- 81 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

Hàm main ư c s a l i như sau:

DKS_GROUP

- 82 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

â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

- 83 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 84 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

DKS_GROUP

- 85 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 86 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 87 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

5VDC 5V 40

R26 10Kx8

R27 R

R28 R

R25 R

A B C D E F G
21 22 23 24 25 26 27

U3 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6

PHIM 1 1 R3 10K 31 9 R1 10K PHIM 9 + C3 10uF/25V PHIM 5 1 2 1 2 1

PHIM 2 2 1

PHIM 3 2 1

PHIM 4 2

VCC

HANG 1
PHIM 6 2 1 PHIM 7 2 1 PHIM 8 2 R

R21

EA/VP RESET

PHIM 10 1 2 1

PHIM 11 2 1

PHIM 12 2

LED 7 THANH
C2 33p 18 12Mhz C1 33p 19 20 X1 VSS 8051 X2

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

10 11 12 13 14 15 16 17

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

HANG 2
R

R22

1 5V P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

2

PHIM 13 1 2 1

PHIM 14 2 1

PHIM 15 2 1

PHIM 16 2

HANG 3
R

R23

HANG 4 COT 1 COT 2 COT 3 COT 4
- 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.
R

R24

DKS_GROUP

- 88 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

6.2 Nguyên lí quét phím: c t 16 nút b m bình thư ng ph i - Vì sao m ch phím u theo ma tr n. N u 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

- 89 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

} } 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

- 90 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

Vi t hàm phím ư c n:

DKS_GROUP

- 91 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

Vi t hàm quét bàn phím và hàm main.

DKS_GROUP

- 92 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

DKS_GROUP

- 93 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 94 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

VCC 5V R1 10K C6 5V 104 10 9 8 7 6 5 4 3 2 40 U1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 EN Rw RS 5V R2 5K

LCD16x02
J1 LCD

+ C3 CAPACITOR POL

R3 10K

Y1 12Mhz C2 33p C1 33p

AT89C51

20

GND

P1.0 P0.0/AD0 P1.1 P0.1/AD1 P1.2 P0.2/AD2 P1.3 P0.3/AD3 P1.4 P0.4/AD4 P1.5 P0.5/AD5 P1.6 P0.6/AD6 P1.7 P0.7/AD7 RST EA/VPP P3.0/RXD ALE/PROG P3.1/TXD PSEN P3.2/INT0 P2.7/A15 P3.3/INT1 P2.6/A14 P3.4/T0 P2.5/A13 P3.5/T1 P2.4/A12 P3.6/WR P2.3/A11 P3.7/RD P2.2/A10 XTAL2 P2.1/A9 XTAL1 P2.0/A8 VCC

39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21

1 D7 D6 D5 D4 D3 D2 D1 D0

EN
DKS_GROUP
- 95 -

Rw

RS
www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

- 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) 1 2 4 6 5 7 8 A C L nh n thanh ghi c a LCD Xoá màn hình hi n th Tr v u dòng Gi m con tr (d ch con tr sang trái) Tăng con tr (d ch con tr sang ph i) D ch hi n th sang ph i D ch hi n th sang trái T t con tr , t t hi n th T t hi n th , b t con tr B t hi n th , t t con tr - 96 -

DKS_GROUP

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

E F 10 14 18 1C 80 C0 38

B t hi n th , nh p nháy con tr T t con tr , nh p nháy con tr D ch v trí con tr sang trái D ch v trí con tr sang ph i D ch toàn b hi n th sang trái D ch toàn b hi n th sang ph i ép con tr v u dòng th nh t ép con tr v u dòng th hai 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

- 97 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

- 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

- 98 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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 xác nh ô nh ó.Ví d ti p: I có giá tr là c p cho các ô nh trong b nh 1 a ch 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

- 99 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

} 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

- 100 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

Nhi m v : T o ra xung có cơ (10 c p t c ). 7.1. L p m ch theo sơ
12V

r ng thay sau:

i, 10 c p, t n s 1Khz,

i u khi n t c

ng

5VDC

U1 2C

VCC

40

C828 1E 1

3B

21

P2.0 EA 31 9

R2 10K + C3 10uF/25V R1 10K

+ DC Motor

RESET

A
2 C2 33p 12Mhz C1 33p 19 20 X1 VSS 8051 1 1 2 1

SW1 18 P1.0 X2 P1.1 2

SW2 2

- 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

- 101 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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 ng t timer: Timer Program excution without interrut Main Program an v ng t trong bài 2 ví d cho

ISR

ISR

ISR

*
Main

**

*
Main

**
Main

*

**
Main

Program excution with interrupt.

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

DKS_GROUP

- 102 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 103 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

- 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

- 104 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

TMOD 7 6 5 4

GATE C/T M1 M0

Ch n model cho b nh th i 1 Ch n model cho b nh th i 1 Bít ch n ch c năng m ho c nh th i: Bit ch n ch th nh t Bit ch n ch th 2 M1 M0 Ch Ch c năng 0 0 1 0 1 0 0 1 2

Ch nh th i 13 bit Ch nh th i 16 bit 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

- 105 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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. mc ab nh th i rõ r i. Nó m ư c t 0, n 255. TL1 là 1 thanh ghi 8 bít, là b 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 mc ab 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). 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 Chú ý là khi b 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

- 106 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

7.3) Nguyên lí ho t ng: r ng l n hơn transitor s m lâu - Xung PWM: ưa ra m transitor, xung v i 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

- 107 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

DKS_GROUP

- 108 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

* 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 2t 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

- 109 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 110 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 111 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

DKS_GROUP

- 112 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 113 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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
8 7 6 5 4 3 2 1

LED MATRIX 1 8x8

9

10

11

12

13

14

15

16

chân led ma tr n 8x8: Chân C t 1 2 3 7 4 6 5 6 4 7 8

Hàng 4 2 1 3 6

Chân 9 10 11 12 13 14 15 16

C t 5 3

Hàng 8 5

8 7 2 6

8.1. L p m ch theo sơ

sau:

DKS_GROUP

- 114 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

VCC

1 R3 H ang6 H ang3 C o t4 H ang1 C o t6 C o t7 H ang2 H ang4 U1 Cot1 Cot2 Cot3 Cot4 Cot5 Cot6 Cot7 Cot8 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8 Y1 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 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 Hang1 Hang2 Hang3 Hang4 Hang5 Hang6 Hang7 Hang8 8 7 6 5 4 3 2 1 LED MATRIX 1 8x8 19 18 X1 X2 31 9 EA RST 40 VCC 8051 C3 + 10uF R2 10K GND 30 ALE 29 PSEN 9 10 11 12 13 14 15 16 H ang8 C o t5 C o t3 H ang5 C o t8 H ang7 C o t2 C o t1 20 10K C1 33p 12M C2 33p

DKS_GROUP

9 8 7 6 5 4 3 2

- 115 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

8.2. Nguyªn lý ho¹t ®Ðng:
D2 D3 D4 D5 D6 D7 D8 D8

Hang 1

LED D2

LED D3

LED D4

LED D5

LED D6

LED D7

LED D8

LED D8

Hang 2

LED D2

LED D3

LED D4

LED D5

LED D6

LED D7

LED D8

LED D8

Hang 3

LED D2

LED D3

LED D4

LED D5

LED D6

LED D7

LED D8

LED D8

Hang 4

LED D2

LED D3

LED D4

LED D5

LED D6

LED D7

LED D8

LED D8

Hang 5

LED D2

LED D3

LED D4

LED D5

LED D6

LED D7

LED D8

LED D8

Hang 6

LED D2

LED D3

LED D4

LED D5

LED D6

LED D7

LED D8

LED D8

Hang 7

LED D2

LED D3

LED D4

LED D5

LED D6

LED D7

LED D8

LED D8

LED Cot1

LED Cot2

LED Cot3

LED Cot4

LED Cot5

LED Cot6

LED Cot7

LED Cot8

Hang 8

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

- 116 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 117 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

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

- 118 -

www.EmbestDKS.com

048

DKS_GROUP

Microcontroller Training Center

} 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.

DKS_GROUP

- 119 -

www.EmbestDKS.com

048

Sign up to vote on this title
UsefulNot useful