P. 1
Huong Dan Hoc 89c51

Huong Dan Hoc 89c51

5.0

|Views: 1,667|Likes:
Published by api-3743393

More info:

Published by: api-3743393 on Oct 15, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/18/2014

pdf

text

original

Sections

cng bài gi ng – 8051 Starter Kit

Chương I: Gi i thi u h Vi i u khi n 8051
Vi i u khi n 8051 là m t trong nh ng vi i u khi n 8 bit thông d ng nh t hi n nay. B t u xu t hi n vào năm 1980, tr i qua g n 30 năm, hi n ã có t i hàng trăm bi n th (derrivatives) ư c s n xu t b i hơn 20 hãng khác nhau, trong ó ph i k n các i gia trong làng bán d n (Semiconductor) như ATMEL, Texas Instrument, Philips, Analog Devices… T i Vi t Nam, các bi n th c a hãng ATMEL là AT89C51, AT89C52, AT89S51, AT89S52… ã có th i gian xu t hi n trên th trư ng khá lâu và có th nói là ư c s d ng r ng rãi nh t trong các lo i vi i u khi n 8 bit. Chương này s t p trung mô t tương i chi ti t c u trúc bên trong c a các bi n th nói trên (t m g i chung là AT89) c a hãng ATMEL. C u trúc c a AT89 d ng sơ kh i t ng quát

CPU

B nh chương trình

B nh d li u

Vào/ra song song

Vào/ra n i ti p

Ng t

B nh th i / b m

P1 P2 P3 P4

Timer0 Timer1

1

cng bài gi ng – 8051 Starter Kit C u trúc bus Bus a ch c a h vi i u khi n 8051 g m 16 ư ng tín hi u (thư ng g i là bus a ch 16 bit). V i s lư ng bit a ch như trên, không gian nh c a chip ư c m r ng t i a là 216 = 65536 a ch , tương ương 64K. Bus d li u c a h vi i u khi n 8051 g m 8 ư ng tín hi u (thư ng g i là bus d li u 8 bit), ó là lý do t i sao nói 8051 là h vi i u khi n 8 bit. V i r ng c a bus d li u như v y, các chip h 8051 có th x lý các toán h ng 8 bit trong m t chu kỳ l nh. CPU (Central Processing Unit) CPU là ơn v x lý trung tâm, ó là b não c a toàn b h th ng vi i n t ư c tích h p trên chip vi i u khi n. CPU có c u t o chính g m m t ơn v x lý s h c và lôgic ALU (Arithmethic Logic Unit) - nơi th c hi n t t c các phép toán s h c và phép lôgic cho quá trình x lý. B nh chương trình (Program Memory) Không gian b nh chương trình c a AT89 là 64K byte, tuy nhiên h u h t các vi i u khi n AT89 trên th trư ng ch tích h p s n trên chip m t lư ng b nh chương trình nh t nh và chi m d i a ch t 0000h tr i trong không gian b nh chương trình. AT89C51/AT89S51 có 4K byte b nh chương trình lo i Flash tích h p s n bên trong chip. ây là b nh cho phép ghi/xóa nhi u l n b ng i n, chính vì th cho phép ngư i s d ng thay i chương trình nhi u l n. S l n ghi/xóa ư c thư ng lên t i hàng v n l n. AT89C52/AT89S52 có 8K byte b nh chương trình cùng lo i. B nh chương trình c a các chip h 8051 có th thu c m t trong các lo i: ROM, EPROM, Flash, ho c không có b nh chương trình bên trong chip. Tên c a t ng chip th hi n chính lo i b nh chương trình mà nó mang bên trong, c th là vài ví d sau: STT 1 2 3 4 5 6 7 8 Tên chip 8051 8052 8031 8032 87C51 87C52 AT89C51 / AT89S51 AT89C52 / AT89S52 ROM 4 Kbyte 8 Kbyte x x x x x x EPROM x x x x 4 Kbyte 8 Kbyte x x Flash x x x x x x 4 Kbyte 8 Kbyte

2

cng bài gi ng – 8051 Starter Kit B nh chương trình dùng ch a mã c a chương trình n p vào chip. M i l nh ư c mã hóa b i 1 hay vài byte, dung lư ng c a b nh chương trình ph n ánh s lư ng l nh mà b nh có th ch a ư c. a ch u tiên c a b nh chương trình (0x0000) chính là a ch Reset c a 8051. Ngay sau khi reset (do t t b t ngu n, do m c i n áp t i chân RESET b kéo lên 5V...), CPU s nh y n th c hi n l nh t t i a ch này trư c tiên, luôn luôn là như v y. Ph n còn tr ng trong không gian chương trình không dùng làm gì c . N u mu n m r ng b nh chương trình, ta ph i dùng b nh chương trình bên ngoài có dung lư ng như ý mu n. Tuy nhiên khi dùng b nh chương trình ngoài, b nh chương trình onchip không dùng ư c n a, b nh chương trình ngoài s chi m d i a ch ngay t a ch 0x0000. Hình nh minh h a b nh chương trình Thân chương trình (chương trình chính, chương trình con, chương trình x lý ng t, b ng các h ng s ...) Vector ng t th n ... Vector ng t th 1 a ch reset 0x0FFF

0x0030

0x0003 0x0000

B nh d li u (Data Memory) Vi i u khi n h 8051 có không gian b nh d li u là 64K a ch , ó cũng là dung lư ng b nh d li u l n nh t mà m i chip thu c h này có th có ư c (n u ph i ghép m t cách chính t c, s d ng các ư ng tín hi u c a bus a ch và d li u). B nh d li u c a các chip h 8051 có th thu c m t hay hai lo i: SRAM ho c EEPROM. B nh d li u SRAM ư c tích h p bên trong m i chip thu c h vi i u khi n này, có dung lư ng khác nhau tùy lo i chip, nhưng thư ng ch kho ng vài trăm byte. ây chính là nơi ch a các bi n trung gian trong quá trình ho t ng c a chip. khi m t i n, do b n ch t c a SRAM mà giá tr c a các bi n này cũng b m t theo. Khi có i n tr l i, n i dung c a các ô nh ch a các bi n này cũng là b t kỳ, không th xác nh trư c. Bên c nh b nh lo i SRAM, m t s chip thu c h 3

cng bài gi ng – 8051 Starter Kit 8051 còn có thêm b nh d li u lo i EEPROM v i dung lư ng t i a vài Kbyte, tùy t ng lo i chip c th . Dư i ây là m t vài ví d v b nh chương trình c a m t s lo i chip thông d ng thu c h 8051. STT 1 2 3 4 5 6 Tên chip AT89C51 AT89C52 AT89C2051 AT89S51 AT89S52 AT89S8252 B nh SRAM 128 byte 256 byte 128 byte 128 byte 256 byte 256 byte B nh EEPROM 0 0 0 0 0 2048 byte

T ng quát v b nh b nh sau:

c a 8051, ta có th th y m i chip 8051 g m có nh ng

64 Kbyte

Ph n không gian a ch cho b nh chương trình còn tr ng, b ng 64 Kbyte tr i lư ng b nh onchip B nh chương trình onchip

Ph n không gian a ch cho b nh d li u (hoàn toàn tr ng r ng 64K byte, dành cho b nh d li u ghép thêm bên ngoài n u có) B nh SRAM

Dung lư ng tùy lo i chip i v i các chip có b nh SRAM 128 byte thì a ch c a các byte SRAM này ư c ánh s t 00h n 7Fh. i v i các chip có b nh SRAM 256 byte thì a ch c a các byte SRAM ư c ánh s t 00h n FFh. c hai lo i chip, SRAM có a ch t 00h n 7Fh ư c g i là vùng RAM th p, ph n có a ch t 80h n FFh (n u có) ư c g i là vùng RAM cao. Bên c nh các b nh , bên trong m i chip 8051 còn có m t t p h p các thanh ghi ch c năng c bi t (SFR – Special Function Register). Các thanh ghi này liên quan n ho t ng c a các ngo i vi onchip (các c ng vào ra, timer, ng t ...). a ch c a chúng trùng v i d i a ch c a vùng SRAM cao, t c là cũng có a ch t 80h n FFh.

4

cng bài gi ng – 8051 Starter Kit

Vùng RAM cao, có a ch t 80h n FFh

Vùng SFR, cũng có a ch t 80h n FFh

Vùng RAM th p có a ch t 00h n 7Fh V y khi truy c p vào m t a ch thu c d i t 00h n 7Fh thì s truy c p n ô nh thu c vùng RAM th p. Tuy nhiên khi truy c p n m t a ch x thu c d i t 80h n FFh thì x y ra v n c n gi i quy t: s truy c p n thanh ghi SFR a ch x hay truy c p n ô nh a ch x c a vùng RAM cao? Nhà s n xu t quy nh r ng, trong trư ng h p này, n u ki u truy c p s d ng ch a ch tr c ti p thì s truy c p vào vùng SFR, ngư c l i n u ki u truy c p s d ng ch a ch gián ti p thì s truy c p vào vùng RAM cao. B nh d li u RAM onchip thư ng dùng ch a các bi n t m th i trong quá trình vi i u khi n ho t ng, ó cũng là nơi dành cho ngăn x p ho t ng. Không gian d li u 64Kbyte ư c tr ng hoàn toàn và ch dùng ư c khi ghép n i v i b nh d li u bên ngoài. Khi ghép n i thêm b nh d li u bên ngoài, dung lư ng c a các b nh này s chi m d n các v trí trong không gian, tuy nhiên không h nh hư ng n 128byte RAM onchip. Ngăn x p trong 8051 liên quan n m t thanh ghi tên là con tr ngăn x p SP (Stack Pointer). Thanh ghi này luôn tr vào nh c a ngăn x p, t c là nó ch a a ch c a v trí ngay sát v trí có th lưu a ch /d li u ti p theo vào. Khi c t 1 byte a ch /d li u vào ngăn x p, SP t ng tăng lên 1 ơn v sau ó m i c t a ch /d li u vào ô nh có a ch b ng v i giá tr c a SP sau khi ã tăng. Khi l y 1 byte a ch /d li u ra kh i ngăn x p, giá tr s ư c l y ra sau ó SP m i t ng tr i1 ơn v . Giá tr sau khi reset c a SP là 0x07, do ó quy nh ngăn x p s c t d li u t a ch 0x08 tr i. Tuy nhiên do c tính ho t ng bành trư ng theo chi u tăng a ch mà ngăn x p thư ng ư c b trí lên vùng trên cùng c a b nh RAM onchip tránh tranh ch p v i các bi n lưu trong RAM.

5

cng bài gi ng – 8051 Starter Kit

Hình nh minh h a b nh d li u

0x7F Vùng RAM thư ng (không ánh a ch bit ư c) 0x30 Vùng RAM 16 byte có th ánh a ch bit t 0x00 n 0x7F 4 băng thanh ghi m i băng có 8 thanh ghi R0..7 0x2F

0x20 0x1F 0x00

8052 có thêm vùng RAM cao ( a ch cũng t 0x80 n 0xFF) nhưng truy nh p ph i theo ch a ch gián ti p phân bi t v i vùng SFR

ây là vùng các thanh ghi ch c năng c bi t SFR (Special Function Register) có c 8051 và 8052. Truy nh p (ghi/ c) vùng này là truy nh p vào các a ch t 0x80 n 0xFF nhưng ph i theo ch a ch tr c ti p

6

cng bài gi ng – 8051 Starter Kit

B n

các thanh ghi ch c năng

c bi t SFR

7

cng bài gi ng – 8051 Starter Kit C ng vào ra song song (I/O Port) 8051 có 4 c ng vào ra song song, có tên l n lư t là P0, P1, P2 và P3. T t c các c ng này u là c ng vào ra hai chi u 8bit. Các bit c a m i c ng là m t chân trên chip, như v y m i c ng s có 8 chân trên chip. Hư ng d li u (dùng c ng ó làm c ng ra hay c ng vào) là c l p gi a các c ng và gi a các chân (các bit) trong cùng m t c ng. Ví d , ta có th nh nghĩa c ng P0 là c ng ra, P1 là c ng vào ho c ngư c l i m t cách tùy ý, v i c 2 c ng P2 và P3 còn l i cũng v y. Trong cùng m t c ng P0, ta cũng có th nh nghĩa chân P0.0 là c ng vào, P0.1 l i là c ng ra tùy ý. Liên quan n m i c ng vào/ra song song c a 8051 ch có m t thanh ghi SFR ( thanh ghi ch c năng c bi t) có tên trùng v i tên c a c ng. Ta có các thanh ghi P0 dùng cho c ng P0, thanh ghi P1 dùng cho c ng P1 … ây là các thanh ghi ánh a ch n t ng bit (bit addressable), do ó ta có th dùng các l nh tác ng bit i v i các bit c a các thanh ghi này. M i thanh ghi này g m 8 bit tương ng v i các chân (bit) c a c ng ó. Khi m t chân (bit) c ng nào ó ư c dùng làm c ng vào thì trư c ó bit tương ng trong thanh ghi SFR ph i ư c t m c 1. N u m t chân (bit) c ng nào ó ư c dùng làm c ng ra thì giá tr c a bit tương ng trong thanh ghi SFR s là giá tr lôgic mu n ưa ra chân c ng ó. N u mu n ưa ra m c lôgic cao ( i n áp g n 5V), bit tương ng trong thanh ghi ph i ư c t b ng 1, hi n nhiên n u mu n ưa ra m c lôgic th p ( i n áp g n 0V) thì bit tương ng trong thanh ghi ph i ư c t b ng 0. Như ã nói trên, các bit trong thanh ghi c ng có th ư c t b ng 1/0 mà không làm nh hư ng n các bit còn l i trong c ng ó b ng cách dùng các l nh setb ( t lên 1) hay clr ( t v 0). Sau khi t m t chân c ng làm c ng vào, ta có th dùng các l nh ki m tra bit c vào và ki m tra các m c lôgic c a m ch ngoài ang áp vào là m c 0 hay m c 1. Các l nh này là jb (nh y n u bit b ng 1), jnb (nh y n u bit b ng 0). M i c ng có c u trúc g m m t latch (chính là các bit c a thanh ghi c ng), m ch lái u ra (output driver) và m ch m u vào (input buffer). Ngoài ch c năng vào/ra thông thư ng, m t s c ng còn ư c tích h p thêm ch c năng c a m t s ngo i vi khác. Xem b ng li t kê sau:

Các chân c ng P1.0 và P1.1 ư c tích h p v i các tín hi u c a timer2 trong trư ng h p chip là 8052. Khi dùng v i các ch c năng c a các ngo i vi, chân c ng tương ng ph i ư c t lên 1. N u không các tín hi u s luôn b ghim m c 0.

8

cng bài gi ng – 8051 Starter Kit Sơ c a m ch c a m t chân c ng:

C ng P0 không có i n tr treo cao (pullup resistor) bên trong, m ch lái t o m c cao ch có khi s d ng c ng này v i tính năng là bus d n kênh a ch /d li u. Như v y v i ch c năng ra thông thư ng, P0 là c ng ra open drain, v i ch c năng vào, P0 là c ng vào cao tr (high impedance). N u mu n s d ng c ng P0 làm c ng vào/ra thông thư ng, ta ph i thêm i n tr pullup bên ngoài. Giá tr i n tr pullup bên ngoài thư ng t 4K7 n 10K. Các c ng P1, P2 và P3 u có i n tr pullup bên trong, do ó có th dùng v i ch c năng c ng vào/ra thông thư ng mà không c n có thêm i n tr pullup bên ngoài. Th c ch t, i n tr pullup bên trong là các FET, không ph i i n tr tuy n tính thông thư ng, tuy v y nhưng kh năng phun dòng ra c a m ch lái khi u ra m c cao (ho c khi là u vào) r t nh , ch kho ng 100 micro Ampe. Trong datasheet c a AT89S5x (m t trong nh ng bi n th c a h 8051 do Atmel s n xu t) có th ng kê s li u như sau:

9

cng bài gi ng – 8051 Starter Kit Theo ó, n u ta thi t k các c ng ph i cung c p cho t i u ra m c cao m t lư ng dòng i n IOH = 60 micro Ampe thì m c i n áp u ra VOH s b kéo s t xu ng, ch có th m b o t 2.4V tr lên b i nhà s n xu t, không th cao sát v i 5V như lý thuy t. Trong khi ó, kh năng nu t dòng c a m ch lái khi u ra m c th p l i cao hơn r t nhi u, có th t t vài n hàng ch c mili Ampe.

Như v y, khi thi t k v i các ph n t bên ngoài, ta nên ý n c tính vào/ra c a các chân c ng. Ví d khi dùng ghép n i v i LED ơn ho c LED 7 thanh, ta nên thi t k chân c ng nu t dòng t LED làm LED sáng (c ng n i v i Cathode c a LED), không nên thi t k chân c ng phun dòng cho LED làm LED sáng (c ng n i v i Anode c a LED).

C ng vào ra n i ti p (Serial Port) C ng n i ti p trong 8051 ch y u ư c dùng trong các ng d ng có yêu c u truy n thông v i máy tính, ho c v i m t vi i u khi n khác. Liên quan n c ng n i ti p ch y u có 2 thanh ghi: SCON và SBUF. Ngoài ra, m t thanh ghi khác là thanh ghi PCON (không ánh a ch bit) có bit 7 tên là SMOD quy nh t c truy n c a c ng n i ti p có g p ôi lên (SMOD = 1) hay không (SMOD = 0). D li u ư c truy n nh n n i ti p thông qua hai chân c ng P3.0(RxD) và P3.1(TxD). Thanh ghi SBUF là thanh ghi 8bit ch a d li u truy n ho c nh n. V th c ch t có hai thanh ghi d li u khác nhau, m t dành ch a d li u truy n i, m t ch a d li nh n ư c. C hai thanh ghi này u có chung m t tên là SBUF, tuy nhiên CPU hoàn toàn phân bi t ư c m t cách d dàng. Khi ta mu n truy n d li u i, ta ph i ghi vào thanh ghi SBUF (ví d vi t l nh mov SBUF,a), còn khi mu n c ki m tra d li u nh n v ta ph i c thanh ghi SBUF (ví d vi t l nh mov a,SBUF). CPU s căn c vào vi c thanh ghi SBUF n m v trí toán h ng ích (toán h ng bên trái) hay toán h ng ngu n (toán h ng bên ph i) quy t nh s truy nh p ( c/ghi) thanh ghi SBUF nào. Ngư i l p trình không c n ph i quan tâm x lý v n này. Thanh ghi quy nh ch ho t ng và i u khi n c ng n i ti p là thanh ghi SCON ( ánh a ch bit). SM0 SM1 SM2 REN TB8 RB8 TI RI a lý c p

Bit SM0, SM1, SM2 quy nh ch ho t ng c a c ng n i ti p. Thông thư ng truy n thông gi a 2 vi i u khi n ho c gi a 1 vi i u khi n và 1 máy tính, giá tr c bit SM2 ư c t b ng 0. Khi truy n thông theo ki u m ng a vi x (multiprocessor communication), SM2 ư c t b ng 1. Hai bit SM0 và SM1 th s là các bit quy nh ch ho t ng c a c ng n i ti p, chúng t o ra 4 t h (00,01,10 và 11) ng v i 4 ch ho t ng mô t trong b ng sau. 10

cng bài gi ng – 8051 Starter Kit

SM0 0 0 1 1

SM1 0 1 0 1

Ch 0ng b 1-D b 2-D b 3-D b

Khung d li u 8 bit SBUF 8 bit SBUF 8bit SBUF + RB8/TB8 8bit SBUF + RB8/TB8

Baud rate Fosc/12 Thay i ư c Fosc/32 ho c Fosc/64 Thay i ư c

Ch 0: là ch truy n ng b duy nh t. Chân RxD s là tín hi u truy n/nh n d li u, chân TxD là tín hi u xung nh p. Bit LSB (bit 0) c a d li u ư c truy n i trư c tiên. T c truy n c nh và b ng 1/12 giá tr th ch anh. Ch 1: là ch truy n d b 8 bit. D li u 8 bit ư c óng khung b i m t bit Start (= 0) u và m t bit Stop (=1) cu i trư c khi ư c truy n i. T c truy n thay i ư c theo ý ngư i l p trình. Ch 2: là ch truy n d b 9 bit. D li u 9 bit ư c ghép thành b i 8bit trong thanh ghi SBUF và bit RB8 (trư ng h p nh n v ) ho c TB8 (trư ng h p truy n i) trong thanh ghi SCON. Ngoài ra các bit Start và Stop v n ư c g n bình u và cu i khung truy n. Trong ch này, t c truy n ch có th ch n ư c 1 trong 2 m c: 1/32 ho c 1/64 giá tr c a th ch anh (tùy thu c vào giá tr c a bit SMOD trong thanh ghi PCON ã nói trên). Ch 3: cũng là ch truy n d b 9 bit, khác v i ch 2 ch t c truy n có th thay i ư c theo ý ngư i l p trình như trong ch 1. Bit REN trong thanh ghi SCON là bit cho phép nh n d li u. D li u ch qua c ng n i ti p khi bit này = 1. ư c nh n

Bit TB8 là bit d li u th 9 trong trư ng h p truy n i 9 bit (8 bit kia trong thanh ghi SBUF). Bit RB8 là bit d li u th 9 trong trư ng h p nh n v 9 bit (8 bit kia trong thanh ghi SBUF). Bit TI là c ng t truy n, báo hi u vi c truy n 1 khung d li u ã hoàn t t. Bit RI là c ng t nh n, báo hi u vi c nh n 1 khung d li u ã hoàn t t. t o ra t c truy n (Baud rate) c a c ng n i ti p trong 8051, ph i dùng n timer1 ch Auto Reload 8bit. Giá tr n p l i ch a trong thanh ghi TH1 ư c tính toán theo công th c sau (ph thu c vào Baud rate mong mu n và giá tr c a th ch anh).

Tóm l i s d ng c ng n i ti p c a 8051, hãy th c hi n các bư c sau: - Ch n ch cho c ng n i ti p ( ng b /d b , 8bit/9bit...), t ó ch n ư c giá tr cho các bit trong thanh ghi SCON. Lưu ý xóa các bit TI và RI. 11

cng bài gi ng – 8051 Starter Kit Ch n t c truy n mong mu n, t ó tính ra giá tr c a thanh ghi TH1. Cho timer1 ch y ch Auto Reload 8bit (không dùng ng t tràn timer1). t m c ưu tiên ng t và cho phép ng t c ng n i ti p n u mu n. B t u quá trình truy n d li u b ng m t l nh ghi d li u mu n truy n vào thanh ghi SBUF. Quá trình truy n k t thúc thì c TI s t ng t lên 1. Khi m t khung d li u ã ư c nh n y , c RI s t ng t lên 1 và ngư i l p trình lúc này có th dùng l nh c thanh ghi SBUF l y d li u nh n ư c ra x lý.

Ng t (Interrupt) 8051 ch có m t s lư ng khá ít các ngu n ng t (interrupt source) ho c có th g i là các nguyên nhân ng t. M i ng t có m t vector ng t riêng, ó là m t a ch c nh n m trong b nh chương trình, khi ng t x y ra, CPU s t ng nh y n th c hi n l nh n m t i a ch này. B ng tóm t t các ng t trong 8051 như sau: STT Tên ng t C ng t Ng t ngoài 0 khi có tín IE0 hi u tích c c theo ki u ã ch n chân P3.2 Ng t tràn timer0 khi TF0 giá tr timer0 tràn t giá tr max v giá tr min Ng t ngoài 1 khi có tín IE1 hi u tích c c theo ki u ã ch n chân P3.3 Ng t tràn timer1 khi TF1 giá tr timer1 tràn t giá tr max v giá tr min Ng t c ng n i ti p khi TI, RI vi i u khi n nh n ho c truy n xong m t byte b ng c ng n i ti p Mô t Thanh ghi Vector ng t ch a c TCON 0x0003 TCON 0x000B

1 INT0 2 Timer0

3 INT1 4 Timer1

TCON TCON

0x0013 0x001B

5 Serial Port

SCON

0x0023

V i 8052, ngoài các ng t trên còn có thêm ng t c a timer2 (do vi i u khi n này có thêm timer2 trong s các ngo i vi onchip). M i ng t ư c dành cho m t vector ng t kéo dài 8byte. V m t lý thuy t, n u chương trình ng n, mã t o ra ch a trong 8 byte, ngư i l p trình hoàn toàn có th t ph n chương trình x lý ng t ngay t i vector ng t. Tuy nhiên trong h u h t các trư ng h p, chương trình x lý ng t có dung lư ng mã t o ra l n hơn 8byte nên t i vector ng t, ta ch t l nh nh y t i chương trình x lý ng t n m vùng nh khác. N u không làm v y, mã chương trình x lý ng t này s l n sang, è vào vector ng t k c n. 12

cng bài gi ng – 8051 Starter Kit Liên quan n ng t ch y u có hai thanh ghi là thanh ghi IE và thanh ghi IP.

cho phép m t ng t, bit tương ng v i ng t ó và bit EA ph i ư c t b ng 1. Thanh ghi IE là thanh ghi ánh a ch bit, do ó có th dùng các l nh tác ng bit tác ng riêng r lên t ng bit mà không làm nh hư ng n giá tr các bit khác. C ng t ho t ng c l p v i vi c cho phép ng t, i u ó có nghĩa là c ng t s t ng t lên b ng 1 khi có s ki n gây ng t x y ra, b t k s ki n ó có ư c cho phép ng t hay không. Do v y, trư c khi cho phép m t ng t, ta nên xóa c c a ng t ó m b o sau khi cho phép, các s ki n gây ng t trong quá kh không th gây ng t n a. Ví d trư c khi cho phép ng t timer0 mà timer 0 ã ch y và tràn (dù là tràn m t hay nhi u l n) thì c TF0 s b ng 1, n u sau ó ta cho phép ng t timer0 thì s gây ra ng t ngay do c tràn ang b ng 1 (s ki n tràn gây ng t trong trư ng h p này là tràn trong quá kh , không ph i s ki n ta quan tâm n). Vì v y hãy xóa c TF0 trư c khi cho phép ng t tràn timer0. Ngo i tr c c a c a ng t n i ti p (và c c a ng t timer2 trong 8052), các c ng t khác u t ng ư c xóa khi CPU th c hi n chương trình ph c v ng t. Lý do là ng t c ng n i ti p (và ng t timer2 trong 8052) ư c gây ra b i 2 nguyên nhân (có 2 c cho m i ng t), khi x y ra ng t, ngư i l p trình c n ph i ki m tra xem c nào ư c t b ng 1 phân bi t nguyên nhân gây ra ng t ó là nguyên nhân nào x lý thích h p. Ví d ng t c ng n i ti p là ng t ư c gây ra b i 1 trong 2 nguyên nhân: vi i u khi n nh n xong ho c truy n xong m t byte d li u qua c ng n i ti p. X y ra s ki n nào thì c ng t tương ng s t ng ư c t lên b ng 1, n u nh n xong thì c RI b ng 1, n u truy n xong thì c TI b ng 1. Trong chương trình x lý ng t, ngư i l p trình ph i ki m tra c TI hay c RI b ng 1 quy t nh x lý ng t truy n hay x lý ng t nh n. Sau khi ki m tra, ngư i l p trình ph i vi t l nh xóa c ó vì vi c này không ư c CPU th c hi n t ng như các c ng t khác.

13

cng bài gi ng – 8051 Starter Kit Nói n ng t không th không nói n m c ưu tiên c a ng t. M c ưu tiên c a ng t ây có th ư c hi u là s phân b c, quy t nh x lý ng t nào khi hai hay nhi u ng t x y ra. Có 2 cơ ch phân b c ưu tiên. Th nh t là cơ ch phân b c dành cho các ng t x y ra ng th i, hai ng t A và B x y ra cùng m t th i i m nhìn t phía vi i u khi n. Th hai là cơ ch phân b c dành cho các ng t x y ra xen k nhau, trong khi ang x lý ng t A thì ng t B x y ra, v y thì trong t ng trư ng h p, CPU s x lý ra sao? Hãy xem dư i ây. V i trư ng h p các ng t x y ra ng th i, CPU s xem xét m c ưu tiên c a các ng t ó, t ó quy t nh x lý ng t có m c ưu tiên cao hơn trư c. M c ưu tiên trong trư ng h p này là m c ưu tiên c ng ( ư c quy nh b i nhà s n xu t, b i c u trúc s n có c a 8051 và ngư i l p trình không th thay i ư c).

Nhìn vào b ng trên ta th y ng t INT0 là ng t có m c ưu tiên cao nh t và ng t timer2 là ng t có m c ưu tiên th p nh t trong s các ng t. Như v y n u ng t ngoài 1 và ng t timer0 cùng x y ra m t lúc, ng t timer0 s ư c CPU x lý trư c, sau ó m i x lý ng t ngoài 1. V i trư ng h p x y ra ng t xen k , khi CPU ang x lý ng t A mà ng t B x y ra, CPU s gi i quy t theo 2 hư ng: ti p t c x lý ng t A n u m c ưu tiên c a ng t B không cao hơn m c ưu tiên c a ng t A, ho c s d ng vi c x lý ng t A l i, chuy n sang x lý ng t B n u m c ưu tiên c a ng t B cao hơn m c ưu tiên c a ng t A. M c ưu tiên cho các ng t trong trư ng h p này không ph i là m c ưu tiên c ng do nhà s n xu t quy nh (t c là không căn c vào b ng trên) mà là do ngư i l p trình t. L p trình viên có th dùng thanh ghi IP quy nh m c ưu tiên cho các ng t m t trong hai m c: m c cao và m c th p. t m c ưu tiên c a m t ng t (trong trư ng h p x y ra xen k ) m c cao, ta t bit tương ng v i ng t ó trong thanh ghi IP b ng 1, m c th p ng v i giá tr bit = 0. Thanh ghi IP (Interrupt Priority) PT2 PS PT1 PX1 PT0 PX0

Các bit trong thanh ghi IP tương ng v i các ng t úng như trong thanh ghi IE (bit PX0 dành cho ng t ngoài 0, bit PT0 dành cho ng t timer 0…)

14

cng bài gi ng – 8051 Starter Kit M t i u d nh n ra là n u m t ng t ư c t m c ưu tiên cao (bit tương ng trong thanh ghi IP b ng 1) thì s ch ng có ng t nào có th xen vào quá trình x lý nó ư c n a. Nói v m c ưu tiên ng t, có th dùng m t ví d t ng quát sau, gi s hai ng t timer0 và ng t c ng n i ti p cùng ư c cho phép (các bit tương ng và bit EA trong thanh ghi IE ư c t b ng 1), bit PT0 = 0, bit PS = 1 thì: - N u hai ng t cùng x y ra, ng t timer0 s th ng th và ư c ph c v trư c. - N u ng t c ng n i ti p x y ra trư c và ang ư c x lý thì ng t timer0 n u có x y ra cũng không th chen vào, làm d ng quá trình x lý ng t c ng n i ti p ư c. - N u ng t timer0 x y ra trư c và ang ư c x lý mà ng t c ng n i ti p x y ra thì CPU s ph i d ng vi c x lý ng t timer0 l i, chuy n sang x lý ng t c ng n i ti p, x lý xong m i quay l i x lý ti p ng t timer0. Như ã nói trên, 8051 có 2 ng t ngoài là INT0 và INT1. Ng t ngoài ư c hi u là ng t ư c gây ra b i s ki n m c lôgic 0 (m c i n áp th p, g n 0V) ho c sư n xu ng (s chuy n m c i n áp t m c cao v m c th p) x y ra chân ng t tương ng (P3.2 v i ng t ngoài 0 và P3.3 v i ng t ngoài 1). Vi c l a ch n ki u ng t ư c th c hi n b ng các bit IT (Interrupt Type) n m trong thanh ghi TCON. ây là thanh ghi i u khi n timer nhưng 4 bit LSB (bit0..3) ư c dùng cho các ng t ngoài.

Khi bit ITx = 1 thì ng t ngoài tương ng ư c ch n ki u là ng t theo sư n xu ng, ngư c l i n u bit ITx = 0 thì ng t ngoài tương ng ư c s có ki u ng t là ng t theo m c th p. Các bit IE là các bit c ng t ngoài, ch có tác d ng trong trư ng h p ki u ng t ư c ch n là ng t theo sư n xu ng. Khi ki u ng t theo sư n xu ng ư c ch n thì ng t s x y ra duy nh t m t l n khi có sư n xu ng c a tín hi u, sau ó khi tín hi u m c th p, ho c có sư n lên, ho c m c cao thì cũng không có ng t x y ra n a cho n khi có sư n xu ng ti p theo. C ng t IE s d ng lên khi có sư n xu ng và t ng b xóa khi CPU b t u x lý ng t. Khi ki u ng t theo m c th p ư c ch n thì ng t s x y ra b t c khi nào tín hi u t i chân ng t m c th p. N u sau khi x lý xong ng t mà tín hi u v n m c th p thì l i ng t ti p, c như v y cho n khi x lý xong ng t l n th n , tín hi u ã lên m c cao r i thì thôi không ng t n a. C ng t IE trong trư ng h p này không có ý nghĩa gì c . Thông thư ng ki u ng t hay ư c ch n là ng t theo sư n xu ng.

tr

B nh th i/B m (Timer/Counter) 8051 có 2 timer tên là timer0 và timer1. Các timer này m max do ó b ng 216 = 65536 ( m t 0 n 65535). 15

u là timer 16bit, giá

cng bài gi ng – 8051 Starter Kit Hai timer có nguyên lý ho t ng hoàn toàn gi ng nhau và c l p. Sau khi cho phép ch y, m i khi có thêm m t xung t i u vào m, giá tr c a timer s t ng ư c tăng lên 1 ơn v , c như v y cho n khi giá tr tăng lên vư t quá giá tr max mà thanh ghi m có th bi u di n thì giá tr m l i ư c ưa tr v giá tr min (thông thư ng min = 0). S ki n này ư c hi u là s ki n tràn timer (overflow) và có th gây ra ng t n u ng t tràn timer ư c cho phép (bit ETx trong thanh ghi IE = 1). Vi c cho timer ch y/d ng ư c th c hi n b i các bit TR trong thanh ghi TCON ( ánh a ch n t ng bit).

Khi bit TRx = 1, timerx s m, ngư c l i khi TRx = 0, timerx s không m m c dù v n có xung ưa vào. Khi d ng không m, giá tr c a timer ư c gi nguyên. Các bit TFx là các c báo tràn timer, khi s ki n tràn timer x y ra, c s ư c t ng t lên b ng 1 và n u ng t tràn timer ư c cho phép, ng t s x y ra. Khi CPU x lý ng t tràn timerx, c ng t TFx tương ng s t ng ư c xóa v 0. Giá tr m 16bit c a timerx ư c lưu trong hai thanh ghi THx (byte cao) và TLx (byte th p). Hai thanh ghi này có th ghi/ c ư c b t kỳ lúc nào. Tuy nhiên nhà s n xu t khuy n cáo r ng nên d ng timer (cho bit TRx = 0) trư c khi ghi/ c các thanh ghi ch a giá tr m. Các timer có th ho t ng theo nhi u ch , ư c quy nh b i các bit trong thanh ghi TMOD (không ánh a ch n t ng bit).

16

cng bài gi ng – 8051 Starter Kit

xác nh th i gian, ngư i ta ch n ngu n xung nh p (clock) ưa vào m trong timer là xung nh p bên trong (dành cho CPU). Ngu n xung nh p này thư ng r t u n (có t n s n nh), do ó t s m c a timer ngư i ta có th nhân v i chu kỳ xung nh p tính ra th i gian trôi qua. Timer lúc này ư c g i chính xác v i cái tên “timer”, t c b nh th i. m các s ki n bên ngoài, ngư i ta ch n ngu n xung nh p ưa vào m trong timer là tín hi u t bên ngoài ( ã ư c chu n hóa v d ng xung vuông 0V/5V). Các tín hi u này s ư c n i v i các bit c ng có d n kênh thêm các tính năng T0/T1/T2. Khi có s ki n bên ngoài gây ra thay i m c xung u vào m, timer s t ng tăng lên 1 ơn v gi ng như trư ng h p m xung nh p bên trong. Lúc này, timer ư c g i chính xác v i cái tên khác: “counter”, t c b m (s ki n). Nhìn vào b ng mô t thanh ghi TMOD bên trên, ta có th nh n th y có 2 b 4 bit gi ng nhau (g m GATEx, C/Tx, Mx0 và Mx1) dành cho 2 timer0 và 1. Ý nghĩa các bit là như nhau i v i m i timer. Bit GATEx quy nh vi c cho phép timer m (run timer). N u GATEx = 0, timerx s m khi bit TRx b ng 1, d ng khi bit TRx b ng 0. N u GATEx = 1, timerx s ch m khi bit TRx = 1 và tín hi u t i chân INTx = 1, d ng khi m t trong hai i u ki n trên không còn th a mãn. Thông thư ng ngư i ta dùng timer v i GATE = 0, ch dùng timer v i GATE = 1 trong trư ng h p mu n o r ng xung vì lúc ó timer s ch m th i gian khi xung ưa vào chân INTx m c cao. Bit C/Tx quy nh ngu n clock ưa vào m trong timer. N u C/Tx = 0, timer s ư c c u hình là b nh th i, n u C/Tx = 1, timer s ư c c u hình là b m s ki n. Hai bit còn l i (Mx0 và Mx1) t o ra 4 t h p các giá tr (00,01,10 và 11) ng v i 4 ch ho t ng khác nhau c a timerx. Trong 4 ch ó thư ng ch dùng ch timer/counter 16bit (Mx1 = 0, Mx0 = 1) và ch Auto Reload 8bit timer/counter (Mx1 = 1, Mx0 = 0). Trong ch timer/counter 16bit, giá tr m (ch a trong hai thanh ghi THx và TLx) t ng ư c tăng lên 1 ơn v m i l n nh n ư c thêm m t xung nh p. Khi giá tr m tăng vư t quá giá tr max = 65535 thì s tràn v 0, c ng t TFx ư c t ng t = 1. Ch này ư c dùng trong các ng d ng m th i gian và m s ki n. Trong ch Auto Reload 8bit, giá tr m s ch ư c ch a trong thanh ghi TLx, còn giá tr c a thanh ghi THx b ng m t s n (t 0 n 255) do ngư i l p trình ưa vào. Khi có thêm 1 xung nh p, giá tr m trong TLx ương nhiên cũng tăng lên 1 ơn v như bình thư ng. Tuy nhiên trong trư ng h p này, giá tr m l n nh t là 255 ch không ph i 65535 như trư ng h p trên vì timer/counter ch còn 8bit. Do v y s ki n tràn lúc này x y ra nhanh hơn, ch c n vư t quá 255 là giá tr ms tràn. C ng t TFx v n ư c t ng t = 1 như trong trư ng h p tràn 16bit. i m khác bi t là thay vì tràn v 0, giá tr THx s ư c t ng n p l i (Auto Reload) vào thanh ghi TLx, do ó timer/counter sau khi tràn s có giá tr b ng n (giá tr ch a trong THx) và s m t giá tr n tr i. Ch này ư c dùng trong vi c t o Baud rate cho truy n thông qua c ng n i ti p.

17

cng bài gi ng – 8051 Starter Kit

s d ng timer c a 8051, hãy th c hi n các bư c sau: - Quy nh ch ho t ng cho timer b ng cách tính toán và ghi giá tr cho các bit trong thanh ghi TMOD. - Ghi giá tr m kh i u mong mu n vào 2 thanh ghi m THx và TLx. ôi khi ta không mu n timer/counter b t u m t 0 mà t m t giá tr nào ó th i i m tràn g n hơn, ho c ch n hơn trong tính toán sau này. Ví d n u cho timer m t 15535 thì sau 50000 xung nh p (t c 50000 micro giây v i th ch anh 12MHz) timer s tràn, và th i gian m t giây có th d dàng tính ra khá chính xác = 20 l n tràn c a timer ( ương nhiên m i l n tràn l i ph i n p l i giá tr 15535). t m c ưu tiên ng t và cho phép ng t tràn timer (n u mu n). - Dùng bit TRx trong thanh ghi TCON cho timer ch y hay d ng theo ý mu n.

18

cng bài gi ng – 8051 Starter Kit

Chương II: Các ngôn ng

l p trình cho vi i u khi n

Trong k thu t vi x lý nói chung, ngôn ng l p trình thư ng ư c chia làm 2 lo i: Ngôn ng b c th p và Ngôn ng b c cao. Ngôn ng b c th p là ngôn ng máy ho c ngôn ng g n v i máy. Ngôn ng máy là ngôn ng b c th p nh t, chính là mã máy d ng nh phân. L p trình v i ngôn ng này ng nghĩa v i vi c l p trình viên ph i vi t t ng bit 0/1 cho t ng mã l nh c th , ương nhiên ó là vi c r t v t v và khó khăn. K n là ngôn ng g n v i máy, chính là h p ng (Assembly). V i ngôn ng này, l p trình viên có th vi t các l nh c th d ng ký t , tuân theo m t t p h p các ký t nh t nh g i là t p l nh. Nói cách khác, c p này, l p trình viên s vi t các l nh d ng mã g i nh (mnemonic) thay vì ph i vi t các bit 0/1 cho các mã l nh c th . Trình h p ng (Assembler) - m t ph n m m trên máy tính - s m nhi m vi c d ch các l nh do l p trình viên vi t d ng mã g i nh sang d ng mã máy 0/1. Ngôn ng b c cao là các ngôn ng g n v i ngôn ng con ngư i hơn, do ó vi c l p trình b ng các ngôn ng này tr nên d dàng và ơn gi n hơn. Có th k n m t s ngôn ng l p trình b c cao như C, Basic, Pascal… trong ó C là ngôn ng thông d ng hơn c trong k thu t vi x lý. V b n ch t, s d ng các ngôn ng này thay cho ngôn ng b c th p là s gi m t i cho l p trình viên trong vi c nghiên c u các t p l nh và xây d ng các c u trúc gi i thu t. Chương trình vi t b ng ngôn ng b c cao cũng s ư c m t ph n m m trên máy tính g i là trình biên d ch (Compiler) chuy n sang d ng h p ng trư c khi chuy n sang mã máy. M i lo i ngôn ng có ưu và như c i m riêng. V i h p ng ( i di n cho ngôn ng b c th p): Ưu i m: mã máy sinh ra r t ng n g n, th i gian x lý c a CPU vì th cũng ư c gi m thi u, trình h p ng (Assembler) c a các h vi i u khi n u mi n phí i v i ngư i s d ng. Như c i m: khó khăn trong vi c ti p c n v i t p l nh (tuy d ng mã g i nh nhưng v n chưa th c s g n v i ngôn ng con ngư i), các c u trúc gi i thu t (if…else, for…, switch…case…) h u h t không có s n, vì v y quá trình l p trình khó khăn, m t nhi u th i gian và công s c, vi c k th a và phát tri n là g n như không th . V i ngôn ng C ( i di n cho ngôn ng b c cao): Ưu i m: ngôn ng g n v i ngôn ng con ngư i, các c u trúc gi i thu t có s n, do ó t o s thu n ti n, d dàng trong s di n t thu t toán, vi c k th a và phát tri n là kh thi, t n ít th i gian.

19

cng bài gi ng – 8051 Starter Kit Như c i m: mã máy sinh ra thư ng dài hơn so v i h p ng (t t nhiên cũng còn tùy vào năng l c c a l p trình viên), th i gian x lý c a CPU vì th cũng dài hơn, các trình biên d ch (Compiler) tùy theo c p t i ưu mà ư c thi t k và bán v i giá r t cao. Trong th c t hi n nay, các vi i u khi n có tài nguyên (resourse) nói chung và b nh (memory) nói riêng r t phong phú và d i dào. M t khác các trình biên d ch (Compiler) cũng ư c thi t k ngày càng t i ưu, h tr r t nhi u các thao tác x lý gi i thu t, cho phép tr n l nh h p ng vào nh ng tình hu ng yêu c u kh t khe v m t th i gian và lư ng mã máy sinh ra. Chính vì th yêu c u v t i gi n mã máy khi l p trình không còn quá b c xúc như trư c kia. S d ng ngôn ng b c cao giúp rút ng n r t nhi u th i gian nghiên c u, thi t k s n ph m trư c khi ưa ra th trư ng (time to market), nâng cao kh năng k th a, phát tri n, c i ti n các tính năng s n ph m, t ó kéo dài chu kỳ s ng (life time) c a s n ph m trên th trư ng. ó là lý do t i sao ngôn ng b c cao ( i n hình là ngôn ng C) là s l a ch n c a h u h t nh ng ngư i tác nghi p trên lĩnh v c k thu t vi x lý. -

20

cng bài gi ng – 8051 Starter Kit

Chương III: Hư ng d n s d ng trình biên d ch Keil C cho h vi i u khi n 8051
Trong s các trình biên d ch C (C Compiler) cho h vi i u khi n 8051, Keil C là m t trình biên d ch t i ưu, ư c s d ng r ng rãi. Chương này ch y u hư ng d n s d ng trình biên d ch này trong vi c thi t k ph n m m cho h vi i u khi n 8051. Cài t Keil C ch y ư c trên các H i u hành Win98, Windows2000, WindowsME, WindowsXP. cài t, hãy ch y file setup.exe trong thư m c Setup c a Keil C trên ĩa CD kèm theo. Ti p ó hãy theo các ch d n c a giao di n cài t. T o m t Project m i

Ti p ó gõ tên project vào h p tho i. Ch n ư ng d n và b m OK.

21

cng bài gi ng – 8051 Starter Kit

Ch n ti p lo i vi i u khi n s s d ng (trong trư ng h p này là AT89S52).

Ch n câu tr l i “No” khi ư c h i “Copy Standart Startup Code to Project Folder and Add File to Project?”

22

cng bài gi ng – 8051 Starter Kit T o m t file m i

Sau khi Keil t o cho ta m t file m c nh d ng Text, hãy Save File l i dư i d ng mong mu n (*.c n u là file mã ngu n, ho c *.h n u là file header). M t Project ch y u s d ng hai lo i file nói trên. Ti p ó th c hi n so n th o các file theo ý mu n.

23

cng bài gi ng – 8051 Starter Kit C u trúc m t chương trình

M t s lưu ý khi l p trình v i Keil C Khai báo các file header Khi s d ng lo i vi i u khi n 8051 nào ( ã l a ch n trong khi t o Project m i) thì ph i s d ng file header c a lo i ó. Trong trư ng h p này ta s d ng file “AT89X52.H” cho vi i u khiê AT89S52. Các file header ư c tìm trong thư m c …C51\INC\ c a Keil C ã cài ra. nh nghĩa h ng s trong b nh chương trình unsigned char code <tên bi n>; Ví d nh nghĩa m t m ng 3 h ng s : unsigned char code array[3] = {1,2,3}; nh nghĩa các chương trình con ph c v ng t void <tên chương trình> (void) interrupt <tên Vector ng t> <tên chương trình> do l p trình viên tùy ý t. <tên Vector ng t> ư c tra ph n cu i file header (AT89X52.H). Không nên vi t l nh d ng bi u th c dài mà nên tách ra thành t ng phép tính nh th c hi n l n lư t.

24

cng bài gi ng – 8051 Starter Kit Các tính năng khác gi ng như ANSI C. Biên d ch Project t o ra file mã máy d ng *.hex n p vào chip, click chu t ph i như hình v .

Trong h p tho i hi n ra, hãy check vào Creat Hex File như ch d n.

25

cng bài gi ng – 8051 Starter Kit Cu i cùng ch n theo Menu như hình nh, ho c b m phím F7.

File mã máy *.hex t o ra s n m trong cùng m t thư m c v i các file khác c a Project. S d ng ph n m m SPI – Flash Programmer có s n trên ĩa CD kèm theo m file mã máy (b ng nút Open) và n p xu ng chip (nút Program). Ph n m m này ch y tr c ti p không c n cài t và ch y t t nh t trên các Win98, 2000 và ME, v i WindowsXP ôi khi không tương thích m t s r t ít các trư ng h p.

26

cng bài gi ng – 8051 Starter Kit

ChươngIV: Hư ng d n th c hành m t s bài thí nghi m m u v i 8051 Starter Kit
Bài 1: Ghép n i v i LED ơn – Light Emitting Diode
Nguyên lý thi t k

LED ơn ư c n i tr c ti p v i c ng vào ra c a vi i u khi n AT89, s d ng i n tr h n dòng 470 Ohm. Vi i u khi n ưa ra m c logic 0 làm èn sang, m c logic 1 làm èn t t. Ví d : Th c hi n nh p nháy LED. // Khai bao cac file header #include <AT89X52.H> #include <Kit8051.h> // Khai bao cac ham void Delay(unsigned int n); void InitSystem(void); // Dinh nghia cac ham void Delay(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<100;j++); 27

cng bài gi ng – 8051 Starter Kit } void InitSystem(void) { LCD_E = 0; } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1) { P0 = ~P0; Delay(1000); } }

28

cng bài gi ng – 8051 Starter Kit

Bài 2: Ghép n i v i LED 7 thanh – 7 Segment LED
Nguyên lý thi t k

LED 7 thanh s d ng là lo i Anode chung. Các LED 7 thanh ư c n i chung chân d li u v i nhau và n i v i m t c ng vào ra 8 bit c a vi i u khi n. Vi c c p i n cho t ng LED ư c th c hi n b i các transistor, i u khi n b i các chân vào ra khác c a vi i u khi n AT89. Các LED ư c c p ngu n cho sáng các th i i m khác nhau, vi c quét các LED này ư c th c hi n liên t c, do hi n tư ng nh lưu võng m c mà con ngư i nhìn th y các LED hi n th m t cách liên t c. Ví d : Hi n th 4 s 1234 4 LED 7 thanh. // Khai bao cac file header #include <AT89X52.H> #include <Kit8051.h>

29

cng bài gi ng – 8051 Starter Kit // Khai bao cac bien toan cuc unsigned char code LED_code[] = {Number0, Number1, Number2, Number3, Number4, Number5, Number6, Number7, Number8, Number9}; // Khai bao cac ham void Delay(unsigned int n); void InitSystem(void); void Display(unsigned char digit1, unsigned char digit2, unsigned char digit3, unsigned char digit4);

// Dinh nghia cac ham void Delay(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<100;j++); } void Display(unsigned char digit1, unsigned char digit2, unsigned char digit3, unsigned char digit4) { // Hien thi so thu nhat LED = LED_code[digit1]; K1 = 0; Delay(1); K1 = 1;

30

cng bài gi ng – 8051 Starter Kit // Hien thi so thu hai LED = LED_code[digit2]; K2 = 0; Delay(1); K2 = 1; // Hien thi so thu ba LED = LED_code[digit3]; K3 = 0; Delay(1); K3 = 1;

// Hien thi so thu tu LED = LED_code[digit4]; K4 = 0; Delay(1); K4 = 1; } void InitSystem(void) { LCD_E = 0; } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1) { Delay(10); Display(1,2,3,4); } }

31

cng bài gi ng – 8051 Starter Kit

Bài 3: S d ng ng t ngoài c a vi i u khi n 8051 – External Interrupt
Nguyên lý thi t k

Ng t ngoài c a AT89 ư c kích ho t b i m t phím b m bên ngoài. Khi phím b m, m c lôgic 0 s ư c ưa vào chân ng t c a vi i u khi n, khi nh phím, m c lôgic tr l i m c cao. T C8 ư c m c nh m h n ch rung phím do cơ khí ch t o không hoàn toàn chính xác c a công t c. Ví d : Nh n tín hi u phím b m bên ngoài b ng ng t, th hi n b ng vi c thái LED ơn. // Khai bao cac file header #include <AT89X52.H> #include <Kit8051.h> // Khai bao cac bien toan cuc // Khai bao cac ham void InitSystem(void); // Dinh nghia cac ham void InitSystem(void) { // Cam LCD LCD_E = 0; // Chon ngat theo suon xuong IT1 = 1; // Cho phep ngat ngoai 1 EX1 = 1; EA = 1; } void ExternalInterrupt(void) interrupt IE1_VECTOR { 32 o tr ng

cng bài gi ng – 8051 Starter Kit // Dao trang thai cua cong P0 (trang thai cac LED) khi co ngat P0 = ~P0; } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1); }

Bài 4: Ghép n i v i ma tr n phím – Button Matrix
Nguyên lý thi t k

Phím b m ư c n i thành ma tr n 3 hàng x 3 c t, các hàng và c t ư c n i v i các chân c ng vào ra c a vi i u khi n AT89. Khi m t phím ư c b m, nó s n i m t hàng và m t c t tương ng. Thu t toán quét phím ư c s d ng là l n lư t tìm hàng và tìm c t (ho c ngư c l i). Khi tìm hàng, các hàng s ư c t làm u vào, các c t ư c t làm u ra m c th p. Sau ó ki m tra các hàng xem có hàng nào m c th p hay không (có phím nào b m gây ra n i v i c t hay không)? Sau khi xác nh ư c hàng s t các c t làm u vào, hàng v a tìm ư c làm u ra m c

33

cng bài gi ng – 8051 Starter Kit th p. Vi c ki m tra ư c ti n hành v i các c t. Sau khi xác s suy ra phím ư c b m. nh ư c hàng và c t

Ví d : Quét ma tr n phím và hi n th s th t phím ư c b m lên LED 7 thanh. // Khai bao cac file header #include <AT89X52.H> #include <Kit8051.h> // Khai bao cac bien toan cuc unsigned char code LED_code[] = {Number0, Number1, Number2, Number3, Number4, Number5, Number6, Number7, Number8, Number9}; unsigned char stt=0; // Khai bao cac ham void Delay(unsigned int n); void InitSystem(void); void ScanMatrix(void); void Display(unsigned char number);

// Dinh nghia cac ham void Delay(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<100;j++); } void Display(unsigned char number) { // Hien thi so thu tu phim bam ra LED cuoi cung LED = LED_code[number]; K4 = 0; 34

cng bài gi ng – 8051 Starter Kit Delay(1); K4 = 1; } void InitSystem(void) { // Cam LCD LCD_E = 0; // Cau hinh Timer0 o che do 16 bit TMOD = 0x01; // Cho phep ngat tran Timer 0 ET0 = 1; EA = 1; // Cho Timer 0 chay TR0 = 1; } void Timer0Interrupt(void) interrupt TF0_VECTOR { // Dung Timer 0 TR0 = 0; // Nap lai gia tri = 55536--> con 10000 clock nua la tran TH0 = (unsigned char)(55536>>8); TL0 = (unsigned char)(55536); // Tiep tuc cho chay Timer 0 TR0 = 1; Display(stt); } void ScanMatrix(void) { // Chuyen cac hang lam dau vao, cac cot lam dau ra muc thap ROW_1 = 1; ROW_2 = 1; ROW_3 = 1; COL_1 = 0; COL_2 = 0; COL_3 = 0; // Kiem tra xem co phim bam? if((!ROW_1)|(!ROW_2)|(!ROW_3)) { // Chong rung phim 35

cng bài gi ng – 8051 Starter Kit Delay(100); // Kiem tra lai // Neu la hang 1 co phim bam if(!ROW_1) { // Chuyen cac cot lam dau vao COL_1 = 1; COL_2 = 1; COL_3 = 1; // Hang 1 lam dau ra muc thap ROW_1 = 0; // Kiem tra cac cot de xac dinh phim if(!COL_1) stt = 1; else if (!COL_2) stt = 2; else if (!COL_3) stt = 3; } // Neu la hang 2 co phim bam if(!ROW_2) { // Chuyen cac cot lam dau vao COL_1 = 1; COL_2 = 1; COL_3 = 1; // Hang 2 lam dau ra muc thap ROW_2 = 0; // Kiem tra cac cot de xac dinh phim if(!COL_1) stt = 4; else if (!COL_2) stt = 5; else if (!COL_3) stt = 6; } // Neu la hang 3 co phim bam if(!ROW_3) { // Chuyen cac cot lam dau vao COL_1 = 1; COL_2 = 1; COL_3 = 1; // Hang 3 lam dau ra muc thap ROW_3 = 0; 36

cng bài gi ng – 8051 Starter Kit // Kiem tra cac cot de xac dinh phim if(!COL_1) stt = 7; else if (!COL_2) stt = 8; else if (!COL_3) stt = 9; } } } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1) { ScanMatrix(); } }

37

cng bài gi ng – 8051 Starter Kit

Bài 5: Ghép n i v i máy tính qua giao di n RS232 RS232 Communication
Nguyên lý thi t k

Giao th c truy n thông gi a c ng COM c a máy tính và c ng n i ti p UART c a vi i u khi n AT89 là tương thích. Tuy nhiên v m t i n h c thì có s khác bi t v m c lôgic gi a máy tính và vi i u khi n. Vi m ch MAX232CPE ư c s d ng t o ra s tương thích v m t i n h c, t ng chuy n i m c lôgic gi a vi i u khi n và máy tính. Ví d : Thi t k thi t b t ng truy n tr l i PC nh ng d li u nh n ư c. // Khai bao cac file header #include <AT89X52.H> #include <Kit8051.h>

38

cng bài gi ng – 8051 Starter Kit // Khai bao cac bien toan cuc // Khai bao cac ham void InitSystem(void); // Dinh nghia cac ham void InitSystem(void) { // Cam LCD LCD_E = 0; // Khoi tao cong noi tiep SCON = 0x50; // Khoi tao Timer1 dung de tao Baud Rate TMOD = 0x20; TH1 = 0xFD; TR1 = 1; // Cho phep ngat cong noi tiep ES = 1; EA = 1; } void SerialPortInterrupt(void) interrupt SIO_VECTOR { unsigned char temp; // Kiem tra xem ngat la do nhan duoc du lieu hay truyen xong du lieu? if(RI==1) { RI = 0; // Doc du lieu nhan duoc tu bo dem temp = SBUF; // Truyen tra lai may tinh SBUF = temp; } else { TI = 0; } } // Chuong trinh chinh 39

cng bài gi ng – 8051 Starter Kit void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1); }

Bài 6: Ghép n i v i LCD – Liquid Crystal Display
Nguyên lý thi t k

40

cng bài gi ng – 8051 Starter Kit LCD là thi t b hi n th chu n, ti t ki m năng lư ng và không òi h i ph i quét liên t c như LED 7 thanh. Các lo i LCD ký t (character LCD) u tuân theo m t t p l nh chung.

Các thao tác ghi

c ư c th c hi n theo bi u

th i gian sau:

41

cng bài gi ng – 8051 Starter Kit Ví d : Hi n th dòng ch “Truong CDSP HN” lên dòng th Starter Kit” lên dòng th hai c a LCD. // Khai bao cac file header #include <AT89X52.H> #include <Kit8051.h> // Khai bao cac bien toan cuc unsigned char code string1[] = "Truong CDSP HN"; unsigned char code string2[] = "8051 Starter Kit"; // Khai bao cac ham void InitSystem(void); void Delay(unsigned int n); void InitLCD(void); void WriteCommand(unsigned char command); void WriteCharacter(unsigned char character); void WriteLCD(unsigned char x); void SendString2LCD(unsigned char code *p); void DisplayText(void); // Dinh nghia cac ham void InitSystem(void) { // Cam LCD LCD_E = 0; // Sang den backlight LCD_BL = 0; // Tre de LCD tu khoi tao ben trong (it nhat 15ms) Delay(100); // Tat den backlight LCD_BL = 1; InitLCD(); } void Delay(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<100;j++); } 42 nh t, dòng ch “8051

cng bài gi ng – 8051 Starter Kit void InitLCD(void) { WriteCommand(0x30); WriteCommand(0x30); WriteCommand(0x30); // 8 bit, 2 lines, font 5x7 WriteCommand(0x38); // Display on, hide cursor WriteCommand(0x0C); // Xoa man hinh WriteCommand(0x01); } void DisplayText(void) { // Dich con tro den vi tri thu 2, dong thu nhat WriteCommand(0x81); SendString2LCD(string1); // Dich con tro den dau dong thu hai WriteCommand(0xC0); SendString2LCD(string2); } void WriteLCD(unsigned char x) { LCD_RW = 0; LCD_DATA = x; LCD_E = 1; LCD_E = 0; Delay(5); } void WriteCommand(unsigned char command) { LCD_RS = 0; WriteLCD(command); } void WriteCharacter(unsigned char character) { 43

cng bài gi ng – 8051 Starter Kit LCD_RS = 1; WriteLCD(character); } void SendString2LCD(unsigned char code *p) { unsigned char i=0; while(p[i]!=0) { WriteCharacter(p[i]); i++; Delay(200); } } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); DisplayText(); // Vong lap vo tan while(1); }

Bài 7: Ghép n i v i ADC – Analog to Digital Converter
Nguyên lý thi t k

44

cng bài gi ng – 8051 Starter Kit ADC0804 là m t trong nh ng IC cho phép chuy n i i n áp d ng tương t (analog) sang giá tr d ng s (digital), ư c ng d ng trong r t nhi u các thi t b o lư ng. u vào i n áp có th trong d i t 0 n +5V. Giá tr s u ra trong d i t 0 n 255. Các tín hi u D0-D7 dùng ưa d li u ã chuy n i xong t i vi i u khi n. Các tín hi u CS, RD, WR ( u tích c c m c th p) dùng ra l nh cho ADC b t u chuy n i ho c ưa d li u ã chuy n i ra. K t khi nh n ư c l nh yêu c u chuy n i t vi i u khi n, ADC s m t m t kho ng th i gian th c hi n nhi m v . Trong kho ng th i gian này tính hi u INTR s m c cao (báo b n). Khi quá trình chuy n i k t thúc, tín hi u này s t ng tr l i m c th p thông báo r ng ADC ã chuy n i xong và có th th c hi n l n chuy n i ti p theo. L p trình viên có th thăm dò tín hi u INTR bi t khi nào ADC b n, khi nào ADC s n sàng ho c ơn gi n ch c n i m t vài mili giây trư c khi c k t qu ho c ra l nh chuy n i ti p theo. Ví d : o i n áp (trong d i t 0 o ư c lên LCD. // Khai bao cac file header #include <AT89X52.H> #include <Kit8051.h> n +5V) ư c t o ra t chi t áp và hi n th giá tr

// Khai bao cac bien toan cuc unsigned char code string1[] = "8051 Starter Kit"; unsigned char code string2[] = "Dien ap = "; unsigned char voltage,digit1,digit2; // Khai bao cac ham void InitSystem(void); void Delay(unsigned int n); void DelayShort(void); void InitLCD(void); void WriteCommand(unsigned char command); void WriteCharacter(unsigned char character); void WriteLCD(unsigned char x); void SendString2LCD(unsigned char code *p); void DisplayText(void); void DisplayVoltage(void); void Convert(); void Calculate();

45

cng bài gi ng – 8051 Starter Kit // Dinh nghia cac ham void InitSystem(void) { // Cam LCD LCD_E = 0; // Sang den backlight LCD_BL = 0; // Tre de LCD tu khoi tao ben trong (it nhat 15ms) Delay(100); // Tat den backlight LCD_BL = 1; InitLCD(); } void Delay(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<100;j++); } void DelayShort(void) { unsigned char i; for(i=0;i<10;i++); } void InitLCD(void) { WriteCommand(0x30); WriteCommand(0x30); WriteCommand(0x30); // 8 bit, 2 lines, font 5x7 WriteCommand(0x38); // Display on, hide cursor WriteCommand(0x0C); // Xoa man hinh WriteCommand(0x01); } void DisplayText(void) 46

cng bài gi ng – 8051 Starter Kit { // Dich con tro den dau dong thu nhat WriteCommand(0x80); SendString2LCD(string1); // Dich con tro den dau dong thu hai WriteCommand(0xC1); SendString2LCD(string2); // Dich con tro den vi tri don vi do WriteCommand(0xCE); WriteCharacter('V'); } void WriteLCD(unsigned char x) { LCD_RW = 0; LCD_DATA = x; LCD_E = 1; LCD_E = 0; Delay(5); } void WriteCommand(unsigned char command) { LCD_RS = 0; WriteLCD(command); } void WriteCharacter(unsigned char character) { LCD_RS = 1; WriteLCD(character); } void SendString2LCD(unsigned char code *p) { unsigned char i=0; while(p[i]!=0) { WriteCharacter(p[i]); i++; Delay(50); } 47

cng bài gi ng – 8051 Starter Kit } void Convert(void) { ADC_CS = 0; DelayShort(); ADC_WR = 0; DelayShort(); ADC_WR = 1; DelayShort(); ADC_CS = 1; // Tre cho chuyen doi xong Delay(10); // Chuyen Port thanh cong vao de chuan bi doc du lieu ADC_DATA = 0xFF; ADC_CS = 0; DelayShort(); ADC_RD = 0; DelayShort(); // Doc du lieu vao voltage = ADC_DATA; ADC_RD = 1; DelayShort(); ADC_CS = 1; } void Calculate(void) { unsigned int temp; temp = (voltage*10); temp = temp/52; // tinh ra dien ap tu gia tri ADC dua ve // tach phan nguyen va phan thap phan digit1 = (unsigned char) (temp/10); digit2 = (unsigned char)(temp%10); // chuyen sang ma ASCII digit1 = digit1 + 0x30; digit2 = digit2 + 0x30; } void DisplayVoltage(void) 48

cng bài gi ng – 8051 Starter Kit { // Dua con tro den vi tri can hien thi WriteCommand(0xCB); WriteCharacter(digit1); WriteCharacter('.'); WriteCharacter(digit2); } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); DisplayText(); // Vong lap vo tan while(1) { Convert(); Calculate(); DisplayVoltage(); } }

Bài 8: Thi t k h giao ti p t xa b ng h ng ngo i Infrared Communication
Nguyên lý thi t k

49

cng bài gi ng – 8051 Starter Kit M ch phát ư c thi t k v i m t transistor công su t nh có th óng c t ngu n c p cho LED h ng ngo i t n s ~36KHz. ây là t n s ư c dùng trong các thi t b thu phát h ng ngo i ph bi n trong sinh ho t (TV, i u hòa nhi t , u ĩa CD,…)

M ch thu ư c thi t k v i m t thu h ng ngo i s n có trên th trư ng. M t thu này ư c thi t k v i b l c thông m t d i, ch cho phép các t n s x p x 36KHz i qua. Do lo i m t thu này c bi t nh y c m v i nhi u ngu n nuôi nên u vào ngu n nuôi cho m t ư c thi t k v i m t m ch l c RC thay vì n i tr c ti p lên ngu n c a m ch thí nghi m. Bình thư ng u ra c a m t thu m c cao, khi nh n ư c tín hi u h ng ngo i t n s ~36KHz truy n t i, u ra c a m t thu s l p t c xu ng m c lôgic th p (m c 0). Khi h t tín hi u h ng ngo i, u ra l i tr v m c logic cao (m c 1). Nh vào vi c o kho ng th i gian m c th p c a u ra, ngư i ta có th bi t ư c th i gian phát xung tương ương bên phát, t ó suy ra mã ư c truy n i. Trong ví d sau s s d ng tia h ng ngo i truy n i 3 lo i mã, phân bi t nhau b i th i gian phát i (2ms, 4ms và 6ms). Các ngư ng phân bi t các mã v i nhau và các mã v i nhi u là 1ms, 3ms, 5ms và 7ms. Mã th nh t kéo dài 2ms tương ương v i kho ng 80 xung phát i t n s ~36KHz. Mã này ư c phát i khi m ch bên phát nh n ư c tín hi u t m t trong ba phím b m c a hàng 1. Mã th hai kéo dài 4ms tương ương v i kho ng 160 xung phát i t n s ~36KHz. Mã này ư c phát i khi m ch bên phát nh n ư c tín hi u t m t trong ba phím b m c a hàng 2. Mã th ba kéo dài 6ms tương ương v i kho ng 240 xung phát i t n s ~36KHz. Mã này ư c phát i khi m ch bên phát nh n ư c tín hi u t m t trong ba phím b m c a hàng 3. Ví d : Thi t k h thu phát tín hi u h ng ngo i, th c hi n thu phát ba lo i mã và hi n th lên LCD lo i mã thu ư c. Code m u cho bên phát // Khai bao cac file header #include <AT89X52.H> 50

cng bài gi ng – 8051 Starter Kit #include <Kit8051.h>

// Khai bao cac bien toan cuc // Khai bao cac ham void Delay(unsigned int n); void Delay12us(void); void InitSystem(void); void ScanMatrix(void); void Transmit(unsigned char n);

// Dinh nghia cac ham void Delay(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<100;j++); } void Delay12us(void) { unsigned char i; i++; i++; i++; i++; i++; i++; } void InitSystem(void) { // Cam LCD LCD_E = 0; } void ScanMatrix(void) { // Chuyen cac hang lam dau vao, cac cot lam dau ra muc thap ROW_1 = 1; ROW_2 = 1; 51

cng bài gi ng – 8051 Starter Kit ROW_3 = 1; COL_1 = 0; COL_2 = 0; COL_3 = 0; // Kiem tra xem co phim bam? if((!ROW_1)|(!ROW_2)|(!ROW_3)) { // Chong rung phim Delay(100); // Kiem tra lai // Neu la hang 1 co phim bam if(!ROW_1) { Transmit(80); // Doi nha phim while(!ROW_1); } // Neu la hang 2 co phim bam if(!ROW_2) { Transmit(160); // Doi nha phim while(!ROW_2); } // Neu la hang 3 co phim bam if(!ROW_3) { Transmit(240); // Doi nha phim while(!ROW_3); } } } void Transmit(unsigned char n) { unsigned char i; for(i=0;i<n;i++) { IR_LED = 0; 52

cng bài gi ng – 8051 Starter Kit Delay12us(); IR_LED = 1; Delay12us(); } } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1) { ScanMatrix(); } } Code m u cho bên thu // Khai bao cac file header #include <AT89X52.H> #include <Kit8051.h> // Khai bao cac bien toan cuc unsigned char code string1[] = "8051 Starter Kit"; unsigned char code string2[] = "Ma nhan duoc = "; // Khai bao cac ham void InitSystem(void); void Delay(unsigned int n); void InitLCD(void); void WriteCommand(unsigned char command); void WriteCharacter(unsigned char character); void WriteLCD(unsigned char x); void SendString2LCD(unsigned char code *p); void DisplayText(void); // Dinh nghia cac ham void InitSystem(void) { // Cam LCD 53

cng bài gi ng – 8051 Starter Kit LCD_E = 0; // Tre de LCD tu khoi tao ben trong (it nhat 15ms) Delay(100); InitLCD(); // Khoi tao Timer0 o che do 16bit TMOD = 0x01; // Cau hinh ngat ngoai 0 theo suon xuong IT0 = 0; // Cho phep ngat ngoai 0 EX0 = 1; EA = 1; } void Delay(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<100;j++); } void InitLCD(void) { WriteCommand(0x30); WriteCommand(0x30); WriteCommand(0x30); // 8 bit, 2 lines, font 5x7 WriteCommand(0x38); // Display on, hide cursor WriteCommand(0x0C); // Xoa man hinh WriteCommand(0x01); } void DisplayText(void) { // Dich con tro den vi tri thu 2, dong thu nhat 54

cng bài gi ng – 8051 Starter Kit WriteCommand(0x80); SendString2LCD(string1); // Dich con tro den dau dong thu hai WriteCommand(0xC0); SendString2LCD(string2); } void WriteLCD(unsigned char x) { LCD_RW = 0; LCD_DATA = x; LCD_E = 1; LCD_E = 0; Delay(5); } void WriteCommand(unsigned char command) { LCD_RS = 0; WriteLCD(command); } void WriteCharacter(unsigned char character) { LCD_RS = 1; WriteLCD(character); } void SendString2LCD(unsigned char code *p) { unsigned char i=0; while(p[i]!=0) { WriteCharacter(p[i]); i++; Delay(100); } } void ExternalInterrupt0(void) interrupt IE0_VECTOR { unsigned char temp; // Xoa Timer 0 55

cng bài gi ng – 8051 Starter Kit TH0 = 0; TL0 = 0; // Cho Timer 0 chay TR0 = 1; // Doi cho den khi tin hieu nhan duoc ket thuc while(!P3_2); // Dung Timer 0 TR0 = 0; // So sanh gia tri cua Timer voi cac nguong de xac dinh ma nhan duoc temp = TH0; if((temp>THRESHOLD_1)&&(temp<THRESHOLD_2)) { // Dua con tro den vi tri mong muon WriteCommand(0xCF); // Hien thi ma nhan duoc WriteCharacter('1'); } else if((temp>THRESHOLD_2)&&(temp<THRESHOLD_3)) { // Dua con tro den vi tri mong muon WriteCommand(0xCF); // Hien thi ma nhan duoc WriteCharacter('2'); } else if((temp>THRESHOLD_3)&&(temp<THRESHOLD_4)) { // Dua con tro den vi tri mong muon WriteCommand(0xCF); // Hien thi ma nhan duoc WriteCharacter('3'); } } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); DisplayText(); // Vong lap vo tan 56

cng bài gi ng – 8051 Starter Kit while(1); }

File header cho toàn b các chương trình m u trên bao g m file “AT89X52.H” có s n c a trình biên d ch Keil. Ngoài ra còn có thêm m t file header khác tên là “Kit8051.h” do ngư i s d ng t t o ra nh m nh nghĩa các h ng s , các tên g i khác c a các tín hi u giao ti p, i u khi n. Chi ti t xin tham kh o trong ĩa CD kèm theo.

57

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->