View Single Post
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