PDA

View Full Version : Cơ bản về timer (CCS C)


dream
05-12-2008, 05:32 PM
Mình hiện nay cũng đang làm mạch đếm sản phẩm dùng PIC hiển thị số đếm ra LCD . chương trình mình viết dùng CCS Compile . Nhưng hiện nay không biết cách sử dụng Timer của PIC như thế nào . Mong các huynh đệ giúp đỡ .
Sau đây là một đoạn chương trình tham khảo sử dụng Timer mà mình không hiểu :
set_timer0(0); //Gan gia tri ban dau cho counter
setup_timer_1(T1_EXTERNAL); // khoi tao timer 1 dem xung ngoai
while (1)
{

giatri=get_timer0(); //Lay gia tri trong cac thanh ghi cua counter


HEX_BCD(); //goi chuong trinh con HEX_BCD
hienthi(); //goi chuong trinh con hien thi

}
về phần cứng thì ngõ vào xung ngoại mình cấp là xung clock đưa vào chân RA4/TOCKI/C1OUT . Khi mô phỏng dùng proteus thì đã chạy , nhưng không hiểu rõ timer .
Xin được giúp đỡ . Cám ơn nhiều !

0903579509
07-12-2008, 10:26 AM
Ở đoạn chương trình trên, chỉ làm việc ở timer0, không quan tâm đến timer1, bạn nên thay dòng lệnh :
setup_timer_1(T1_EXTERNAL); // khoi tao timer 1 dem xung ngoai
bằng dòng lệnh:
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1) // khởi tạo timer0 đếm xung ngoài theo cạnh lên, prescaler = 1
Chúc vui!

trungduc
07-12-2008, 12:36 PM
Mình cũng đang quan tâm đến vấn đề đếm bằng timer0. Anh em nào có code ASM cho mình tham khảo với.
Thanks!

dream
07-12-2008, 11:35 PM
chương trình trên tui thấy khi chạy chương trình thì nó đếm từ 0-->255.
Giờ muốn đặt trước số đếm thì làm sao các Bác .
Nghĩa là tui muốn cho nó đếm từ 0-->100 thôi.
Sau đây tôi có tham khảo được một đoạn chương trình sau .Nhờ các bác phân tích dùm nhé :

setup_counters(rtcc_ext_l_to_h, rtcc_div_1); //khoi tao counter0 o che do dem
// voi he so chia 1
i=208;

while(1)
{
set_rtcc(208); //dat truoc gia tri cho counter vao thanh ghi option*/

while (tmr0!=0) //tang bien dem thanh ghi option*/

{
a=(tmr0-i);
}

HEX_BCD(); //goi chuong trinh con HEX_BCD
hienthi(); //goi chuong trinh con hien thi

}

dream
07-12-2008, 11:46 PM
ở chương trình trên : tui thấy hàm set_rtcc(208) có nghĩa là đặt trước số đếm ban đầu là 208. sau đó hàm a=(tmr0-i) là lấy số đếm từ 0-->50.
Như vậy số đếm sản phẩm của chương trình là 50 thoi .
khi tui thử với chương trình của mình thì thấy báo lỗi ở dòng lệnh while(tmr!=0) với thông báo là "undefined identifier tmr0" . Nghĩa là nó không xác định được tmr0 .
theo tui biết thì tmr0 là thanh ghi chứa số đếm của Timer0 .
Vậy không hiểu cái lỗi đó là sao hả các Bác .

các Bác giúp em với !

dream
12-12-2008, 01:09 PM
Dưới đây là bài đếm sản phẩm hiển thị LCD tui đã mô phỏng xong .
chương trình mô phỏng proteus , ngôn ngữ C.
Bác nào chưa biết có thể tham khảo .
chúc các bác một ngày vui vẻ

thongdtk3
22-12-2008, 01:03 AM
ở đâu vậy?

dream
22-12-2008, 11:47 PM
Bữa trước mình post lên nhưng không được . Nay post được rùi .
Bác nào quan tâm có thể tham khảo nè .

thaithien
16-04-2009, 02:00 AM
Có ai giải thích dùm là đếm cạnh lên và cạnh xuống là thế nào không ?Ảnh hưởng tới ngắt như thế nào ?

thaithien
18-04-2009, 12:28 AM
Làm ơn giúp dùm đi.Cho hỏi thêm câu nữa về chức năng timer và counter của timer0 đi.Chưa hiểu nhiều lắm mặc dù đã search diễn đàn rồi.

phandinh
18-04-2009, 10:38 AM
cạnh lên (rising edge) : thay đổi từ mức 0 ==> mức 1.
cạnh xuống (falling edge) : thay đổi từ mức 1 ==> mức 0.
Timer dùng để delay , đếm (counter), hoặc 1 số timer có chức năng đặc biệt.
việc dùng ngắt timer làm cho chương trình trở nên linh hoat hơn phương pháp tuần tự.

thaithien
18-04-2009, 11:47 AM
Ai có chưong trình để thể hiện 2 hiện hai chức năng counter và timer của timer0 cho mình xin.Nếu có các code khác cũng được.Cảm ơn rất nhiều.

the_duyet
13-05-2009, 03:45 AM
Bữa trước mình post lên nhưng không được . Nay post được rùi .
Bác nào quan tâm có thể tham khảo nè .

Cảm ơn bạn,nhưng sao tôi tải về lại không có file dsp.c,bạn có thể share cho mọi người nghiên cứu được không? Rất mong hồi âm của bạn!Cảm ơn!