Tài liệu tham khảo cho các bạn học chuyên ngành | Việc còn lại và cũng là việc quan trọng nhất là việc tính toán giá trị chia (prescaler) cho xung nhịp của T/C0 và việc xác định giá trị khởi đầu cần gán cho thanh ghi TCNT0 để có được 1 khoảng thời gian định thì chính xác như mong muốn. Trước hết chúng ta sẽ chọn prescaler sao cho hợp lí nhất (chọn giá trị chia bằng cách set 3 bit CS02,CS01,CS00). Giả sử nguồn xung clock “nuôi” chip của chúng ta là clkI/O=8MHz tức là 1 nhịp mất 1/8us, nếu chúng ta để prescaler=1, tức là tần số của T/C0 (tạm gọi là fT/C0) cũng bằng clkI/O=8MHz, cứ 1/8us T/C0 được kích và TCNT0 sẽ tăng 1 đơn vị. Khi đó giá trị lớn nhất mà T/C0 có thể đạt được là 256 x 1/8us=32us, giá trị này nhỏ hơn 1ms mà ta mong muốn. Nếu chọn prescaler=32 (xem bảng 1) nghĩa là cứ sau 32 nhịp (4us) thì TCNT0 mới tăng 1 đơn vị, khả năng lớn nhất mà T/C0 đếm được là 256 x 4us=1024us, lớn hơn 1ms, vậy ta hoàn toàn có thể sử dụng prescaler=32 để tạo ra một khoảng định thì 1ms. Bước tiếp theo là xác định giá trị khởi đầu của TCNT0 để T/C0 đếm đúng 1ms (1000us). Ứng với prescaler=32 chúng ta đã biết là cứ 4us thì TCNT0 tăng 1 đơn vị, dễ dàng tính được bộ đếm cần đếm 1000/4=250 lần để hết 1ms, do đó giá trị ban đầu của TCNT0 phải là 256-250=6.