View Single Post
Old 27-07-2008, 06:07 PM   #3
dark_electron
Đệ tử 2 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 27
:
Trích:
Nguyên văn bởi bachelor View Post
Tôi đang phải giải quyết một bài toán như thế này:
Cần tạo một khoảng thời gian giữ chậm từ 0,8s đến 3s với sai số nhỏ hơn 5us
Giá trị được đặt bởi một chuyển mạch 8 bit. Step Time là 0,1 s
Vi xử lý: 16F84A
Thạch anh: 4 MHz
Dùng CCS thì sai số lớn quá ! Định dùng MASM nhưng với thời gian lớn thế này thì không biết phải giải quyết như thế nào ! Mong mọi người chỉ giúp !
Thanks !
Long_Delay
movlw d'4' ; delay 4times x 200ms = 800ms
movwf count2
d0
movlw d'200' ; delay 200times x 1ms = 200 ms
movwf count1
d1
movlw 0xC7 ; delay 1ms (with 4MHz crystal)
movwf counta
movlw 0x01
movwf countb
Delay_0
decfsz counta, f
goto $+2
decfsz countb, f
goto Delay_0

decfsz count1 ,f
goto d1

decfsz count2, f
goto d0

retlw 0x00

Trên là hàm delay 800ms = 0.8s theo yêu cầu của bạn. Bạn thay biến count2 bằng giá trị trong bộ đếm để có thời gian delay tăng/giảm theo ý muốn. Giá trị min của hàm delay trên là 200ms khi count2 = 0.
dark_electron vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn