Trích:
Nguyên văn bởi typhn
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