View Single Post
Old 07-10-2010, 02:54 PM   #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 zmaxtil View Post
Em đang làm một mạch đếm lùi thời gian,dùng 6 Led 7 đoạn A chung,Khi giờ phút giây đều là 0 thì sẽ set cho một chân RC6 lên mức 1 để kích gì đó,dùng ngắt ngoài để vào mode chỉnh time,ngắt timer để cứ 1s thì cho giảm một đơn vị giây.Nhưng sao nó chạy táng lạng luôn,các cao thủ chỉ giúp em .em gửi code và file mô phỏng lên để các bác xem nó chạy.em chỉ mới làm phần cho nó đếm về 0 ,chưa xong nên em chưa làm phần kích chân Rc6,nhờ các bác chỉ giáo.

Code:
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use fast_io(d)
#use fast_io(c)
#use fast_io(a)
#byte portb = 0x06
#byte portc = 0x07
#byte portd = 0x08
#bit rb1 = portb.1
#bit rb2 = portb.2
#bit rb3 = portb.3
int mode_= 0;
int i,j,k,x,y,z;
int s_chuc,s_dv,m_chuc,m_dv,h_chuc,h_dv;
#int_ext
void mode()
{disable_interrupts(INT_TIMER2);
if (mode_ == 0) disable_interrupts(INT_TIMER2);
mode_ +=1;
if (mode_ > 3) 
   mode_  = 1;
}
#int_timer2
void update()
{
 setup_timer_2(t2_div_by_16,6,10);  // na.p la.i cho timer 2
 k++ ; // ta(ng bie^'n ?e^'m
 if ( k == 250 ) /// 250 x 4.000 = 10.000.000 us
 {if (x==0)  {x=59;y--;} else x=x-1;k==0;
 if (y==0)  {y=59;z--;} else y=y-1; 
 }
}

 //******************Hien thi***********************
 void hienthi()
 {
   s_chuc=x/10;
   s_dv=x%10;
   m_chuc=y/10;
   m_dv=y%10;
   h_chuc=z/10;
   h_dv=z%10;
   
  for(j=0;j<=50;j++)
     { portc=0b00100000;
       i=s_dv;
       portd=i;
       delay_us(500);
       
       portc=0b00010000;
       i=s_chuc;
       portd=i;
       delay_us(500);
       
       portc=0b00001000;
       i=m_dv;
       portd=i;
       delay_us(500);
       
       portc=0b00000100;
       i=m_chuc;
       portd=i;
       delay_us(500);
       
       portc=0b00000010;
       i=h_dv;
       portd=i;
       delay_us(500);
       
       portc=0b00000001;
       i=h_chuc;
       portd=i;
       delay_us(500);
     } 
 }

 // ********************Chuong trinh chinh*************************

 void main()
 {
 x=y=z=10;
 enable_interrupts(GLOBAL);
 enable_interrupts(INT_EXT);
 portc=0;
 portd=0;
 set_tris_c(0);
 set_tris_d(0);
while(1)
 {
 while(!mode_)
 {
   if(rb3)
         {                
          enable_interrupts(INT_TIMER2);
          setup_timer_2(t2_div_by_16,6,10); 
          hienthi();        
         }
   hienthi();
 }
 while(mode_>0)
 {
 if(rb1) {
         while(rb1) { hienthi();}
         if (x==59) x = 0; else
         x +=(mode_==1)?1:0;
         if (y==59) y = 0; else
         y +=(mode_==2)?1:0;
         if (z==99) z = 0; else
         z +=(mode_==3)?1:0;
        
         }
 if(rb2) {
         while(rb2) { hienthi();}
         if (x==0) x = 59; else
         x -= (mode_==1)?1:0;
         if (y==0) y = 59; else
         y -= (mode_==2)?1:0;
         if (z==0) z = 99; else
         z -= (mode_==3)?1:0;
         }
 if(rb3)
         {
          enable_interrupts(INT_TIMER2);
          setup_timer_2(t2_div_by_16,6,10); // (4/20M)*4*C0*2           
         }
hienthi();
 }
 }
 }
thiếu dòng lệnh này:
set_tris_b(0xff);//portb làm port nhập
chưa có phần chống dội phím.
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.

thay đổi nội dung bởi: tdm, 07-10-2010 lúc 03:29 PM.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn