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 11-10-2011, 02:37 AM   #1
nga381lavender
Nhập môn đệ tử
 
Tham gia ngày: Feb 2010
Bài gửi: 2
:
Đo tần số bằng timer1 chế độ counter

Các anh ơi cho em hỏi, em dùng Timer 1 đo tần số bộ dao động ngoài tạo bởi con IC Timer 555 ,đo số xung bởi timer1 chế độ counter trong thời gian 1s tạo bởi timer0 nhưng kết quả đo được không chính xác.Ban đầu proteus mô phỏng là 0 Hz (cảnh báo "Simulation is not running in real time due to excessive cpu load" ), đợi 1 lúc lâu sau thì đạt tầm >34kHz mà theo lý thuyết tính tần số ra của 555 với mạch của em,thì chỉ đạt tầm 6->7kHz thôi. Code của em như sau ạ :

#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)//Fosc=1us
#byte T1CON =0x10//dia chi thanh ghi dieu khien cua timer1
#use fast_io(c)
#use fast_io(d)
#include <lcd.c>
int16 count;
int16 uiTimer1Ctr;//so xung lay ra tu timer 1 ~ tan so ra cua pin 3 of IC555
static void initCPU(void);
void main()
{
initCPU();
while(1)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\rTan so:%Lu",uiTimer1Ctr);
}
}
#INT_timer0 //Chuong trinh ngat timer0
void Timer0_isr() //Ham duoc goi khi timer 0 bi tran (255->0)
{
int16 t0ctr;//bien dem so lan tran cua timer0
set_timer0(56);//Tdinhthi=2*(256-56)*1us=400us
++t0ctr;
if(t0ctr==2500)//1s
{
bit_clear(T1CON,0);//stop bo dem timer1
uiTimer1Ctr=count*65535+get_Timer1();
t0ctr=0;
bit_set(T1CON,0);
set_TIMER1(0);
}
}
#INT_timer1
void Timer1_isr()
{
count++;
}

static void initCPU()
{
set_tris_d(0);
set_tris_c(0b00000001);
setup_TIMER_1(T1_EXTERNAL|T1_DIV_BY_1);
set_TIMER1(0);
setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_2);
set_timer0 (56);
enable_interrupts (INT_timer0) ;
enable_interrupts (INT_timer1);
enable_interrupts (global) ;
count=0;
lcd_init () ;
}
nga381lavender vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-10-2011, 03:18 PM   #2
hongmta
Đệ tử 2 túi
 
hongmta's Avatar
 
Tham gia ngày: May 2009
Bài gửi: 41
:
đo tần số ngoài bạn thử dùng ngắt ngoài RB0 xem!
xem qua code bạn thấy đã dùng chế độ counter cho Timer0 rồi mà vẫn dùng ngắt timer0 là ý gì nhỉ???
__________________
Các loại module, linh kiện tại http://dientuso1.com/
hongmta vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-10-2011, 12:38 AM   #3
nga381lavender
Nhập môn đệ tử
 
Tham gia ngày: Feb 2010
Bài gửi: 2
:
Nếu dùng ngắt ngoài RB0 thì vẫn cần dùng timer0 để định thời gian 1s rồi tính ra tần số hả bạn? Ở đây mình dùng timer1 ở chế độ counter đếm xung ngoài vào RC0 của pic và dùng timer0 định thời gian 1s thì cũng thế mà .Nhưng tại sao mô phỏng thì kết quả sai tùm lum, lớn hơn lý thuyết rất nhiều :|
nga381lavender 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à 12:17 AM.


Đượ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