![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Dec 2008
Bài gửi: 10
: |
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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; thay đổi nội dung bởi: namqn, 30-12-2008 lúc 07:21 PM. |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Dec 2008
Bài gửi: 10
: |
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.
|
![]() |
![]() |
![]() |
#3 |
Trưởng lão PIC bang
|
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,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|