PDA

View Full Version : Chương trình báo lỗi, ko bit sai ở đâu?


shevry
27-08-2010, 11:42 AM
Mình mới vào nghề, viết thử 1 chương trình LED chạy qua lại nhưng khi biên dịch thì gặp lỗi sau:

Debug build of project `D:\Hung\Tai lieu ky thuat\pic\baitap\vd1.mcp' started.
Language tool versions: MPASMWIN.exe v5.36, mplink.exe v4.36, mplib.exe v4.36
Preprocessor symbol `__DEBUG' is defined.
Fri Aug 27 10:05:14 2010
----------------------------------------------------------------------
Make: The target "D:\Hung\Tai lieu ky thuat\pic\baitap\vd1.o" is out of date.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F887 "vd1.asm" /l"vd1.lst" /e"vd1.err" /o"vd1.o" /d__DEBUG=1
Error[126] D:\HUNG\TAI LIEU KY THUAT\PIC\BAITAP\VD1.ASM 4 : Argument out of range (not a valid config register address)
Message[302] D:\HUNG\TAI LIEU KY THUAT\PIC\BAITAP\VD1.ASM 20 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\HUNG\TAI LIEU KY THUAT\PIC\BAITAP\VD1.ASM 32 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\HUNG\TAI LIEU KY THUAT\PIC\BAITAP\VD1.ASM 40 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\HUNG\TAI LIEU KY THUAT\PIC\BAITAP\VD1.ASM 70 : Register in operand not in bank 0. Ensure that bank bits are correct.
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `D:\Hung\Tai lieu ky thuat\pic\baitap\vd1.mcp' failed.
Language tool versions: MPASMWIN.exe v5.36, mplink.exe v4.36, mplib.exe v4.36
Preprocessor symbol `__DEBUG' is defined.
Fri Aug 27 10:05:15 2010
----------------------------------------------------------------------
BUILD FAILED


Ko biết chương trình sai ở đâu? nhờ các bậc tiền bối chỉ giúp. ^^
Đây là chương trình của mình

TITLE "Chay LED <->"
PROCESSOR 16f887
#include <p16f887.inc>
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC
;Khai bao bien
W_SAVE EQU 0X20
STATUS_SAVE EQU 0X21
LAN_LAP EQU 0X22
XOAY EQU 0X23
;Chuong trinh
ORG 0X0000
GOTO Main
ORG 0X0004
GOTO Isr_Tmr1
ORG 0X0005
Main
banksel PORTB
CLRF PORTB
banksel TRISB
CLRF TRISB
banksel T1CON
BCF T1CON,TMR1CS
BCF T1CON,T1CKPS0
BCF T1CON,T1CKPS1
MOVLW 0X9E
MOVWF TMR1H
MOVLW 0X58
MOVWF TMR1L
MOVLW D'5'
MOVWF LAN_LAP
banksel PIE1
BSF PIE1,TMR1IE
BSF INTCON,GIE
banksel T1CON
BSF T1CON,TMR1ON
GOTO $
Isr_Tmr1
banksel INTCON
BCF INTCON,GIE
BCF PIE1,TMR1IE
banksel PIR1
BCF PIR1,TMR1IF
BCF T1CON,TMR1ON
MOVWF W_SAVE
MOVF STATUS,W
MOVWF STATUS_SAVE
MOVLW 0X9E
MOVWF TMR1H
MOVLW 0X58
MOVWF TMR1L
DECFSZ LAN_LAP,1
GOTO Tiep_tuc
MOVLW D'5'
MOVWF LAN_LAP
Ktra_Xoay
BTFSS XOAY,0
GOTO Xoay_Phai
RLF PORTB,0
Ktra_C
BTFSS STATUS,C
GOTO Xuat_Led
COMF XOAY,1
GOTO Ktra_Xoay
Xuat_Led
MOVWF PORTB
Tiep_tuc
MOVF STATUS_SAVE,0
MOVWF STATUS
MOVF W_SAVE,0
BSF PIE1,TMR1IE
BSF INTCON,GIE
BSF T1CON,TMR1ON
RETFIE
Xoay_Phai
RRF PORTB,0
GOTO Ktra_C
END

Đây là Pr-Scr của Chương trình:

http://www.mediafire.com/i/?l36dwzq0d43hcol
http://www.mediafire.com/i/?tkhcs718ca5qwdz
http://www.mediafire.com/i/?dn6uooea1yi5qn4

unisa
29-08-2010, 05:18 PM
báo lỗi khai báo fuse sai kìa bạn, mình cũng không biết sửa sao cho phải, bạn thử thay thế này xem

INCLUDE <P16F877A.inc>
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC


còn mấy cái lỗi
Message[302] D:\HUNG\TAI LIEU KY THUAT\PIC\BAITAP\VD1.ASM 20 : Register in operand not in bank 0. Ensure that bank bits are correct.
mình cũng bị dù dùng nhiều cách như dùng banksel, BSF và BCF status,RP0
nhưng báo thì báo mình vẫn dịch ngon và chạy ngon, ko hiểu nổi luôn :-o

shevry
29-08-2010, 09:06 PM
Trước hết mình xin cám ơn bạn đã xem và suy ngẫm giùm. Nhìn report của nó thì ai ko biết sai dòng nào. ^^ Vấn đề là ở chỗ phải sửa lại như thế nào cho đúng. Hôm nay mới lục lọi trong mấy cái ví dụ của thằng Microchip (nói thiệt ra là dân VN mình biết rồi toàn giấu đem xuống hòm ko hà, ko biết để lại gì cho con cháu cả). Mình sửa lại cái dòng đó như sau:

__CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _XT_OSC

Biên dịch xong thì hết error nhưng warning thì dùng banksel vẫn bị. ko hiểu.

ronin
30-08-2010, 12:07 AM
nếu không phải la chương trình lớn thì wraming không ảnh hưởng gì đâu, nhung bạn cũng hết sức chú ý tới nó đó. bạn làm nhìu sẽ thấy.

shevry
30-08-2010, 09:17 PM
Mình thấy lạ là sao đã làm giống như chỉ dẫn của datasheet và các chương trình mẫu nhưng vẫn bị warning. Chẳng lẽ MPLab có vấn đề, thật là khó hiểu quá đi. Lúc trước học 89C51 đâu có bị như thế này, chương trình mẫu dạy sao làm như vậy thì ko bao giờ sai. Có lẽ vì thế mà ở VN có nhiều sách 89 nhưng sách PIC thì chỉ mới có 2 quyển. hic. Chẳng lẽ chuyển qua học avr nhỉ.

namqn
30-08-2010, 09:34 PM
Mình thấy lạ là sao đã làm giống như chỉ dẫn của datasheet và các chương trình mẫu nhưng vẫn bị warning. Chẳng lẽ MPLab có vấn đề, thật là khó hiểu quá đi. Lúc trước học 89C51 đâu có bị như thế này, chương trình mẫu dạy sao làm như vậy thì ko bao giờ sai. Có lẽ vì thế mà ở VN có nhiều sách 89 nhưng sách PIC thì chỉ mới có 2 quyển. hic. Chẳng lẽ chuyển qua học avr nhỉ.
Chào bạn,

Warning không phải là Error, nên bạn không nên quá bận tâm về nó. Message lại càng không cần lo lắng, vì nó chỉ là một thông báo nhắc nhở bạn (trong chương trình nhỏ của bạn thì chỉ là nhắc nhở rằng cần đảm bảo chọn đúng bank cho các thanh ghi).

Các chương trình mẫu được viết cho các PIC chỉ có một từ cấu hình. Đến gần đây thì PIC16F887 (và một số chip tương tự) được Microchip sản xuất với 2 từ cấu hình, dẫn đến cần có một cách viết khác để thiết lập các từ cấu hình cho các PIC loại này. Và điều này cũng khiến một số chương trình mẫu trở nên "không đúng". Các chip 89 thuộc họ MCS-51 đã rất lâu đời, vốn không có những thay đổi lớn như vậy, nên các chương trình mẫu của chúng ít có cơ hội gặp rắc rối như trên.

Tôi thường dùng cách cấu hình dưới đây cho PIC16F88x:
__CONFIG _CONFIG1, _HS_OSC & _FCMEN_OFF & _IESO_OFF & _CP_OFF & _WDT_OFF & _BOR_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
Phần liên quan đến bộ dao động là _HS_OSC có thể được thay đổi cho thích hợp với cấu hình phần cứng cụ thể.

Thân,