Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 65 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
65
Dung lượng
25,02 MB
Nội dung
Chương VI Điếu KHIấN 8051 2.1 TỔNG QUAN VỂ HỌ VI ĐIỂU KHIỂN 8051 2.1.1 Tóm tắt vể lịch sử 8051 Năm 1981, hãng In te l giới thiệu v i điều khiển 8051 Bộ vi điều khiển có 128 byte R A M , kbyte R O M , hai định ihời, m ột cổng nối tiếp bốn cổng vào/ra song song (độ rộng bit) tất đạt m ột chip 8051 xử lý b it, có nghĩa ỉà CPU ỉàm việc với b it liệu m ột thời điểm Dữ hệii lớn b it chia thành liệu b it để xử lý 8051 trở nên phổ biến sau Intel cho phép nhà san xuất khác sản xuất bán dạng biến Ihể 8051 Điều dẫn đến đời nhiều phiên 8051 với tốc dộ khác dung lượng ROM chip khác nhau, tất lệnh lương th^ch với 8051 ban đầu Như vậy, ta viết chương trình cho phiên 8051 chạy với phiên khác khống phi thuộc vào hãng sản xuất B Ả N G C Á C Đ Ặ C T ÍN H C Ủ A 8051 Đ Ầ U T IÊ N Đ ặc tính Số iượng ROM kbyte RAM 128 byte Bộ định thời Chân vào/ra 32 Cổng nối tiếp Nguồn ngắt 2.1.2 Các thành viên khác họ 8051 Có hai vi điều khiển thành viên khác họ 8051 h 8052 8031 Bộ vi đ iề u k h iể n 8052 Bộ v i điểu khiển 8052 thành viên họ 8051, 8052 có tất đẫc tính chuẩn 8051 ngồi có thêm 128 byte R a M định thời (bảng 2.2) 18 B Ả N G 2 S O S Á N H C Á C Đ Ặ C TÍNH CỦA C ÁC T H À N H V IÊ N H Ọ 8051 Đặc tinh 8051 ^52 8031 ROM chip kbyte k b y te khơng có RAM 128 byte 256 byte 128 byte Bộ định thởi Chân vào/ra 32 32 31 Cổng nối tiếp Nguồn ngắt * Như thấy lừ bảng 2.2 8052 nì(< rơng cua Hih Do chương trìnli viêi clio 8051 chạy 8052 nhirnti diều ngược lại không Bộ vi diều M ọl íliàiili vicn khác nửa 80.^ chip 803ỉ Chip Ihường coi 8031 khơng có ROM ỉrcn chip Để sử dụng chip ta phải bổ sung R O M cho nó, ROM ngồi phải chứa chương trình mà 8031 SC nạp thực Với 8051, chương Iiình dược chứa ROM trẽn chip bị giới hạn kbyte, ROM ngồi gắn vào 8031 có thổ lớn đến 64 kbyte K hi sử dung ROM ngồi ta lại có hai cổng dể sử dụng cho mục đích vào/ra dể giải vấn đề ta lĩiở rộng cổng vào/ra cho 8031 cách sử dung vi mạch PPĨ 8255 2.1.3 Các phỉèn 8051 Mặc dù 8051 thành viên phổ biến nhủi họ 8051 nhưiig gặp tihiều pliiên với nlùmg lêii gọi khác \uỳ thuộc vào kiểu nliớ chưiĩiig trình, cỏng nghé chế líio, tần sơ ỉàm việc V í dụ phiên tón ciìa 8051 với nhớ v - FROM đưạc ký hiệu 875ỉ Phiên Flash ROM bán bcVi nhiểu liẫiig kỉiác nỉiau, chảng hạn Atmel với tên gọi AT89C51 phiên ban NV - RAM 8051 Dalas Semiconductor cung cấp gọi ỉà DS5fX)0 Ngồi có phiên OTP (lập trình lần) dược sản xuất tò i nhiều hãng I Bơ ví điề u k h iể n 8751 Chip 8751 có 4kbyte nhớ IJV - ÍÌPROM trẽn chip Đổ sử dụug chip cần có đốỉ PROM xoá u v - EFROM để xoá nội dung nhớ v - EPROM bẽn 8751 trước ta lập trình lại Do R O M chip dối với 8751 ỉà u v - EPROM nôn cẩn phải 20 phúi để xố 8751 trước có ihể lạp trình irở lại V ì điểu dẫn đến nhiéu nhà sán xuất giới ihiộu phiên 19 Flash R O M u v - R A M Niioai c o n CÓ n hieu fliie n ban với lốc clộ khác c ú a S751 lừ I i l i ĩ c u hãỉiíi kỉiac 2, B v i d i ê u k h i ê n A T 5Ỉ t Ađ me l C o r p o r í t t i o n AT8951 phiên 8051 có R O M irciì c h i p dạiig nhớ ĩ-lash Phiẽn btUi Iv iư n g dối V Ớ I [ihĩnig phái tricu n h a n h bọ nhớ Flash có ihể dược x ố t r o n g vài g iâv Dùnig A1'89C.^1 dể phát rnột hệ thống dưa vi tỉiều k h iên vêu c ầ u inột b ộ cỉỏì R O M h6 trợ nhớ Flash, không y c u cáu xo R O M ĩlãnsỊ A tm cl dã C Ỉ I O đời pliiên A T 89 C51 cổ thê’ đ c l â p irìn h qua c ổ n g tru yền t h ỏ n g COM ináy lính IB M l’C B Ả N G C Á C P H IÊ N BẢN C Ủ A 8051 DO H à N G A T M E L C U N G C Ấ P (F L A S H R O M ) Vcc Đóng vò 5V 40 chân, hàng 32 3V 40 chân, hàng 64 byte 15 3V 20 chân, hàng kbyte b y te 15 3V 20 chân, hàng AT89C52 kbyte b y te 32 5V 40 chân, hàng AT89LV52 kbyte b y te 32 3V 40 chân, hàng Chân HO \ Timer i Ngất ROM RAM AT89C51 kbyte b y te 32 AT89LV51 kbyte b y te AT89C1Ũ51 kbyte AT89C2051 Kỷ hiệu ỉ AT89C2051 vi diéu khiển bií ché lụo Iheo cơng nghệ CMOS, có thé hoạt dộng đưực dải điện áp lừ 2,7 V đến 6V Bộ vi cìiéu khiổn đóng gói DIP 20 chân, nliỏ gọn so với AT89S52 vản có đủ lài nguyên Ihông dung như: - Bộ nhớ: kbyte Flasli có ihể ghi/xố KXX) lần; ỉ 28 X 8-bit RAM; - Có thể hoạt động sơ' Ihạcli anh lôn tới 24M Hz; - l chân xuất nhập; - Tim er/Counter 16 bit; - nguồn ngát; - PORT nối tiếp: - l so sánh (Analog Comparator) AT89C4051 có sơ íiồ chùn cac lài nguyên giỏng AT89C2051 ngoại trừ nhớ ROM có dung lượng lớn hưn (4kbytc) AT89S52 mội bơ vi điều khiển ihỏng dụng, giá rẻ có nhiều chức aăng hay, đặc biWOG Ij PSEN “1P2.7 (A15) □ P2.6 (A14) I] P2.5 (A13) P2.4 (A12) DP2.3 (A11) □ P2.2 (AlO) □ P2.1 (A9) P2.0 (A8) e) 89C52/89S52 kiểu DIP 40 chân; ' V C Ọ O Ị v - Ọ 42 : ì P1.7 (SCK) 41 P1.6(M IS0) 40 J P1.5(M 0SI) 39 D P1-4 yHXÚ) P3.0 (ĨXD) P3.1 L (INTO) P Ĩ : (INT1)P3.3 (TO) P3 (Ĩ1)P3,5;:_ (WR) P ' 38 37 36 35 34 J P1.3 ! P1.2 P1.1 (T2EX) P (T2) 12 13 14 15 31 30 29 28 ĩlP O I □ P0.2 D P0.3 □ P0 (A10) P2.2C 16 (A11)P2.3 í: 17 27 26 25 24 □ P0.5 (AD5) □ P0.6 (AD6) □ P0.7(AD7) (RD) P3.7 z XTAL2: 10 X ĨA L 11 GND ' PWRGND r (A8) P2.0 (A9) P2.1 C □ VDD 33 PWRVDD 32 J PO.O (ADO) (A12) P f 18 (A13) P2.5C 19 (A14)P2.6C: 20 (A15) P L 21 □ ẼAA/PP 23 ALE/PRÕỒ 22 □ PSEN f) 89C52/89S52 kiểu DIP 42 chân; lễ llli nil 't n t>Ị — ọ o ọ — cvm 0 « - r \ Ị C Ọ , Ì.Ì U I J-1J1 - 11 ! H w (MOSI)PI 5C (MíSO)PI 6L (SCK)PI 7C RSTC (RXD) P3.0 C NCC (ĨXD ) P3.1 l (IWTO) P3.2 r (líĩTt)P3.3C (TO) P3 Ơ I) PXS{ n :• *n n ri 38 37 36 35 34 33 32 31 30 í K i S a « R t S ” T T m T LJ i.J t_J l J J u *_J u u (D r>> ôu O O * ôN n ^ f g t n n a 10 11 12 13 14 15 16 II (AD1) (AD2) (AD3) (AD4) □ PO (A04) J P0.5 (AD5) :i f>n (AD6) 3P0.7(AD7) ỄẦA/PP 3NC J A L E ^Ì KXÌ J f»§ỀN JP2.7(A15) J P2.6(A14) :i P2 (A l3 ) (M o s i)P i.s r % 33 ■ P0.4 {A04) 32 P0.5 Ì a o s ) 3t ^ p o e ÌA o e i (MlSOỉ P1 L (SCk Ì p í 7C nSTL (RXĐ)P3 l S NCÍ ÍTX0)P3.1 C (IMTO) P3 ĩ L e 30 29 ?e 27 26 25 24 23 (íN ĩìíP a s r s fTO) P3 L to (T í »P 35[- 11 'N C IALE/PAỖ Ố PS£N ^ P (A15) r P íA l4 ) :P ? (A ) T T T r-T T rT T T T T T T rn rrT " III i i sĩ ĩs ị? ịr ị? < < g) 89C52/89S52 kiểu PLCC; : P0.7 (A07) _ẼA/VPP h) 89C52/89S52 kiểu PQ FP/TQ FP Hinh 2.3 Sơ chân của89C51/89S51 89C52/89S52 I P o rt (PO.O - P0.7) Port gồm chân, chức x u ấ t nhập, Port bus đa hợp liệu địa (A D -A D ), chức sử dụng 8051 giao tiếp với thiết bị ngồi có kiến trúc Bus vi mạch nhớ, mạch PIO 4VI0K ƯDA 25 A d dress tow/ Contro» Read Latch Q p o X (1) InlernHl Bus W rite 10 Laich Hinh 2.4 cáu trúc chàn Port P o r t I ( P - P ) Dỏi với 8051, chức nhâl Porl chức nàng xuâì nihãp, Port khác, Porl có ihc xì nhập Ihco bií íhco byle vcc A lternate O utput Function R ead La!ch Internal Bus W rite to Latch A lternate Input Function Hinh 2.5 Càu trúc chân Port Port 3, Riêng dòng 89Sxx, ba chân P1.5, 1^1.6, P1.7 dược dìiiig dểinạp ROM Iheo chuán ISI*; hai chân Pl P1.1 dược dùng cho T im e r P o rt Pori chức bytc cao cùa bus dịa chi cổng vào/ra pori sứ dụng nhớ pori còmlà 26 VIDK *í i r~ J u d e < r e g h > char x; v o i d ma i n ( v o i d ) { SCON = 0x52; / / P o r L nô'L t i ế p c h ế đ ộ / / REN T ỉ = / / T i m e r mode / / T ố c độ b a u d l 0 TNOD ^ x ; TU ^ TLl ^ -3 TM = ; w K le ( !T Ĩ); TI-O ; SFUF x; //ch ò TI = //x o Tĩ / / t r u y ề n b y te liệu 1, biển X \ 'í iit 2: Nhận I h\te qua Port tiếp i rc i rc c' hu r vo d 1ude < s t d i o h i ude< r e g b h X; fĩid.i n ( v o i d ) { SCON 0x5 2; / / P o r t n ố i t i ế p c h ể độ //REN ^ T ĩ = / / T i m e r mode / / T ố c độ b a u d l 0 TKOD x 0; Til - TLl ™ -3 ; Tĩl = ; wỀÌle ( ! R I ) ; / / c h RI = / / x o RI / / n h ậ n b y t e l i ệ u chứa t r o n g b i ế n X ũ ; X SBUF 1, ; } Trcng hai ví dụ hệ sơ chia tốc độ baud mặc định 32 dokhơig có câu lệnh đặt SMOD = (khi SMOD mặc định 0) Trong chương trình có nhiều thao tác truyền/nhận qua cỗìg rối liếp ĩhì đoạn chương trình iruyén hoảc nhận nên viết dạìg him, ví dự: vo d t r u y e n {char X) ( while ( ! T ) ; ' f í ^ 0; SBJF = x ; } chìi nhan ( v o i d ) { chir C; wh i l e { ! R I ) ; 'i' I 0; C ' SBUF; r e " u r n C; 7i Trong thư viện cua Iiìiih dịch c cũiis có hàm tưưng đirơng vớ^i hàin truyén hàm nhâii irêii, chíing puichar í) „g e tkcy () V í dụ : T ru x ê n ì ĩ h ậ t ì C / IK I C Ơ I I Ỉ Ỉ >u'u t i ê p v i !(')'(■ d ộ h i t d k h c ỉ ì l ì ũ i i t # in clu d e< st d o V> #include c h a r X, M 11 Ị ; in t i; void m a in (v o id ) { / / P o r t nối / / R E N = TI SCON = x 2; tiếp = c h ế độ 1, TMOD = x 0; / / T i m e r iT.ode THl = T L l = -Ó; / / T ố c độ baucì l 0 T R l = 1; T2C0N = x C ; / * T i m e r c h ẽ độ t ự n p J,.di, C - / T = ; ^ TCLK = ( D ù n g Ti rr er t o t ố c độ b a u d c h o đường t r u y ề n ) RCLK = ( Dù n g T i m e r t o t ố c độ baud cho đường n h ậ n } * / RCAP2H = ; / / T ố c độ baud l 9600 RC AP L = - ; TR2 = ; / / G i 10 ký t ự b ấ t đ ầ u t ' A ' X = 0x41; f o r (i= l;i< = ■+ i ) ; { p u t c h a r ( X ) + +x ; } /'/Nhận 10 ký tự lưu vào mả n g M f o r ( i = l ; i < = 10, 4- + i ) M[i ] = _ g e tk e y (); } , Ví dụ 4: Truyén lliâng qua cổng nỏi Ịtếp có kiểm tra chẵn lẻ # i n c l u d e < s t d i h> # i n c l u d e < r e g h> char b it x; i ; void m ain(void ) { = OxD2; / / P o r t nối / / REM ^ TI TMOD = 0x2 0; / / T i m e r mode / / T ố c đ ộ ba u d l 0 SCON THl = T L l TRl = 1; -6 ; //Truyền A = X; I = P; TB8 = i ; p u t c h a r ( x ); } 72 tiếp : c h ế độ 3, có kàĩi t heo b i t k i ể n t r a / / D ưa b v t e cần t r uyển vào t h a n h chứa / / C ậ p n h ậ t bi t: k i ể m t r a c h ẵ n / / Đ a v o TB8 đ ể t r u y ề n / / T r u y ề n byt e l i ệ u chứa t r o n g X ơiẵn Ví dit 5: Truyền thông đa xử lý Chế độ chế độ cổng nối tiếp cung cấp cho vi điổu khiển khả truyền thông đa xử lý (hình 2.39) Hình 2.39 Truyền thòng da xử lý M ột vi điéu khiển chủ truyền liệu tới nhiều vi điều khiển tớ cách gửi byte địa (các byte có RB8 = 1) mang mă vi điều khiển tớ trước gửi byte liệu (các byle có RB8 = 0) Các vi điều khiển lớ lập trình với bit SM2 = (xem ghi SCON) để phân biệt đâu byte địa chỉ, đâu byte liệu Sau nhận byte địa (nghĩa vi điểu khiển tớ iương ứng v i điều khiển chủ đánh địa tới), vi điéu khiển tớ xố bit SM2 để nhận byte liệu bình thường Dưới ví dụ cụ thể: Chương trình viết cho vi điểu khiển chủ: # i n c l u d e o t d i o h> # i n c l u d e < r e g h> c h a r x; b it i ; void m ain(void) { SCON = x F ; Port nô' i t i ế p c h ế đ ộ , t r u y ề n đ a xử lý SM2 = REN = T I = ĩ* / TMOD = x ; / / T i m e r ĩ mo d e THI = T L l = - ; //T ố c độ b a u d l 800 T R I = 1; 1; / * g i đ i đ ị a c h ỉ củ a v i đ i ề u k h i ể n t t h ứ n h â ' t * / TB8 = ; , p u t c h a r {0x01) ; / / m ã v i đ i ề u k h i ê n thứ n h ấ t / * g i c h o v i đ i ề u k h i ể n t t h ứ n h a ’t 10 b y t e l i ệ u * / X = 0x41; i { SCON = x F //P o r t ; noi tiế p chế độ / / S M = REN = T I = / / T i m e r mode / / T ố c đ ộ b a u d l 80 TMOD = x ; THl = T L l = - TRl = ; //Chò nhận b y t e //C h ỉ nhận địa , ' minH X = _ g e t k e y {) w h ile ( x SM2 = = x ; ) ; y = byte liệ u _ g e t k e y () ; w h ile (RB = b U Ơ)) ; ) ^ Chương trình viết cho vi điều khiển tớ thứ hai: # i n c l u d e < s t d l o ứi> ít-ì # in c lu d e < r e g c h a r ìh'> lh> x , z ; b i t i ; v o id m a in (v o id ) { SCON ^ O xF TM OD = x T H l = T L l T R l = ; ; = / / P o r t nối t i ế p chế độ //SM2 REN = T I ^ / / T i m e i ' I mode / / T ố c đ ộ ba u d l ả 0 - 3, ; //C h nhận byte //C hỉ nhận dịa X = _ g e t k e y ( ) w h ile ( x x ; SM2 = y = _ g e t k e y ( ) ; w h ile } 74 = ) ; (RB = ) byte đữ liệu m ìn h i 2.6 NGẮT VÀ XỬ LÝ NGĂT 2.6.1 Khát niệm cẩn thiết phải ngắt CPU Trong thực lê' người la rấl muốn tận dụng cúa CPU để làm thèm nhiều công viêc khác nữa, có cẩn trao đổi liệ i Ihì yêu cầu CPU tạm dừngcông việc để phục vụ việc irio đối liệu Sau hoàn thành việc irao đối dữliêu CPU lai phíi quay để làm liếp công việc bị gián đoạn Cách làin vtôc iheo kiểu gọi ngo! CPU (gián đoạn hoạt dộng CPU ị M ội hệ thống sử dụng nịịắl đáp ứng rấl nhanh yẽu cầu ifcO đổi dừ liêu vản có Ihc làm cơng việc khác 2.6.2 Tổ chức ngắt AT89S52 AĨ89S52 có nguồn ngắt: - Ngắl đến lừ chân #INTO - '^gắt đến từ chân #IN T1 -N g t T im er - Ngắ! T im er - Mgắi T im er - Ngắt Port nối tiếp nguồn ngắt dược xoá Reset vàđượcđật riêng phần mém JỞi biĩ Ihanh ghi cho phép ngấi (lE ), ghi ưu tiên ngắt (IP) * ỉ hanh ghi cho phép ngắt IE (Interrupt Enable): EA ET2 - ES ET1 EX1 11 EXO Bt Ký hiệu Địa bit Mô tả (1; cho phép; 0; cấm) IE7 EA AFH Cho phép hoăc cấm toàn IE6 - AEH Khòng định nghĩa IE5 ET5/2 ADH Cho phép ngắt từ Timer (8052) IE4 ES ACH Cho phép ngắt Port nối tiếp IE3 ET1 ABH Cho phép ngắt tử Timer 1E2 EX1 AAH Cho phép ngắt 1, tE1 ETO A9H Cho phép ngắt từ Timer ÍEO EXO A8H Cho phép ngắt ngồi 0, 75 TFO 1E1 TF1 TI RI o TF2 o EXF2 Hình 2.40 Các nguồn ngắt AT89S52 * Thanh ghi ưu tiên ngắt IP: M ỗ i nguồn ngắt lập trình riêng để đặt vào hai mức ưu tiên qua ghi chức đặc biêt địa b it IP (Interrupt p rio rity: ưu tiên ngắt) địa B8H - - PT2 PS PT1 PX1 PTO Đit Ký hiệu IP.7 - Không định nghĩa IP.6 - Không định nghĩa IP.5 PT2 BDH ưu tiên cho ngắt từ Timer IP.4 PS BCH ưu tiên cho ngắt Port nối tiếp IP.3 PT1 BBH ưu tiên cho ngắt từ Timer IP.2 PX1 BAH ưu tiên cho ngắt IP.1 PTO B9H ưu tiên cho ngắt từ Timer IP.O PXO B8H ưu tiên cho ngắt ngồi 0, 76 Địa bit MƠ tả (1: mức cao; 0: mức thấp) PXO Các vector ngắt: K h i m ộl ngắl chấp nhận, giá trị nạp vào PC gọi V ector ngắt Nó địa bắt đầu chương trình phục vụ ngắt ISR (ISR viết tắt Interrupt Service Routine - chương trình phục vụ ngắt) tương ứng với nguồn tạo ngắt Các vector ngắt cho liệl kê sau: Ngắt Cờ Địa vector Số hiệu Reset hệ thống RST OOOOH Bén lEO 0003H Timer TFO OOOBH Bén IE1 0013H Timer TF1 001BH Port nối tiếp TI hoãc RI Timer TX2 hoăc EXF2 0023H 002BH K h i đến ngắt, cờ gây ngắt tự động bị xóa phần cứng, ngoại trừ R I T I phải xoá phần mềm ' 2.6.3 Các th iết kê' sử dụng ngắt N g ắ t c c T im e r Các ngắt T im er xảy kiện tràn Tim er, cờ tràn TFx đặt K h i ISR đáp ứng, cờ TFx tự động xố phần mềm Khn mẫu chương trình có sử dụng ngắt viết ngơn ngữ lập trình C sau: ttinclude ^in clud e < std io h > //Chương t r ì n h V o id m ain (void) { //K hỏi tạo ghi cho phép n g ấ t } / / C c chương t r ì n h ph ụ c vụ v o id ngatTO ÍđỐ i s ố ) i n t e r r u p t X ưu t i ề n ngắt ^ ngắt (ISR) { //C ác câu lệnh ISR } Trong đó: ngatTO tên ISR (tuỳ chọn), ứng với vector ngắt ^ X số hiệu ngắt tương 77 V í d ụ Ị : T o x u n g k h c n h a u t r ê n c c c h â n F ỉ P #include S include s b i t x u n g l = Pl ' ' ; s b i t x u n g = P2' ^0; //Chưong t r ì n h v o id main (v o id ) { TMOD = x ; / / T i m e r mode ĩ ; T i m e r n o d e ^ THl = T L l = - 0 ; / / x u n g c ó c h u k ỳ 0 ụs T R I - 1; ^ /*Khỏi t o c c t h a n h ghi c h o p h é p ngắt ưu L i ê n n g Á t * / l E = x A; / / c h o phép n g ắ t T i m e r v Ti me' r IP = 0; / / m ứ c ưu t i ê n b ằ n g n h a u TFO = ; / / b u ộ c n g ắ t T i m e r wh i 1e { ) ; } void ngatTO (void / / Các chương L r ì n h phục vụ n gá t interrupt (lirJR) { TRO = ; THO = - 0 0 / ; TLO = - 0 0 % ; xung2 = - x u n g ; TRO = ; //xung có chu kỳ 20000 |as } void ngatTl (void) in te rru p t { xungl =: - x u n g l ; V '/ d ụ : T o x u n g k h c n h a u t r ê n c c c h â n P ì 0, P ỉ v ù P I #include sin c lu d e < s f r T2M0D = 0xC9 s b i t x u n g l = P1''0 s b i t xung2 = Pl'^l s b i t x u n g = Pl ' ^2 //Chương void main trin h (void) { T2MOD = x ; / / D C E N = , T i m e r dem ti§'n RCAP2H = - 0 / / / x u n g C O c h u ky 0 0 f^s RCAP2L = - 0 ũ % TR2 = ; TMOD = x ; / / T i m e r mode 1; T i m e r mode- THI = T L l = - 0 ; / / x u n g C O c h u ky 0 (.is T R I = 1; / * K h ỏ i t o c c t h a n h g h i c h o p h é p n g ắ t v ưu t i ê n n g t : * / l E = OxAA; / * c h o p h é p n g ắ t d o T i m e r T i m e r v T i m e r * / IP = 0; / / m ứ c ưu t i ê n b ằ n g n h a u TFO = ; / / b u ộ c n g ắ t T i m e r w h ile {1); } / / C c chương t r ì n h phục vụ n g t 78 (ÍSR) void ngatTO (void) in terru p t { TRO = ; THO = —1 0 0 / ; TLO = - 0 0 % ; xung2 = ~ x u n g ; T R o ' = 1; //xung CÓ chu kỳ 20000 ^IS } void n g a tT l (void) { xungl = -xu n g l; in terru p t ■ in terru p t } void ngatT2 (void) { xung3 = ~xung3; ) N g ắ t cổng nối tiếp Ngát đo cổng nối tiếp xảy cờ ngắt phát (TI) cờ ngắt thu (RI) đật lên Ngắt phát xảy đêm truyển rỗng, ngắt thu xảy ký tự nhận xong đợi SBIJF để đọc (bộ đệm triiyền đầy) Các ngắt cổng nối tiếp khác với ngắt Timer Cờ gây ngắt Port nối tiếp khơng bị xóa phần cứng CPU chuyển lới ISR có hai nguồn ngắt cổng nối tiếp TI RI, nguồn ngắt phải xác định ISR cò tạo ngắt xóa phần mềm Vi dụ I : Viết chương trình dùng ngắt gửi 24 ký tự từ A đến z bảng mã ASCII cổng nối tiếp vi điều khiển ^include < s td ỉo ,h > # include char x; //Chương void main trin h (void) { TMOD = x ; THI = TLl = - ; / / T i m e r mode / / t ố c độ b au d l 1200 //UART8 độ TRI = 1; SCON = x ; X = 0x41 ; IE = 0x90 ; w h ile d ) ; b it, chế 1,T I / / c h o phép n g ắ t p o r t nối = tiếp } void ngatnt(void) interrupt { if(x < = ' Z' ) ( SBUF = x; ++x; TI = 0; ) } 79 N g ắ t n g o i Các ngắt xảy có mức ihấp hoăc cạnh xuống trơn chân /INTO hoậc /IN T l cua vi điều khiển Các cờ tạo ngắl bit lEO lE l TCON Khi quyén điều khiển dã chuyển đến ISR, cờ lạo ngất xóa ngắl lích cực cạnh xuống, ngắt lích cực theo mức, nguồn u cầu ngất bên ngồi điéu khién mức cờ thay cho phần cứng Cách thức tích cực ngắl đật bit ỈTx irong ghi SCON, IT x = 0, ngắt lích cực mức thấp, ITx = 1, ngắl lích cực cạnh xuống (sườn âm) Nếu ngát ngồi tác động canh xuống nguồn bên phải giữ chân /IN T x mức cao tối thiểu chu kỳ máy giữ mức thấp irong chu kỳ máy để đảm bảo cho CPU phát cạnh xuống Nêu ngắl ngồi lác động Iheo mức ihì nguồn bên ngồi phải giữ lín hiệu u cáu lác dộng chân /IN T x (ở mức thấp) ngắt đáp ứng không lác động ISR hồn tất, khơng ngắt khác lặp lại Ví dụ Ị : Viết chương irình điểu khiên LE D vàng nhấp nháy liên tục, L E D đỏ nhấp nháy 10 lần m ỗi nhấn Contacl +5V 12 P3 2/INTO Contact P1 swt P1 P1 ữ- o o 13 P3 3/INT1 19 >X1 18 p- ►X2 RST 40 vcc 89S52 Hỉnh 2.41 Vi dụ 80 # ^in-l u d e < s t : d i o h > ^ -i n c l u d e < r e g b ir-it h> i ; s b i t v a n g =: P l ^ l ; sblL void d o - P I "De d e l a y { i n t t) { _ _ f ÍO r ( i - ; i < = t ; + + i } //Chương V'oid main trin h (void) { //ch o //LE D I E x ; I TC - ; w h : e ( 1) phép vảng ngắt nhấp n g o i INTO nháy l i ê n tụ c { varg = 1; d e a y ( 0 0 ) varg ; 0; d o a y (10000) ; ) vo.d ngatO (void) interrup t { t o : { i- ;i < = 10 ; f + i ) { dio - ; die.ay ( 0 0 ) ; di o = ; c'ie ay ( 0 0 ) ; } )■ + 5V RI 12 P /IN T O dỏ Contact >1 P1 SW vàng P1 xanh P1 R2 Contact • SW 89S52 Hỉnh 2.42 Ví du 11V)ĐK ut>^ 81 \ ’i dụ 2: Viết chương irình điểu khiển LE D vàng nhấp nháy liơn lục, L ÍỈD đỏ nhấp nháy 10 lần nhấn Conlact 1, LE D xanh nhấp nháy lần nhấn Contact «include < s td io h > » In c lu d e i nL i ; s b iL xanh = Pl"'2; s b i t v a n g = P1 ; s b i t d o = Pl ^' O; v o i d d e l a y ( int L ) i i o r ( i = l ; i < = t ; + + i ) ; ) //Chương void main trìn h (void) { / / c h o p h é p n g ắ t n g o i I NT O, I N T I / / L E D vàng nhâV nháy l i ê n t ụ c I E - 0x8 5; ITO = I T l =1; w h i l e (1) v a n g = ; d e l a y {1 0 0 ) ; v a n g ^ ; d e l a y ( 0 0 ) ; i void ngatO (void) in terru p t { i Ol' { i = ; i