![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 8
: |
timer
chào các bạn mình mới học Pic nên mình có nhiều thứ không biết
thứ 1 : lúc mình xài ngắt timer (mình xài con 16f877a) thì phải khai báo ra sao ?? và bạn nào có thể cho mình xem ví dụ cụ thể thì tốt quá. thứ 2: giả sử mình muốn sau 10s hoặc 1 phút thì led sáng chẳng hạn thì mình tính toán như thế nào (thạch anh 20Mh) thứ 3 : bạn nào có thể cho mình ví dụ 2 led sáng tắt sau 1 phút mà dùng ngắt timer ko ? Mình viết = C. (CCS) cám ơn các bạn nhiều. |
![]() |
![]() |
![]() |
#2 |
Đệ tử 4 túi
Tham gia ngày: May 2009
Bài gửi: 74
: |
muốn sử dụng ngắt timer bạn cần thiết lập như sau: mình giả sử dùng ngắt timer 0
setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_4); // TIMER0 sử dụng dao động nội // xung cho timer0 = osc/4 enable_interrrupts(INT_TIMER0) ; // cho phep ngắt timer0 enable_interrupts(GLOBAL) ; // cho phep ngat toàn cục set_timer0( timer) ; // giả sử sử dung osc 20MHz ,timer0 8bit // timer = (256-value)*div*(4/20000000)= xx us khi đó cứ mỗi khi có cờ timer tràn thì chương trình nhảy đến ngắt timer #int_timer0 void ngat_timer0() { // công việc } còn bạn muốn ngắt 1s hay 1 phút thì cho 1 biến tăng dần số lần tràn counter++; |
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 8
: |
#fuses LP, HS, RC, WDT, NOWDT
#int_timer0 void ngat_timer0() { output_high(PIN_B0); ////khai bao timer ra sao o day ; output_low(PIN_B0); } void main() { /////con conter ++ thi minh phai khai bao ra sao minh chua hieu ve 1s hay 1 phut la phai lam sao setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); set_timer0(100);////minh ko hieu nen khai gia tri bao nhieu ca. while(1) { ngat_timer0(); } } minh viet chuong trinh sang va tat trong vong 1 phut nhung chua biet phai lam timer ra sao ca |
![]() |
![]() |
![]() |
#4 |
Nhập môn đệ tử
Tham gia ngày: Jan 2010
Bài gửi: 6
: |
//minh vua viet dc chuong trinh tao tre 0,5s dung timer0,ban thu doc xem co giup gi dc ko nhe
#include<16f877a.h> #byte PORTB=0x06 #byte TRISB=0x86 #use delay(clock=20000000) #int_timer0 int16 count=0; //chuong trinh ngat timer0 void interrupts_timer0() { set_timer0(0);//khoi tao gia tri dem ban dau la 0 ++count; if(count==39062)//Ttimer0=256*39062 ![]() { count=0; PORTB^=(1<<0); } } //chuong trinh chinh void main() { TRISB=0x00;//dat cac chan cua portb o la chan ra PORTB=1;//dat dien ap cao cho pin RBO} enable_interrupts(int_timer0);//cho phep ngat timer0 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); //prescaler=1:256 enable_interrupts(global); while(1) { interrupts_timer0(); } } |
![]() |
![]() |
![]() |
#5 |
Nhập môn đệ tử
Tham gia ngày: Jan 2010
Bài gửi: 6
: |
theo nhu minh hieu timer neu dung 1 minh no chi la lam nhiem vu dem,no chi co tac dụng khi chúng ta kết hợp với ngắt nữa đúng ko,các pro cho ý kiến với
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 4 túi
|
Timer có tác dụng tạo ngắt,như trong con 8051 thì có 5 ngắt:2 ngắt bằng timer(timer0,timer1),2 ngắt ngoài và 1 ngắt cổng nối tiếp(SBUF).
Trong 8051 có thanh ghi IE(interrupt enable) ở địa chỉ A8H.Đây là thanh ghi 8 bit được địa chỉ hóa từng bit cụ thể như phía dưới nhằm xác định trạng thái ngắt nào(timer hay ngắt ngoài hay SBUF) + IE.7(kí hiệu:EA,địa chỉ AFH):khi IE.7=1 cho phép toàn bộ các ngắt hoạt động,ngược lại là cấm toàn bộ + IE.6(địa chỉ AFH) : chưa được định nghĩa + IE.5(kí hiệu:ET2,địa chỉ ADH):Cho phép ngắt timer 2(8052) + IE.4(kí hiệu:ES,địa chỉ ACH):Cho phép ngắt của cổng nối tiếp + IE.3(kí hiệu:ET1,địa chỉ ABH):Cho phép ngắt timer 1 + IE.2(kí hiệu:EX1,địa chỉ AAH):Cho phép ngoài 1 + IE.1(kí hiệu:ET0,địa chỉ A9H):Cho phép ngắt timer 0 + IE.0(kí hiệu:EX0,địa chỉ A8H):Cho phép ngoài 0 Đối với con 8051 là như vậy còn PIC thế nào thì mình chưa học. |
![]() |
![]() |
![]() |
|
|