Đề cương bài giảng 8051 Starter Kit

pdf 58 trang vanle 3040
Bạn đang xem 20 trang mẫu của tài liệu "Đề cương bài giảng 8051 Starter Kit", để 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:

  • pdfde_cuong_bai_giang_8051_starter_kit.pdf

Nội dung text: Đề cương bài giảng 8051 Starter Kit

  1. Đề cương bài giảng 8051 Starter Kit
  2. Đ c  ng bài gi ng – 8051 Starter Kit Ch ươ ng I: Gi ới thi ệu h ọ Vi điều khi ển 8051 Vi iu khi n 8051 là m t trong nh ng vi iu 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 gn 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 rng rãi nh t trong các lo i vi iu 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) ca hãng ATMEL. Cu trúc c a AT89 d ng s ơ kh i t ng quát CPU B nh B nh Vào/ra Vào/ra Ng t B nh ch ươ ng d li u song ni ti p th i / b trình song m P1 Timer0 P2 Timer1 P3 P4 1
  3. Đ c  ng bài gi ng – 8051 Starter Kit Cấu trúc bus Bus a ch c a h vi iu 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 ti a là 2 16 = 65536 a ch , tươ ng ươ ng 64K. Bus d li u c a h vi iu 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 iu 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 lnh. 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 in t ưc tích h p trên chip vi iu khi n. CPU có c u t o chính gm 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 hc 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 iu 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 in, 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 tng 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 Tên chip ROM EPROM Flash 1 8051 4 Kbyte x x 2 8052 8 Kbyte x x 3 8031 x x x 4 8032 x x x 5 87C51 x 4 Kbyte x 6 87C52 x 8 Kbyte x 7 AT89C51 / AT89S51 x x 4 Kbyte 8 AT89C52 / AT89S52 x x 8 Kbyte 2
  4. Đ c  ng 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 lnh ư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 bt ngu n, do m c in á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 0x0FFF 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, bng các h ng s ) 0x0030 Vector ng t th n Vector ng t th 0x0003 1 a ch reset 0x0000 Bộ nh ớ d ữ li ệu (Data Memory) Vi iu 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à mi 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 iu 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 ca chip. khi m t in, do b n ch t c a SRAM mà giá tr c a các bi n này c ng b mt theo. Khi có in 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
  5. Đ c  ng 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 tng 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 Tên chip Bộ nh ớ SRAM Bộ nh ớ EEPROM 1 AT89C51 128 byte 0 2 AT89C52 256 byte 0 3 AT89C2051 128 byte 0 4 AT89S51 128 byte 0 5 AT89S52 256 byte 0 6 AT89S8252 256 byte 2048 byte Tng quát v b nh c a 8051, ta có th th y m i chip 8051 g m có nh ng b nh sau: Ph n không gian Ph n không gian a ch cho b nh a ch cho b nh 64 ch ươ ng trình còn d li u (hoàn toàn Kbyte tr ng, b ng 64 tr ng r ng 64K Kbyte tr i l ưng byte, dành cho b b nh onchip nh d li u ghép thêm bên ngoài nu có) B nh ch ươ ng trình onchip 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 ca 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
  6. Đ c  ng 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 Vy 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 rng, 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 iu 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 vi 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 i 1 ơ 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
  7. Đ c  ng bài gi ng – 8051 Starter Kit Hình nh minh h a b nh d li u 8052 có 0x7F thêm vùng RAM cao Vùng RAM ây là vùng các (a ch th ưng (không cng t thanh ghi ch c ánh a ch bit nng c bi t SFR 0x80 n ưc) 0xFF) (Special Function Register) có c 0x30 nh ưng truy nh p 8051 và 8052. Truy nh p Vùng RAM 16 0x2F ph i theo (ghi/c) vùng này byte có th ánh ch a là truy nh p vào a ch bit t ch gián các a ch t 0x80 0x00 n 0x7F 0x20 ti p phân bi t n 0xFF nh ưng 4 b ng thanh ghi 0x1F vi vùng ph i theo ch mi b ng có 8 SFR a ch tr c ti p thanh ghi R0 7 0x00 6
  8. Đ c  ng bài gi ng – 8051 Starter Kit Bản đồ các thanh ghi ch ức n ăng đặc bi ệt SFR 7
  9. Đ c  ng 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 cng 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 cng 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 ( in á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 ( in á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 ó bng 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 mc 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). Mi c ng có c u trúc g m m t latch (chính là các bit c a thanh ghi c ng), mch 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
  10. Đ c  ng bài gi ng – 8051 Starter Kit Sơ c a m ch c a m t chân c ng: Cng P0 không có in tr treo cao (pullup resistor) bên trong, m ch lái t o mc 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 cng vào/ra thông th ưng, ta ph i thêm in tr pullup bên ngoài. Giá tr in tr pullup bên ngoài th ưng t 4K7 n 10K. Các c ng P1, P2 và P3 u có in tr pullup bên trong, do ó có th dùng vi ch c n ng c ng vào/ra thông th ưng mà không c n có thêm in tr pullup bên ngoài. Th c ch t, in tr pullup bên trong là các FET, không ph i in 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 mc 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
  11. Đ c  ng 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 mt l ưng dòng in I OH = 60 micro Ampe thì m c in áp u ra V OH s b kéo st 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 vi 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) Cng 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 iu khin 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 cng 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à iu khi n c ng n i ti p là thanh ghi SCON (ánh a ch bit). SM0 SM1 SM2 REN TB8 RB8 TI RI 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 iu khi n ho c gi a 1 vi iu khi n và 1 máy tính, giá tr c a bit SM2 ưc t b ng 0. Khi truy n thông theo ki u m ng a vi x lý (multiprocessor communication), SM2 ưc t b ng 1. Hai bit SM0 và SM1 th c 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 p (00,01,10 và 11) ng v i 4 ch ho t ng mô t trong b ng sau. 10
  12. Đ c  ng bài gi ng – 8051 Starter Kit SM0 SM1 Ch ế độ Khung d ữ li ệu Baud rate 0 0 0 - ng b 8 bit SBUF Fosc/12 0 1 1 - D b 8 bit SBUF Thay i ưc 1 0 2 - D b 8bit SBUF + RB8/TB8 Fosc/32 ho c Fosc/64 1 1 3 - D b 8bit SBUF + RB8/TB8 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 lp 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à cui khung truy n. Trong ch này, t c truy n ch có th ch n ưc 1 trong 2 mc: 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 ưc nh n qua c ng n i ti p khi bit này = 1. Bit TB8 là bit d li u th 9 trong tr ưng h p truyn 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
  13. Đ c  ng 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. - Bt 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 Mô t ả Cờ Thanh ghi Vector ng ắt ng ắt ch ứa c ờ 1 INT0 Ng t ngoài 0 khi có tín IE0 TCON 0x0003 hi u tích c c theo ki u ã ch n chân P3.2 2 Timer0 Ng t tràn timer0 khi TF0 TCON 0x000B giá tr timer0 tràn t giá tr max v giá tr min 3 INT1 Ng t ngoài 1 khi có tín IE1 TCON 0x0013 hi u tích c c theo ki u ã ch n chân P3.3 4 Timer1 Ng t tràn timer1 khi TF1 TCON 0x001B giá tr timer1 tràn t giá tr max v giá tr min 5 Serial Port Ng t c ng n i ti p khi TI, RI SCON 0x0023 vi iu khi n nh n ho c truy n xong m t byte b ng c ng n i ti p Vi 8052, ngoài các ng t trên còn có thêm ng t c a timer2 (do vi iu khi n này có thêm timer2 trong s các ngo i vi onchip). Mi 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
  14. Đ c  ng 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 bng 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, iu ó 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 ca 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ì vy 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 iu khi n nh n xong ho c truy n xong m t byte d li u qua c ng ni 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, nu 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 lnh 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
  15. Đ c  ng 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 ca 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 im nhìn t phía vi iu 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. Vi 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 ó mi x lý ng t ngoài 1. Vi 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, chuyn 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 cng 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 lp trình t. Lp 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
  16. Đ c  ng bài gi ng – 8051 Starter Kit Mt iu 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ì: - Nu hai ng t cùng x y ra, ng t timer0 s th ng th và ưc ph c v tr ưc. - Nu 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. - Nu 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 cng 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 in áp th p, g n 0V) ho c sưn xu ng (s chuy n m c in á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 iu 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 hp 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 na 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. Bộ đị nh th ời/B ộ đế m (Timer/Counter) 8051 có 2 timer tên là timer0 và timer1. Các timer này u là timer 16bit, giá tr m max do ó b ng 2 16 = 65536 ( m t 0 n 65535). 15
  17. Đ c  ng 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 mc 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
  18. Đ c  ng 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 nng 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 iu 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 vy 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 m s tràn. C ng t TFx v n ưc t ng t = 1 nh ư trong tr ưng h p tràn 16bit. im 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
  19. Đ c  ng 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 im 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 li 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
  20. Đ c  ng 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ã lnh 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 vi 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 lnh. 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 lnh 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 bng 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 cu 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. Mi lo i ngôn ng có ưu và nh ưc im riêng. Vi h p ng ( i di n cho ngôn ng b c th p): - u im: 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 iu khi n u mi n phí i v i ng ưi s d ng. - Nh c im: khó kh n trong vi c ti p cn v i t p l nh (tuy d ng mã g i nh nh ưng v n ch ưa th c s g n vi ngôn ng con ng ưi), các c u trúc gi i thu t (if else, for , switch case ) hu 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 . Vi ngôn ng C ( i di n cho ngôn ng b c cao): - u im: 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
  21. Đ c  ng bài gi ng – 8051 Starter Kit - Nh c im: 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ý ca CPU vì th c ng dài h ơn, các trình biên d ch (Compiler) tùy theo cp 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 iu 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. Mt khác các trình biên dch (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, ci ti n các tính nng 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 ( in hình là ngôn ng C) là s l a ch n c a hu h t nh ng ng ưi tác nghi p trên l nh v c k thu t vi x lý. 20
  22. Đ c  ng 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 iu khi n 8051, Keil C là mt 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 dn s d ng trình biên d ch này trong vi c thi t k ph n m m cho h vi iu khi n 8051. Cài đặt Keil C ch y ưc trên các H iu 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
  23. Đ c  ng bài gi ng – 8051 Starter Kit Ch n ti p lo i vi iu 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
  24. Đ c  ng 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 dng mong mu n (*.c n u là file mã ngu n, ho c *.h n u là file header). Mt 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
  25. Đ c  ng 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 iu khi n 8051 nào ( ã l a ch n trong khi t o Project mi) 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 iu 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 ; 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 (void) interrupt do l p trình viên tùy ý 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
  26. Đ c  ng 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
  27. Đ c  ng bài gi ng – 8051 Starter Kit Cu i cùng chn 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
  28. Đ c  ng 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 iu khi n AT89, s d ng in tr h n dòng 470 Ohm. Vi iu 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 #include // 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
  29. Đ c  ng 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
  30. Đ c  ng 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 iu khi n. Vi c c p in cho t ng LED ưc th c hi n b i các transistor, iu khi n b i các chân vào ra khác c a vi iu khi n AT89. Các LED ưc c p ngu n cho sáng các th i im 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 #include 29
  31. Đ c  ng 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
  32. Đ c  ng 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
  33. Đ c  ng 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 bm, m c lôgic 0 s ưc ư a vào chân ng t c a vi iu 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 o tr ng thái LED ơ n. // Khai bao cac file header #include #include // 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
  34. Đ c  ng 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 trn 3 hàng x 3 c t, các hàng và c t ưc n i vi các chân c ng vào ra c a vi iu khi n AT89. Khi m t phím ưc b m, nó s n i mt 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
  35. Đ c  ng 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 nh ưc hàng và c t s suy ra phím ưc b m. Ví d : Quét ma tr n phím và hi n th s th t phím ưc bm lên LED 7 thanh. // Khai bao cac file header #include #include // 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
  36. Đ c  ng 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
  37. Đ c  ng 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
  38. Đ c  ng 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
  39. Đ c  ng 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 iu khi n AT89 là t ươ ng thích. Tuy nhiên v m t in h c thì có s khác bi t v mc lôgic gi a máy tính và vi iu khi n. Vi m ch MAX232CPE ưc s d ng to ra s t ươ ng thích v m t in h c, t ng chuy n i m c lôgic gi a vi iu 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 #include 38
  40. Đ c  ng 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
  41. Đ c  ng 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
  42. Đ c  ng 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 tc nh ư LED 7 thanh. Các lo i LCD ký t (character LCD) u tuân theo m t t p lnh chung. Các thao tác ghi c ưc th c hi n theo bi u th i gian sau: 41
  43. Đ c  ng bài gi ng – 8051 Starter Kit Ví d : Hi n th dòng ch “Truong CDSP HN” lên dòng th nh t, dòng ch “8051 Starter Kit” lên dòng th hai c a LCD. // Khai bao cac file header #include #include // 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
  44. Đ c  ng 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
  45. Đ c  ng 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
  46. Đ c  ng bài gi ng – 8051 Starter Kit ADC0804 là m t trong nh ng IC cho phép chuy n i in á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 in á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 iu 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 lnh yêu c u chuy n i t vi iu 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 in áp (trong d i t 0 n +5V) ưc t o ra t chi t áp và hi n th giá tr o ưc lên LCD. // Khai bao cac file header #include #include // 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
  47. Đ c  ng 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
  48. Đ c  ng 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
  49. Đ c  ng 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
  50. Đ c  ng 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
  51. Đ c  ng bài gi ng – 8051 Starter Kit Mch phát ưc thi t k vi 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, iu hòa nhi t , u a CD, ) Mch 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 vi 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 bm 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 50
  52. Đ c  ng bài gi ng – 8051 Starter Kit #include // 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
  53. Đ c  ng 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
  54. Đ c  ng 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 #include // 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
  55. Đ c  ng 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
  56. Đ c  ng 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
  57. Đ c  ng 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)&&(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
  58. Đ c  ng 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ó sn 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, iu khi n. Chi ti t xin tham kh o trong a CD kèm theo. 57