PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 30-06-2009, 07:31 PM   #1
8xloverock
Nhập môn đệ tử
 
Tham gia ngày: Oct 2008
Bài gửi: 5
:
Giúp đỡ về Timer1 ,Timer 2 ở chế độ counter

Counter của timer0 thì mình hiểu rồi , còn counter của timer1 và timer2 thì sao? Mình tra hoài ko thấy. Trường hợp phải đếm 2 nguồn xung thì phải dùng 2 counter chứ . Các bạn có thể giúp mình dc không? Nếu có ví dụ cụ thể thì càng hay .Thanks các bạn nhiều
8xloverock vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-07-2009, 05:34 PM   #2
8xloverock
Nhập môn đệ tử
 
Tham gia ngày: Oct 2008
Bài gửi: 5
:
Sao chỉ có ngừoi đọc mà không có ai trả lời hết vầy nè ;(
8xloverock vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-07-2009, 09:28 PM   #3
newboystylew
Đệ tử 1 túi
 
Tham gia ngày: Oct 2008
Bài gửi: 19
:
timer1

ban can dem xung thi can phai dung ngat timer,ban gan gia tri cho timer1 va cho no bat dau dem thi ban co the lam viec khac va cho cho den khi no dem xong thi se xay ra ngat,timer1 co 16bit ,
newboystylew vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-07-2009, 12:28 AM   #4
8xloverock
Nhập môn đệ tử
 
Tham gia ngày: Oct 2008
Bài gửi: 5
:
Trong Pic16f877a có 3 timer :
+ Timer0 : 8 bit
+ Timer1 : 16 bit
+ Timer2 : 8 bit
Timer dùng cho nhiều ứng dụng : định thời, capture, pwm, ...

1.Timer0

Thanh ghi tác động:

Các lệnh:
Code:

setup_TIMER_0(mode);
setup_COUNTERS (rtcc_state, ps_state); // hay setup_WDT()
set_TIMER0(value); // hay set_RTCC(value) :xác định giá trị ban đầu (8bit) cho Timer0
get_TIMER0(); // hay get_RTCC() :trả về số nguyên (8bit) của Timer0

Trong đó mode là một hoặc hai constant (nếu dùng hai thì chèn dấu "|"ở giữa) được định nghĩa trong file 16F877A.h gồm :

RTCC_INTERNAL : chọn xung clock nội
RTCC_EXT_L_TO_H : chọn bit cạnh lên trên chân RA4
RTCC_EXT_H_TO_L : chọn bit cạnh xuống trên chân RA4

RTCC_DIV_2 :chia prescaler 1:2
RTCC_DIV_4 1:4
RTCC_DIV_8 1:8
RTCC_DIV_16 1:16
RTCC_DIV_32 1:32
RTCC_DIV_64 1:64
RTCC_DIV_128 1:128
RTCC_DIV_256 1:256

rtcc_state là một trong những constant sau:

RTCC_INTERNAL
RTCC_EXT_L_TO_H
RTCC_EXT_H_TO_L

ps_state là một trong những constant sau:

RTCC_DIV_2
RTCC_DIV_4
RTCC_DIV_8
RTCC_DIV_16
RTCC_DIV_32
RTCC_DIV_64
RTCC_DIV_128
RTCC_DIV_256
WDT_18MS
WDT_36MS
WDT_72MS
WDT_144MS
WDT_288MS
WDT_576MS
WDT_1152MS
WDT_2304MS

Mình cũng chưa hiểu ý nghĩa của hàm WDT_..., ko biết có phải khai báo như trên thì sau khoảng thời gian ms bao nhiêu đó đặt sau WDT_ thì sẽ reset lại Pic ?????

2.Timer1

Thanh ghi tác động:

Các lệnh:
Code:

setup_TIMER_1(mode);
set_TIMER1(value); // xác định giá trị ban đầu (16bit) cho Timer1
get_TIMER1(); // trả về số nguyên (16bit) của Timer1

mode gồm (có thể kết hợp bằng dấu "|"):

T1_DISABLED : tắt Timer1
T1_INTERNAL : xung clock nội (Fosc/4)
T1_EXTERNAL : xung clock ngoài trên chân RC0
T1_EXTERNAL_SYNC : xung clock ngoài đồng bộ
T1_CLK_OUT
T1_DIV_BY_1
T1_DIV_BY_2
T1_DIV_BY_4
T1_DIV_BY_8

3.Timer2

Thanh ghi tác động:

Các lệnh:
Code:

setup_TIMER_2(mode, period, postscale);
set_TIMER2(value); // xác định giá trị ban đầu (8bit) cho Timer2
get_TIMER2(); // trả về số nguyên 8bit

Với mode gồm (co the ket hop bang dau "|"):

T2_DISABLED
T2_DIV_BY_1
T2_DIV_BY_4
T2_DIV_BY_16

period là số nguyên từ 0-255, xác định giá trị xung reset
postscale là số nguyên 1-16, xác định reset bao nhiêu lần trước khi ngắt.



Đọc đi đọc lại chả thấy hướng dẫn gì về counter cho timer1 và 2 cả.
Hàm setup_COUNTERS (rtcc_state, ps_state); là dành riêng cho timer0 .Nếu timer1 và 2 cũng có hàm đại loại như là setup_counters_1 hay gì gì đó thì đỡ biết mấy
8xloverock vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-07-2009, 04:53 PM   #5
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi 8xloverock View Post
Counter của timer0 thì mình hiểu rồi , còn counter của timer1 và timer2 thì sao? Mình tra hoài ko thấy. Trường hợp phải đếm 2 nguồn xung thì phải dùng 2 counter chứ . Các bạn có thể giúp mình dc không? Nếu có ví dụ cụ thể thì càng hay .Thanks các bạn nhiều
tôi chỉ có c/t viết bằng asm thôi.
File Kèm Theo
File Type: rar TIME1.rar (18.7 KB, 104 lần tải)
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-06-2010, 03:48 PM   #6
longphi54
Nhập môn đệ tử
 
Tham gia ngày: May 2008
Bài gửi: 2
:
<code>
#include <16f877a.h>
#fuses noprotect,nowdt,nolvp,xt,put
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(c)
#use fast_io(b)
#use fast_io(d)
#use fast_io(e)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
#byte porte=0x09
#bit d0=portd.0
#bit d1=portd.1
#bit d2=portd.2
#bit d3=portd.3
#bit d4=portd.4
#bit d5=portd.5
#bit d6=portd.6
#bit d7=portd.7
#bit b0=portb.0
#bit b1=portb.1
#bit b2=portb.2
#bit b3=portb.3
#bit b5=portb.4
#bit b4=portb.5
#bit b6=portb.6
#bit b7=portb.7
#bit a0=porta.0
#bit a1=porta.1
#bit a2=porta.2
#bit a3=porta.3
#bit a4=porta.4
#bit a5=porta.5
#bit c0=portc.0
#bit c4=portc.4
#bit c6=portc.6
#bit e0=porte.0
#bit e1=porte.1
#bit e2=porte.2
int8 speed=0;
void main()
{

set_tris_c(0b00000001);
output_c(0);
set_tris_a(0b010000);
output_a(0);
set_tris_d(0b00000000);
output_d(0);
set_tris_e(0b000);
output_e(0);
set_tris_b(0b00000000);
output_b(0);


/////////////////////////////////////
while(1)
{
setup_TIMER_1(T1_EXTERNAL|T1_DIV_BY_1);
set_TIMER1(0);
get_TIMER1();
delay_ms(1000);
setup_timer_1(T1_DISABLED);
speed=get_timer1();
portb=speed;
}
}
</code>
mình viết theo hướng dẫn ở trên. Đọc xung từ RC0 ở timer1 mà sao làm hoài ko chạy vậy ai giúp mình với
longphi54 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-06-2010, 07:47 AM   #7
0903579509
Đệ tử 4 túi
 
Tham gia ngày: Mar 2007
Nơi Cư Ngụ: Da Nang
Bài gửi: 69
:
Để sử dụng Timer1 làm counter chỉ cần dùng lệnh setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1) là counter của T1 sẽ hoạt động
Để lấy data từ T1 :A = getTimer_1()
Để bắt đầu : set_timer1(0)

@ philong54:
Bạn chú ý đoạn này:
set_tris_c(0b00000001);
output_c(0);
Khi output_C(0) thì portC trở thành cổng ra do đó không thể nhận được xung vào. Bạn nên có giải pháp khác.
Thân.
0903579509 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-06-2010, 06:11 PM   #8
longphi54
Nhập môn đệ tử
 
Tham gia ngày: May 2008
Bài gửi: 2
:
thế bạn có cách nào ko tại chân c1 và c2 mình điều chế xung điều khiển động cơ nên phải cho nó ouput
longphi54 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-06-2010, 03:55 AM   #9
manhdktd
Đệ tử 3 túi
 
manhdktd's Avatar
 
Tham gia ngày: Jun 2010
Bài gửi: 57
:
Trích:
Nguyên văn bởi longphi54 View Post
<code>
#include <16f877a.h>
#fuses noprotect,nowdt,nolvp,xt,put
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(c)
#use fast_io(b)
#use fast_io(d)
#use fast_io(e)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
#byte porte=0x09
#bit d0=portd.0
#bit d1=portd.1
#bit d2=portd.2
#bit d3=portd.3
#bit d4=portd.4
#bit d5=portd.5
#bit d6=portd.6
#bit d7=portd.7
#bit b0=portb.0
#bit b1=portb.1
#bit b2=portb.2
#bit b3=portb.3
#bit b5=portb.4
#bit b4=portb.5
#bit b6=portb.6
#bit b7=portb.7
#bit a0=porta.0
#bit a1=porta.1
#bit a2=porta.2
#bit a3=porta.3
#bit a4=porta.4
#bit a5=porta.5
#bit c0=portc.0
#bit c4=portc.4
#bit c6=portc.6
#bit e0=porte.0
#bit e1=porte.1
#bit e2=porte.2
int8 speed=0;
void main()
{

set_tris_c(0b00000001);
output_c(0);
set_tris_a(0b010000);
output_a(0);
set_tris_d(0b00000000);
output_d(0);
set_tris_e(0b000);
output_e(0);
set_tris_b(0b00000000);
output_b(0);


/////////////////////////////////////
while(1)
{
setup_TIMER_1(T1_EXTERNAL|T1_DIV_BY_1);
set_TIMER1(0);
get_TIMER1();
delay_ms(1000);
setup_timer_1(T1_DISABLED);
speed=get_timer1();
portb=speed;
}
}
</code>
mình viết theo hướng dẫn ở trên. Đọc xung từ RC0 ở timer1 mà sao làm hoài ko chạy vậy ai giúp mình với
khi bạn dùng lệnh output_c(0) thi nó đã bao hàm cả việc thiết lập cổng ra rồi.
để đếm xung thi ta cho RC0 là in put
lệnh OUTPUT_C(0x01)
speed=get_timer1();

thay đổi nội dung bởi: manhdktd, 15-06-2010 lúc 03:56 AM. Lý do: thiếu
manhdktd vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-06-2010, 03:56 AM   #10
manhdktd
Đệ tử 3 túi
 
manhdktd's Avatar
 
Tham gia ngày: Jun 2010
Bài gửi: 57
:
cậu xem lại đi nhé
manhdktd vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam