PDA

View Full Version : Giải thích các thông báo lỗi khi dịch chương trình viết bằng MPLAP


tinhthanthep
18-08-2006, 10:42 AM
Tôi đang làm một chương trình dùng ngắt timer0 để tạo thời gian trễ để nháy các đèn LED. Chương trình viết bằng MPLAP. Nhưng không hiểu sao dịch ra nó toàn thông báo lỗi:
MPLINK 4.01, Linker
Copyright (c) 2005 Microchip Technology Inc.
Error - section '.org_3' can not fit the absolute section. Section '.org_3' start=0x00000005, length=0x000000a2
Errors : 1
Đây là chương trình tôi viết:
;================================================= =====================================
; CHU THICH BAN DAU
;******************
; Ten chuong trinh : Mach test TIMER0
; Nguoi thuc hien : tinhthanthep
; Ngay thuc hien : 17/08/2006
; Phien ban : 1.0
; Mo ta phan cung : Dung PIC16F628A - dao dong noi 4MHz
; : 8 LED nhay theo timer0 giao tiep voi PORTB
; : Cuc am cua LED noi voi GND
; : 4 nut bam va 4 led bao nut bam tuong ung giao tiep voi PORTA
;--------------------------------------------------------------------------------------
; Ngay hoan thanh : 17/08/2006
; Ngay kiem tra : 17/08/2006
; Nguoi kiem tra : namqn
;--------------------------------------------------------------------------------------
; Chu thich : Chuong trinh chinh quet Nut bam. Nut bam nao duoc bam thi den Led tuong
; : ung o PORT A se sang.
; : 8 LED o PORT B thi se nhay theo chuong trinh o bang du lieu voi tre duoc
; : tao ra boi TIMER0.
;================================================= =====================================
; KHOI TAO VI DIEU KHIEN
;***********************
TITLE "Mach test TIMER0"
PROCESSOR P16F628A
INCLUDE <P16F628A.inc>
__CONFIG 0x3D18
;================================================= =====================================
; KHAI BAO BIEN
;**************
ORG 0x020 ; Bien nam o bank 0
count_1 res 1 ; Bien dem
;--------------------------------------------------------------------------------------
w_temp equ 0x70 ; Bien phuc vu ngat
status_temp equ 0x71 ;
pclath_temp equ 0x72 ;
;================================================= =====================================
; KHAI BAO HANG
;**************
swport equ PORTA
swtris equ TRISA
ledport equ PORTB
ledtris equ TRISB
sw1 equ 7
sw2 equ 6
sw3 equ 5
sw4 equ 4
led1 equ 3
led2 equ 2
led3 equ 1
led4 equ 0
;================================================= =====================================
; CHUONG TRINH CHINH
;*******************
ORG 0x0000
GOTO MAIN
ORG 0x0004
GOTO INTERRUPT
ORG 0x0005
MAIN
clrf STATUS ; Chon bank 0
clrf swport ; Xoa PORT A
clrf ledport ; Xoa PORT B
movlw 0x07 ; Thiet lap PORT A la digital I/O
movwf CMCON ;
clrf INTCON ; Tat cac ngat va xoa mot so flag
movlw b'10100000' ; Mo ngat toan cuc va ngat Timer0
movwf INTCON ;
bsf STATUS, RP0 ; Chon bank 1
movlw b'11110000' ; Thiet lap 4 chan In cho 4 nut bam
movwf swtris ; va 4 chan Out cho 4 LED o PORT A
movlw b'00000000' ; Thiet lap 8 chan Out cho 8 LED o PORT B
movwf ledtris ;
movlw b'11000111' ; Khoi dong Timer0 voi bo chia truoc 1:256
movwf OPTION_REG ;
bcf STATUS, RP0 ; Chon bank 0
clrf count_1 ; Xoa bien dem count_1
;--------------------------------------------------------------------------------------
Loop ; Quet nut bam
btfss swport, sw1 ; Nut an 1 co bi bam khong?
call Switch_1 ; Co. Nhay toi chuong trinh xu ly nut bam 1
btfss swport, sw2 ; Ko. Nut an 2 co bi bam khong?
call Switch_2 ; Co. Nhay toi chuong trinh xu ly nut bam 2
btfss swport, sw3 ; Ko. Nut an 3 co bi bam khong?
call Switch_3 ; Co. Nhay toi chuong trinh xu ly nut bam 3
btfss swport, sw4 ; Ko. Nut an 4 co bi bam khong?
call Switch_4 ; Co. Nhay toi chuong trinh xu ly nut bam 4
goto Loop ; Ko. Quet lai nut bam
;---------------------------------------------------------------------------------------
Switch_1 ; Chuong trinh xu ly nut bam 1
clrf swport ; Xoa 4 LED bao nut bam
bsf swport, sw1 ; Bat LED 1
retlw 0x00 ; Ra khoi chuong trinh xu ly nut bam 1
;---------------------------------------------------------------------------------------
Switch_2 ; Chuong trinh xu ly nut bam 2
clrf swport ; Xoa 4 LED bao nut bam
bsf swport, sw2 ; Bat LED 2
retlw 0x00 ; Ra khoi chuong trinh xu ly nut bam 2
;---------------------------------------------------------------------------------------
Switch_3 ; Chuong trinh xu ly nut bam 3
clrf swport ; Xoa 4 LED bao nut bam
bsf swport, sw3 ; Bat LED 3
retlw 0x00 ; Ra khoi chuong trinh xu ly nut bam 3
;---------------------------------------------------------------------------------------
Switch_4 ; Chuong trinh xu ly nut bam 4
clrf swport ; Xoa 4 LED bao nut bam
bsf swport, sw4 ; Bat LED 4
retlw 0x00 ; Ra khoi chuong trinh xu ly nut bam 4
;================================================= =====================================
; CHUONG TRINH NGAT
;******************
INTERRUPT
; Luu gia tri cua cac thanh ghi dac biet
movwf w_temp ; Luu gia tri cua thanh ghi W
swapf STATUS, w ; Luu gia tri cua thanh ghi STATUS
movwf status_temp ;
movf PCLATH, w ; Luu gia tri cua thanh ghi PCLATH
movwf pclath_temp ;
; Xu ly ngat
clrf STATUS ; Chon bank 0
btfsc INTCON, T0IF ; Ngat tran timer0 da xay ra chua?
goto T0_INT ; Roi. Nhay toi chuong trinh xu ly ngat Timer0
INT_ERROR ; Chua. Nhay toi phuong an du phong khi ngat
goto INT_ERROR ; khong mong doi xay ra.
;---------------------------------------------------------------------------------------
T0_INT ; Xu ly ngat tran timer0
incf count_1, f ; Tang bien dem count_1 len 1 don vi
movf count_1, w ;
call TABLE_LED ; Nhay toi mau nhay LED
xorlw 0x00 ; Kiem tra xem da den cuoi bang LED chua?
btfsc STATUS, Z ;
goto CLR_C1 ; Roi. Nhay toi CLR_C1
movwf ledport ; Chua. Nhay LED
goto JUMP ; Nhay qua CLR_C1 de tranh xoa bien count_1
CLR_C1 ; Xoa bien count_1
clrf count_1 ;
JUMP
bcf INTCON, T0IF ; Xoa co ngat tran timer0
goto END_ISR
;---------------------------------------------------------------------------------------
END_ISR
; Tra lai gia tri cho cac thanh ghi dac biet
movf pclath_temp, w ; Tra gia tri cho thanh ghi PCLATH
movwf PCLATH ;
swapf status_temp, w ; Tra gia tri cho thanh ghi STATUS
movwf STATUS ;
swapf w_temp, f ; Tra gia tri cho thanh ghi W
swapf w_temp, w ;
RETFIE ; Ra khoi chuong trinh ngat
;================================================= =====================================
; BANG DU LIEU
;*************
TABLE_LED addwf PCL, f ; Mau nhay LED
retlw b'10000000'
retlw b'01000000'
retlw b'00100000'
retlw b'00010000'
retlw b'00001000'
retlw b'00000100'
retlw b'00000010'
retlw b'00000001'
retlw b'00000010'
retlw b'00000100'
retlw b'00001000'
retlw b'00010000'
retlw b'00100000'
retlw b'01000000'
retlw 0x00
;================================================= =====================================
; KET THUC CHUONG TRINH
;**********************
END
;================================================= =====================================

Các bác có thể giải thích dùm cái lỗi này là gì không? Thanks

namqn
18-08-2006, 07:31 PM
Bạn đang dùng chế độ quickbuild phải không?

MPLAB đang dùng một linker script mà trong đó đoạn code đầu tiên bắt đầu từ 0x0005 chỉ có chiều dài 0xa2 (thông thường các PIC16 chỉ cần một đoạn code nằm ngay sau vector ngắt với chiều dài tối đa) để liên kết chương trình của bạn.

Với chế độ quickbuild, tôi thường chỉ include tập tin .inc và dùng lệnh Select Device trong mênu Configure để chọn loại bộ xử lý.

Thân,

bien_van_khat
19-08-2006, 10:21 AM
Với chế độ quickbuild, tôi thường chỉ include tập tin .inc và dùng lệnh Select Device trong mênu Configure để chọn loại bộ xử lý.

Thân,

Tui copy nguyên xi rùi quickbuild y nhu anh namqn nói, có lỗi gì đâu, hay bác up nguyên cái project của MPLAB của bác thử

tinhthanthep
19-08-2006, 12:30 PM
à phát hiện ra rồi. Thay phần khai báo biến như hướng dẫn của falleaf :
org 0x20
count1 res 1

bằng cách khai báo biến cblock 0x20
count1
endc
Là chạy bon bon.

Lỗi xảy ra là do cái lệnh org 0x20

newuser
19-08-2006, 05:55 PM
ủa, kỳ thế!!! em cũng copy rồi quickbuild mà có thấy báo lỗi gì đâu! vẫn successful mà!