Trích:
Nguyên văn bởi Em_ku
bác nói rõ hơn một chút được kô ạ?? Còn cái 1s đó kô wan trọng. Theo em nghĩ mình tính toán cũng đúng mà. Thời gian để i tăng lên 1 đơn vị: (255-6+1)*1*16 = 40000. Vậy giá trị số phải là 250. Em wen ở đó kô có dấu bằng xảy ra.
Vấn đề em thắc mắc ở đây. Là cái đoạn sau. Nếu em thay đoạn sau:
void main ()
{
int a=0b00000001;
set_tris_b(0x00);
while (1)
{
portb=a;
tre1s (250);
rotate_left (&a,1);
}
}
thì đèn led ở portb của em nháy từng con với thời gian trễ là 1s. Còn nếu em thay cái đoạn trên thì nó nhảy gì gì đâu ấy à. Em kô hiểu được
|
Tôi thật ko thể hiểu đc sao cái hàm trễ của bạn lại có lúc chạy đúng đc 1s, và cách bạn tính thời gian trễ ở trên là dùng cho ngắt timer ko biết khai báo ngắt của bạn đặt đâu.
Hàm tre1s() của bạn chỉ đơn giản là thực hiện các lệnh trong đó mỗi lệnh tốn khoảng vài us làm sao mà trễ đc đến 1s cơ chứ.