Chào mọi người!
Em có vấn đề thắc mắc mong được mọi người trả lời.
Em đang viết hàm delay_s (giây) cho MCU 8051 sử dụng thạch anh 12MHZ.
Thì em được biết khi mình cho biến có kiểu dữ liệu cần byte lớn thì thời gian xử lý lệnh sẽ tăng lên.
Ví dụ :
- Biến loop kiểu unsigned int (2 byte) chạy vòng lặp 21738 lần thì sẽ delay được khoảng 0,1s.
- Biến loop kiểu unsigned long (4 byte) chạy vòng lặp 21738 lần thì sẽ delay được 1s.
Nhưng em đang thắc mà là tại sao khi cho 2 biến có cùng kiểu dữ liệu thì thời gian xử lý lệnh sẽ khác nhau như trường hợp dưới ( em chưa biết thuật ngữ nào để diễn tả :3)
Ví dụ:
- Biến loop kiểu unsigned int chạy vòng lặp 32767 hoặc dưới giá trị này ( có giá trị 15 bit) thì thời gian lặp khoảng 0,1s.
- Biến loop kiểu unsigned int chạy vòng lặp 32768 ( có giá trị 16 bit) thì thời gian lặp hơn 1s. ( Chênh lệch nhiều)
Code mẫu về delay em sử dụng:
void delay_s(unsigned int time) //Ham delay giay
{
unsigned long loop; //21738 loop thi duoc 1s sai so 0%
while(time>0)
{
loop=0;
while(loop < 21738)
{
loop++;
}
time--;
}
}