1. Em định tạo thời gian trễ 1s bằng hàm delay như sau :
void delay ( long time )
{
long n;
for (n=0;n<time;n++);
}
Trễ 1s --> delay(1000000);
Em dùng vi điều khiển 8051, thạch anh 12Mhz.
Em debug thì thấy thời gian thực hiện hàm delay không phải 1s mà tới 56s
Chả biết sao nữa.
1 lệnh là 1 chu kỳ máy, với thạch anh 12Mhz, 1 chu kỳ máy là 1us, 1s = 1,000,000us, vậy thì delay(1000000) phải tạo trễ 1s chứ hè
2. Em cũng định dùng timer0 để tạo trễ 1s với thạch anh 12Mhz, nhưng mà dù dùng chế độ 16 bit thì cao lắm chỉ tạo trễ được 65536us, chưa được 1s, dùng 2 timer thì may ra, nhưng mà không biết cách dùng 2 timer. Các bác giúp em với, em còn gà lắm
3. Em nghĩ ra cách này, không biết đúng không, các bác xem và sửa giùm em với :
dùng bộ định thời timer0 để tạo trễ 1s, chế' độ 2 : 8 bit auto-load, thạch anh 12Mhz
void delay10us()
{
TMOD=0x02; //timer0, che do 2, 8bit auto-load
TH0=0xF5;
TL0=0xF5;
TR0=1;//cho phep timer0
while(!TF0);
TR0=0;//ngu`ng bo dinh thoi
TF0=0;//xoa co` tran`
}
void delay1s()
{
unsigned char i,j,k;
for(i=0;i<10;i++)
for(j=0;j<100;j++)
for(k=0;k<100;k++)
delay10us();
}
chạy debug thì thời gian trễ tới 2s mấy =.=, bó tay
em dùng Keli C để lập trình
Nhân tiện mấy bác cho em hỏi khi nào thì dùng timer0, khi nào dùng timer1, hay là dùng tùy ý, thix dùng cái nào cũng được ?
void delay ( long time )
{
long n;
for (n=0;n<time;n++);
}
Trễ 1s --> delay(1000000);
Em dùng vi điều khiển 8051, thạch anh 12Mhz.
Em debug thì thấy thời gian thực hiện hàm delay không phải 1s mà tới 56s
Chả biết sao nữa.
1 lệnh là 1 chu kỳ máy, với thạch anh 12Mhz, 1 chu kỳ máy là 1us, 1s = 1,000,000us, vậy thì delay(1000000) phải tạo trễ 1s chứ hè
2. Em cũng định dùng timer0 để tạo trễ 1s với thạch anh 12Mhz, nhưng mà dù dùng chế độ 16 bit thì cao lắm chỉ tạo trễ được 65536us, chưa được 1s, dùng 2 timer thì may ra, nhưng mà không biết cách dùng 2 timer. Các bác giúp em với, em còn gà lắm
3. Em nghĩ ra cách này, không biết đúng không, các bác xem và sửa giùm em với :
dùng bộ định thời timer0 để tạo trễ 1s, chế' độ 2 : 8 bit auto-load, thạch anh 12Mhz
void delay10us()
{
TMOD=0x02; //timer0, che do 2, 8bit auto-load
TH0=0xF5;
TL0=0xF5;
TR0=1;//cho phep timer0
while(!TF0);
TR0=0;//ngu`ng bo dinh thoi
TF0=0;//xoa co` tran`
}
void delay1s()
{
unsigned char i,j,k;
for(i=0;i<10;i++)
for(j=0;j<100;j++)
for(k=0;k<100;k++)
delay10us();
}
chạy debug thì thời gian trễ tới 2s mấy =.=, bó tay
em dùng Keli C để lập trình
Nhân tiện mấy bác cho em hỏi khi nào thì dùng timer0, khi nào dùng timer1, hay là dùng tùy ý, thix dùng cái nào cũng được ?
Comment