intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 - CHƯƠNG 3

Chia sẻ: đặng Xuân Vinh | Ngày: | Loại File: PDF | Số trang:12

702
lượt xem
411
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'giáo trình lập trình c cho họ vi điều khiển 8051 - chương 3', kỹ thuật - công nghệ, điện - điện tử phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 - CHƯƠNG 3

  1. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 CHƯƠNG 3: KH I T O CHƯƠNG TRÌNH TIMER VÀ CHƯƠNG TRÌNH NG T I. KH I T O CHƯƠNG TRÌNH TIMER. 1. CÁC THANH GHI I U KHI N TIMER. Thanh ghi TMOD Các Timer thư ng ư c kh i t o 1 l n u chương trình thi t l p mode ho t ng ph c v các ng d ng i u khi n liên quan n nh th i hay m xung ngo i. Tùy thu c vào yêu c u c th mà ta i u khi n cho Timer b t u m, ng ng hay kh i ng m l i t u. Thanh ghi TMOD là thanh ghi u tiên c n ph i kh i t o thi t l p tr ng thái ho t ng cho các Timer. 8 7 6 5 4 3 2 1 Gate C/ T M1 M0 Gate C/ T M1 M0 0 0 0 0 0 0 0 1 Cho Timer 1 Cho Timer 0 Chú thích Bit Chú thích Gate - Khi t Bit Gate = 1 thì Timer0 ch làm vi c khi các c ng vào c a l nh ng t –INT( Bit P3.3 hay P3.2) s không có tác d ng - Khi t Bit Gate = 1 thì Timer1 ch làm vi c khi INT=1 - Khi t m c áp cao thì các Timer dùng như b m xung (Counter) C/ T vào t bên ngoài: V i Timer1 xung m cho vào Bit P3.5 V i Timer0 xung m cho vào Bit P3.4 - Khi t m c áp th p thì các Timer dùng như m xung c a m ch dao ng, lúc ó nó có th xem như m t ng h t ch y (Timer) Biên so n: Nguy n Bá Thu n Page 1 of 12
  2. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 M1 Bit ch n mode M0 Bit ch n mode Hai bit M0 và M1 t o ra 4 tr ng thái tương ng v 4 ki u làm vi c khác nhau c a Timer 0 hay Timer1 M1 M0 Mode( Ki u) Ch c năng 0 0 0 Ch nh th i 13 bit (tương thích v i h 8048) 0 1 1 Ch Timer hay Counter 16 bit 1 0 2 Ch Timer hay Counter 8 bit, tư n p l i Timer 0 ư c tách thành 2 Timer 8 bit -Timer 8 bit TL0 ư c i u khi n b i các bit c a mode Timer0 1 1 3 -Timer 8 bit TH0 ư c i u khi n b i các bit c a mode Timer1 Timer 1 không ho t ng mode 3 Thanh ghi THx và TLx Các giá tr ùm ư c c a Timer/Counter thì ư c lưuu trong thanh ghi THx và TLx. N u ta không thi t l p giá tr b t u m cho các thanh ghi TLx và THx là 0000h thì Timer s b t u m t giá tr 0000H n giá tr FFFFH. C báo tràn TFx N u ta thi t l p giá tr b t u m cho các thanh ghi TLx và THx là khác 0000h thì Timer s b t u m t giá tr ta gán n giá tr FFFFH. Nhưng khi chuy n t giá tr FFFFh n 0000h thì s sinh ra tràn làm cho bit TFx = 1 r i ti p t c m t giá tr 0000h. cho Tiner luôn b t u m t giá tr ta gán thì ta có th l p trình ch sau m i l n tràn ta s cho xóa c TFx và gán l i giá tr cho TLx/THx Timer luôn b t u m t giá tr kh i gán lên. Thanh ghi i u khi n TRx Thanh ghi này có tác d ng cho Timer ư c hay không ư c phép m xung N u TRx = 1 thì Timer ư c phép m xung Biên so n: Nguy n Bá Thu n Page 2 of 12
  3. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 N u TRx = 0 thì timer không ư c phép m xung 2. CÁCH KH I T O TIMER. void delay_1() { TMOD=0x01; //kh i t o timer 0 ch 16 bit TH0=0xC350; //N p giá tr c n m cho timer 0 TL0=0xC350; TR0=1; // cho phép timer 0 ho t ng while(!TF0); // ki m tra c tràn TF0 m c0 TF0=0; //xóa c tràn TR0=0; //không cho phép timer 0 ho t ng. } Qua chương trình con Delay_1 trên ta nh n th y timer 0 ho t ng m t 0 n giá tr C350H (50000 s th p phân) mà m t l nh di n ra 1 miro giây (th nh anh giao ng ch n 12Mhz) v y ta ư c timer 50ms. Như v y làm timer có s trì hoãn nhi u hơn n a ta dùng cách như sau: void delay_1() { unsigned int t; //t o bi n t theo ki u unsigned int for(t=0;t
  4. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 void delay_1(s) //kh i t o thêm bi n s có th thay i ư c t i delay_1 { unsigned int f,t; //kh i t o hai bi n f và t theo ki u unsigned int for(f=0;f
  5. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 TR0=0; } } main() //chương trình chính { while(1) //vòng l p vô t n { led=0; //cho led m c0 delay_1(5); //delay 5 giây led=1; //cho led m c1 delay_1(2); //delay 2 giây } } 3. BÀI T P NG D NG. - Hãy vi t chương trình con delay 50 miro giây. - Hãy vi t chương trình con delay 20ms. - Hãy vi t chương trình con delay 2h. - Hãy vi t chương trình con delay 1day. II. KH I T O CHƯƠNG TRÌNH NG T. 1. CÁC THANH GHI I U KHI N NG T T ch c ng t c a 8051: - 8051 có 5 ngu n ng t: 2 ng t bên ngoài (INT0 và INT1), 2 ng t Timer, 1 ng t Port n i ti p. 2 ng t bên ngoài có th ư c l p trình kích ng t b ng c nh xu ng ho c b ng m c th p. - Vi c tranh ch p gi a các ngu n ng t ư c gi i quy t b ng m ch ưu tiên ng t bên trong 8051. Có 2 thanh ghi i u khi n ng t: Thanh ghi cho phép ng t IE và thanh ghi ưu tiên ng t IP. Thanh ghi cho phép ng t IE (Interrupt Enable) : Có a ch Byte là 0A8H Bit Symbol Bit Address Description ( 1 : cho phép; 0 : không cho phép) C m t t c các ng t, n u EA = 0. IE.7 EA AFH N u EA = 1, m i ngu n ng t ư c cho phép ho c c m b ng set ho c clear các bit tương ng IE.6 - AEH Không dùng Biên so n: Nguy n Bá Thu n Page 5 of 12
  6. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 IE.5 - ADH Cho phép ng t b nh th i 2 (TIMER 2) IE.4 ES ACH Cho phép ng t Port n i ti p IE.3 ET1 ABH Cho phép ng t TIMER1 IE.2 EX1 AAH Cho phép ng t ngoài 1 IE.1 ET0 A8H Cho phép ng t TIMER0 IE.0 EX0 A9H Cho phép ng t ngoài 0 Các thanh ghi cho phép ng t IP (Interrupt Priority): Có a ch Byte là 0B8H Bit Symbol Bit Address Description (1 = M c cao, 0 = M c th p) IP.7 - - Không dùng IP.6 - - Không dùng IP.5 PT2 0BDH Ưu tiên cho phép ng t b nh th i 2 IP.4 PS 0BCH Ưu tiên cho phép ng t Port n i ti p IP.3 PT1 0BBH Ưu tiên cho phép ng t TIMER 1 IP.2 PX1 0BAH Ưu tiên cho phép ng t ngoài 1 IP.1 PT0 0B9H Ưu tiên cho phép ng t TIMER 0 IP.0 PX0 0B8H Ưu tiên cho phép ng t ngoài 0 N u 2 ng t cùng m c ưu tiên x y ra ng th i thì th t ưu tiên như sau: PS, PT1, PX1, PX0. Ng t Timer: Ng t Timer x y ra khi c TFx ư c xét (b m tràn). C TFx ư c clear b ng b ng ph n m m ho c khi vi i u khi n th c hi n chương trình con ph c v ng t Timer Ng t ngoài: Ng t ngoài x y ra khi có m c th p ho c c nh âm trên chân INT0 (bit P3.2) ho c - INT1 (bit P3.3) c a 8051 + Khi chân INT0 nhân ư c tín hi u i u khi n ( v i m c áp th p ), nó s d ng ngay chương trình ang ch y và nh y t i a ch 0003H c a b nh EEPROM và cho thi hành chương trình ã có a ch này. + Khi chân INT1 nhân ư c tín hi u i u khi n ( v i m c áp th p ), nó s d ng ngay chương trình ang ch y và nh y t i a ch 0013H c a b nh ø EEPROM và cho thi hành chương trình ã có a ch này. - Kích b ng c nh hay kích b ng m c ư c l a ch n b ng hai bit IT0 ho c IT1 trong thanh ghi SCON . Biên so n: Nguy n Bá Thu n Page 6 of 12
  7. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 + N u IT1=0 ng t ngoài 1 ư c kích kh i m c b i vi c phát hi n m c áp th p t i chân INT1 + N u IT1=1 ng t ngoài 1 ư c kích kh i c nh b i vi c phát hi n m c áp th p t i chân INT1 - Có hai bit IE0 và IE1 trong TCON ch ra tr ng thái có hay không có ng t ngoài (phát hi n c nh xu ng t i chân INT0 hay INT1 ) . Ng t dùng RESET Có th xem tác d ng Reset (cho bit t i chân s 9 lên 1) cũng là m t ng t t bi t. Khi tín hi u Reset xu t hi n, nó s d ng ngay chương trình chính và nh y v a ch g c 0000h c a b nh EEPROM và cho ch y chương trình b t u b ng a ch này. 2. CÁCH KH I T O CHƯƠNG TRÌNH NG T. a. Kh i t o ng t timer Void Tênhàm(void) interrupt ngu n ng t using băng thanhghi { // chương trình ph c v ng t ơ ây } Chú ý v hàm ng t: + Hàm ng t không ư c phép tr l i giá tr hay truy n bi n vào hàm. + Tên hàm b t kì. + interrupt là t khóa phân bi t hàm ng t v i hàm thư ng. + Ngu n ng t t 0 t i 5 theo b ng vector ng t. + Băng thanh ghi trên ram ch n t 0 n 3. T y theo b n vi t hàm ng t cho ngu n nào b n ch n ngu n ng t t b ng sau: Interrupt Flag Vector Address System Reset RST 0000H External 0 IE 0 0003H Timer 0 TF 0 000BH External 1 IE 1 0013H Timer 1 TF 1 001BH Serial Port R1 or T1 0023H Timer 2 TF2 or EXF2 002BH Riêng ng t Reset không tính, b t u m t 0 và t ng t ngoài 0. Ví d : tôi c n vi t hàm ng t cho b nh th i timer 1 hàm ng t s là. Biên so n: Nguy n Bá Thu n Page 7 of 12
  8. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 void timer1_isr(void) interrupt 3 using 0 { // l nh c n th c hi n. } - V using 0: Có 4 băng thanh ghi b n có th ch n cho chương trình ph c v ng t, cái này cũng không quan tr ng. Trong hàm ng t các b n có th b i t using 0, khi ó vi i u khi n s t s p x p là dùng băng thanh ghi nào. - Hàm ng t khác hàm bình thư ng ch nào. Hàm bình thư ng ví d hàm delay, c khi b n g i nó thì nó s ư c th c hi n, có nghĩa là nó có v trí c nh trong ti n trình hàm main, có nghĩa là b n bi t nó x y ra khi nào. Còn hàm ng t thì không có ti n trình c nh, i u ki n ng t có th x y ra b t kì lúc nào trong ti n trình hàm main và c khi nào có i u ki n ng t thì hàm ng t s ư cg it ng. Bt u chương trình có ng t: -Trư c khi b t u cho ch y chương trình ta ph i cho phép ng t toàn c c ư c x y ra b ng cách gán EA(Enable All interrupt) b ng 1, thì ng t m i x y ra. -Thư ng thì ngay vào u chương trình(hàm main) trư c vòng while(1) chúng ta t công vi c kh i t o, c u hình và cho phép ki m tra ng t. Ví d v i b nh th i timer ta gán các giá tr phù h p cho thanh ghi TCON( Timer CONtrol). TC O N i u khi n b inh th i C tràn c a b nh th i 1. C này ư c set b i ph n TCON.7 TF1 c ng khi có tràn, ư c xoá b i ph n m m, ho c b i ph n c ng khi b vi x lý tr n trình ph c v ng t Bit i u khi n ho t ng c a b nh th i 1. Bit này TCON.6 TR1 ư c set ho c xoá b i ph n m m i u kh i n b nh th i ho t ng hay ngưng TCON.5 TF0 C t rà n c a b nh th i 0 TCON.4 TR0 Bit i u khi n ho t ng c a b nh t h i 0 C ng t bên ngoài 1 (kích kh i c nh). C này ư c TCON.3 IE1 trên chân INT1, ư c xoá b i ph n m m. C ng t bên ngoài 1 (kích kh i c nh ho c m c). TCON.2 IT1 này ư c set ho c xoá b i ph n m m khi x y ra c nh TCON.1 IE0 C ng t bên ngoài 0 (kích kh i c nh) TCON.0 IT0 C ng t bên ngoài 0 ( kích kh i c nh ho c m c) Biên so n: Nguy n Bá Thu n Page 8 of 12
  9. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 Ví d ch y b nh th i timer 1 ta dùng câu l nh: TR1=0; TR1(Timer Run 1). Còn b n nào thích khó thì:TCON=0xxx; Còn các lo i ng t khác quá trình tương t . Sau khi kh i t o xong và cho ng t timer 1 ch y thì i u gì x y ra? Khi b t u cho timer 1 ch y thì b m c a timer s m dao ng c a th ch anh, c 12 dao ng c a th ch anh(1 chu kì máy), b m c a timer 1 TL1(Timer Low1) s tăng 1,có th nói timer 1 m s chu kì máy. i v i ch 8 bít. TL1 là 1 thanh ghi 8 bít, là b mc ab nh th i rõ r i. Nó m ư c t 0, n 255. N u nó m n 256 thì b m tràn, TL1 quay vòng l i b ng 0, và c ng t TF1(Timer Flag 1) t ng ư c gán lên 1(b ng ph n c ng c a vi i u khi n) như 1 công t c t ng b t, và ng t x y ra. Còn v i ch 16 bít, b mc ab nh th i còn 1 thanh ghi 8 bít n a là TH1(Timer high 1), n u c u hình cho 16 bit thì khi TL1 tràn nó s m sang TH1(TH1 s tăng 1). timer 1 ho t ng ch Như v y ta có th m: 216 chu kì máy( 2 thanh ghi 8+8=16 bít). Chú ý là khi b m tràn ng t s x y ra. N u ta c n m 256 chu kì máy thì khi kh i t o ta cho TL1=0; , còn n u không mu n m 256 chu kì mày mà ta ch c n m 100 thôi ng t ã x y ra r i thì ta f i làm như sau: 256-100 = 156; và khi kh i t o ta gán : TL1=155; vì m t 155 n 255 là 100 l n thì ng t x y ra. Chương trình kh i t o timer 0. void khoitaotimer0(void) // Hàm kh i t o { EA=0; // Cam ngat toan cuc TMOD=0x02; // Timer 0 che do 2 8 bit auto reload TH0=0x9B; // Gia tri nap lai 155 doi ra so hex TL0=0x9B; // Gia tri khoi tao 155 doi ra so hex ET0=1; // Cho phep ngat timer 0 EA=1; // Cho phep ngat toan cuc TR0=1; // Chay timer 0 bat dau dem so chu ki may } Ví d ng d ng. ng d ng ng t timer t o chương trình phát xung nh p nháy t i chân p0^0. #include sbit led=P0^0; void timer0()interrupt 1 { led=~led; } void khoitaotimer0() { Biên so n: Nguy n Bá Thu n Page 9 of 12
  10. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 EA=0; TMOD=0X02; TH0=0x9B; TL0=0x9B; ET0=1; EA=1; TR0=1; } main() { khoitaotimer0(); } Chương trình ã ư c l p trình và mô ph ng Biên so n: Nguy n Bá Thu n Page 10 of 12
  11. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 b. Kh i t o ng t ngoài. Chương trình kh i t o ng t ngoài 0. Void ngatngoai0(void) //kh i t o hàm ng t ngoài 0 { EA=1; //cho phép ng t toàn c c. EX0=1; //cho phép ng t ngoài 0 IT0=1; //cho phép tác ng c nh t i chân P3^2 } Ví d ng d ng ng d ng ng t ngoài i u khi n o port 0 khi có tác ng ng t ngoài 0 t i chân P3^0. #include void ngatngoai0()interrupt 0 { P0=~P0; } void khoitaongatngoai0() { EA=1; EX0=1; IT0=1; } main() { khoitaongatngoai0(); } Biên so n: Nguy n Bá Thu n Page 11 of 12
  12. I H C L C H NG GIÁO TRÌNH L P TRÌNH C CHO H VI I U KHI N 8051 Chương trình ã ư c l p trình và mô ph ng 3. BÀI T P NG D NG. - Hãy kh i t o ng t timer 1. - Hãy l p trình m t ng d ng khi dùng ng t timer. - Hãy kh i t o ng t ngoài 1. - Hãy l p trình m t ng d ng khi dùng ng t ngoài 1. Biên so n: Nguy n Bá Thu n Page 12 of 12
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2