PDA

View Full Version : làm thế nào để viết chương trình DElay dai?


quang_nhon84
30-12-2008, 10:14 AM
Giúp em với,em đang lập trình cho con 16F628 để viết delay 7 tiếng tác động 1 lần nhưng viết thử thì chỉ được 2 s là lệnh Decfsz của vòng lặp không thực hiện được nữa,không hiểu tại sao Em dùng thạch anh 4M. Làm thế nào để viết được Delay dài hơn,giúp em với.Chương trình thử của em:
org 0x005
start
BSF STATUS,RP0
MOVLW 0x00
MOVWF TRISB
BCF STATUS,RP0
MOVLW 0x00
MOVWF PORTB
loop
CALL DELAY1p
CALL DELAY1p
BCF STATUS,RP0
MOVLW 0xF0
MOVWF PORTB

goto loop

DELAY1s
MOVLW d'249'
MOVWF COUNT1
D1
MOVLW d'255'
MOVWF COUNTA
MOVLW 0X01
MOVWF COUNTB

DELAY_0
DECFSZ COUNTA,1
GOTO $+2
DECFSZ COUNTB,1
GOTO DELAY_0
DECFSZ COUNT1,1
GOTO D1
RETLW 0x000
DELAY1p
MOVLW D'6'
MOVWF COUNTC
LOOP
CALL DELAY1s
DECFSZ COUNTC,1
GOTO LOOP
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;
Lệnh Call Delay1p đầu thì chạy được nhưng lệnh thứ 2 thì bó tay

quang_nhon84
30-12-2008, 10:38 AM
Nếu tăng giá trị của vòng lặp Delay1p như ví dụ ở trên là từ 6 lên 10 thì nó cũng chịu luôn, không chạy được vì DECFSZ không giảm về không để thực hiện tiếp.

namqn
30-12-2008, 07:27 PM
Nguyên tắc là bạn thực hiện một thao tác delay ngắn nhiều lần để có được thời gian delay dài hơn. Theo tôi, bạn không nên có hai nhãn "loop" và "LOOP" trong chương trình (đề phòng trường hợp vì lý do gì đó mà case sensitive bị tắt, mặc nhiên là nó được bật).

Bạn thử dùng MPLAB SIM để mô phỏng, xem chương trình của bạn bị vướng ở chỗ nào.

Thân,