![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
#1 |
Đệ 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? |
![]() |
![]() |
![]() |
#2 |
Đệ tử 2 túi
Tham gia ngày: Oct 2006
Bài gửi: 36
: |
Quái lạ,chẳng lẽ trên 4rum không ai bị vấn đề này sao,mình đã tìm ra vấn đề là do lỗi của file pic16.dll.Nếu dùng file pic16.dll mặc định của bản Proteus 7.5 là ct mô phỏng sẽ không thể vào ngắt.Mình đã down trên mạng về file pic16.dll đã sửa lỗi.
Buồn ghê,vấn đề to như cái bánh xe như vậy mà không có ai lên tiếng,cuối cùng mình tự hỏi rồi tự...mò luôn. |
![]() |
![]() |
![]() |
|
|