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===========================