View Single Post
Old 25-02-2009, 01:53 PM   #15
lexuantien
Đệ tử 2 túi
 
Tham gia ngày: Feb 2009
Nơi Cư Ngụ: Qui Nhon - Binh Dinh
Bài gửi: 37
:
Send a message via Yahoo to lexuantien
Đây là chương trình dùng ngắt Timer0 định thì 1s.
Đầu tiên led ở chân RB0 sáng, sau 1s sẽ dịch sang trái, nghĩa là led 1 trên chân RB1 sáng , lần lượt như vậy cho các led trên portB và lặp lại mãi mãi. Em có đoạn code sau:


Code:
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 count;
int8 a;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{
  set_timer0(6);
  ++count;
  if(count == 2000)  // 2000*500us = 500000us = 1s
      {
        count=0;
        rotate_left(&a,1);
      }
}
//Chuong trinh chinh
void main(void)
{
  set_tris_b(0);
  enable_interrupts(int_timer0);
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); 
  enable_interrupts(global);
  set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
  a = 0x01;
  
  while(true)
  {
      PORTB = a;
  }
}
Em không hiểu.
int16 count;
int8 a;
có ý nghĩa là gì?
còn set_timer0(6); là gì ? Đáng lẽ ra là phải set_timer0(8); chứ , do set_timer0(value); là xác định giá trị ban đầu (8bit) cho timer0.

thay đổi nội dung bởi: namqn, 25-02-2009 lúc 04:19 PM.
lexuantien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn