PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 21-08-2010, 02:45 AM   #1
otacon
Đệ tử 2 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 36
:
E mới vào nghề,thắc mắc về CCP!

E dùng CCP bắt xung ngoài để đo tần số,vì e mới chuyển từ AT89 nên còn bỡ ngỡ mong đc chỉ bảo:

E có đoạn code như sau:
#include<16f877.h>
#fuses XT,NOLVP,NOWDT,PUT
#use delay (clock=4000000) // defind crystal = 4MHz

byte CONST MAP[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 f};

//===========================================
// this function use to display number 00=99
// input : n = number to display
//===========================================
void display(int n)
{
char b;
b=((MAP[n/100]) ^ 0xff); //hang tram
if ((n/100)==(0)) b=0xff; //kill Led not Value
output_b(b);
output_low(PIN_D0);
delay_ms(1);
output_high(PIN_D0);

b=((MAP[(n%100)/10]) ^ 0xff); //hang chuc
if ((n/100)==(0)&&(n/10)==(0))
b=0xff; //kill Led not Value
output_b(b);
output_low(PIN_D1);
delay_ms(1);
output_high(PIN_D1);

output_b((MAP[n%10]) ^ 0xff); //hang dv
output_low(PIN_D2);
delay_ms(1);
output_high(PIN_D2);
}

long rise,fall,pulse_width;
unsigned int16 xung=0; // khai báo bie^'n encoder la so^' 16 bit
#int_ccp2
void isr()
{
++xung;
rise = CCP_1;
fall = CCP_2;

pulse_width = fall - rise; // CCP_1 is the time the pulse went high
}
//============================================
// main program
//============================================
void main()
{

setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise
setup_ccp2(CCP_CAPTURE_FE); // Configure CCP2 to capture fall
setup_timer_1(T1_INTERNAL); // Start timer 1

enable_interrupts(INT_CCP2); // Setup interrupt on falling edge
enable_interrupts(GLOBAL);


while(TRUE) // vong lap lien tuc
{
displayxung);

}
}



Xin hỏi cả nhà là giá trị xung đếm được cất ở thanh ghi nào?đoạn code trên e có dùng 1 biến xung ở trong phần ngắt để đếm xung nhưng xuất ra = 0.Có nghĩa là ct không nhảy vào ngắt,tại sao vậy? E có mô phỏng trên Proteus,2 chân ccp1,ccp2 được cấp xung đầy đủ nhưng vẫn kô có ngắt.
Xin hỏi khai báo như trên đã đầy đủ chưa?
otacon vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 09:14 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