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ỗi chương trình (http://www.picvietnam.com/forum/showthread.php?t=3825)

newpic2009 02-04-2009 12:31 PM

lỗi chương trình
 
hi,
mình viết 1 đoạn để xuất ra GP1, GP2, GP5 theo xung nhu sau :
GP5 __i-----------------------------------------
GP1 __i--i____i--i____i--i____
GP2 _____i--i____i--i____i--i____

và lập lại như trên, code mình viết như sau,

Code:

;****************************************************
        list      p=12F508            ; list directive to define processor
        #include <p12F508.inc>        ; processor specific variable definitions

        __CONFIG  _MCLRE_ON & _CP_ON & _WDT_OFF & _IntRC_OSC

;***** VARIABLE DEFINITIONS
                UDATA
count1        res 1                        ; delay loop counters
count2        res 1
dc3        res 1

;**********************************************************************
RESET CODE 0x1FF                                          ; processor reset vector
res 1                                                                  ; holds movlw with factory RC cal value
; Internal RC calibration value is placed at location 0x1FF by Microchip
; as a movlw k, where the k is a literal value.
MAIN        code        0x000
                movwf        OSCCAL

                movlw  b'011000'          ; configure GP0,GP1,GP2,GP5 as output
              tris        GPIO         
 
start       

                movlw        b'000111'
                movwf        GPIO               

                bsf                GPIO,5                        ;GP5 = 1
;form1 wareform
begin
                bcf                GPIO,2
                nop
                nop
                nop
                bsf                GPIO,2
                nop
                bcf                GPIO,1
                nop
                nop
                nop
                bsf                GPIO,1
                nop               
                bcf                GPIO,2       
                nop
                nop
                nop
                bsf                GPIO,2       
                nop
                bcf                GPIO,1
                nop
                nop
                nop
                bsf                GPIO,1
                nop
                bcf                GPIO,2
                nop
                nop
                nop
                bsf                GPIO,2       
                nop
                bcf                GPIO,1
                nop
                nop
                nop
                bsf                GPIO,1
                nop
                bcf                GPIO,2
                nop
                nop
                nop
                bsf                GPIO,2       
                nop
                bcf                GPIO,1
                nop
                nop
                nop
                bsf                GPIO,1
                nop
                bcf                GPIO,2
                nop
                nop
                nop
                bsf                GPIO,2               
                nop
                bcf                GPIO,1
                nop
                nop
                nop
                nop

                goto        begin

        END             

;*****************************************

nhờ các bác xem giúp sao GP1 thì xuất ra đúng mà GP2 lại không xuất ra ?
và sao nó không lập lại liên tục, chỉ xuất lập lại một số lần là dừng lại ?

thanks,

namqn 02-04-2009 05:27 PM

Code của bạn là ví dụ kinh điển về hoạt động read-modify-write. Bạn nên dùng thanh ghi W như ảnh của GPIO, cập nhật W khi cần thiết và ghi W vào GPIO, tránh cập nhật trực tiếp GPIO như hiện giờ. Bạn có thể loại bỏ một số lệnh nop để thay vào đó là các lệnh cập nhật thanh ghi W.

Còn về việc chạy được vài lần rồi dừng lại thì tôi chưa nghĩ ra, vì hiện thời bạn không dùng WDT.

Thân,

newpic2009 03-04-2009 05:08 PM

không ai trả lời giúp tại sao xuất được vài lần rồi ngưng nhỉ ?

khi ngưng là toàn bộ các ngõ out đều về 0 hết, và nếu tắt mở nguồn càng nhanh thì số lần xuất ra càng ít, thậm chí nếu tắt nguồn, mở lại ngay là Pic không chạy luôn (chả thấy xuất gì ra cả)
để lâu lâu tí, mở nguồn nó mới có xung ra.

các bác xem giúp với
thanks,

namqn 03-04-2009 05:13 PM

Trích:

Nguyên văn bởi newpic2009 (Post 24296)
không ai trả lời giúp tại sao xuất được vài lần rồi ngưng nhỉ ?

khi ngưng là toàn bộ các ngõ out đều về 0 hết, và nếu tắt mở nguồn càng nhanh thì số lần xuất ra càng ít, thậm chí nếu tắt nguồn, mở lại ngay là Pic không chạy luôn (chả thấy xuất gì ra cả)
để lâu lâu tí, mở nguồn nó mới có xung ra.

các bác xem giúp với
thanks,

Bạn nên cho biết sơ đồ mạch thử nghiệm, nên thể hiện tất cả các linh kiện đang được dùng.

Thân,

picwall 13-08-2010 02:28 PM

Question
không ai trả lời giúp tại sao xuất được vài lần rồi ngưng nhỉ ?

khi ngưng là toàn bộ các ngõ out đều về 0 hết, và nếu tắt mở nguồn càng nhanh thì số lần xuất ra càng ít, thậm chí nếu tắt nguồn, mở lại ngay là Pic không chạy luôn (chả thấy xuất gì ra cả)
để lâu lâu tí, mở nguồn nó mới có xung ra.

các bác xem giúp với
thanks,
tôi cũng đang gặp vấn đề gần giống với của bạn, tôi đang dùng con 16f877A, khi tắt bật nguồn thì lúc chạy lúc không, lúc thì chương trình chạy một ít thì treo cứng, cũng không biết tại sao.


Múi giờ GMT. Hiện tại là 02:07 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