Điều khiển timer interrupt

18 588 0
Điều khiển timer  interrupt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

Bài 5: Timer -Interrupt Trang V-1 BÀI 5: LẬP TRÌNH ðIỀU KHIỂN TIMER - INTERRUPT    I. Mục ñích bài thí nghiệm Bài thực hành nhằm giúp học viên: - Nắm nguyên tắc hoạt ñộng của Timer - Interrupt. - Hiểu và viết ñược chương trình ứng dụng Timer – Interrupt vào trong ñiều khiển quá trình. II. Cơ sở lý thuyết 1. Timer trong AT89C51 Vi ñiều khiển 89C51 có hai thanh ghi timer/counter 16 bit. Các thanh ghi này có thể hoạt ñộng ở một trong hai trạng thái timer hoặc counter. Mỗi thanh ghi gồm 2 thanh ghi 8 bit ghép lại: Cấu trúc của bộ Timer/ Counter trong 89C51 như hình sau. Bài 5: Timer -Interrupt Trang V-2 Hoạt ñộng của bộ Timer/Counter ñược ñiều khiển bởi hai thanh ghi TCON và TMOD Thanh ghi TCON (timer control) : Là thanh ghi 8 bit, có th ể truy xuất byte hoặc bit dùng ñể ñiều khiển hoạt ñộng của Timer. TF1: báo trạng thái tràn cho bộ Timer/Counter1 TR1: ñiều khiển cấp xung cho bộ Timer/Counter1 TF0: báo trạng thái tràn cho bộ Timer/Counter0 TR0: ñiều khiển cấp xung cho bộ Timer/Counter0 IE1, IT1, IE0, IT0: sử dụng cho ngắt ngoài 1 và ngắt ngoài 0 (không dùng cho Timer). Thanh ghi TMOD (timer mode) : Là thanh ghi 8 bit, chỉ có thể truy xuất byte dùng ñể xác ñịnh chế ñộ hoạt ñộng của Timer. GATE, C/ T : ñiều khiển trạng thái hoạt ñộng cho Timer/ M1, M0: chọn chế ñộ hoạt ñộng cho Timer/Counter M1 M0 CH Ế ðỘ MÔ TẢ 0 0 0 Timer/Counter 13 bit 0 1 1 Timer/Counter 16 bit 1 0 2 Timer/Counter 8 bit, auto reload 1 1 3 Timer/Counter 8 bit • Chế ñộ 0 (13 bit): Bài 5: Timer -Interrupt Trang V-3 Thanh ghi THx và TLx kết hợp tạo thành bộ Timer/Counter 13 bit, khi tràn 13 bit thì cờ TFx sẽ ñặt lên logic 1 • Chế ñộ 1 (16 bit): • Chế ñộ 2 (8 bit auto reload) TLx ñược nạp giá trị ban ñầu từ THx và bắt ñầu ñếm từ giá trị này khi có xung ở ngõ vào, khi tràn thì TFx sẽ ñặt lên logic 1 ñồng thời kích hoạt bộ khóa ñể nạp giá trị trong THx vào TLx. • Chế ñộ 3 Trong chế ñộ này, TH1 và TL1 không ñược sử dụng thay vào ñó là TH0 và TL0 hoạt ñộng như 2 bộ Timer 8 bit (TL0) và Timer/Counter 8 bit (TL0). Tuy nhiên, tín hiệu mở xung cho TH0 không phải là TR0 mà là TR1. 2. Interrupt trong AT98C51 Thanh ghi IE (Interrupt Enable Register) Bài 5: Timer -Interrupt Trang V-4 Thanh ghi IE dùng ñể cho phép hay cấm các ngắt hoạt ñộng. Mặc ñịnh khi khởi ñộng chương trình thì tất cả các ngắt ñều bị cấm. Chức năng các bit trong thanh ghi IE cho trong bảng sau: EA = 0: cấm tất cả các ngắt = 1: cho phép ngắt tuỳ theo trạng thái các bit ñiều khiển tương ứng ES = 0: cấm ngắt tại port nối tiếp = 1: cho phép ngắt tại port nối tiếp ET1 = 0: cấm ngắt tại Timer 1 = 1: cho phép ngắt tại Timer 1 EX1 = 0: cấm ngắt tại ngắt ngoài 1 ( INT1: chân P3.3) = 1: cho phép ngắt tại ngắt ngoài 1 ET0 = 0: cấm ngắt tại Timer 0 = 1: cho phép ngắt tại Timer 0 EX0 = 0: cấm ngắt tại ngắt ngoài 1 ( INT0 : chân P3.2) = 1: cho phép ngắt tại ngắt ngoài 1 ðể cho phép ngắt tại Timer 0, ta phải có: EA = 1 và ET0 = 1. Nội dung của thanh ghi IE khi ñó là: Chương trình có thể thực hiện như sau: SETB EA SETB ET0 Hay có thể viết: MOV IE,#82h Bài 5: Timer -Interrupt Trang V-5 Danh sách các ngắt trong AT89C51 Bài 5: Timer -Interrupt Trang V-6 Cấu trúc chương trình sử dụng ngắt ORG 0000H JMP MAIN ORG 0003H JMP INT0_ISR ORG 000BH JMP TIMER0_ISR ORG 0013H JMP INT1_ISR ORG 001BH JMP TIMER1_ISR ORG 0023H JMP SERIAL_ISR MAIN: ……… ……… INT0_ISR: ……… RETI Bài 5: Timer -Interrupt Trang V-7 TIMER0_ISR: ……… RETI INT1_ISR: ……… RETI TIMER1_ISR: ……… RETI SERIAL_ISR: ……… RETI END Lưu ý rằng nếu không sử dụng ngắt nào thì không cần phải khai báo ISR cho ngắt ñó. Chương trình sử dụng ngắt bao gồm 2 phần: phần chương trình chính và phần xử lý ngắt. Một ñoạn chương trình ví dụ sử dụng ngắt ngoài 0 như sau: ORG 0000h ; ðịa chỉ bắt ñầu chương trình JMP MAIN ORG 0003h ; ðịa chỉ chương trình phục vụ ngắt cho INT0 JMP INT0_ISR MAIN: ; khai báo sử dụng ngắt SETB EA SETB EX0 ; Có thể thay 2 lệnh này bằng lệnh MOV IE,#81h ; chương trình chính INT0_ISR: ; chương trình phục vụ ngắt RETI END III. Phần thực hành. 1. ðiều khiển Timer Bài 1: Viết chương trình tạo sóng vuông tần số tại chân P1.0 dùng Timer 0 chế ñộ 1 16 bit (tần số thạch anh là fOSC = 12MHz). a. Chương trình mẫu gợi ý Bài 5: Timer -Interrupt Trang V-8 ORG 0000H JMP MAIN MAIN: MOV TMOD,#01h ; dùng timer0 chế ñộ 1 – 16 bit MOV TH0, #HIGH(-50000) MOV TL0, #LOW(-50000) SETB TR0 ; Cho phép timer 0 chạy LAP: JNB TF0, LAP ; Nếu Timer chưa tràn thì chờ CLR TF0 CPL P1.0 ; ðảo bit P1.0 ñể tạo xung vuông JMP LAP END b. Yêu cầu: - Kết nối ngõ ra của vi ñiều khiển với module diều khiển LED. Quan sát kết quả trên bit P1.0. - Hãy tính toán tần số của xung tạo ra tại P1.0, thời gian on/off của xung ngõ ra cũng như chu kỳ của xung tai P1.0. - Có thể sửa ñổi chương trình ñể có thể tạo xung vuông tại ngõ ra ở P1.0 có tần số như tính toán trên nhưng dùng Timer0 ở chế ñộ 2 – 8 bit auto reload hay không ? Nếu ñược hãy sửa lại chương trình và kiểm chứng. - Sửa ñổi chương trình ñể có thể tạo xung vuông tại ngõ ra ở P1.0 có tần số là 10Hz. - Sửa ñổi chương trình ñể có thể tạo xung vuông tại ngõ ra ở P1.0 có tần số là 10Hz dùng Timer1 - Sửa ñổi chương trình ñể có thể tạo xung vuông tại ngõ ra ở P1.0 có tần số là 1Hz - Sửa ñổi chương trình ñể tạo xung vuông có tần số 10Hz tại ngõ ra P1.0 và xung vuông có tần số 1 Hz tại ngõ ra P1.4. Gợi ý có thể dùng Timer 1 cho xung 10Hz và Timer0 cho xung 1 Hz. - Sửa ñổi lại tất các các chương trình con Delay trong bài thực tập số 3 (ñiều khiển Led ñơn – Led 7 ñoạn) bằng cách dùng các timer của vi ñiều khiển. Kiểm chứng lại sự thay ñổi này. Bài 2: Viết chương trình dùng Timer ñể tạo tiếng còi hú qua Speaker. Px.5 là bit sẽ kết nối với Speaker a. Chương trình mẫu gợi ý ORG 0000H JMP START KHOI DONG: MOV TCON, #00H Bài 5: Timer -Interrupt Trang V-9 MOV TMOD, #00H MOV PSW, #00H MOV IE, #00H RET DELAYMS: MOV R7, #00H LOOPA: INC R7 MOV A, R7 CJNE A, #0FFH, LOOPA RET DELAYHS: MOV R6, #80H MOV R5, #02H LOOPB: INC R6 CALL DELAYMS MOV A, R6 JNZ LOOPB DEC R5 MOV A, R5 JNZ LOOPB RET TONE_ONE: MOV R4, #00H MOV R3, #02H LOOPC: INC R4 CALL DELAY CALL DELAYMS DEC R2 CPL P1.5 ; kết nối với speaker MOV A, R4 JNZ LOOPC DEC R3 MOV A, R3 JNZ LOOPC RET TONE_TWO: MOV R4, #00H MOV R3, #02H LOOPD: INC R4 CALL DELAY CALL DELAYMS INC R2 CPL P1.5 ; ; kết nối với speaker MOV A, R4 JNZ LOOPD DEC R3 MOV A, R3 JNZ LOOPD RET DELAY: MOV A, R2 MOV R7, A LOOPE: INC R7 MOV A, R7 CJNE A, #0FFH, LOOPE RET START: CALL KHOI DONG LOOP: CALL TONE-ONE CALL TONE_TWO JMP LOOP END b. Yêu cầu - Kết nối PORT1 với module Speaker trên board ET-LAB3A xem lại bài 1: Tổng quan về ET-LAB3A - Chạy chương trình ñể kiểm chứng. - Mô tả nguyên tắc hoạt ñộng của chương trình trên. Vẽ lưu ñồ ñiều khiển của chương trình. Bài 5: Timer -Interrupt Trang V-10 - Sửa chương trình ñể tạo ra các dạng hiệu ứng âm thanh khác nhau. Chạy chương trình kiểm chứng. Bài 3: Viết chương trình tạo mạch ñồng hồ ñếm phút giây (thời gian tương ñối) sử dụng Timer0 chế ñộ 1 (16 bit) c. Chương trình mẫu gợi ý ORG 0000H JMP MAIN MAIN: MOV TMOD,#01H ; Sử dụng Timer0, chế ñộ 16 bit MOV 30H,#0 ; giá trị ban ñầu của phút MOV 31H,#0 ; giá trị ban ñầu của giây LAP: MOV A,30H ; xuất giá trị của phút ra P2 MOV B,#10 DIV AB MOV DPTR,# LED7S MOVC A,@A+DPTR MOV P2,A ; xuất hàng chục của phút ra P2 MOV P1,#03H ; P1 là PORT ñể chọn Led 7 ñoạn MOV A,B MOVC A,@A+DPTR MOV P2,A ; xuất hàng ñơn vị của phút MOV P1, #02H MOV A,31H ; xuất giá trị của giây ra P2 MOV B,#10 DIV AB MOV DPTR,#LED7S MOVC A,@A+DPTR MOV P2,A ; xuất giá trị chục của giây MOV P1, #01H MOV A,B MOVC A,@A+DPTR MOV P2,A ; giá trị ñơn vị của giây [...]... t Timer Bài 1: Th c hi n chương trình dùng ng t Timer 0 – ch ñ 1 – 16 bit t o xung vuông t n s f = xxHz t i P2.0 a Chương trình m u g i ý ORG 0000H JMP MAIN ORG 000BH JMP TIMER0 _ISR MAIN: MOV IE,#82H MOV TMOD,#02H MOV TH0,#(-50000) ; f = XXHz -> T = 1/f = YYms -> th i gian MOV TL0,#(-50000) ; tr là ZZs -> giá tr ñ m c a Timer là TTs SETB TR0 HERE: Trang V-12 Bài 5: Timer -Interrupt JMP HERE ; TIMER0 _ISR:... TIMER0 _ISR ; - ORG 001Bh TIMER0 _ISR: JMP Timer1 _ISR CPL P2.0 MAIN: RETI SETB EA ; - SETB ET0 TIMER1 _ISR: SETB ET1 MOV TH1,#HIGH(-TTTT) MOV TMOD,#XXh MOV TL1,#LOW(-TTTT) MOV TH0,#(-YYYY) CPL P2.1 MOV TL0,#(-YYYY) RETI SETB TR0 ; - MOV TH1,#HIGH(-ZZZZ) END MOV TL1,#LOW(-ZZZZ) Trang V-13 Bài 5: Timer -Interrupt Bài 2: Chương trình m u g i ý ñi u khi n phút dây dùng Interrupt Timer a Chương trình m... trình dùng ng t Timer 0 và Timer 1 ñ ng th i t o xung vuông t n s f = 20 KHz t i P2.3 và f = 100Hz t i P2.4 - Th c hi n chương trình dùng ng t Timer 0 và Timer 1 ñ ng th i t o xung vuông t n s f = 5 Hz t i P2.0 và f = 1 Hz t i P2.1 Hãy ñưa vào các giá tr XX, YYYY, ZZZZ, TTTT c a chương trình g i ý bên dư i ñ th c hi n ñư c yêu c u trên ORG 0000h SETB TR1 JMP main HERE: ORG 000Bh JMP HERE JMP TIMER0 _ISR... MOVC A,@A+DPTR here: MOV P2,A JMP here MOV P1, #03H ; MOV A,B Timer0 _ISR: MOVC A,@A+DPTR MOV TH0,#HIGH(-50000) MOV P2,A MOV TL0,#LOW(-50000) MOV P1, #02H DJNZ R7,exittimer0 MOV A,32h ; Hi n th 2 Led ch giây MOV R7,#20 MOV B,#10 CALL IncTime ; C m i 1s thì tăng th i gian DIV AB CALL display ; và hi n th ra Led MOVC A,@A+DPTR exittimer0: MOV P2,A RETI MOV P1, #01H ; - MOV A,B IncTime: MOVC A,@A+DPTR... 03h JMP Int0_ISR ORG 0Bh JMP Timer0 _ISR ORG 13h JMP Int1_ISR Main: SETB EA SETB EX0 SETB EX1 SETB ET0 SETB IT0 SETB IT1 MOV TMOD,#01h MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) MOV R7,#20 SETB TR0 MOV 30h,#0 CALL display here: JMP here ; -Int0_ISR: INC 30h MOV A,30h CJNE A,#100,next MOV 30h,#0 next: ; Timer0 _ISR: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) DJNZ R7,exittimer0 MOV R7,#20 INC 30h MOV... Timer0 _ISR: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) DJNZ R7,exittimer0 MOV R7,#20 INC 30h MOV A,30h CJNE A,#100,next2 MOV 30h,#0 next2: CALL display exittimer0: RETI ; display: MOV A,30h MOV B,#10 DIV AB MOV DPTR,#MaLed7 Trang V-17 Bài 5: Timer -Interrupt MOVC A,@A+DPTR MOV P2,A MOV P1, #00H MOV A,B MOVC A,@A+DPTR MOV P2,A MOV P1, #01H b Yêu c u: - RET ; MaLed7: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH,... sao cho có th th c hi n ñư c yêu c u trên - N u chương trình hi n thi phút giây chưa hoàn ch nh, có th thêm ño n code Delay10ms ñ trì hoãn th i gian lưu nh c a m t ngay t i m i khi Trang V-11 Bài 5: Timer -Interrupt xu t giá tr phút giây ra PORT2 Hãy s a ñ i l i chương trình sao cho hi n th phút giây d quan sát nh t ðo n code Delay10ms ñư c g i ý như sau: Delay10ms: PUSH 03 PUSH 04 MOV R3, #100 L1: MOV... CALL display ; và hi n th ra Led MOVC A,@A+DPTR exittimer0: MOV P2,A RETI MOV P1, #01H ; - MOV A,B IncTime: MOVC A,@A+DPTR INC 32h ; Tăng giây MOV P2,A MOV A,32h Trang V-14 MOV DPTR,#MaLed7 Bài 5: Timer -Interrupt MOV P1, #00H MaLed7: DB RET 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H ; - END b Yêu c u: - Ch y chương trình và quan sát k t qu trên Led 7 ño n, cho nh n xét - Do ñây là chương... Int0_ISR: MOV P2,A INC 30h MOV P1, #01H MOV A,30h RET CJNE A,#100,next ; - MOV 30h,#0 next: MaLed7: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H CALL display END MOVC A,@A+DPTR Trang V-15 Bài 5: Timer -Interrupt b Yêu c u: - Ch y chương trình và ki m tra k t qu - Thêm vào l nh cho phép ng t b ng c nh như sau (t i ño n in ñ m) Sau ñó So sánh trư ng h p s d ng ng t b ng c nh và b ng m c logic SETB...Bài 5: Timer -Interrupt MOV P1, #00H CALL DELAY INC 31H ; tăng giây lên 1 MOV A,31H CJNE A,#60,Lap ; ð 60s (1 phút) thì MOV 31H,#0 ; giây = 0 INC 30H ; và tăng phút lên 1 MOV A,30H CJNE A,#60,Lap ; ð 60 phút thì . trạng thái tràn cho bộ Timer/ Counter1 TR1: ñiều khiển cấp xung cho bộ Timer/ Counter1 TF0: báo trạng thái tràn cho bộ Timer/ Counter0 TR0: ñiều khiển cấp xung cho bộ Timer/ Counter0 IE1, IT1,. viết ñược chương trình ứng dụng Timer – Interrupt vào trong ñiều khiển quá trình. II. Cơ sở lý thuyết 1. Timer trong AT89C51 Vi ñiều khiển 89C51 có hai thanh ghi timer/ counter 16 bit. Các thanh. bộ Timer/ Counter ñược ñiều khiển bởi hai thanh ghi TCON và TMOD Thanh ghi TCON (timer control) : Là thanh ghi 8 bit, có th ể truy xuất byte hoặc bit dùng ñể ñiều khiển hoạt ñộng của Timer.

Ngày đăng: 23/10/2014, 12:38

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan