PDA

View Full Version : Delay thời gian lớn với MASM ?


bachelor
26-07-2008, 04:53 PM
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 !

namqn
26-07-2008, 05:58 PM
Bạn cho biết thêm: PIC chỉ làm mỗi việc tạo thời gian trễ này hay còn phải làm những công việc khác?

Nếu PIC chỉ làm mỗi việc tạo thời gian trễ, bạn có thể dùng các vòng lặp lồng nhau để làm trễ chính xác đến từng chu kỳ máy (phần này đã có tại luồng http://www.picvietnam.com/forum/showthread.php?t=238).

Nếu PIC cần làm những công việc khác trong khi chờ hết thời gian trễ này, bạn có thể tham khảo các kỹ thuật được giới thiệu tại piclist: http://www.piclist.com/techref/microchip/timenint.htm.

Thân,

dark_electron
27-07-2008, 06:07 PM
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.