PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   làm thế nào để viết chương trình DElay dai? (http://www.picvietnam.com/forum/showthread.php?t=3385)

quang_nhon84 30-12-2008 10:14 AM

làm thế nào để viết chương trình DElay dai?
 
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:
Code:

        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,


Múi giờ GMT. Hiện tại là 05:38 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam