BÀI 3: SỬ DỤNG BỘ ĐỊNH THỜI TIMER
3.2. Lập trình ứng dụng sử dụng bộ định thời
- Các lệnh của timer – counter trong CCS + Lệnh setup_timer_0(mode)
Cú pháp:
setup_timer_0(mode)
Thông số: mode có thể là 1 hoặc 2 hằng số định nghĩa trong filedevice.h.
Các thông số gồm:
-RTCC_INTERNAL, RTCC_EXT_H_TO_LRTCC_EXT_L_TO_H - RTCC_DIV_2,
- RTCC_DIV_4, - RTCC_DIV_8, - RTCC_DIV_16,
- RTCC_DIV_32, - RTCC_DIV_64, - RTCC_DIV_128, - RTCC_DIV_256.
Các hằng số từ nhiều nhóm khác nhau thì có thể or với nhau.
Chức năng: Định cấu hình cho TIMER0.
Có hiệu lực: cho tất cả các vi điều khiển PIC.
+ Lệnh set_timerx(value) Cú pháp:
set_timerX(value) ;// x là 0, 1, 2
Thông số: value là hằng số nguyên 8 hoặc 16 bit dùng để thiết lập giá trị mới cho timer.
Chức năng: thiết lập giá trị bắt đầu cho TIMER.
Có hiệu lực: cho tất cả các vi điều khiển PIC có timer.
+ Lệnh get_timerx() Cú pháp:
value = get_timerX() ; //x là 0, 1, 2 Thông số: không có.
Chức năng: đọc giá trị của TIMER/COUNTER.
Có hiệu lực: cho tất cả các vi điều khiển PIC có timer.
3.2.2. Các bước tiến hành
Yêu cầu kỹ thuật: Dùng Timer0 để viết hàm tạo trễ cho hệ thống.để tạo khoản thời gian trễ là 500ms
- Bước 1:Viết lưu đồ giải thuật
- Bước 2:Viết chương trình hàm tạo trễ dựa vào lưu đồ giải thuật - Bước 3:Kiểm tra và nạp chương trình qua PICKIT2
- Bước 4:Vận hành, quan sát và chỉnh sửa 3.2.3. Thực hành:
Người học thực hiện viết chương trình hiển thị theo yêu cầu kỹ thuật như trên, nạp vào vi điều khiển PIC 18F4550.
Thiết bị thực hành:
- Máy vi tính PC;
- Mạch nạp PIC KIT 2;
- Mô đun thực hành PICKIT Training.
3.2.4. Câu hỏi ôn tập:
Câu 1: IC PIC 18F4550 có bao nhiêu bộ Timer/Counter?
Câu 2: Giải thích chế độ Watch dog timer có trong PIC.
3.3. Bài tập thực hành:
Viết chương trình đếm từ 00 lên 99 hiển thị trên led 7 đoạn, sử dụng Timer 0 để tạo thời gian trễ 1s giữa mỗi lần đếm tăng lên
3.3.1. Lý thuyết liên quan Đọc mục 2.5.1.
3.3.2. Các bước tiến hành
- Bước 1:Viết lưu đồ giải thuật
- Bước 2:Viết chương trình
#include<18F4550.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=20000000) //---KICH LED --- void led_A0()
{ output_low(PIN_E0);//E0=0 output_low(PIN_E1);//E1=0 }
void led_A1()
{ output_high(PIN_E0);//E0=1 output_low(PIN_E1);//E1=0 }
void led_A2()
{
output_low(PIN_E0);//E0=0 output_high(PIN_E1);//E1=1 }
void led_A3()
{ output_high(PIN_E0);//E0=1 output_high(PIN_E1);//E1=1 }
//--- // ---MA LED---
void maso_0()
{ output_low(PIN_E2);//A0=0 output_low(PIN_C0);//A1=0 output_low(PIN_C1);//A2=0 output_low(PIN_A4);//A3=0
}
void maso_1()
{ output_high(PIN_E2);//A0=1 output_low(PIN_C0);//A1=0 output_low(PIN_C1);//A2=0 output_low(PIN_A4); }//A3=0
void maso_2()
{ output_low(PIN_E2);//A0 output_high(PIN_C0);//A1 output_low(PIN_C1);//A2 output_low(PIN_A4);//A3 }
void maso_3()
{ output_high(PIN_E2);//A0 output_high(PIN_C0);//A1 output_low(PIN_C1);//A2 output_low(PIN_A4);//A3 }
void maso_4()
{ output_low(PIN_E2);//A0 output_low(PIN_C0);//A1 output_high(PIN_C1);//A2 output_low(PIN_A4);//A3 }
void maso_5()
{ output_high(PIN_E2);//A0 output_low(PIN_C0);//A1 output_high(PIN_C1);//A2 output_low(PIN_A4);//A3
}
void maso_6()
{ output_low(PIN_E2);//A0 output_high(PIN_C0);//A1 output_high(PIN_C1);//A2 output_low(PIN_A4);//A3 }
void maso_7()
{ output_high(PIN_E2);//A0 output_high(PIN_C0);//A1 output_high(PIN_C1);//A2 output_low(PIN_A4);//A3 }
void maso_8()
{ output_low(PIN_E2);//A0 output_low(PIN_C0);//A1 output_low(PIN_C1);//A2 output_high(PIN_A4);//A3 }
void maso_9()
{ output_high(PIN_E2);//A0 output_low(PIN_C0);//A1 output_low(PIN_C1);//A2 output_high(PIN_A4);}//A3 void chon_ma(int16 maled)
{ switch(maled)
{case 0 :output_low (PIN_E2) ;output_low (PIN_C0) ; output_low (PIN_C1) ; output_low (PIN_A4);delay_ms(1);break;
case 1 :output_high(PIN_E2) ;output_low (PIN_C0) ; output_low (PIN_C1) ; output_low (PIN_A4);delay_ms(1);break;
case 2 :output_low (PIN_E2) ;output_high(PIN_C0) ; output_low (PIN_C1) ; output_low (PIN_A4);delay_ms(1);break;
case 3 :output_high(PIN_E2) ;output_high(PIN_C0) ; output_low (PIN_C1) ; output_low (PIN_A4);delay_ms(1);break;
case 4 :output_low (PIN_E2) ;output_low (PIN_C0) ; output_high(PIN_C1) ; output_low (PIN_A4);delay_ms(1);break;
case 5 :output_high(PIN_E2) ;output_low (PIN_C0) ; output_high(PIN_C1) ; output_low (PIN_A4);delay_ms(1);break;
case 6 :output_low (PIN_E2) ;output_high(PIN_C0) ; output_high(PIN_C1) ; output_low (PIN_A4);delay_ms(1);break;
case 7 :output_high(PIN_E2) ;output_high(PIN_C0) ; output_high(PIN_C1) ; output_low (PIN_A4);delay_ms(1);break;
case 8 :output_low (PIN_E2) ;output_low (PIN_C0) ; output_low (PIN_C1) ; output_high(PIN_A4);delay_ms(1);break;
case 9 :output_high(PIN_E2) ;output_low (PIN_C0) ; output_low (PIN_C1) ; output_high(PIN_A4);delay_ms(1);break;}
}
//--- void ham_dem()
{ int16 dv,chuc;
int16 so,i;
// ---HIEN THI 2 SO RA LED { for(so=0;so<=99;so++)
{
chuc=so/10;
dv=so%10;
for(i=0;i<=50;i++) { led_A0();
chon_ma(dv);
led_A1();
chon_ma(chuc); } }
}
//---CHUONG TRINH CHINH--- void main()
{ while(true) {ham_dem();}
}
- Bước 3:Kiểm tra và nạp chương trình qua PICKIT2 - Bước 4:Vận hành, quan sát và chỉnh sửa
3.3.3. Thực hành:
Người học thực hiện viết chương trình, nạp vào vi điều khiển PIC 18F4550.
Thiết bị thực hành:
- Máy vi tính;
- Mạch nạp PIC KIT 2
- Môn đun thực hành PIC Traning KIT 3.3.4. Câu hỏi ôn tập
Câu 1: Câu lệnh thiết lập chế độ Timer cho bộ định thời là gì?