Chuong 5 Vi điều khiển PIC 16F887 timer – counter

0 4 0
Chuong 5 Vi điều khiển PIC 16F887 timer – counter

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

Thông tin tài liệu

✓Giới thiệu ✓Timercounter trên PIC 16F887 ✓Ứng dụng timercounter 2 GIỚI THIỆU 3 PIC16F887 có 3 timer, counter (TC): + TC0 và TC2 : 8 bit + TC1: 16bit TC0: (8bit) có 3 thành ghi quan trọng: OPTION_REG có địa chỉ là 0x81 INTCON có địa chỉ 0x0b TMR0 có địa chỉ 0x01 (giá trị đếm 0255)

TRƯỜNG ĐẠI HỌC PHENIKAA KHOA ĐIỆN ĐIỆN TỬ KỸ THUẬT VI XỬ LÝ VÀ VI ĐIỀU KHIỂN Chương 5: Vi điều khiển PIC 16F887 timer – counter GIẢNG VIÊN: ThS ĐÀO TÔ HIỆU Hà Nội, 08/2021 NỘI DUNG ✓Giới thiệu ✓Timer/counter PIC 16F887 ✓Ứng dụng timer/counter GIỚI THIỆU PIC16F887 có timer, counter (T/C): + T/C0 T/C2 : bit + T/C1: 16bit T/C0: (8bit) có thành ghi quan trọng: OPTION_REG có địa 0x81 INTCON có địa 0x0b TMR0 có địa 0x01 (giá trị đếm 0-255) TIMER/COUNTER TRÊN PIC 16F887 Thanh ghi OPTION_REG (0x81) RBPU: bit điều khiển điện trở treo PORTB INTEDG: Cấu hình đọc xung sườn âm/dương cho ngắt chân RB0 (1: sườg dương, 0: sườn âm) T0CS: bit lựa chọn nguồn xung cho ghi TMR0 1= đếm xung ngoại đưa đến chân RA4/T0CKI (pin 6) 0= đếm xung clock nội bên TOSE: BIT lựa chọn xung sườn lên hay sườn xuống 0= xung thay đổi từ cao xuống thấp chân T0CKI 1= xung thay đổi từ thấp lên cao chân chân T0CKI PSA: bit gán chia tần 1= gán chia cho WDT 0= gán chia Timer0 6.2 TIMER/COUNTER TRÊN PIC 16F887 Thanh ghi OPTION_REG (0x81) PS2:PS0: bit cấu hình chia tần PS2 0 0 1 1 PS1 0 1 0 1 PS0 1 1 TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128 TIMER/COUNTER TRÊN PIC 16F887 Thanh ghi INTCON (0xb0): ghi ngắt T/C0 + Thanh ghi TMR0 đếm vượt 255 (0xff) -> 0x00 sinh ngắt timer0, cờ báo ngắt (TMR0IF lên 1) + bit quan trọng: TMR0IE bit số (cho phép ngắt tràn ), bit : TMROIF (cờ ngắt ) +Timer0 phải xóa cờ báo ngắt TMR0IF = để tiếp tục chu trình + Bộ định thời ngừng hoạt động PIC chế độ ngủ => khơng thể dùng ngắt timer để kích hoạt PIC TIMER/COUNTER TRÊN PIC 16F887 Đếm xung ngoại với RA4/T0CKI (pin 6) dung WDT + PSA = T0CS = 1: Đếm xung ngoại gán cho WDT TIMER/COUNTER TRÊN PIC 16F887 Đếm xung ngoại với RA4/T0CKI (pin 6) timer0 + PSA = T0CS = 1: Đếm xung ngoại gán cho timer0 TIMER/COUNTER TRÊN PIC 16F887 Đếm xung ngoại với RA4/T0CKI (pin 6) timer0 + PSA = T0CS = 1: Đếm xung ngoại gán cho timer0 ỨNG DỤNG Ví dụ: Sử dụng thạch anh nội MHz, timer0 Hãy thiết lập timer0 với chia tần để xác định ngắt timer sau 200us Giải: B1: Timer0: bit => Giá trị đếm TMR0: – 255 (256 giá trị) tương ứng với chu kỳ lệnh F = 4000000Hz => Sau qua Bộ chia 1/4: f0 = f/4 = 1000000Hz  Tần số sau qua chia tần = 1000000/4 = 250000Hz B2: chu kỳ lệnh = 1/250000= 4us Để đếm 200us cần trải qua số chu kỳ lệnh = 200/4 = 50  TMR0 cần đếm 50 giá trị  Giá trị thiết lập đếm= 256-50 = 206 10 ỨNG DỤNG Ví dụ: Sử dụng thạch anh nội MHz, timer0 Hãy thiết lập timer0 với chia tần để xác định ngắt timer sau 200us t f Var=2 − +1 Kprescaler  n n: số bit timer sử dụng t: Thời gian cần xác định Kprescaler: Bộ chia tần k 4: chia ¼ đầu vào Tham số thiết lập = 256 – (0.0002 * 4000000)/(4x4) = 206 Bài tập: Với timer1 (16 bit) thiết lập tìm tham số thiết lập chia tần timer1 để xác định thời gian 500us 11 Lập trình timer0 dùng xung dao động nội #include int32 count = 0; int stt = 0; #int_TIMER0//di cap void Ngat_TIMER0(void) { count++; if(count>=999) { count = 0; stt = !stt; output_bit(PIN_C0,stt);//Ham dao trang thai } } void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4|RTCC_8_BIT); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); set_timer0(206); while(TRUE) {} } 12

Ngày đăng: 03/08/2023, 10:38

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

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

Tài liệu liên quan