View Single Post
Old 25-03-2011, 10:59 AM   #3
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi caremlanh View Post
khi đang ở case 1, có ngắt thì bien++, tức là sẽ chuyển sang case 2 chứ ko quay lại case1.
còn nếu muốn chuyển sang case 3 chẳng hạn thì mình dùng lệnh goto. bạn xem chương trình mình viết nha
code của bạn:
Code:
#include <16f877a.h>
#include <def_877a.h>
#device *=16
#FUSES NOWDT, HS
#use delay(clock=20Mhz)

int8 bien=0, i=0;

#INT_EXT
void ngat_ngoai()
{
   
   bien++;
   if(bien>3)bien=0;//dem=0->3
   if(bien==2)i=1;
   else i=0;
}

void main()
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_EXT); 
   ext_int_edge(H_TO_L);
   
   trisb=0x01;
   trisd=0;
   portd=0x00;

while(true)
{
   if(i==1)goto here;
   switch(bien)
   {   
      case 0: {portd=0x01;delay_ms(500); break;}
      case 1: {portd=0x02;delay_ms(500); break;}
      case 2: {portd=0x04;delay_ms(500); break;}
      case 3: here: {portd=0x08;delay_ms(500); break;}
   }
}

}
Trích:
khi đang ở case 1, có ngắt thì bien++, tức là sẽ chuyển sang case 2 chứ ko quay lại case1.
nó sẽ không chuyển ngay mà phải đợi làm xong case 1 rồi nó mới chuyển.
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn