NHÓM HỌC PIC
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

CÙNG HỌC TIMER QUA BÀI TOÁN

Go down

CÙNG HỌC TIMER QUA BÀI TOÁN Empty CÙNG HỌC TIMER QUA BÀI TOÁN

Bài gửi  Admin Fri Jun 12, 2009 8:33 am

DOWNLOAD: http://phamdungcnkt.fileave.com/Timer 0.rar

#include <16F877A.h>
#include <def_877a.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
int8 i,j,x,a;

void taotre1s(x ) // -> cu phap co van --> sua lai la: void taotre1s(int8 x)
{
TMR0IF = 0; // tat co ngat cua timer0
for (i=0;i<x;i++)
{

set_timer0(8 );
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
while (TMR0IF==0) // Kiem tra co ngat cua timer0, neu tran thi TMR0IF = 1
{
//TMR0IF=0; // Tinh toan:
} // thoi gian de tang i len 1: ti = (255-8+1)*4/20MHz * 256 = 12697.6 (us)
TMR0IF=0; // thoi gian sau x lan: 12697.6*x (us)
} // --> x = 79 -> t = 1003110.4 (us)

}

void main()
{
set_tris_d(0x00);
a=0;
while (1)
{
taotre1s(79);
output_high(PIN_D0);
taotre1s(79);
output_low(PIN_D0);
}

http://phamdungcnkt.fileave.com/TIMER.pdfhttp://phamdungcnkt.fileave.com/TIMER.pdf


Được sửa bởi Admin ngày Fri Jun 12, 2009 9:30 am; sửa lần 7.
Admin
Admin
Admin

Tổng số bài gửi : 18
Join date : 11/06/2009

https://microchipvn.forumvi.com

Về Đầu Trang Go down

CÙNG HỌC TIMER QUA BÀI TOÁN Empty TIMER0

Bài gửi  Admin Fri Jun 12, 2009 8:36 am

[size=18]Sao ko tải dc chương trinh của A. Tú thế. Mọi người ai bị ko?
Đọc cái của Đạt cá 1 số cái vẫn chưa hiểu như:
- int8 i,j,x,a; ( int này có phải là ngắt (interrupt) ko)
- Cách tính thời gian: Thoi gian de tang i len 1: ti = (255-8+1)
*4/20MHz * 256 = 12697.6 (us)
Mọi nhười có thể giai thích giúp minh ko
////////////////////////////////////////////////////////////////////////////
Anh kết hợp đọc tài liệu trong lần đầu tiên anh Tú gửi lên ấy.

- Thứ nhất phần int8 i,j,x,a; là phần khai báo biến trong ngôn ngữ lập trình C, đối với CCS thì int8 tương đương với int, đây là kiểu biến 1 byte, nếu không dấu thì sẽ có giá trị từ 0 -> 255, có dấu thì -128 -> 127. Còn 1 số kiểu biến nữa ví dụ float, int1, long .... anh xem trong lập trình C cơ bản và lập trình CCS thì sẽ rõ cái này.

Thứ 2: anh kiếm trong 1 cuốn khoảng 150 trang mà anh Tú đã gửi lần trc nói về cấu tạo của PIC16F877A đọc qua phần timer0.

Sơ lược là thế này, trong timer 0 chúng ta có thể chỉ định giá trị bắt đầu đếm của timer0 từ 1 giá trị bất kì đến 255, trong CCS thì làm cách đó bằng việc sử dụng câu lệnh set_timer0(x) với x là giá trị bắt đầu đếm của timer0 ( ở đây x = 8 ) ta sẽ thấy số giá trị mà timer0 đếm được là 255-8+1 nó giống như bài toán trồng cây vậy, tính số cây trồng được khi biết số khoảng, hoặc tương tự như câu lệnh for(i = 0; i<8; i++) chú ý là i++ mới có 8 giá trị. Từ đó ta biết được timer0 đã đếm được bao nhiêu giá trị từ giá trị cho trước đến lúc tràn. >>> xong đoạn 255 - 8 +1.
Tiếp đó, thời gian để giá trị trong thanh ghi của timer0 tăng lên 1 được tính bằng cách 4*1/fosc, giá trị 4 có được là do khi tần số từ thạch anh vào bộ đếm của timer0 mặc định bị chia 4 ( dễ thấy f = 1/T ). Trong bài toán này fosc là tần số thạch anh và bằng 20MHz. Giá trị 256 là do bộ chia tần prescaler, đây là bộ chia tần 8 bit ( ta có thể set được giá trị này tương ứng là 1,2,4,8,.. 256 <=> 2^0, 2^1 ... 2^8 ) >>> thời gian để giá trị thanh ghi timer0 TMR0 tăng lên 1 đơn vị là [ 4/fosc * Prescaler ] >>> xong phần sau.

>>> kết luận có thể tính được thời gian sau 1 lần timer0 tràn như trên. Khi timer0 tràn sẽ bật cờ ngắt TMR0IF, đầu tiên anh tú tắt cờ ngắt này bằng câu lệnh TMR0IF = 0, sau đó kiểm tra xem timer0 tràn hay chưa, nếu nó tràn thì lại gán nó = 0. >>> đó là cách để tính thời gian sau 1 chu kì đếm của timer0. Phần còn lại chắc OK nhỉ ^^
[/size]
Admin
Admin
Admin

Tổng số bài gửi : 18
Join date : 11/06/2009

https://microchipvn.forumvi.com

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết