Ðề tài: Hỏi bài?
View Single Post
Old 14-01-2008, 11:06 PM   #5
angel_eyes
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 2
:
Trích:
Nguyên văn bởi wicamb View Post
chào cả nhà.Là 1 người mới bắt đầu về Pic nên em cũng có 1 vài câu hỏi,mà tinh thần thì cũng như bạn "anhdk" vậy.Vi e thấy mục này thich hợp nên muốn hỏi 1 câu:
Nếu viết 1 đoạn chương trình delay đơn giản có nội dung

..... ;các lệnh ở trên


MOVLW 0x20 ;đưa giá trị 20h vào W
MOVWF delay_reg ;gán W cho delay_reg
loop
DECFSZ delay_reg ;giảm giá trị của delay_reg
;và so sánh với 0
GOTO loop

..... ;các lệnh khác

(thạnh anh 4MHz)
gọi t1 là thời gian của 1 chu kì lệnh thì
thời gian của đoạn delay la 3*t1*(N+1)(ở đây N=20)

tại sao lại là N+1 mà không phải N,e đếm thử mà
thấy chưa hợp lí? Nhờ mọi người giải thich tường minh cho
e đoạn này ,xin cảm ơn
Em cũng thắc mắc chỗ này trong cái tut02.pdf của diễn đàn về Delay. Em đã thử đếm thì rõ ràng nếu N = 20 thì sẽ có 19 vòng lặp chương trình thực hiện đủ 2 lệnh DECFSZ và GOTO (tốn 3 chu kỳ lệnh). Tới vòng cuối cùng, lúc đó giá trị thanh ghi W là 1 và lệnh DECFSZ sẽ giảm nó về 0, sau đó so sánh với 0. Vì lúc này giá trị = 0 nên nó sẽ không thực hiện lệnh GOTO nữa mà thay vào đó bằng lệnh NOP (1 chu kỳ).
Như vậy tổng số chu kỳ thực hiện sẽ là 3*19 + 2 chứ đâu phải là 3*(20+1) như bài viết. Như vậy công thức 3*(N+1)*t1 là không đúng. Ngay cả 3*N*t1 cũng không đúng vì ở vòng lặp cuối, lệnh sau DECFSZ sẽ được bỏ qua và thay bằng NOP.
Mọi người có thể giải thích rõ chỗ này không ạ ?
angel_eyes vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn