View Single Post
Old 06-01-2007, 09:44 AM   #15
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Trích:
Nguyên văn bởi typhn View Post
Chào các bác.Em mới học về Pic.Mong các bác chỉ giáo
Em dùng Htpic.
Em viết 1 chương trình đơn giản sử dụng timer0.
Nhưng chả hiểu tại sao thời gian delay ko chính xác(em mô phỏng bằng proteus).
Em delay 1 giây mà mô phỏng chạy những 15 giây(sai số lớn quá)
Mà ko hiểu tại sao lệnh while(1) lại ko lặp lại.Khi đèn chạy được 1 chu kỳ thì nó tắt luôn chứ ko lặp lại.
các bác xem giúp em với
Code:
//========================================================
//Bai toan phanh xe.Phanh duoc noi vao RB0
//khi phanh thi RB0 o muc thap
//binh thuong RB0 o muc cao
//co 8 led o RD8 den RD0 se sang theo quy luat(khi phanh)
//10000000,01000000...00000001,11111111,00000000
//sau do lap lai neu chua nha phanh
//thoi gian delay la 1 giay
//thach anh 20 Mhz

//========================================================
#include<pic.h>
#define out  PORTD
__CONFIG(HS & PWRTEN & BOREN & LVPDIS &WDTDIS );
void DL(unsigned int giay);
//--------------------------------------------------------------------------------------------------
const unsigned char a[]={0b10000000,0b01000000,0b00100000,0b00010000,0b00001000,0b00000100,0b00000010,0b00000001,0b11111111,0b00000000};
//========================================================
void main() 
{
    unsigned char i;	
            TRISB	= 0b11111111;    //Dinh nghia cong B la INPUT		
	RBPU      =0;              //co dien tro trong keo len nguon          
            TRISD           = 0b00000000;		
i=0;
while(1)
  {   
     if(RB0==0)                    //nhan phanh
         {
                out=a[i];
                i=i+1;
                DL(25000);          //delay 1giay
                if(i==11) i=0;
         }
    else
         {
             out=0;
             i=0;
         }
  }
}             
    	
//------------------------------------------------------------------------
void DL(unsigned int giay)    
{
 while(giay--)  
     {  
        //delay 40 microgiay
        PSA=1;      //bo chia dung cho wdt
        T0CS=0;     //dung dem thoi gian
        TMR0=56;  
        while(!TMR0IF);	
        TMR0IF=0;    
     }
}
//=============================THE END===========================
Bạn xem lại code xem. Trong HTPIC định nghĩa thanh ghi TMR0IF là T0IF chứ nhỉ? Nó không định nghĩa TMR0IF đâu. Bạn xem lại đi rùi sửa nếu sai thì xin ý kiến tiếp .

Tiếp, mô phỏng bằng Poteus, quét led hiển thị không chính xác bạn ạ. Nên thử bằng Board thật nhé, xem có vấn đề gì không.

Trong hàm delay của bạn, là kiểu
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn