Vi điều khiển Intel 8051

pdf 120 trang phuongnguyen 2782
Bạn đang xem 20 trang mẫu của tài liệu "Vi điều khiển Intel 8051", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfvi_dieu_khien_intel_8051.pdf

Nội dung text: Vi điều khiển Intel 8051

  1. Vi điều khiển Intel 8051
  2. DKS_GROUP Microcontroller Training Center DKS_GROUP - 1 - www.EmbestDKS.com 048684577
  3. DKS_GROUP Microcontroller Training Center MC L C Bài 1: Gi i thi u v vi iu khi n 3 1.1.Tiêu chu n trong l a ch n m t b vi iu khi n 3 1.2.Vi iu khi n và vi x lí 3 1.3.S chân vi iu khi n 8051 3 1.4.M ch 8051 t i thi u 6 1.5.Cu trúc s kh i c a vi iu khi n 7 1.6.Các thành viên khác c a h 8051 9 1.7.Ram n i và các thanh ghi SFR c a 8051 11 Bài 2.Ngôn ng l p trình cho vi iu khi n (Ph n 1) 12 2.1.C u trúc m t ch ư ng trình 12 2.2.Các lo i bi n trong C 13 2.3.Hàm trong C 15 2.4.Toán t c b n 15 2.5.C u trúc l nh r nhánh 15 2.6.B ti n x lý 16 Bài 2.Hưng d n s d ng keil C (Ph n 2) 17 2.1.Kh i t o project 17 2.2.So n th o ch ư ng trình 36 2.3.D ch ch ư ng trình 41 2.4.Mô ph ng 45 Bài 3. iu khi n O(out) v i Led ơn 50 3.1.L p m ch 50 3.2.Nguyên lý ho t ng 51 3.3.L p trình 52 3.4.N p ch ư ng trình 60 3.5.K t qu 61 3.6. iu khi n Led t ng chi c 1 62 3.7. iu khi n Out 62 Bài 4. iu khi n led 7 thanh 67 4.1.L p m ch 67 DKS_GROUP - 2 - www.EmbestDKS.com 048684577
  4. DKS_GROUP Microcontroller Training Center 4.2.Nguyên lý ho t ng 68 4.3.L p trình 69 4.4.N p chíp 75 4.5.K t qu 75 Bài 5.c bàn phím 78 5.1.L p m ch 78 5.2.Nguyên lý quét phím 79 5.3.L p trình 79 Bài 6. iu khi n LCD 16x2 94 6.1.L p m ch 94 6.2.Nguyên lý ho t ng c a LCD 97 6.3.L p trình 97 6.3.1. nh ngh a con tr 99 6.3.2.Cách s d ng 99 Bài7. iu ch r ng xung 100 7.1.L p m ch theo s 101 7.2.Nguyên lý ho t ng 110 Bài 8.Led ma tr n 114 8.1.L p m ch 114 8.2.Nguyên lý ho t ng 116 8.2.Code 117 DKS_GROUP - 3 - www.EmbestDKS.com 048684577
  5. 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 ht. 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 iu 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 iu này là quan trong h n c . Hi n nay, các b vi iu 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 iu 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 sn 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. Bng 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 Plips/ Signetis www.semiconductors.philips.com 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 im. 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. Bng 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 Cng n i ti p 1 Ngu n ng t 6 1.2.Vi iu 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 iu 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 iu 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 iu 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 ca ch ư ng trình ưc DKS_GROUP - 4 - www.EmbestDKS.com 048684577
  6. 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ã lnh.(chú ý vi c c ây là c các l nh (khác v i c d li u), khi ó VXL ch c các bit opcode c a l nh và ư a chúng vào hàng i l nh thông qua các Bus a ch và d li u) Chân 30 (ALE : Adress Latch Enable) là tín hi u iu khi n xu t ra c a 8051, nó cho phép phân kênh bus a ch và bus d li u c a Port 0. Chân 31 (EA : Eternal Acess) ưc ưa xu ng th p cho phép ch n b nh mã ngoàI i v i 8051. i v i 8051 thì : EA = 5V : Ch n ROM n i. EA = 0V : Ch n ROM ngo i. 32 chân còn l i chia làm 4 c ng vào ra: Vào ra t c là có th dùng chân ó c m c logic (0;1 t ư ng ng v i 0V ; 5V)vào hay xu t m c logic ra(0;1) P0 t chân 39  32 t ư ng ng là các chân P0_0  P0_7 P1 t chân 1  8 t ư ng ng là các chân P1_0  P1_7 P2 t chân 21 28 t ư ng ng là các chân P2_0  P2_7 P3 t chân 10  17 t ư ng ng là các chân P3_0  P3_7 U1 1 40 2 P1.0 VCC 39 3 P1.1 P0.0 38 4 P1.2 P0.1 37 5 P1.3 P0.2 36 P0 P1 P2 P3 Port's Bit 6 P1.4 P0.3 35 7 P1.5 P0.4 34 P0.0 P1.0 P2.0 P3.0 D0 8 P1.6 P0.5 33 9 P1.7 P0.6 32 P0.1 P1.1 P2.1 P3.1 D1 10 RESET P0.7 31 11 RXD EA/VP 30 P0.2 P1.2 P2.2 P3.2 D2 12 TXD AT89C51 ALE/P 29 13 INT0 PSEN 28 P0.3 P1.3 P2.3 P3.3 D3 14 INT1 P2.7 27 15 T0 P2.6 26 P0.4 P1.4 P2.4 P3.4 D4 16 T1 P2.5 25 17 WR P2.4 24 P0.5 P1.5 P2.5 P3.5 D5 18 RD P2.3 23 19 X2 P2.2 22 P0.6 P1.6 P2.6 P3.6 D6 20 X1 P2.1 21 VSS P2.0 P0.7 P1.7 P2.7 P3.7 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, iu khi n ghi d li u. P3.7 _RD: Read , iu 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 048684577
  7. DKS_GROUP Microcontroller Training Center Tn 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 Tn s t i a 24Mhz. T n s càng l n V K x lí càng nhanh. Dao ng c a th ch anh S1 S2 S3 S4 S5 S6 P1 P2 Riêng c ng 3 có thêm ch c n ng nh ư d ưi ây P3.0 – RxD : chân nh n d li u n i ti p khi giao ti p RS232(C ng COM ). P3.1 _ TxD : ph n truy n d li u n i ti p khi giao ti p RS232. P3.2 _ INTO : interrupt 0 , ng t ngoài 0. P3.3 _ INT1: interrupt 1, ng t ngoài 1. P3.4 _T0 : Timer0 , u vào timer0. P3.5_T1 : Timer1, u vào timer 1. P3.6_ WR: Write, iu khi n ghi d li u. P3.7 _RD: Read , iu 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 Tn s th ch anh th ưng ưc dùng trong các ng d ng là : 11.0592Mhz(giao ti p vi c ng com máy tính) và 12Mhz Tn s t i a 24Mhz. T n s càng l n V K x lý càng nhanh. 5VDC 40 10Kx9 U3 VCC 39 P0.0 38 R4 P0.1 37 P0.2 36 P0.3 35 R7 P0.4 34 P0.5 33 R9 P0.6 32 + C3 P0.7 31 EA/VP 10uF/25V 9 RESET R1 10K C2 33p 19 18 X1 X2 12Mhz 20 C1 GND 33p 8051 DKS_GROUP - 6 - www.EmbestDKS.com 048684577
  8. DKS_GROUP Microcontroller Training Center Mch này ch ưa có kh i ngu n t o ngu n 5V các b n dùng con IC sau: Sơ chân: U6 LM7805/TO 1 3 VIN VOUT GND 2 Gi i thi u IC n áp 7805 : u vào > 7V u ra 5V 500mA. Mch n áp: c n cho VK 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. Mch ngu n 12VDC In U1 LM7805/TO 1 3 5VDC Out VIN VOUT C1 + C3 C2 GND 104 10uF/25V 104 2 1.4. Mch vi iu khi n c ơ bn 5VDC U1 40 VCC + C3 9 10uF/25V RESET R1 10K C2 33p 18 X2 12Mhz C1 19 33p 20 X1 VSS 8051 DKS_GROUP - 7 - www.EmbestDKS.com 048684577
  9. DKS_GROUP Microcontroller Training Center 1.5. Cu trúc vi iu khi n 89c51 EXTERNAL INTERRUPTS ETC COUNTER TIMER INPUTS INTERRUP ON - 0 T CHIP TIMER 1 CONTROL RAM CPU OS BUS 4 I/O SERIAL C CONTRO PORTS PORT L P P P P TXD RXD ADDRESS/DAT A 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 iu khi n thành viên khác c a h 8051 là 8052 và 8031. B vi iu 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. Bng : So sánh các c tính c a các thành viên h 8051. c tính 8051 8052 ROM trên chip 4K byte 8K byte RAM 128 byte 256 byte B nh th i 2 3 Cng n i ti p 1 1 Ngu n ng t 6 8 Do v y t t c m i ch ư ng trình vi t cho 8051 u ch y trên 8052 nh ưng iu 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 iu khi n DKS_GROUP - 8 - www.EmbestDKS.com 048684577
  10. 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 F7 F6 F5 F4 F3 F2 F1 F0 Cc thanh ghi SFR cú a ch E0 E7 E6 E5 E4 E3 E2 E1 E0 nm gi a 80H và FFH các a ch này D0 D7 D6 6D 6C 6B 6A 69 68 B8 - - - BC BB BA B9 B8 B0 B7 B6 B5 B4 B3 B2 B1 B0 A8 AF AE AD AC AB AA A9 A8 A0 A7 A6 A5 A4 A3 A2 A1 A0 99 Không nh a ch t ng bít 98 9F 9E 9D 9C 9B 9A 99 98 90 97 96 95 94 93 92 91 90 8D Không nh a ch t ng bít 8C Không nh a ch t ng bít 8B Không nh a ch t ng bít 8A Không nh a ch t ng bít 89 Không nh a ch t ng bít 88 8F 8 8D 8C 8B 8A 89 88 E 87 Không nh a ch t ng bít 83 Không nh a ch t ng bít 82 Không nh a ch t ng bít 81 Không nh a ch t ng bít 80 87 86 8 84 83 82 81 80 5 THANH GHI CH C N NG C BIÊT DKS_GROUP - 9 - www.EmbestDKS.com 048684577
  11. 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 c bi t SFR SFR nh a ch t ng bit( nh ng thanh ghi c n nh i khi l p trình c b n C) Thanh ghi / Ký hi u Ch c n ng Bit TMOD Ch n model cho b nh th i 1 7 GATE Bít iu khi n c ng. Khi ưc set lên 1, b nh th i ch ho t ng trong khi INT1 m c cao 6 C/T Bít ch n ch c n ng m ho c nh th i: 1= m s ki n 0= nh th i trong m t kho ng th i gian 5 M1 Bit ch n ch th nh t 4 M0 Bit ch n ch th 2 M1 M0 Châ Chøc n¨ng ®Ð 0 0 0 Ch nh th i 13 bit 0 1 1 Ch nh th i 16 bit 1 0 2 Ch t ng n p l i 8 bit 1 1 3 Ch nh th i chia x 3 GATE Bit iu khi n c ng cho b nh th i 0 2 C/T Bit ch n ch c n ng m / nh th i cho b nh th i 0 1 M1 Bit ch n ch th nh t cho b nh th i 0 0 M0 Bit ch n ch th 2 cho b nh th i 0 TF1 TR1 TF1 TR0 IE1 IT1 IE0 IT0 Thanh ghi / Bit Ký hi u Ch c n ng TCON iu 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 phc v ng t TCON.6 TR1 Bit iu 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 iu 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 iu khi n ho t ng c a b nh th i 0 TCON.3 IE1 C ng t bên ngoài 1 (kích kh i c nh). C này ưc set b i ph n c ng khi có c nh âm (cu ng) xu t hi n trên chân INT1, ưc xoá b i ph n mm, ho c ph n c ng khi CPU tr n trình ph c v ng t DKS_GROUP - 10 - www.EmbestDKS.com 048684577
  12. DKS_GROUP Microcontroller Training Center TCON.2 IT1 C ng t bên ngoài 1 (kích kh i c nh ho c m c). C này ưc set ho c xoá b i ph n m m khi x y ra c nh âm ho c m c th p t i chân ng t ngoài TCON.1 IE0 C ng t bên ngoài 0 (kích kh i c nh) TCON.0 IT0 C ng t bên ngoài 0 ( kích kh i c nh ho c m c) EA ET2 ES ET1 EX1 EX0 ET0 iu khi n các ngu n ng t IE (0: không cho phép; 1: cho phép) IE.7 EA Cho phép/ không cho phép toàn c c IE.6 Không s d ng IE.5 ET2 Cho phép ng t do b nh th i 2 IE.4 ES Cho phép ng t do port n i ti p IE.3 ET1 Cho phép ng t cho b nh th i 1 IE.2 EX1 Cho phép ng t t bên ngoài (ng t ngoài 1) IE.1 EX0 Cho phép ng t t bên ngoài (ng t ngoài 0) IE.0 ET0 Cho phép ng t do b nh th i 0 CHÚ Ý 3 thanh ghi này c ng r t c b n, nh tên thanh ghi, tên các bít trong thanh ghi, ch c n ng t ng thanh ghi và t ng bít trong thanh ghi. 1.8.Gi i thi u s ơ qua các ngu n ng t: Ng t do C a ch vector Reset h th ng RST 0000H Ng t ngoài 0 IE0 0003H B nh th i 0 TF0 000BH Ng t ngoài 1 IE1 0013H B nh th i 1 TF1 001BH Port n i ti p RI ho c TI 0023H B nh th i 2 TF2 ho c EXF2 002BH Timer Program excution without interrut Main Program ISR ISR ISR * * * Main Main Main Main Program excution with interrupt. DKS_GROUP - 11 - www.EmbestDKS.com 048684577
  13. DKS_GROUP Microcontroller Training Center Mt 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 iu 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 in tho i , b n t bát c m ra nghe in 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 bn là ch ư ng trình chính,có in tho i g i n là iu ki n ng t, b n ra nghe in 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 iu 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 im, 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 iu khi n khác v i ví d n c m nghe in tho i ca 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 nng 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 bn 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 ngn cõ mS, ch th c ra t i 1 th i im vi iu khi n ch th c thi 1 l nh. Ví d : B n th ngh xem làm th nào v a iu ch xung PWM iu 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 #include //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 048684577
  14. 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 “*/” Nu l i gi I thích trên 1 dòng thì có th dùng du: “//” 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 ln d s a l i. 2.2.Các lo i bi n trong C: Dng bi n S Bit S Byte Mi n giá tr char 8 1 -128 n +127 unsigned char 8 1 0 n 255 short 16 2 -32,768 n +32,767 unsigned short 16 2 0 n 65,535 int 16 2 -32,768 n +32,767 unsigned int 16 2 0 n 65,535 -2,147,483,648 long 32 4 n+2,147,483,647 unsigned long 32 4 0 n 4,294,697,295 Khai báo bi n Cu 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 iu khi n trình d ch chuyên d ng còn h tr các lo i bi n sau: Dng bi n S Bit S Byte Mi n giá tr bit 1 0 0 ; 1 sbit 1 0 0 ; 1 DKS_GROUP - 13 - www.EmbestDKS.com 048684577
  15. DKS_GROUP Microcontroller Training Center sfr 8 1 0 n 255 sf16 16 2 0 n 65,535 VD: Ngoài ra ,chúng ta có th nh ngh a bi n ki u bít hay ki u SFR (special function register) Bit Kiemtra; Sfr P10=0x90; VD: Bit Kiemtra; Sfr P10=0x90; Các SFR không c n ph i h c thu c ch c n bi t, và chúng ưc khai báo trong th ư vi n AT89X51.H và AT89X52.H 2.3.Hàm trong C: Hàm trong C có c u trúc nh ư sau Có 2 lo i hàm Hàm tr l i giá tr : Cu trúc: Ki u giá tr hàm tr l ii Tên hàm (Bi n truy n vào hàm) { // Các l nh x lý ây } VD : unsigned char Cong(unsigned char x, unsigned char y) { // Các l nh x lý ây } Hàm không tr l i giá tr Cu trúc: void Tên hàm (Bi n truy n vào hàm) { // Các câu l nh x lý ây } VD d : void Cong(unsigned char x, unsigned char y) { // Các câu l nh x lý ây } Hàm có th truy n vào bi n ho c không VD Hàm không có bi n truy n vào: unsigned char Tênhàm(void) { // Các câu l nh x lí ây } Hàm có bi n truy n vào: void Tênhàm(unsigned char x) DKS_GROUP - 14 - www.EmbestDKS.com 048684577
  16. DKS_GROUP Microcontroller Training Center { // Các câu l nh x lí ây } S bi n truy n vào tùy ý(mi n b nh ), ng n cách b i d u “,” Ví d : Void TênHàm(unsigned char x, unsigned char y, unsigned char z) { // Các câu l nh x lí ây } Ngoài ra riêng cho vi iu khi n ph n ph m Keil C còn có m t lo i hàm ó là hàm ng t: Cu 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 Bng 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: > 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 048684577
  17. DKS_GROUP Microcontroller Training Center C u trúc: if ( iuki n) { // Các câu l nh x lí } Gi i thích: N u iuki n úng thì x lí các câu l nh bên trong còn sai thì nh y qua Câu l nh l a ch n switch: C u trúc: switch(Bi n) { case giatr 1: { // Các câu l nh break; } case giatr 2: { // Các câu l nh break; } case giatr 3: { // Các câu l nh break; } case giatr n: { // Các câu l nh break; } } Gi i thích : Tùy vào Bi n có giatr 1 thì th c hi n các câu l nh sau ó t ư ng ng r i thoát kh i c u trúc nh câu l nh break; Bi n có giatr 2 thì th c hi n các câu l nh sau ó t ư ng ng r i thoát . Bi n có giatr n thì th c hi n các câu l nh sau ó t ư ng ng r i thoát Câu l nh vòng l p xác nh for: C u trúc: for( n=m; n l), 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( iu 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 iu 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ó on 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. Mt s web hay : www.dientuvietnam.net www.atmel.com www.svbkol.org www.keil.com www.diendandientu.com www.iguanalabs.com DKS_GROUP - 16 - www.EmbestDKS.com 048684577
  18. 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 048684577
  19. DKS_GROUP Microcontroller Training Center t o 1 project m i ch n Project  New project nh ư sau: DKS_GROUP - 18 - www.EmbestDKS.com 048684577
  20. DKS_GROUP Microcontroller Training Center ưc hình sau: DKS_GROUP - 19 - www.EmbestDKS.com 048684577
  21. DKS_GROUP Microcontroller Training Center ánh tên và chuy n n th ư m c b n l ưu project. B n nên t o m i m t th ư m c cho 1 project. Ri ch n Save. DKS_GROUP - 20 - www.EmbestDKS.com 048684577
  22. DKS_GROUP Microcontroller Training Center ưc hình sau: DKS_GROUP - 21 - www.EmbestDKS.com 048684577
  23. DKS_GROUP Microcontroller Training Center Trong này có 1 lo t các hãng in t s n xu t 8051. B n l p trình cho con nào thì ch n con y ,kích chu t vào các d u + m r ng các con IC c a các hãng. ây ta l p trình cho AT89C51 c a hãng Atmel nên ta ch n nh ư sau: DKS_GROUP - 22 - www.EmbestDKS.com 048684577
  24. 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 048684577
  25. 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 048684577
  26. 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 048684577
  27. DKS_GROUP Microcontroller Training Center ưc c a s nh ư sau: DKS_GROUP - 26 - www.EmbestDKS.com 048684577
  28. DKS_GROUP Microcontroller Training Center Cho c a s Text 1 to ra ưc nh ư sau: DKS_GROUP - 27 - www.EmbestDKS.com 048684577
  29. 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 048684577
  30. DKS_GROUP Microcontroller Training Center ưc c a s sau: DKS_GROUP - 29 - www.EmbestDKS.com 048684577
  31. 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 048684577
  32. 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 048684577
  33. 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 048684577
  34. 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. Nu 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 048684577
  35. 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 ” DKS_GROUP - 34 - www.EmbestDKS.com 048684577
  36. 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 048684577
  37. 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 li 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 048684577
  38. 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 048684577
  39. 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 ln 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 mt 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 048684577
  40. DKS_GROUP Microcontroller Training Center Ti p theo là vi t hàm main. Nh ư sau: DKS_GROUP - 39 - www.EmbestDKS.com 048684577
  41. DKS_GROUP Microcontroller Training Center Ri 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 vng 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 048684577
  42. 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. Mc ích là làm con led nh p nháy. 5VDC R2 470 U1 40 VCC D1 1 P1.0 + C3 LED 9 10uF/25V RESET R1 10K C2 33p 18 X2 12Mhz C1 19 33p 20 X1 VSS 8051 Bi n Led1 ưc khai báo (gán cho) ch n P0_1 c a vi iu 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 in 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. in áp m t led là Uak (0,6 n 0,7V) l y =0,6V. in áp chân P1_0 là 0V. in á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 ln 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 in áp c a nó là 5V . Hi u in th gi a hai u +5V và P1_0 là 0V . Nên không có dòng qua led  Led tt.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 , tn 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) . iu 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 - 41 - www.EmbestDKS.com 048684577
  43. 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 in 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 048684577
  44. 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 048684577
  45. 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 048684577
  46. DKS_GROUP Microcontroller Training Center Sau khi d ch l i ưc hình sau: DKS_GROUP - 45 - www.EmbestDKS.com 048684577
  47. 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 048684577
  48. 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 048684577
  49. 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 trong cái kính lúp trên thanh công c . ưc c a s sau: DKS_GROUP - 48 - www.EmbestDKS.com 048684577
  50. 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 048684577
  51. 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. Ri 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 lp . Các b n nh n Ctrl + F11 b qua hàm. DKS_GROUP - 50 - www.EmbestDKS.com 048684577
  52. 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 . Bng 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à. Nu 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.Lp 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 1 R11 RESISTOR SIP 10 2 3 4 5 6 7 8 9 D1 40 U1 10 39 D2 P0.0 38 VCC P0.1 37 D3 P0.2 36 1 P0.3 35 D4 2 P1.0 P0.4 34 3 P1.1 P0.5 33 + C3 D5 P1.2 P0.6 4 32 10uF/25V 5 P1.3 P0.7 31 D6 6 P1.4 EA 7 P1.5 D7 8 P1.6 P1.7 9 D8 RESET R1 10K C2 33p 18 X2 12Mhz C1 19 33p 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 048684577
  53. 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 40 2 P1.0 VCC 39 3 P1.1 P0.0 38 4 P1.2 P0.1 37 5 P1.3 P0.2 36 6 P1.4 P0.3 35 7 P1.5 P0.4 34 8 P1.6 P0.5 33 9 P1.7 P0.6 32 10 RESET P0.7 31 11 RXD EA/VP 30 12 TXD AT89C51 ALE/P 29 13 INT0 PSEN 28 14 INT1 P2.7 27 15 T0 P2.6 26 16 T1 P2.5 25 17 WR P2.4 24 18 RD P2.3 23 19 X2 P2.2 22 20 X1 P2.1 21 VSS P2.0 * Chu n b board nh ư sau: Lp 4 dây n i ng n n i các sông. Lp 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. Lp 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. Lp chíp nh ư hình. * B ưc 1 l p m ch dao ng: Lp 1 con t 33pF t chân 19 xu ng chân 20.( ng h i t i sao). Lp 1 con t 33pF t chân 18 xu ng chân 20. Ly dây câu t chân 20 xu ng GND. Lp 1 con th ch anh 12M vào chân 18 và 19. * B ưc 2 l p m ch reset. Lp 1 con tr 10K(nâu en cam) t chân 9 xu ng GND. Lp 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 in tr . Cng 0 là c ng có c c máng h mu n th c hi n ưc IO thì ph i có in 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. Nu 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. Lp chân dài c a 1 led vào chân 1 vi iu 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 iu khi n 5V thì led s sáng, nu chân vi iu khi n 0V thì led s t i. in áp 5V vì sao led không cháy mà l i còn sáng y u? DKS_GROUP - 52 - www.EmbestDKS.com 048684577
  54. DKS_GROUP Microcontroller Training Center Vì vi iu khi n 8051 ch có th cung cp 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 iu khi n. Cái này s nói sau. * B ưc 5 l p ngu n: Lp 1 dây t chân 40 lên hàng ngu n 5V. 3.3. L p trình : Tr ưc h t iu khi n 1 led. iu 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ì in áp chân ó s là 0V ho c 5V, tùy vào in á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 // 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 048684577
  55. 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 kiu khác mà. DKS_GROUP - 54 - www.EmbestDKS.com 048684577
  56. DKS_GROUP Microcontroller Training Center DKS_GROUP - 55 - www.EmbestDKS.com 048684577
  57. DKS_GROUP Microcontroller Training Center DKS_GROUP - 56 - www.EmbestDKS.com 048684577
  58. 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. t o ra file .hex làm nh ư sau . Vào Option for target ch ch nh t n s th ch anh. DKS_GROUP - 57 - www.EmbestDKS.com 048684577
  59. DKS_GROUP Microcontroller Training Center ưc hình sau: DKS_GROUP - 58 - www.EmbestDKS.com 048684577
  60. DKS_GROUP Microcontroller Training Center Kích vào tab Output. ưc hình sau: DKS_GROUP - 59 - www.EmbestDKS.com 048684577
  61. DKS_GROUP Microcontroller Training Center Tích vào check : Create Hex File. Nh p OK. Nh n fím F7 biên d ch l i . Khi ó d ưi c a s output window ưc ch Creating hex file DKS_GROUP - 60 - www.EmbestDKS.com 048684577
  62. DKS_GROUP Microcontroller Training Center Creating hex file from “Dieukhienled_IO” nh ư ngay trên hình. 3.4.Np chíp: Cm u c ng COM vào c ng COM máy tính. Cm 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à hng. 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 048684577
  63. 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 ly chíp ra c m vào m ch. 3.5. K t qu : Cm ngu n vào m ch . Chú ý không c m ng ưc âm d ư ng. Nu 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, lp 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 in á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 . Nu v n không ch y thì liên l c v i tôi. 3.6. iu 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 048684577
  64. 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 } } iu khi n 8 led. Vi 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. iu khi n out c c ng : Nu các b n nhàm chán v i vi c iu 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 iu nh ư sau: - 1 c ng có 8 bit t h p 8bit có 2 8 = 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 : Nu 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 li 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 0 1 2 3 N(10) =1.16 + 15.16 + 11.16 + 10.16 = 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 1 Ví d : 0010 0001 (2) = 21 (16) 4 s u có bit 1 = 1 nên 1x2 = 2 4 s sau có bit 0 =1 nên 1x2 0=1. “Các b n th y v t v v i ph n này dù bn 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 iu 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 048684577
  65. 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 048684577
  66. DKS_GROUP Microcontroller Training Center tre(1000); } } } / / Debug quan sát s thay i c a c ng 1 th y ưc l i h i c a phép d ch bit xang trái. hi u thao tác xu t ra c ng , chân, các các b n làm cho mình 1 ví d n a nh ư sau: / Ham chinh / void main(void) { unsigned char n; // Khai bao them bien n cho vong for while(1)// Lap vo han { P1=0x01;// Bat led 1 for(n=0 ; n<256;n++)// Lap 8 lan { P1=n; // Dich bit xang trai tre(5000); } } } / / Debug th y s thay i các c ng. 3.8. Kinh nghi m : * chuy n i gi a các h sô nhanh các b n dùng cái calculator có ngay trong window. Ch n Start  All programs  Accessories  Calculator. Trong Calculator các b n ch n menu View  Ch n scienctific. Cách chuy n i t khám phá nhé. * tính ra s hex nhanh nh t . Tôi ví d mu n ưa chân P3.5 và chân P3.2 xu ng 0(0V) còn các chân còn l i ta làm nh ư sau: C cho P3= 100 ; hay 1 giá tr b t kì .Vì code d ch không l i cú pháp m i debug ưc nên ph i cho giá tr b t kì vào. D ch ch ư ng trình r i nh n Debug. Ra ưc nh ư sau: DKS_GROUP - 65 - www.EmbestDKS.com 048684577
  67. 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 048684577
  68. 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. Nu 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 048684577
  69. DKS_GROUP Microcontroller Training Center 4.1 L p m ch : 10 9 8 7 6 10 9 8 7 6 D11 f g V+ a b D10 f g V- a b A A F B F B G G E C E C D DOT D DOT LED CATOT Chung LED CATOT Chung e d V+ c dot e d V- c dot 1 2 3 4 5 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 chân ca hai lo i led. Nó có c u t o nh ư sau: 7 6 4 2 1 10 9 5 ABCDEFG DP 7 6 4 2 1 10 9 5 D13A Anot chung D12A Catot chung 8 3 8 3 Ch là 8 con led u chung 1 u: An t ho c Cat t. Mch l p s d ng led An t chung nh ư sau: DKS_GROUP - 68 - www.EmbestDKS.com 048684577
  70. DKS_GROUP Microcontroller Training Center 5VDC A U3 40 B 21 22 P2.0 23 P2.1 VCC R3 C 24 P2.2 10K 25 P2.3 D 26 P2.4 31 27 P2.5 EA/VP + C3 E P2.6 9 10uF/25V F RESET R1 G 10K C2 33p 18 X2 12Mhz C1 19 33p 20 X1 VSS 8051 - Lp m ch: M ch bài tr ưc( iu khi n led n) nguyên,ch l p thêm vào. + B ưc1: L p 7 in vào 7 chân c ng P2 t P2.0 n P2.7( T chân 21  Chân 27) c a vi iu 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 in câu t các chân theo s . Chân iu khi n thanh A vào in tr n i vào P2.0 và c th n chân iu khi n thanh G vào in tr n i vào P2.7. B qua chân iu 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. Lp 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 in 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 in tr v v trí c . T ư ng t test 6 thanh còn li. 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( Nu c ng 0 không l p in tr treo thì s là 0V). Nhìn s m ch không có chênh lch in á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 in áp 0V chân vi iu 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: Tt c các thanh không thanh nào 1000 0000 DKS_GROUP - 69 - www.EmbestDKS.com 048684577
  71. 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.Lp 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 /* 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 048684577
  72. DKS_GROUP Microcontroller Training Center /* Ham tat tat ca cac thanh */ ThanhE =1; void tat(void) ThanhF =1; { ThanhG =0; ThanhA =1; } ThanhB =1; ThanhC =1; void so4(void) ThanhD =1; { ThanhE =1; tat(); ThanhF =1; ThanhA =1; ThanhG =1; ThanhB =0; } ThanhC =0; ThanhD =1; /* Cac ham hien thi chu va so */ ThanhE =1; ThanhF =0; void so1(void) ThanhG =0; { } tat(); ThanhA =1; void so5(void) ThanhB =0; { ThanhC =0; tat(); ThanhD =1; ThanhA =0; ThanhE =1; ThanhB =1; ThanhF =1; ThanhC =0; ThanhG =1; ThanhD =0; } ThanhE =1; ThanhF =0; void so2(void) ThanhG =0; { } tat(); ThanhA =0; void so6(void) ThanhB =0; { ThanhC =1; tat(); ThanhD =0; ThanhA =0; ThanhE =0; ThanhB =1; ThanhF =1; ThanhC =0; ThanhG =0; ThanhD =0; } ThanhE =0; void so3(void) ThanhF =0; { ThanhG =0; tat(); } ThanhA =0; ThanhB =0; void so7(void) ThanhC =0; { ThanhD =0; tat(); DKS_GROUP - 71 - www.EmbestDKS.com 048684577
  73. DKS_GROUP Microcontroller Training Center ThanhA =0; ThanhB =0; void chuB(void) ThanhC =0; { ThanhD =1; tat(); ThanhE =1; ThanhA =0; ThanhF =1; ThanhB =0; ThanhG =1; ThanhC =0; } ThanhD =0; ThanhE =0; void so8(void) ThanhF =0; { ThanhG =0; tat(); } ThanhA =0; ThanhB =0; void chuC(void) ThanhC =0; { ThanhD =0; tat(); ThanhE =0; ThanhA =0; ThanhF =0; ThanhB =1; ThanhG =0; ThanhC =1; } ThanhD =0; ThanhE =0; void so9(void) ThanhF =0; { ThanhG =1; tat(); } ThanhA =0; ThanhB =0; void chuD(void) ThanhC =0; { ThanhD =0; tat(); ThanhE =1; ThanhA =0; ThanhF =0; ThanhB =0; ThanhG =0; ThanhC =0; } ThanhD =0; ThanhE =0; void chuA(void) ThanhF =0; { ThanhG =1; tat(); } ThanhA =0; ThanhB =0; void chuE(void) ThanhC =0; { ThanhD =1; tat(); ThanhE =0; ThanhA =0; ThanhF =0; ThanhB =1; ThanhG =0; ThanhC =1; } ThanhD =0; DKS_GROUP - 72 - www.EmbestDKS.com 048684577
  74. DKS_GROUP Microcontroller Training Center ThanhE =0; ThanhB =1; ThanhF =0; ThanhC =1; ThanhG =0; ThanhD =1; } ThanhE =0; ThanhF =0; void chuF(void) ThanhG =1; { } tat(); ThanhA =0; void chuL(void) ThanhB =1; { ThanhC =1; tat(); ThanhD =1; ThanhA =1; ThanhE =0; ThanhB =1; ThanhF =0; ThanhC =1; ThanhG =0; ThanhD =0; } ThanhE =0; void chuG(void) ThanhF =0; { ThanhG =1; tat(); } ThanhA =0; ThanhB =1; void chuO(void) ThanhC =0; { ThanhD =0; tat(); ThanhE =0; ThanhA =0; ThanhF =0; ThanhB =0; ThanhG =1; ThanhC =0; } ThanhD =0; ThanhE =0; void chuH(void) ThanhF =0; { ThanhG =1; tat(); } ThanhA =1; ThanhB =0; void chuP(void) ThanhC =0; { ThanhD =1; tat(); ThanhE =0; ThanhA =0; ThanhF =0; ThanhB =0; ThanhG =0; ThanhC =1; } ThanhD =1; ThanhE =0; void chuI(void) ThanhF =0; { ThanhG =0; tat(); } ThanhA =1; DKS_GROUP - 73 - www.EmbestDKS.com 048684577
  75. DKS_GROUP Microcontroller Training Center void chuR(void) void chuU(void) { { tat(); tat(); ThanhA =0; ThanhA =1; ThanhB =0; ThanhB =0; ThanhC =0; ThanhC =0; ThanhD =1; ThanhD =0; ThanhE =0; ThanhE =0; ThanhF =0; ThanhF =0; ThanhG =0; ThanhG =1; } } void chuS(void) void chuY(void) { { tat(); tat(); ThanhA =0; ThanhA =1; ThanhB =1; ThanhB =0; ThanhC =0; ThanhC =0; ThanhD =0; ThanhD =0; ThanhE =1; ThanhE =1; ThanhF =0; ThanhF =0; ThanhG =0; ThanhG =0; } } DKS_GROUP - 74 - www.EmbestDKS.com 048684577
  76. 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 048684577
  77. 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.Np 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 li 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.Kt 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 cu 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 048684577
  78. 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 bn ã 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 048684577
  79. DKS_GROUP Microcontroller Training Center Ph n 1: c 1 phím. Nhi m v : m s l n phím b m gi i h n t 0 n 9 hi n th ra led 7 thanh. 5.1.Lp m ch nh ư sau: 5VDC 10 9 8 7 6 D11 f g V+ a b D12 40 U1 LED A 21 22 P2.0 F B 23 P2.1 VCC 24 P2.2 G 25 P2.3 R29 26 P2.4 1K 27 P2.5 + C3 E C P2.6 9 10uF/25V D DOT RESET LED ANOT Chung R1 e d V+ c dot 10K 1 2 3 4 5 SW1 C2 1 1 2 33p 18 P1.0 X2 2 P1.1 C4 12Mhz C1 19 33p 20 X1 VSS CAP NP 8051 - M ch bài 5 led 7 thanh gi nguyên. Lp 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 048684577
  80. 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 bm 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. Nu có t 104 t in ưc n p in, khi b m nút t in s phóng in 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 cng). - 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 im c khí c a nút b m nên khi b m nút nó s có 1 s xung in ch không ph i là bm 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.Lp 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 048684577
  81. DKS_GROUP Microcontroller Training Center DKS_GROUP - 80 - www.EmbestDKS.com 048684577
  82. DKS_GROUP Microcontroller Training Center Hàm hi n th s t ư ng ng. DKS_GROUP - 81 - www.EmbestDKS.com 048684577
  83. DKS_GROUP Microcontroller Training Center Hàm main ưc s a l i nh ư sau: DKS_GROUP - 82 - www.EmbestDKS.com 048684577
  84. 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 048684577
  85. 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 048684577
  86. DKS_GROUP Microcontroller Training Center DKS_GROUP - 85 - www.EmbestDKS.com 048684577
  87. 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 048684577
  88. 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 048684577
  89. 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 R26 R27 R28 R25 10Kx8 R R R 5VDC 555VVV5V A U3 4 0 PHIM 1 PHIM 2 PHIM 3 PHIM 4 B 21 22 P2.0 1 2 1 2 1 2 1 2 23 P2.1 V C C R3 R21 C 24 P2.2 10K + C3 25 P2.3 HANG 1 D 26 P2.4 31 10uF/25V 27 P2.5 EA/VP PHIM 5 PHIM 6 PHIM 7 PHIM 8 E P2.6 R 9 1 2 1 2 1 2 1 2 F RESET R1 R22 G 10K PHIM 9 PHIM 10 PHIM 11 PHIM 12 HANG 2 10 P3.0 LED 7 THANH P3.0 11 P3.1 1 2 1 2 1 2 1 2 P3.1 12 P3.2 5V R P3.2 13 P3.3 P3.0 R23 C2 P3.3 14 P3.4 P3.1 33p P3.4 15 P3.5 P3.2 PHIM 13 PHIM 14 PHIM 15 PHIM 16 HANG 3 18 P3.5 16 P3.6 P3.3 X2 P3.6 17 P3.7 P3.4 1 2 1 2 1 2 1 2 12Mhz P3.7 P3.5 R C1 19 P3.6 33p 20 X1 P3.7 VSS 8051 HANG 4 R24 COT 1 R 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. DKS_GROUP - 88 - www.EmbestDKS.com 048684577
  90. DKS_GROUP Microcontroller Training Center 6.2 Nguyên lí quét phím: - Vì sao m ch phím u theo ma tr n. N u c t 16 nút b m bình th ưng ph i dùng 16 chân vi iu 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 ca 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ì Ct 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 ca 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ì Ct 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 ca 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ì Ct 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 ca 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 bng 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 bm 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 phn 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 048684577
  91. 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 048684577
  92. DKS_GROUP Microcontroller Training Center Vi t hàm phím ưc n: DKS_GROUP - 91 - www.EmbestDKS.com 048684577
  93. 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 048684577
  94. DKS_GROUP Microcontroller Training Center DKS_GROUP - 93 - www.EmbestDKS.com 048684577
  95. 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 : iu 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 - Cp ngu n iu 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 in tr t 1K n 5K lên d ư ng 5V, chân K xu ng t èn s sáng. 6.1.Lp m ch theo s ơ sau: DKS_GROUP - 94 - www.EmbestDKS.com 048684577
  96. DKS_GROUP Microcontroller Training Center VCC 5V R1 10K 1 LCD16x02 C6 J1 55VV LCD 104 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 1 1 0 1 6 1 5 1 4 1 3 1 2 1 1 1 0 U1 4 0 1 39 E N R w R S 2 P1.0 P0.0/AD0 38 3 P1.1 P0.1/AD1V C C 37 5V 4 P1.2 P0.2/AD2 36 5 P1.3 P0.3/AD3 35 6 P1.4 P0.4/AD4 34 + C3 7 P1.5 P0.5/AD5 33 CAPACITOR POL 8 P1.6 P0.6/AD6 32 9 P1.7 P0.7/AD7 31 10 RST EA/VPP 30 R2 P3.0/RXD ALE/PROG 11 29 5K 12 P3.1/TXD PSEN 28 D7 R3 13 P3.2/INT0 P2.7/A15 27 D6 10K 14 P3.3/INT1 P2.6/A14 26 D5 15 P3.4/T0 P2.5/A13 25 D4 16 P3.5/T1 P2.4/A12 24 D3 17 P3.6/WR P2.3/A11 23 D2 18 P3.7/RD P2.2/A10 22 D1 19 XTAL2 P2.1/A9 21 D0 XTAL1 P2.0/A8 G N D Y1 12Mhz AT89C51 2 0 C2 C1 33p 33p RS EN Rw DKS_GROUP - 95 - www.EmbestDKS.com 048684577
  97. 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 V CC , V SS và V EE : Các chân V CC , V SS và V EE : C p d ư ng ngu n - 5v và t tư ng ng thì V EE ưc dùng iu 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à lnh ư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. Cng 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: Nu 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) Lnh n thanh ghi c a LCD 1 Xoá màn hình hi n th 2 Tr v u dòng 4 Gi m con tr (d ch con tr sang trái) 6 Tng con tr (dch con tr sang ph i) 5 Dch hi n th sang ph i 7 Dch hi n th sang trái 8 Tt con tr , t t hi n th A Tt hi n th , b t con tr C Bt hi n th , t t con tr DKS_GROUP - 96 - www.EmbestDKS.com 048684577
  98. DKS_GROUP Microcontroller Training Center E Bt hi n th , nh p nháy con tr F Tt con tr , nh p nháy con tr 10 Dch v trí con tr sang trái 14 Dch v trí con tr sang ph i 18 Dch toàn b hi n th sang trái 1C Dch toàn b hi n th sang ph i 80 ép con tr v u dòng th nh t C0 ép con tr v u dòng th hai 38 Hai dòng và ma tr n 5 × 7 - iu 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 iu ch nh t ư ng ph n c a LCD. Xoay cho n khi các ô vuông(các im 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 iu khi n các chân RS,RW,EN cho phù h p vi 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 iu 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.Lp 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 bng câu l nh: #include - 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 048684577
  99. DKS_GROUP Microcontroller Training Center - Vi t 1 s hàm iu 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 iu 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 048684577
  100. 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 cp cho các ô nh trong b nh 1 a ch xác nh ô nh ó.Ví d ti p: I có giá tr là 100, thì n i dung c a ô nh l ưu bi n I là 100,i=100, còn con tr tr n I có giá tr là a ch c a ô nh ch a bi n I ó. 6.3.2. Cách s d ng con tr : khai báo con tr có thêm d u * tr ưc tên bi n. *I là bi n ki u con tr , tr t i bi n i(unsigned char). I mang giá tr t 0 n 255, *I mang i ch c a ô nh ch a i. * Hàm hi n th 1 s integer: void LCDwritei(int d) { unsigned char i,j,k,l; i=d%10;// Chia lay phan du, duoc chu so hang don vi d=d/10;// Chia lay phan nguyen, duoc nhung chu so da bo hang don vi j=d%10;// Duoc chu so hang chuc d=d/10;// Nhung chu so da bo hang don vi va hang chuc k=d%10;// Duoc hang tram l=d/10;// Duoc hang nghin LCDwrite(48+l);// Hien thi ki tu trong bang ascii LCDwrite(48+k);// Trong bang ascii so 0 co co so thu tu la 48 LCDwrite(48+j); LCDwrite(48+i); DKS_GROUP - 99 - www.EmbestDKS.com 048684577
  101. 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 048684577
  102. DKS_GROUP Microcontroller Training Center Nhi m v : To ra xung có r ng thay i, 10 c p, t n s 1Khz, iu khi n t c ng c (10 c p t c ). 7.1. L p m ch theo s ơ sau: 12V 5VDC U1 40 2 C 2 VCC R2 3 B 21 10K C828 P2.0 31 + C3 EA 1 9 10uF/25V + E 1 RESET DC Motor R1 A 10K - SW1 2 C2 1 1 2 33p 18 P1.0 X2 2 P1.1 12Mhz SW2 C1 19 33p 20 X1 1 2 VSS 8051 - 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.Lp trình: - Cách t o xung có r ng thay i b ng V K. + Cách 1: Nh ư các b n iu khi n nh p nháy 1 con led, ó là t o ra 1 xung 1 chân c a vi iu khi n, nh ưng xung ó có r ng c nh, t n s l n, cách b n có th iu 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à thi gian không có xung(0V) vi iu 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 048684577
  103. 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 iu 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 iu khi n. Tr ưc h t nh c l i v ng t c a vi iu khi n: + Ng t là gì ? tr l i câu h i này tôi xin trích an v ng t trong bài 2 ví d cho ng t timer: Timer Program excution without interrut Main Program ISR ISR ISR * * * Main Main Main Main Program excution with interrupt. Mt 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 iu 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 in tho i , b n t bát c m ra nghe in 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ó in tho i g i n là iu ki n ng t, b n ra nghe in 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 iu 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 im, 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 iu khi n khác v i ví d n c m nghe in 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 048684577
  104. 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 im vi iu khi n ch th c thi 1 l nh. Ví d : B n th ngh xem làm th nào v a iu ch xung PWM iu 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. Vy ng t là 1 iu ki n nào ó x y ra ng u nhiên mà vi iu khi n có th bi t do ph n c ng c a vi iu 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 iu 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. Vi 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 iu 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 iu khi n thì s có hi n t ưng ng t x y ra. - Hàm ng t: Cu 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. Ty 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 thi 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 048684577
  105. 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 cng không quan tr ng. Trong hàm ng t các b n có th b i t using 0, khi ó vi iu 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 bn 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, iu 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ó iu 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 iu 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 (ngt 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 lnh: 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. Bn 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 048684577
  106. DKS_GROUP Microcontroller Training Center TMOD Ch n model cho b nh th i 1 7 GATE Ch n model cho b nh th i 1 6 C/T Bít ch n ch c n ng m ho c nh th i: 5 M1 Bit ch n ch th nh t 4 M0 Bit ch n ch th 2 M1 M0 Ch Ch c n ng 0 0 0 Ch nh th i 13 bit 0 1 1 Ch nh th i 16 bit 1 0 2 Ch t ng n p l i 8 bit 1 1 3 Ch nh th i chia x 3 GATE Bit iu 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 bng 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 xy 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 to, 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 iu 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 iu 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 iu 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 iu 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 048684577
  107. 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 cnh â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 mc) 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ì iu gì x y ra? Khi b t u cho timer 1 ch y thì b m c a timer s m dao ng c a th ch anh, c 12 dao ng c a th ch anh(1 chu kì máy), b m c a timer 1 TL1(Timer Low1) s t ng 1,có th n nói timer 1 m s chu kì máy. i v i ch 8 bít. TL1 là 1 thanh ghi 8 bít, là b m c a b nh th i rõ r i. Nó m ưc t 0, n 255. Nu 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 iu khi n) nh ư 1 công t c t ng bt, và ng t x y ra. Còn v i ch 16 bít, b m c a b nh th i còn 1 thanh ghi 8 bít n a là TH1(Timer high 1), n u c u hình cho timer 1 ho t ng ch 16 bit thì khi TL1 tràn nó s m sang TH1(TH1 s t ng 1). Nh ư v y ta có th m: 2 16 chu kì máy( 2 thanh ghi 8+8=16 bít). Chú ý là khi b m tràn ng t s x y ra. N u ta c n m 256 chu kì máy thì khi kh i t o ta cho TL1=0; , còn n u không mu n m 256 chu kì mày mà ta ch c n m 100 thôi ng t ã x y ra r i thì ta f i làm nh ư sau: 256-100 = 156; và khi kh i t o ta gán : TL1=155; vì m t 155 n 255 là 100 l n thì ng t x y ra. Vi yêu c u c a bài. T o xung t n s 1Khz  Chu kì = 1/10 3 = 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 mi xin nói v ph n 2. DKS_GROUP - 106 - www.EmbestDKS.com 048684577
  108. DKS_GROUP Microcontroller Training Center 7.3) Nguyên lí ho t ng: - Xung PWM: ư a ra m transitor, xung v i r ng l n h n transitor s m lâu hn 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 in, khí c in, 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 048684577
  109. DKS_GROUP Microcontroller Training Center DKS_GROUP - 108 - www.EmbestDKS.com 048684577
  110. 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 } Cu trúc hàm ng t timer nào c ng ph i theo, do ch 2 t ng n p l i nên kô c n gán giá tr cho TH0 và TL0. V bi n dem s m t 1 n 10 n u b ng 10 k t thúc 1 chu kì 10*100 =1000 uS, ta gán li 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 048684577
  111. 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 048684577
  112. 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 bn. 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 048684577
  113. DKS_GROUP Microcontroller Training Center DKS_GROUP - 112 - www.EmbestDKS.com 048684577
  114. 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 in 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 iu khi n riêng không là s cháy chip. N u không có m ch iu 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 048684577
  115. DKS_GROUP Microcontroller Training Center Nhi m v : iu 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 Sơ chân led ma tr n 8x8: Chân Ct Hàng Chân Ct Hàng 1 4 9 8 2 2 10 5 3 7 11 3 4 6 12 5 5 1 13 8 6 4 14 7 7 3 15 2 8 6 16 6 8.1. L p m ch theo s ơ sau: DKS_GROUP - 114 - www.EmbestDKS.com 048684577
  116. DKS_GROUP Microcontroller Training Center VCC 1 R3 10K C o t4 C o t6 C o t7 H ang6 H ang3 H ang1 H ang2 H ang4 9 8 7 6 5 4 3 2 U1 Cot1 39 21 Hang1 Cot2 38 P0.0/AD0 P2.0/A8 22 Hang2 8 7 6 5 4 3 2 1 Cot3 37 P0.1/AD1 P2.1/A9 23 Hang3 Cot4 36 P0.2/AD2 P2.2/A10 24 Hang4 Cot5 35 P0.3/AD3 P2.3/A11 25 Hang5 Cot6 34 P0.4/AD4 P2.4/A12 26 Hang6 Cot7 33 P0.5/AD5 P2.5/A13 27 Hang7 Cot8 32 P0.6/AD6 P2.6/A14 28 Hang8 P0.7/AD7 P2.7/A15 1 10 2 P1.0 P3.0/RXD 11 LED MATRIX 1 3 P1.1 P3.1/TXD 12 4 P1.2 P3.2/INT0 13 8x8 5 P1.3 P3.3/INT1 14 6 P1.4 P3.4/T0 15 7 P1.5 P3.5/T1 16 8 P1.6 P3.6/WR 17 P1.7 P3.7/RD 19 30 Y1 18 X1 ALE 29 9 10 11 12 13 14 15 16 X2 PSEN 31 EA 9 C o t5 C o t3 C o t8 RST C1 C2 C o t2 C o t1 H ang8 H ang5 H ang7 33p 12M 33p 40 VCC G N D 8051 2 0 C3 R2 + 10K 10uF DKS_GROUP - 115 - www.EmbestDKS.com 048684577
  117. DKS_GROUP Microcontroller Training Center 8.2. Nguyªn lý ho¹t ®Ðng: D2 D3 D4 D5 D6 D7 D8 D8 Hang 1 LED LED LED LED LED LED LED LED D2 D3 D4 D5 D6 D7 D8 D8 LED LED LED LED LED LED LED LED Hang 2 D2 D3 D4 D5 D6 D7 D8 D8 LED LED LED LED LED LED LED LED Hang 3 D2 D3 D4 D5 D6 D7 D8 D8 Hang 4 LED LED LED LED LED LED LED LED D2 D3 D4 D5 D6 D7 D8 D8 Hang 5 LED LED LED LED LED LED LED LED D2 D3 D4 D5 D6 D7 D8 D8 LED LED LED LED LED LED LED LED Hang 6 D2 D3 D4 D5 D6 D7 D8 D8 Hang 7 LED LED LED LED LED LED LED LED D2 D3 D4 D5 D6 D7 D8 D8 LED LED LED LED LED LED LED LED Cot1 Cot2 Cot3 Cot4 Cot5 Cot6 Cot7 Cot8 Hang 8 Mu n cho led sáng, c p in 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 in áp c t 4(P0_3) xu ng 0V, in áp hàng 5(P2_5) lên 5V. Hi n th ch : th ng kê các im sáng thành ch r i cho các hàng c t in á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 in á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 , ri sau ó ư a vào 1 vòng for t ng d n 1 bi n t ng ph n t m ng cot[8]. Vi 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 iu 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). Ti mi th i im 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 im ta th y toàn b kí t . Vi 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 048684577