1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng lý thuyết vi xử lý kỹ thuật vi xử lý CD ROM p6

16 16 0

Đ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

Microsoft Word Bai Giang LT Vi xu ly Khoa CNDT docx Bài giảng KỸ THUẬT VI XỬ LÝ 81 Chương 6 Moodul Timer –ngăt Trình bày được cấu trúc và tập lệnh của VĐK PIC và các thanh ghi lien quan đến các Modul Timer và modul ngắt của VĐK PIC Trình bày được nguyên lý hoạt động và điều khiển Modul Timer và modul ngắt cơ bản của VĐK PIC Xây dựng mô hình, phân tích và thiết kế, vẽ lưu đồ và lập trình ứng dụng được Modul Timer và modul ngắt cho các ứng dụng 6 1 Timer Counter 6 1 1 Giới thiệu Tất cả vi điều khi.

Bài giảng KỸ THUẬT VI XỬ LÝ Chương 6: Moodul Timer –ngăt - Trình bày cấu trúc tập lệnh VĐK PIC ghi lien quan đến Modul Timer modul ngắt VĐK PIC - Trình bày nguyên lý hoạt động điều khiển Modul Timer modul ngắt VĐK PIC - Xây dựng mơ hình, phân tích thiết kế, vẽ lưu đồ lập trình ứng dụng Modul Timer modul ngắt cho ứng dụng 6.1 Timer-Counter 6.1.1 Giới thiệu Tất vi điều khiển có mạch định thời chip; số có timer khác Vi điều khiển 16F8xx gồm Timers (0,1,2) Các timer chạy tốc độ 1/4 xung đồng hồ hệ thống (fosc) Như sử dụng thạch anh 32,768 Khz, timer bên chạy ở tần số 8192 Hz Nếu muốn bật led sáng giây chẳng hạn cần đếm 8192 xung Đây nhiều xung Thật may mắn bên vi điều khiển có ghi gọi ghi OPTION, mà cho phép làm giảm (chậm) xung hệ số chia: 2, 4, 8, 16, 32, 128 256 Thanh ghi OPTION thảo luận phần tập lệnh dùng cho Timer0 Thiết lập tỉ lệ trước , ví dụ gọi để chia 256 ghi OPTION nghĩa xung định 8192/256=32 Hz, nghĩa 32 xung giây Như để bật led sáng giây, cần đếm 32 xung timer hay 16 xung cho 0,5 giây, hay 160 xung cho 50 mili-giây (ms),v.v 6.1.2 Timer/counter VĐK PIC 16f8xx t a Khảo sát timer + Timer có đặc điểm sau: o Là đếm bit (thanh ghi đếm TMR0: chạy từ 0x00 đến 0xFF) o Có thể đọc/ghi ghi đếm TMR0 o Có chia trước tỉ lệ (prescale) 4bit o Cho phép lựa chọn nguồn xung clock từ bên (xung clock hệ thống) từ bên ngồi (thơng qua chân T0CKI) o Có thể phát sinh ngắt báo tràn (0xFF 0x00), đồng thời cờ tràn set o Bộ đếm tự khởi động chạy vđk cấp nguồn 81 Bài giảng KỸ THUẬT VI XỬ LÝ 82 Bài giảng KỸ THUẬT VI XỬ LÝ + Timer có đặc điểm sau: o Là đếm 16 bit (2 ghi đếm TMR1H:TMR1L chạy từ 0x0000 đến 0xFFFF) o Có thể đọc/ghi ghi đếm TMR1H:TMR1L o Có chia trước tỉ lệ (prescale) 2bit o Cho phép lựa chọn nguồn xung clock từ bên (xung clock hệ thống) từ bên ngồi (thơng qua chân T1CKI) o Có thể phát sinh ngắt báo tràn (0xFFFF 0x0000), đồng thời cờ tràn set o Timer1 bật tắt thông qua cờ TMR1ON o Ngoài chức timer/counter, dùng cho module Capture Compare + Timer có đặc điểm sau: o Là đếm bit (thanh ghi đếm TMR0: chạy từ 0x00 đến 0xFF) o Có thể đọc/ghi ghi đếm TMR2 o Có chia trước tỉ lệ (prescale – 2bit postscale – 4bit) o Chỉ dùng nguồn xung clock từ bên (xung clock hệ thống) o Có thể phát sinh ngắt báo tràn (giá trị ghi PR2 0x00), đồng thời cờ tràn set o Timer2 bật tắt thơng qua cờ TMR2ON o Ngồi chức timer/counter, dùng cho module PWM 83 Bài giảng KỸ THUẬT VI XỬ LÝ b Cách truy xuất thành phần timer + Truy xuất Timer0: 84 Bài giảng KỸ THUẬT VI XỬ LÝ + Truy xuất Timer1: 85 Bài giảng KỸ THUẬT VI XỬ LÝ + Truy xuất Timer2: 86 Bài giảng KỸ THUẬT VI XỬ LÝ 6.1.3 Ứng dụng timer/counter VĐK PIC 16f8xx a Ứng dụng định thời dùng timer b Ứng dụng đếm xung ngoại counter * Phần a b trình bày cụ thể song song với ứng dụng ngắt PORTB TIMERs Lý việc so sánh chương trình xử lý tràn đếm theo polling theo interrupt rõ ràng 6.2 Ngắt 6.2.1 Tổng quan ngắt VĐK PIC 16f8xx + Có phương pháp nhận ngắt: thứ liên tục kiểm tra gọi ngắt phần mềm (hỏi vòng-polling), thứ hai chuông reo gọi tương đương ngắt phần cứng (interrupt) Khi xảy ngắt cần nhớ nội dung file gì, nghĩa ghi trạng thái STATUS, tích lũy W, Timers thiết lập PORT v.v., trở từ ngắt, thiết lập lưu trở lại (restored) Chúng ta cần lưu lại thiết lập, giá trị trước bị ngắt, ngắt nội dung ghi thay đổi chương trình phục vụ ngắt 87 Bài giảng KỸ THUẬT VI XỬ LÝ 6.2.2 Ngắt VĐK PIC 16f8xx a Các nguồn ngắt VĐK  16F877A có 15 nguồn ngắt (xem hình dưới)  Thay đổi cạnh lên hay cạnh xuống PORTB,0  TMR0 tràn từ FFh 00h  TMR1 tràn từ FFFFh 0000h  TMR2 tràn từ PR2 00h  PORTB bit 4-7 thay đổi  Ngắt điều chế độ rộng xung, bắt giữ so sánh  Chuyển đổi A/D hoàn thành  Ghi liệu EEPROM hoàn thành  Ngắt port nối tiếp đồng bộ/ bất đồng Những ngắt cho phép (enable) hay cấm theo yêu cầu bit cho phép/cấm ngắt Các bit tìm thấy ghi điều khiển ngắt INTCON cho 16F877A  GIE: Global Interrut Enable  PEIE: PEripheral Interrupt Enable  xxxIE xxxIF: bit cho phép modul ngắt bit cờ (flag) báo hiệu cho modul tương ứng 88 Bài giảng KỸ THUẬT VI XỬ LÝ b Các ghi liên quan đến ngắt Trong mục này, tìm hiểu ngắt liên quan đến PORTB Timers Các loại ngắt khác trình bày cụ thể modul chức chương + Ngắt chân RB0 , ngắt thay đổi PORTB (các chân RB4,5,6,7), ngắt Timer0: loại ngắt thuộc loại ngắt trong, cụ thể sau:  Ngắt chân RB0: INTF; INTE GIE  Ngắt thay đổi PORTB: RBIF; RBIE GIE  Ngắt Timer0: TMR0IF; TMR0IE GIE + Thanh ghi INTCON dùng cho việc cấu hình sử dụng loại ngắt c Khai báo ngắt ngơn ngữ lập trình 89 Bài giảng KỸ THUẬT VI XỬ LÝ Phần minh học cụ thể phần “lập trình cho vđk ngơn ngữ ASM HitechC” 6.2.3 Các ứng dụng dùng ngắt VĐK PIC 16f8xx INTERUPT AT PIN RB0 AND PORTB(PINS RB4,5,6,7) #define _XTAL_FREQ 4000000 //4MHz void interrupt isr(void) // INT Subroutine { // belong to INT PORTB CHANGES if ((RBIF==1) && (INTF==0)) { unsigned char data; #include CONFIG(0x3FFA); void main(void) { RBIE = 1; GIE = 1; RBIF = 0; INTE = 1; INTF = 0; // clear the current state of PORTB and update new status data = PORTB; // INT PORTB changes RBIF=0; // INT RB0 changes PORTD = 0B00001111; } // belong to INT RB0 CHANGES else if (!RBIF && INTF) { INTF=0; TRISD = 0x00; PORTD = 0xFF; while(1) { } // loop forever } } 90 PORTD = 0B11110000; } Bài giảng KỸ THUẬT VI XỬ LÝ 91 Bài giảng KỸ THUẬT VI XỬ LÝ TIMER0 OPERATES AS TIMER /* INTERUPT method */ /* POLLING method */ #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); #include CONFIG(0x3FFA); void main(void) { // pre-scale for TMR0 PSA=0; void main(void) { // pre-scale for TMR0 PSA=0; // pre-scale with 256 times PS2=1; PS1=1; PS0=1; // pre-scale with 256 times PS2=1; PS1=1; PS0=1; T0CS=0; TMR0=0; // internal CLK // cycle 256 T0CS=0; TMR0= (256-250); T0IF=0; T0IF=0; GIE=1; T0IE=1; TRISD=0; PORTD=0x00; TRISD=0; PORTD=0x00; while(1) { while (!TMR0IF) ; while(1) { } // internal CLK // cycle 250 TMR0IF = 0; } void interrupt isr(void) { if(T0IE&&T0IF) { T0IF=0; PORTD=~PORTD; } } TMR0= (256-250); // cycle 250 PORTD=~PORTD; } } // Timer = 250 cycle * 256 prescaler 92 Bài giảng KỸ THUẬT VI XỬ LÝ /* TIMER0 OPERATES AS COUNTER EXTERNAL PULSES*/ /* TIMER0 COMBINES WITH REGISTER */ #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); #include CONFIG(0x3FFA); void main(void) { // prescaler NOT for TMR0, for WDT PSA=1; void main(void) { // Prescaler Assigmet Bit (1 for WDT) PSA=1; // prescaler with 256 times (not use in this case) // PS2=1; PS1=1; PS0=1; // Internal Clock Source T0CS=0; // External CLK from pin T0CKI T0CS=1; // Predefine value for TMR0 TMR0=(256-100); // Predefine value for TMR0 TMR0= (256-10); // cycle 10 T0IF=0 ; TRISD=0; PORTD=0x00; T0IF=0 ; TRISD=0; PORTD=0x00; uint tmr0_count=1 ; while(1) { while(!T0IF); while(1) { while (!TMR0IF) ; TMR0=(256-100); TMR0IF = 0; TMR0= (256-10); // cycle 10 PORTD=PORTD+1; // Counter every 10 external pulses } } // loop this while T0IF=0 // Predefine value for TMR0 T0IF=0 ; if (++tmr0_count >= 5000) { tmr0_count=1; PORTD=~PORTD; } // 5000 loop * TMR0 cycle } } 93 Bài giảng KỸ THUẬT VI XỬ LÝ TIMER1 WORKS AS INTERNAL TIMER 16 BIT /*/* INTERUPT method */ */ /*/* POLLING method */ */ #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); #include CONFIG(0x3FFA); void main(void) { T1CKPS0=1; T1CKPS1=1; void main(void) { T1CKPS0=1; T1CKPS1=1; TMR1CS=0; // scale 1:8 // internal clock TMR1CS=0; // initial value with 12500 TMR1L=(65536-12500)%256; TMR1H=(65536-12500)/256; TMR1IF=0; TMR1ON=1; // start TMR1 TRISD=0; PORTD=0x00; // start TMR1 while(1) { while(!TMR1IF) ; TRISD=0; PORTD=0x00; while(1) { TMR1IF=0; TMR1L=(65536-12500)%256; TMR1H=(65536-12500)/256; } } PORTD=PORTD+1; // Timer1 = 12500 cycle * prescaler } } void interrupt isr(void) { if(TMR1IE&&TMR1IF) { TMR1IF=0; TMR1L=(65536-12500)%256; TMR1H=(65536-12500)/256; PORTD=PORTD+1; } // internal clock // initial value with 12500 TMR1L=(65536-12500)%256; TMR1H=(65536-12500)/256; GIE=1; PEIE=1; TMR1IE=1; TMR1IF=0; TMR1ON=1; // scale 1:8 } 94 Bài giảng KỸ THUẬT VI XỬ LÝ TIMER1 OPERATES AS COUNTER EXTERNAL PULSES #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); void main(void) { TRISD=0x00; PORTD=0x00; // no prescaler T1CKPS0=0; T1CKPS1=0; // Initial value = 10 TMR1L=(65536-10)%256; TMR1H=(65536-10)/256; // Synchronous clock enable T1SYNC=0; // Select External Counter (from R-C osc or from T1CKI pin) TMR1CS=1; // Select External Counter from T1CKI pin T1OSCEN=0; TMR1IF=0; TMR1ON=1; // start counter while(1) { while (!TMR1IF); TMR1IF=0; TMR1ON=0; // stop counter TMR1L=(65536-10)%256; TMR1H=(65536-10)/256; TMR1ON=1; // start counter PORTD=~PORTD; // Count up times after received 10 pulse from T1CKI pin } } 95 Bài giảng KỸ THUẬT VI XỬ LÝ TIMER2 OPERATES AS COUNTER EXTERNAL PULSES #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); #define _XTAL_FREQ 4000000 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include CONFIG(0x3FFA); void main(void) { T2CKPS0=1; T2CKPS1=0; // pre-scale 1:4 void main(void) { T2CKPS0=1; T2CKPS1=0; // pre-scale 1:4 // post-scale 1:6 TOUTPS3=0; TOUTPS2=1; TOUTPS1=0; TOUTPS0=0; // post-scale 1:6 TOUTPS3=0; TOUTPS2=1; TOUTPS1=0; TOUTPS0=0; // TMR2 begins from TMR2=0; // TMR2 begins from TMR2=0; // TMR2 ends to PR2 (250 cycle in this case) PR2=250-1; // TMR2 ends to PR2 (250 cycle in this case) PR2=250-1; GIE=1; PEIE=1; TMR2IE=1; TMR2IF=0; TMR2ON=1; TMR2IF=0; TMR2ON=1; TRISD=0; PORTD=0x00; // TMR2 starts uchar count=1; TRISD=0; PORTD=0x00; while(1) { while (!TMR2IF) ; while(1) { } TMR2IF=0; } void interrupt isr(void) { uchar count=1; if(TMR2IF&&TMR2IE) { TMR2IF=0; if(++count>=25) { count=1; PORTD=PORTD+1; } // TMR2 starts PR2=250-1; // TMR2 ends to PR2 (250 cycle in this case) if(++count>=25) { count=1; PORTD=PORTD+1; } } // total timer = TMR2 * count * precsaler * postscaler 96 } } } // total timer = TMR2 * count * precsaler * postscaler // = 250*25*4*6=150 ms ... 83 Bài giảng KỸ THUẬT VI XỬ LÝ b Cách truy xuất thành phần timer + Truy xuất Timer0: 84 Bài giảng KỸ THUẬT VI XỬ LÝ + Truy xuất Timer1: 85 Bài giảng KỸ THUẬT VI XỬ LÝ + Truy xuất Timer2: 86 Bài. . .Bài giảng KỸ THUẬT VI XỬ LÝ 82 Bài giảng KỸ THUẬT VI XỬ LÝ + Timer có đặc điểm sau: o Là đếm 16 bit (2 ghi đếm TMR1H:TMR1L chạy... PORTD = 0xFF; while(1) { } // loop forever } } 90 PORTD = 0B11110000; } Bài giảng KỸ THUẬT VI XỬ LÝ 91 Bài giảng KỸ THUẬT VI XỬ LÝ TIMER0 OPERATES AS TIMER /* INTERUPT method */ /* POLLING method

Ngày đăng: 02/07/2022, 11:36

Xem thêm:

HÌNH ẢNH LIÊN QUAN

 16F877A có 15 nguồn ngắt (xem hình dưới).   Thay đổi cạnh lên hay cạnh xuống của PORTB,0 - Bài giảng lý thuyết vi xử lý   kỹ thuật vi xử lý CD ROM p6
16 F877A có 15 nguồn ngắt (xem hình dưới).  Thay đổi cạnh lên hay cạnh xuống của PORTB,0 (Trang 8)
+ Thanh ghi INTCON dùng cho việc cấu hình và sử dụng 3 loại ngắt trên. - Bài giảng lý thuyết vi xử lý   kỹ thuật vi xử lý CD ROM p6
hanh ghi INTCON dùng cho việc cấu hình và sử dụng 3 loại ngắt trên (Trang 9)

TỪ KHÓA LIÊN QUAN