PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Ngắt timer (http://www.picvietnam.com/forum/showthread.php?t=11797)

apiker 13-11-2011 10:49 PM

Ngắt timer
 
Xin lỗi e hỏi câu hơi ngu, mong mọi người bỏ qua cho: e chưa hiểu khi dùng chế độ định thời của các bộ timer, ví dụ mình cần định thời gian là 1s thì sẽ ngắt và thực hiện các câu lệnh trong chương trình ngắt, nhưng e ko biết khi nào thì vi điều khiển sẽ bắt đầu tính khoảng thời gian đó, hay là sẽ chọn vị trí nào trong chương trình chính để định thời gian 1s thì sẽ xảy ra ngắt.
Rất mong các pro khai sáng!

delta21 13-11-2011 11:44 PM

khi bạn cho timer chạy(tmrXon = 1 ) thì nó bắt đầu tính thời gian từ đó,khi đếm đủ thời gian cài đặt thì sẽ có ngắt.Trong ct bạn pải tính toán để nạp lại timer sau khi thực hiện xong ct ngắt.

DINH THANH SANG 14-11-2011 01:36 AM

Trích:

Nguyên văn bởi apiker (Post 51419)
Xin lỗi e hỏi câu hơi ngu, mong mọi người bỏ qua cho: e chưa hiểu khi dùng chế độ định thời của các bộ timer, ví dụ mình cần định thời gian là 1s thì sẽ ngắt và thực hiện các câu lệnh trong chương trình ngắt, nhưng e ko biết khi nào thì vi điều khiển sẽ bắt đầu tính khoảng thời gian đó, hay là sẽ chọn vị trí nào trong chương trình chính để định thời gian 1s thì sẽ xảy ra ngắt.
Rất mong các pro khai sáng!

CHÀO BẠN. theo như ý bạn nói là 1s thì xảy ra ngắt thì bạn dùng chế độ Interrup của time1 nó đếm xung đến khi tràn trong thời gian t ta đặt trước thì nó sẽ xảy ra ngắt.
chúc ban thành công.

apiker 14-11-2011 02:04 AM

Trích:

Nguyên văn bởi delta21 (Post 51420)
khi bạn cho timer chạy(tmrXon = 1 ) thì nó bắt đầu tính thời gian từ đó,khi đếm đủ thời gian cài đặt thì sẽ có ngắt.Trong ct bạn pải tính toán để nạp lại timer sau khi thực hiện xong ct ngắt.

Ra là như thế. Cảm ơn bạn nhiều nhé. Nhưng mà bạn ơi, ví dụ mình dùng Timer0 để định thì, nhưng mình ko thấy có bit timer0on. Như thế là thế nào bạn nhỉ?

delta21 14-11-2011 09:33 AM

Trích:

Nguyên văn bởi apiker (Post 51428)
Ra là như thế. Cảm ơn bạn nhiều nhé. Nhưng mà bạn ơi, ví dụ mình dùng Timer0 để định thì, nhưng mình ko thấy có bit timer0on. Như thế là thế nào bạn nhỉ?

mình ghi tổng quát là như thế ,biết bạn dùng timer nào đâu,ví dụ với pic 16f887 ,TIMER 0,timer 0 sẽ bắt đầu chạy khi bạn nạp giá trị vào TMR0,timer1 bắt dầu chạy khi TMR1ON =1 ,timer 2 là T2ON =1 .Bạn tham khảo thêm datasheet

apiker 14-11-2011 10:46 PM

Trích:

Nguyên văn bởi delta21 (Post 51434)
mình ghi tổng quát là như thế ,biết bạn dùng timer nào đâu,ví dụ với pic 16f887 ,TIMER 0,timer 0 sẽ bắt đầu chạy khi bạn nạp giá trị vào TMR0,timer1 bắt dầu chạy khi TMR1ON =1 ,timer 2 là T2ON =1 .Bạn tham khảo thêm datasheet

thông thường mình khai báo cấu hình cho các timer trước như chọn bộ chia... rồi mới đến dòng khai báo giá trị ban đầu cho timer, với thứ tự như thế thì giải thích của bạn mình hiểu, nhưng nếu ta lại cho dòng lệnh khai báo giá trị ban đầu lên trước các dòng khai báo cấu hình, theo như bạn nói thì cứ nạp giá trị thì timer bắt đầu đếm mà ko quan tâm đến bộ chia mà mình cài đặt sao?

delta21 14-11-2011 11:08 PM

When TMR0 is written, the increment is inhibited for
two instruction cycles immediately following the write.
datasheet 16f887 trang 75.

trước giờ mình làm theo hường dẫn trong datasheet,mình chưa thử làm như bạn bao giờ.Bạn thử xem.theo mình nghĩ là nó sẽ chạy ko chính xác,hoặc không chạy.Nếu mà lý luận như bạn thì mình cũng có thể set cho bit tmr1on = 1 trước khi vào thiết lập timer :D

cũng có thể là pic sẽ kiểm tra tất cả các bit cài đặt trước khi kiểm tra bit cho phép chạy!! :D

apiker 14-11-2011 11:30 PM

chak là như thế thật. Cảm ơn bạn nhé


Múi giờ GMT. Hiện tại là 08:29 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam