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 16-10-2008, 03:24 PM   #1
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
giúp mình với!!!!
ai rành về counter xin chi mình cách thiết lập timer ở chế độ đếm?nếu có code thì tốt quá!!!
có phải cứ có 1 xung đếm thì timer sẽ ngắt 1 lần?
mình thử viết như thế này nhưng k thấy nó chạy j cả.
Code:
#include "16F877A.h" // PIC16F877A header file
#device 16F877A*=16 ADC=10
#include <defs_16F877A.h>
#fuses HS, NOWDT, PUT, NOPROTECT, NOLVP // for debug mode
#use delay(clock=8000000) // for 4Mhz crystal
#use fast_io(b)

int16 count0;
int8  b0;
///////////////////////////////////////////////////////////
#INT_TIMER0
TIMER0_ISR()
{
   ++count0;
   if (count0==100)
      {
        count0=0;
        b0=b0+1;// dich trai a 1bit
        //portd=170;
      }
   if (b0==2)
      {
        b0=0;
        count0=0;
        //HTGT0=1;
        portb=0;
        //portd=252;
        disable_interrupts(int_timer0);
      }
}
/////////////////////////////////////////////////////////////////////
void main(void)
{
   set_tris_a(255); // Chi co dau vao tuong tu
   set_tris_b(0);
   set_tris_d(0);
   portb=255;
   //portd=255;
   count0=b0=0;
   enable_interrupts(global);
   enable_interrupts(int_timer0);
   setup_TIMER_0(RTCC_EXT_L_TO_H );
   setup_COUNTERS(RTCC_EXT_L_TO_H,RTCC_DIV_2);
   set_TIMER0(1);
   while(true)
   {
      
   }
}
chương trình của mình định thử là nếu đếm đc 200 xung thì tắt hết led ở portB.nhưng khi thử k thấy có hiện tượng j cả.
bean984 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2008, 12:50 AM   #2
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
Trích:
Nguyên văn bởi bean984 View Post

Code:

   if (b0==2)
      {
        b0=0;
        count0=0;
        //HTGT0=1;
        portb=0;
        //portd=252;
        disable_interrupts(int_timer0);
      }
}
có lẽ là do đoạn code trên bạn ạ. bạn nhầm tại câu lệnh "disable_interrupts(int_timer0);" có phải bạn muốn xóa cờ ngắt cho lần tiếp theo nhưng câu lệnh trên là xóa bit enable cho ngắt timer0. bạn đọc kĩ lại help CCS C và datasheet của 877a nhé. xem mình có đúng ý bạn ko!! good luck!!
cong1810 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à 03:43 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