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 do lập trình hay do trình biên dịch ? (http://www.picvietnam.com/forum/showthread.php?t=647)

lythanhthuan 02-10-2006 03:06 PM

Lỗi do lập trình hay do trình biên dịch ?
 
Tại sao khi viết chương trình ngắt trong MPLAB (7.31) mặc dù đã theo đúng khung chương trình ngắt do bác falleaf giới thiệu nhưng chưong trình vẫn bị Faile(Lỗi).
Cụ thể là viết chương trình như sau :



Code:

PROCESSOR  PIC16F877
          INCLUDE  <P16F877.INC>
          __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF & _CPD_OFF
         
          DATAOUT      EQU 0x20
          W_save      EQU 0x21
          PCLATH_SAVE  EQU 0X22
          STATUS_SAVE  EQU  0X23
          FSR_SAVE    EQU  0X24

          ORG  0x0000
          GOTO batdau

          ORG    0x004           ;<<=======================(thay bởi 0x005 thì thành công)
          GOTO    ISR_NGAT
ISR_NGAT 
          MOVWF    W_save
          MOVWF    STATUS_SAVE
          MOVF    PCLATH,W
          CLRF    PCLATH
          MOVF    FSR,W
          MOVWF    FSR_SAVE
         
   
          BTFSS  PIR1,PSPIF

          GOTO    thoat

         
          BCF  PIR1,PSPIF
                                                 
          BSF  STATUS,RP0
          BTFSC  TRISE,OBF
         
          GOTO      thoat


          BCF  STATUS,RP0
          MOVF  DATAOUT,0
          MOVWF  PORTD
thoat
        BCF  STATUS,RP0
        MOVF  FSR_SAVE
        MOVWF  FSR
        MOVF    PCLATH_SAVE
        MOVWF  PCLATH
        SWAPF  STATUS_SAVE,W

        MOVWF    STATUS
        SWAPF    W_save,1
        SWAPF  W_save,0
        RETFIE


        ORG    0x000
        CLRF  STATUS
        CLRF  PCLATH

        GOTO  batdau


        ORG  0x050
batdau
        BCF  STATUS,RP1
        BCF  STATUS,RP0
        CLRF  PORTD
        BSF  STATUS,RP0

        MOVLW  B'00010111'

        MOVWF  TRISE
        MOVLW  0x006
        MOVWF ADCON1

        BSF  PIE1,PSPIE

        BCF  STATUS,RP0
        BSF  INTCON,GIE
        BSF  INTCON,PEIE

        MOVLW  b'01010101'
        MOVWF  DATAOUT
        MOVF  PORTD
       
        GOTO  $

        END

Nếu dòng ORG 0x004 (ở đầu chương trình ngắt) ta thay 0x004 bởi 0x005 thì trình dịch báo sucess.
Phiền các bạn giải thích hộ ?
Thanks !

Jerry 02-10-2006 05:17 PM

Lỗi báo như thế nào? Bạn phải post dòng thông báo lỗi lên thì mới trả lời cụ thể được

bien_van_khat 02-10-2006 05:33 PM

Chỉ thấy bạn có 1 cái sai là lặp 2 lần "org 0x00", bỏ cái bên dưới là ok.
Bạn cũng không cần đặt thêm cái org 0x50 làm chi, bây giờ thì chưa sai, nhưng rất dễ sai.

Không hiểu = cách nào mà bạn dịch được cho dù đổi thành org 0x05.

Bạn nên coi lại tut xem chỉ thị org nghĩa là gì.

Jerry 02-10-2006 05:33 PM

Nếu bạn viết đúng như đoạn chương trình trên đây thì mình tìm thêm được vài lỗi nữa của bạn. Bạn viết là :
ISR_NGAT
MOVWF W_save
MOVWF STATUS_SAVE
MOVF PCLATH,W
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_SAVE
.....
Phải sửa lại là :
ISR_NGAT:
MOVWF W_save ; Save WREG
MOVF STATUS,W ; Save STATUS
CLRF STATUS
MOVWF STATUS_SAVE
MOVF PCLATH, W
MOVWF PCLATH_SAVE
MOVF FSR, W
MOVWF FSR_SAVE


........
Thoat:
CLRF STATUS
MOVF FSR_SAVE, W
MOVWF FSR
MOVF PCLATH_SAVE, W
MOVWF PCLATH
MOVF STATUS_SAVE, W
MOVWF STATUS
SWAPF W_save, F
SWAPF W_save, W
RETFIE


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