Nguyên văn bởi Acxen_lupine
Xem bài viết
nhưng với đoạn code của L.T.M ta có đồ thị xung như sau t_delay=1s:
còn mình thử nghiệm với đoạn code:
#include <AT89X51.H>
//khai bao thu vien
#define bat 1
#define tat 0
unsigned int i,j;
//khai bao bien toan cuc
sbit led1=P1^0;
//tao ham delay
void delay(long ms)
{
for(i=0;i<ms;i++)
for(j=0;j<120;j++)
;
}// tao tre 1ms
void main()
{
while(1)// Lap vo han
{
led1=bat;
delay(100);//t_delay=100ms
led1=tat;
delay(100);
}
}
thì đồ thị nó như sau:
vậy với đoạn for thì t_delay=100ms
vậy công thức cho đoạn như trên "Ko phải là ms*12us đâu bạn ak!! mà là ms*120*50 us".có chính xác k?
theo trên thì t_delay=100*120*50=600000=600ms. ?????
mình cũng đã đua ra kết luận vội vàng cho vòng for trên, nhưng với cấu trúc for:
void delay(long time)
{
long n;
for(n=0;n<time;n++)
;
}
thì t_delay=ms*120*55 là chính xác(tuơng đối)
còn với vòng for của L.T.M thì t_delay=ms*120*8.3 (tương đối)
để hiểu vì sao thế thì ta debug trên kielc sẽ biêt!
Comment