PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   MPASM (http://www.picvietnam.com/forum/forumdisplay.php?f=34)
-   -   nó báo lỗi thế này khi dịch (http://www.picvietnam.com/forum/showthread.php?t=1323)

minhtienbk 21-07-2007 10:15 PM

nó báo lỗi thế này khi dịch
 
MPLINK 4.04, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - Absolute code section '.org_2' must start at a word-aligned address.
Errors : 1

BUILD FAILED: Sat Jul 21 21:08:03 2007



file ASM thì ko báo lỗi gì ,nhưng khi link thì lỗi như vậy ,mấy anh chỉ giùm ,đang thử sài MPASM .

namqn 21-07-2007 10:31 PM

Trích:

Nguyên văn bởi minhtienbk (Post 10242)
MPLINK 4.04, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - Absolute code section '.org_2' must start at a word-aligned address.
Errors : 1

BUILD FAILED: Sat Jul 21 21:08:03 2007

file ASM thì ko báo lỗi gì ,nhưng khi link thì lỗi như vậy ,mấy anh chỉ giùm ,đang thử sài MPASM .

Bạn post đoạn code của bạn lên thì mới góp ý được cho bạn chứ. Bạn đang dùng PIC18 phải không?

Thân,

minhtienbk 22-07-2007 11:46 AM

code hơi dài copy của ng khác để thử
 
Code:

;********************************************************
;
;            The LED flash control processing
;
;                                Author : Seiichi Inoue
;********************************************************

        list            p=pic18f4550
        include        p18f4550.inc

        errorlevel      -302    ;Eliminate bank warning

;****************  Label Definition  ********************
ra0    equ    00              ;RA0 bit
ra1    equ    01              ;RA1 bit
ra2    equ    02              ;RA2 bit
ra3    equ    03              ;RA3 bit
ra4    equ    04              ;RA4 bit
cnt500u equ    0c              ;500usec counter Address
cnt1m  equ    0d              ;1msec counter Address
cnt100m equ    0e              ;100msec counter Address
cnt500m equ    0f              ;500msec counter Address
cnt1s  equ    10              ;1sec counter Address

;*************  Pattern Data Definition  ****************
;                '1':OFF  '0':ON

;******  Pattern 0  ******
p00    equ    b'11111110'
p01    equ    b'11111101'
p02    equ    b'11111011'
p03    equ    b'11110111'
p04    equ    b'11101111'
p05    equ    b'11011111'
p06    equ    b'10111111'
p07    equ    b'01111111'

;******  Pattern 1  ******
p10    equ    b'01111111'
p11    equ    b'10111111'
p12    equ    b'11011111'
p13    equ    b'11101111'
p14    equ    b'11110111'
p15    equ    b'11111011'
p16    equ    b'11111101'
p17    equ    b'11111110'

;******  Pattern 2  ******
p20    equ    b'01111110'
p21    equ    b'10111101'
p22    equ    b'11011011'
p23    equ    b'11100111'
p24    equ    b'11011011'
p25    equ    b'10111101'
p26    equ    b'01111110'

;******  Pattern 3  ******
p30    equ    b'11111110'
p31    equ    b'11111101'
p32    equ    b'11111010'
p33    equ    b'11110101'
p34    equ    b'11101010'
p35    equ    b'11010101'
p36    equ    b'10101010'
p37    equ    b'01010101'
p38    equ    b'10101011'
p39    equ    b'01010111'
p3a    equ    b'10101111'
p3b    equ    b'01011111'
p3c    equ    b'10111111'
p3d    equ    b'01111111'

;******  Pattern 4  ******
p40    equ    b'00000000'
p41    equ    b'11111111'
p42    equ    b'00000000'
p43    equ    b'11111111'
p44    equ    b'00000000'
p45    equ    b'11111111'
p46    equ    b'00000000'
p47    equ    b'11111111'
p48    equ    b'00000000'


;****************  Program Start  ***********************
        org    0              ;Reset Vector
        goto    init
        org    4              ;Interrupt Vector
        goto    init

;****************  Initial Process  *********************
        org    5
init    bsf    status,RP0      ;Change to Bank1
        movlw  h'ff'          ;Set input mode data
        movwf  trisa          ;Set PORTA to Input mode
        clrf    trisb          ;Set PORTB to Output mode
        bcf    status,RP0    ;Change to Bank0
        movlw  h'ff'          ;Set LED off data
        movwf  portb          ;Output data

;****************  Key Scan Process  ********************
keyscan btfss  porta,ra0      ;RA0 ON(Low lebel) ?
        call    ptn0            ;Yes. Call Pattern 0
        btfss  porta,ra1      ;RA1 ON ?
        call    ptn1            ;Yes. Call Pattern 1
        btfss  porta,ra2      ;RA2 ON ?
        call    ptn2            ;Yes. Call Pattern 2
        btfss  porta,ra3      ;RA3 ON ?
        call    ptn3            ;Yes. Call Pattern 3
        btfss  porta,ra4      ;RA4 ON ?
        call    ptn4            ;Yes. Call Pattern 4
        goto    keyscan        ;Retry

;***********  Pattern 0 Output Subroutine ***************
ptn0    movlw  p00            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p01            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p02            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p03            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p04            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p05            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p06            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p07            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  h'ff'          ;Set LED off data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        return

;***********  Pattern 1 Output Subroutine ***************
ptn1    movlw  p10            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p11            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p12            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p13            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p14            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p15            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p16            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p17            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  h'ff'          ;Set LED off data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        return

;***********  Pattern 2 Output Subroutine ***************
ptn2    movlw  p20            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p21            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p22            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p23            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p24            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p25            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p26            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  h'ff'          ;Set LED off data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        return

;***********  Pattern 3 Output Subroutine ***************
ptn3    movlw  p30            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p31            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p32            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p33            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p34            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p35            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p36            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p37            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p38            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p39            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p3a            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p3b            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p3c            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  p3d            ;Set pattern data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        movlw  h'ff'          ;Set LED off data
        movwf  portb          ;Output data
        call    t100m          ;Wait 100msec
        return

;***********  Pattern 4 Output Subroutine ***************
ptn4    movlw  p40            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  p41            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  p42            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  p43            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  p44            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  p45            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  p46            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  p47            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  p48            ;Set pattern data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        movlw  h'ff'          ;Set LED off data
        movwf  portb          ;Output data
        call    t1s            ;Wait 1sec
        return

;********************************************************
;          Timer  Subroutine for 10MHz clock
;********************************************************

;*************  1msec Timer Subroutine  *****************
t1m    movlw  d'2'            ;(1)      Set loop cnt1
        movwf  cnt1m          ;(1)      Save loop cnt1
tm1lp1  movlw  d'249'          ;(1)*2    Set loop cnt2
        movwf  cnt500u        ;(1)*2    Save loop cnt2
tm1lp2  nop                    ;(1)*249*2 Time adjust
        nop                    ;(1)*249*2 Time adjust
        decfsz  cnt500u,f      ;(1)*249*2 cnt500u-1=0 ?
        goto    tm1lp2          ;(2)*248*2 No, continue
        decfsz  cnt1m,f        ;(1)*2    cnt1m-1=0 ?
        goto    tm1lp1          ;(2)      No. Continue
        return                  ;(2)      Yes. Cnt end
                                ;Total 2501*0.4usec=1msec

;*************  100msec Timer Subroutine  ***************
t100m  movlw  d'100'          ;Set loop counter
        movwf  cnt100m        ;Save loop counter
tm2lp  call    t1m            ;1msec subroutine
        decfsz  cnt100m,f      ;cnt100m - 1 = 0 ?
        goto    tm2lp          ;No. Continue
        return                  ;Yes. Count end


;*************  500msec Timer Subroutine  ***************
t500m  movlw  d'5'            ;Set loop counter
        movwf  cnt500m        ;Save loop counter
tm3lp  call    t100m          ;100msec subroutine
        decfsz  cnt500m,f      ;cnt500m - 1 = 0 ?
        goto    tm3lp          ;No. Continue
        return                  ;Yes. Count end

;**************  1sec Timer Subroutine  *****************
t1s    movlw  d'2'            ;Set loop counter
        movwf  cnt1s          ;Save loop counter
tm4lp  call    t500m          ;500msec subroutine
        decfsz  cnt1s,f        ;cnt1s - 1 = 0 ?
        goto    tm4lp          ;No. Continue
        return                  ;Yes. Count end


;********************************************************
;          END of LED flash control processing
;********************************************************

        end

em sài 18f4550 :D
project gồm 3 file (đã add vô) : led.asm (file trên) ,p18f4550.inc ,18f4550.lkr
khi dịch thì output như sau :

Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F4550 "led.asm" /l"led.lst" /e"led.err" /o"led.o" /c-
Executing: "C:\Program Files\Microchip\MPASM Suite\MPLink.exe" "C:\Documents and Settings\miti\Desktop\pic\18F4550.lkr" "C:\Documents and Settings\miti\Desktop\pic\led.o" /o"test2.cof" /M"test2.map"
MPLINK 4.04, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - Absolute code section '.org_2' must start at a word-aligned address.
Errors : 1


BUILD FAILED: Sun Jul 22 11:43:42 2007


còn quá trình assembly thì ko có lỗi nào. Anh chỉ giùm:D

bien_van_khat 22-07-2007 05:08 PM

Code:

org    0              ;Reset Vector
        goto    init
        org    4              ;Interrupt Vector
        goto    init

;****************  Initial Process  *********************
        org    5

Bỏ cái "org 5" đi, opcode của 18F là 16 bit nên ko thể bắt đầu ở địa chỉ lẻ, ở đây bạn ko cần phải có chỉ thị này.

minhtienbk 23-07-2007 10:48 AM

Trích:

Nguyên văn bởi bien_van_khat (Post 10254)
Code:

org    0              ;Reset Vector
        goto    init
        org    4              ;Interrupt Vector
        goto    init

;****************  Initial Process  *********************
        org    5

Bỏ cái "org 5" đi, opcode của 18F là 16 bit nên ko thể bắt đầu ở địa chỉ lẻ, ở đây bạn ko cần phải có chỉ thị này.

nếu sửa lại như vậy thì ra lỗi mới :confused: như thế này :

Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F4550 "led.asm" /l"led.lst" /e"led.err" /o"led.o" /c-
Executing: "C:\Program Files\Microchip\MPASM Suite\MPLink.exe" "C:\Documents and Settings\Minh Tien\Desktop\pic\18F4550.lkr" "C:\Documents and Settings\Minh Tien\Desktop\pic\led.o" /o"test2.cof" /M"test2.map"
MPLINK 4.04, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x00000220
Errors : 1

BUILD FAILED: Mon Jul 23 09:41:31 2007


hay anh nào ra tay post giùm em project bất kỳ của 18f ,miễn là dịch ko lỗi để em còn biết dg mò

bien_van_khat 23-07-2007 01:40 PM

Mình đoán bạn copy code của 16F đổi sang 18F, tổ chức bộ nhớ chương trình hai dòng này khác nhau. Với 16F vector 0x04 là vector ngắt, còn 2 vector ngắt của 18F ở 0x08 và 0x18, do đó code thường bắt đầu ở 0x2a.

Bạn thử đoạn code này xem sao.
Code:


        ; Include file, change directory if needed
        include "p18f4550.inc"
        config        FOSC=HSPLL_HS, PLLDIV=5, CPUDIV=OSC1_PLL2, WDT=OFF, PWRT=ON, LVP=OFF, MCLRE=ON, PBADEN=OFF

c1        equ        0x01
c2        equ        0x02

        ; Start at the reset vector
Reset_Vector  code 0x000
        goto Start

        ; Start application beyond vector area

        code        0x002A
Start
        clrf        TRISB, a
loop
        movlw        0xff
        movwf        LATB, a
        call        delay
        clrf        LATB, a
        call        delay
        bra                loop

delay
        movlw        0xff
        movwf        c1, a
loop1
        movlw        0xff
        movwf        c2, a
loop2
        decfsz        c2
        bra                loop2
       
        decfsz        c1
        bra                loop1
        return

        end


minhtienbk 23-07-2007 11:09 PM

có lẽ anh nói đúng ,hồi trưa ,em đã thử dời đoạn Main sang vị trí mới ,ở 100h thì nó ko có lỗi gì ,ra luôn file HEX
và cái vụ config nó , hình như trc giờ chưa / ít ai trong PIC VN nói về nó ( chỉ nói về 16f ) ,và tập lệnh nữa ,hinh như coi trọng 16f ,bỏ quên 18f :D

ko hiểu sao ,có khi nó đang chạy thì nó dừng ,(em đã tắt WDT )

minhtienbk 23-07-2007 11:19 PM

nó báo lỗi những dòng lệnh :

movwf LATB, a

những dòng kết thúc bằng chữ "a"

nó nói a chưa dc định nghĩa ,nhưng cái này đúng cú pháp mà

namqn 24-07-2007 01:14 AM

Trích:

Nguyên văn bởi minhtienbk (Post 10276)
nó báo lỗi những dòng lệnh :

movwf LATB, a

những dòng kết thúc bằng chữ "a"

nó nói a chưa dc định nghĩa ,nhưng cái này đúng cú pháp mà

Sửa chữ 'a' thành 'ACCESS' xem.

Về chuyện cấu hình, PIC18F có khá nhiều từ cấu hình, và các cấu hình cũng thay đổi khá nhiều theo họ chip. Thậm chí các cụm bit cùng một ý nghĩa nhưng có nhiều họ đặt tên khác nhau. Do đó, dùng chip nào thì xem chip đó.

Vì lý do các cấu hình cho PIC18 phức tạp mà Microchip đã viết hẳn ra 1 tập tin hướng dẫn cấu hình đi kèm C18 (trong thư mục con 'doc' của thư mục cài đặt C18) và một tập tin khác ở dạng pdf là 'PIC18 Configuration Setting Addendum' (DS51537) có thể download từ trang web của Microchip.

Tập lệnh của PIC18 có thể tham khảo như một phần của tài liệu 'PIC18C Family Reference Manual' (DS39500), có thể download từ trang web của Microchip.

Thân,

minhtienbk 24-07-2007 11:21 AM

xóa chữ a đi thì chương trình chạy bt ,chắc nó coi như 16f

cấu hình ,em vô menu chỉnh trực tiếp luôn ,cũng OK

Tập lệnh có trong datasheet ,em mới vừa tìm dc

Cảm ơn anh

Sẵn cho em hỏi luôn ,nếu mã viết cho 16f mà sài cho 18f thì cần lưu ý / sửa những chỗ nào

Em có 1 file ASM <của Microchip >mà nó ko có mậy cái vụ org gì hết ,vậy thì khi dịch và nạp thì sao ,nó cũng xài ngắt

minhtienbk 26-07-2007 01:14 AM

Trích:

Nguyên văn bởi bien_van_khat (Post 10265)
Mình đoán bạn copy code của 16F đổi sang 18F, tổ chức bộ nhớ chương trình hai dòng này khác nhau. Với 16F vector 0x04 là vector ngắt, còn 2 vector ngắt của 18F ở 0x08 và 0x18, do đó code thường bắt đầu ở 0x2a.

Bạn thử đoạn code này xem sao.
Code:


        ; Include file, change directory if needed
        include "p18f4550.inc"
        config        FOSC=HSPLL_HS, PLLDIV=5, CPUDIV=OSC1_PLL2, WDT=OFF, PWRT=ON, LVP=OFF, MCLRE=ON, PBADEN=OFF

c1        equ        0x01
c2        equ        0x02

        ; Start at the reset vector
Reset_Vector  code 0x000
        goto Start

        ; Start application beyond vector area

        code        0x002A
Start
        clrf        TRISB, a
loop
        movlw        0xff
        movwf        LATB, a
        call        delay
        clrf        LATB, a
        call        delay
        bra                loop

delay
        movlw        0xff
        movwf        c1, a
loop1
        movlw        0xff
        movwf        c2, a
loop2
        decfsz        c2
        bra                loop2
       
        decfsz        c1
        bra                loop1
        return

        end




nếu trong đoạn chương trình trên có xài ngắt ,mà ISR lại rất dài ,thì ta viết như thế nào ,có phải thế này ko :

ORG 0
goto main
ORG 0x18
goto ISR

ORG 0x2a
ISR .......
......
retfie

main .....
.....



đúng ko anh ? chỗ này quan trọng vì ko qua nó thì cũng ko có file HEX
chắci ai cũng gặp thế này khi sài 18f

namqn 26-07-2007 01:21 AM

Trích:

Nguyên văn bởi minhtienbk (Post 10341)
nếu trong đoạn chương trình trên có xài ngắt ,mà ISR lại rất dài ,thì ta viết như thế nào ,có phải thế này ko :

ORG 0
goto main
ORG 0x18
goto ISR

ORG 0x2a
ISR .......
......
retfie

main .....
.....



đúng ko anh ? chỗ này quan trọng vì ko qua nó thì cũng ko có file HEX
chắci ai cũng gặp thế này khi sài 18f

Bạn viết như vậy là được rồi, nhưng nó chỉ xử lý ngắt có mức ưu tiên thấp (vectơ nằm ở 0x0018), còn ngắt có mức ưu tiên cao (vectơ nằm ở 0x0008) thì không biết sẽ có code gì nằm ở phần vectơ của nó.

Thân,

minhtienbk 27-07-2007 12:21 AM

unbanked RAM (0x70-0x7F) là của 16f ,khai báo như sau


unbanked udata_shr
W_s res 1
Temp res 1

anh chỉ cho : khi sửa lại cho 18f thì mình sửa thế nào :)

namqn 27-07-2007 03:04 AM

Trích:

Nguyên văn bởi minhtienbk (Post 10361)
unbanked RAM (0x70-0x7F) là của 16f ,khai báo như sau


unbanked udata_shr
W_s res 1
Temp res 1

anh chỉ cho : khi sửa lại cho 18f thì mình sửa thế nào :)

Vùng RAM không bị chia thành trang (dữ liệu) (unbanked) trong PIC18 được gọi là Access RAM. Do đó, dẫn hướng udata_acs sẽ được dùng thay cho udata_shr của các chip lõi 14-bit, như ví dụ dưới đây:
Code:

        udata_acs
Var1  res 1
Double res 2

Thân,

quochung53 15-11-2007 02:39 PM

Em là dân mới nên không biết cách gởi bài lên diễn đàn, nên hỏi trong đây mong các Anh thông cảm.

E sử dụng MPASM, khi dich chuong trình nó không chuyển bank.

;test chuyen bank
list p=16f877A
#include <p16f877A.inc>

ORG 0X0
GOTO MAIN

ORG 0X5
MAIN
CLRF STATUS
BSF STATUS,RP0

;BANKSEL TRISB

CLRF TRISB

END

đáng lẽ khi CLRF TRISB thì nó phải CLRF 0x86 ở bank1 nhưng nó lại LCRF 0x6 ở bank0:

0007 0186 CLRF 0x6 15: CLRF TRISB

mong các Anh chi dum. phai khai bao lam sao khi dich bằng Microchip MPASM toolsuite để cho nó chuyển đúng bank.
Message[302] E:\PIC\TESTBANK.ASM 15 : Register in operand not in bank 0. Ensure that bank bits are correct

uydanh 22-11-2007 09:43 PM

Em học PIC16 chưa được bao lâu. Do tự tìm hiểu nên có nhưng lỗi rất hay gặp nhưng ko thể nào giải thích nỗi. Hôm nay, em gõ y nguyên một đoạn code vô tình kiếm được vào mplab, nó báo lỗi thế này :
Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000004, length=0x00000046
Errors : 1

Link step failed.
BUILD FAILED: Thu Nov 22 21:26:50 2007
Nó chỉ báo lỗi như thế, nhưng bên trên lại không thấy dòng error nào. Kinh nghiệm của em là cứ bỏ dòng ORG 0000 đi là ok. Nhưng hôm nay, chương trình này sử dụng ngắt nên trước đó xài ORG 0x0004, bây giờ bỏ ORG 0000 cũng vô tác dụng. Quả thật em không hiểu vì sao nữa. Bê y nguyên của người ta vào mà vẫn không chạy được. Rất mong mọi người giúp đỡ và giảng giải chổ này giùm em. Chân thành cảm ơn.

namqn 22-11-2007 09:59 PM

Trích:

Nguyên văn bởi uydanh (Post 13044)
Em học PIC16 chưa được bao lâu. Do tự tìm hiểu nên có nhưng lỗi rất hay gặp nhưng ko thể nào giải thích nỗi. Hôm nay, em gõ y nguyên một đoạn code vô tình kiếm được vào mplab, nó báo lỗi thế này :
Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000004, length=0x00000046
Errors : 1

Link step failed.
BUILD FAILED: Thu Nov 22 21:26:50 2007
Nó chỉ báo lỗi như thế, nhưng bên trên lại không thấy dòng error nào. Kinh nghiệm của em là cứ bỏ dòng ORG 0000 đi là ok. Nhưng hôm nay, chương trình này sử dụng ngắt nên trước đó xài ORG 0x0004, bây giờ bỏ ORG 0000 cũng vô tác dụng. Quả thật em không hiểu vì sao nữa. Bê y nguyên của người ta vào mà vẫn không chạy được. Rất mong mọi người giúp đỡ và giảng giải chổ này giùm em. Chân thành cảm ơn.

Bạn nên post những gì bạn đã gõ vào MPLAB. Đây là lỗi xuất hiện khi liên kết chương trình, có những đoạn được quy định sẵn trong kịch bản liên kết, dành cho những mục đích khác nhau (như vector reset, các vector ngắt, các trang chương trình). Tôi cũng gặp những lỗi như thế này, và thường can thiệp vào tập tin liên kết để phản ánh đúng cấu trúc cụ thể của chương trình.

Thân,

uydanh 23-11-2007 10:03 AM

Đây là toàn bộ chương trình mà em kiếm được.
Code:

;===================================================================================================
;CHUONG TRINH SU DUNG TIMER0 HIEN THI LED 7 DOAN
;===================================================================================================
        processor 16f877a
        #include        <p16f877a.inc>
        __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;===================================================================================================
;KHAI BAO BIEN
;===================================================================================================
        count1                EQU 0x20                        ;Cac thanh ghi su dung trong chuong trinh delay
        counta      EQU 0x21
        countb                EQU        0x22

        hang_don_vi        EQU 0x23                        ;Cac thanh ghi chua gia tri can
        hang_chuc        EQU 0x24                        ;hien thi ra led 7 doan
       
        W_save                EQU        0x25                        ;Cac thanh ghi dung de cat cac
        PCLATH_save        EQU        0x26                        ;thanh ghi quan trong khi thuc thi
        STATUS_save        EQU        0x27                        ;chuong trinh ngat
        FSR_save        EQU 0x28
;====================================================================================================
;CHUONG TRINH NGAT
;====================================================================================================
        ORG 0x0004
        GOTO ISR
ISR
;====================================================================================================
;DOAN CHUONG TRINH BAT BUOC DAU CHUONG TRINH NGAT DE LUU CAC THANH GHI QUAN TRONG
;====================================================================================================
        MOVWF        W_save
        SWAPF        STATUS,W
        CLRF        STATUS
        MOVWF        STATUS_save
        MOVF        PCLATH,W
        MOVWF        PCLATH_save
        CLRF        PCLATH
        MOVF        FSR,W
        MOVWF        FSR_save
       
       
        BTFSS        INTCON,TMR0IF                        ;Kiem tra co ngat Timer0
        GOTO        exit_int                                ;Neu co ngat chua duoc set, thoat khoi
                                                                        ;chuong trinh ngat
        BCF                INTCON,TMR0IF                        ;Neu co ngat da duoc set, thi tien hanh xoa co ngat de
                                                                        ;nhan biet thoi diem tiep theo xay ra ngat
;====================================================================================================
;CAC THAO TAC CHINH CUA CHUONG TRINH NGAT TRONG TRUONG HOP CO NGAT TIMER0 XAY RA
;====================================================================================================
        INCF        hang_don_vi                                ;tang hang don vi
        MOVLW        0x0A                               
        XORWF        hang_don_vi,0                        ;so sanh hang don vi voi 10
        BTFSS        STATUS,Z                                ;neu chua bang 10
        GOTO        exit_int                                ;thi thoat khoi chuong trinh ngat
        CLRF        hang_don_vi                                ;neu bang 10 roi thi xoa hang don vi
        INCF        hang_chuc,1                                ;tang hang chuc len 1
        MOVLW        0x0A                                       
        XORWF        hang_chuc,0                                ;so sanh hang chuc voi 10
        BTFSS        STATUS,Z                                ;neu chua bang 10
        GOTO        exit_int                                ;thi thoat khoi chuong trinh ngat
        CLRF        hang_chuc                                ;neu da bang 10 thi xoa hang chuc, bat dau dem lai
        GOTO        exit_int
;=====================================================================================================
;DOAN CHUONG TRINH BAT BUOC TRUOC KHI ROI KHOI NGAT
;=====================================================================================================
exit_int
        MOVF        FSR_save,W
        MOVWF        FSR
        MOVF        PCLATH_save,W
        MOVWF        PCLATH
        SWAPF        STATUS_save,W
        MOVWF        STATUS
        SWAPF        W_save,1
        SWAPF        W_save,0
        RETFIE
;====================================================================================================
;KET THUC CHUONG TRINH NGAT
;====================================================================================================
        ORG        0x0000
        GOTO        start
        ORG        0x050
;====================================================================================================
;BAT DAU CHUONG TRINH CHINH
;====================================================================================================
start
;====================================================================================================
;KHOI TAO CAC PORT
;====================================================================================================
        BCF                STATUS,RP1
        BSF                STATUS,RP0                                ;Chon bank1

        MOVLW        0x00
        MOVWF        TRISD                                        ;PORTD la port xuat
        MOVLW        b'11111100'
        MOVWF        TRISB                                        ;PORTB <1:0> la output
       
        BCF        STATUS,RP0                                ;Chon bank0
       
        CLRF        PORTD
        MOVLW        b'00000011'                                ;tat cac led hang chuc va hang don vi
        MOVWF        PORTB

;====================================================================================================
;KHOI TAO TIMER 0
;====================================================================================================
        CLRF        TMR0                                        ;xoa thanh ghi TMR0
        CLRF        INTCON
        BSF                STATUS,RP0                                ;chon Bank 1
        MOVLW        b'10000001'                                ;tat chuc nang keo len o PORTB        bit7=RBPU=1
                                                                        ;chon xung dem la xung noi                bit6=TOCS=0
                                                                        ;xung clock tac dong canh len        bit5=TOSE=0
                                                                        ;toc do dem tac dong len TIMER0        bit3=PSA=0
        MOVWF        OPTION_REG                                ;tan so prescaler la 1:4
       
        BCF                STATUS,RP0
        BSF                INTCON,TMR0IE                        ;cho phep ngat timer0
        BSF                INTCON,PEIE                                ;cho phep ngat ngoai vi
        BSF                INTCON,GIE                                ;cho phep toan bo cac ngat
;====================================================================================================
;KHOI TAO CAC BIEN
;====================================================================================================
        CLRF        hang_chuc
        CLRF        hang_don_vi
;====================================================================================================
;VONG LAP CHINH
;====================================================================================================
main
        CALL        hien_thi
        GOTO        main
;====================================================================================================
;CHUONG TRINH CON HIEN THI CAC GIA TRI CHUA TRONG CAC THANH GHI hang_chuc VA hang_don_vi
;HIEN RA CAC LED HANG DON VI VA HANG CHUC
;====================================================================================================
hien_thi
        MOVF        hang_chuc,0                                ;hien thi LED hang chuc
        CALL        table
        MOVWF        PORTD
        MOVLW        b'11111101'
        MOVWF        PORTB
        CALL        delay_1ms

       
        MOVF        hang_don_vi,0                        ;hien thi LED hang don vi
        CALL        table
        MOVWF        PORTD
        MOVLW        b'11111110'
        MOVWF        PORTB
        CALL        delay_1ms
        RETURN
;======================================================================================================
;CAC CHUONG TRINH CON DUNG CHO CHUONG TRINH CON HIEN_THI
;======================================================================================================
table
        ADDWF        PCL,1
        RETLW        0xC0
        RETLW        0xF9
        RETLW        0xA4
        RETLW        0xB0
        RETLW        0x99
        RETLW        0x92
        RETLW        0x82
        RETLW        0xF8
        RETLW        0x80
        RETLW        0x90
delay_1ms
        MOVLW        d'100'
        MOVWF        count1
d2        MOVLW        0xC7
        MOVWF        counta
        MOVLW        0x01
        MOVWF        countb
delay_1
        DECFSZ        counta,1
        GOTO        $+1
        DECFSZ        countb,1
        GOTO        delay_1
        DECFSZ        count1,1
        GOTO        d2
        RETURN
END

Em cảm ơn anh Nam rất nhiều. Anh giúp em giải quyết triệt để cái lỗi này luôn nha anh Nam.

uydanh 23-11-2007 10:08 AM

Và đây là lỗi mplab báo :
Code:

Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\ngat\16F877ATMPO.o".
Clean: Deleted file "C:\ngat\16F877ATMPO.lst".
Clean: Deleted file "C:\ngat\ngattimer.mcs".
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F877A "16F877ATMPO.ASM" /l"16F877ATMPO.lst" /e"16F877ATMPO.err" /o"16F877ATMPO.o"
Warning[207] C:\NGAT\16F877ATMPO.ASM 10 : Found label after column 1. (count1)
Warning[207] C:\NGAT\16F877ATMPO.ASM 11 : Found label after column 1. (counta)
Warning[207] C:\NGAT\16F877ATMPO.ASM 12 : Found label after column 1. (countb)
Warning[207] C:\NGAT\16F877ATMPO.ASM 14 : Found label after column 1. (hang_don_vi)
Warning[207] C:\NGAT\16F877ATMPO.ASM 15 : Found label after column 1. (hang_chuc)
Warning[207] C:\NGAT\16F877ATMPO.ASM 17 : Found label after column 1. (W_save)
Warning[207] C:\NGAT\16F877ATMPO.ASM 18 : Found label after column 1. (PCLATH_save)
Warning[207] C:\NGAT\16F877ATMPO.ASM 19 : Found label after column 1. (STATUS_save)
Warning[207] C:\NGAT\16F877ATMPO.ASM 20 : Found label after column 1. (FSR_save)
Message[305] C:\NGAT\16F877ATMPO.ASM 49 : Using default destination of 1 (file).
Message[302] C:\NGAT\16F877ATMPO.ASM 92 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\NGAT\16F877ATMPO.ASM 94 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\NGAT\16F877ATMPO.ASM 112 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Warning[205] C:\NGAT\16F877ATMPO.ASM 179 : Found directive in column 1. (END)
Executing: "C:\Program Files\Microchip\MPASM Suite\MPLink.exe" "C:\ngat\16f877a.lkr" "C:\ngat\16F877ATMPO.o" /o"ngattimer.cof" /M"ngattimer.map" /W
MPLINK 4.11, Linker
Copyright (c) 2007 Microchip Technology Inc.
Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000004, length=0x00000046
Errors    : 1

Link step failed.
BUILD FAILED: Fri Nov 23 09:58:54 2007


uydanh 23-11-2007 10:19 AM

À quên, em xin nói rõ thêm : khi em tạo một project trong malab thì tức nhiên nó sẽ khai báo sẵn một số thứ như vecto ngắtv.v...Trong các trường hợp đó cứ gõ ORG 0000 trong chương trình chính của mình là báo lỗi như trên. Em nghĩ có lẽ vì có các khai sẵn của mplab rồi nên chương trình ko bắt đầu từ 0000 nữa, vậy báo lỗi là đúng và em xóa đi, chương trình OK liền.
Còn khi tạo một project mà em xóa tất cả những khai báo mặc nhiên của mplab thì chương trình không bao giờ dịch được dù em gõ đúng hoàn toàn không sai một từ so với chương trình mẫu. Lỗi nó cũng báo giống như trên.
Đoạn chương trình trên em gõ vào mplab khi xóa hết các khai báo mặc nhiên của mplab.Nói chung đó là tất cả những gì trên trang soạn thảo chương trình của em, không có các khai báo sẵn của mplab.

namqn 23-11-2007 05:59 PM

Tôi dùng Project Wizard để tạo ra một project mới, chọn PIC16F877A, chọn bộ công cụ ngôn ngữ là MPASM, sau đó tạo một thư mục mới cho project, và chấp nhận các thiết lập khác của MPLAB. Sau đó tôi tạo một tập tin .asm mới trong MPLAB và copy toàn bộ source code của bạn vào một tập tin đó, lưu lại và thêm tập tin đó vào project. Quá trình biên dịch diễn ra thành công, với các warning như đã xuất hiện trong trường hợp của bạn. Tôi dùng MPLAB 7.60.

Bạn thử làm lại theo các bước mà tôi đã mô tả xem sao, nếu vẫn không biên dịch thành công thì tôi sẽ nói thêm về các biện pháp khác.

Phần khai báo biến của bạn nên viết như sau để tránh các warning [207]:
Code:

        cblock 0x20
        count1                        ;Cac thanh ghi su dung trong chuong trinh delay
        counta
        countb

        hang_don_vi                ;Cac thanh ghi chua gia tri can
        hang_chuc                ;hien thi ra led 7 doan
       
        W_save                        ;Cac thanh ghi dung de cat cac
        PCLATH_save                ;thanh ghi quan trong khi thuc thi
        STATUS_save                ;chuong trinh ngat
        FSR_save
        endc

Thân,

uydanh 23-11-2007 08:39 PM

Trời, làm theo những bước mà anh Nam nói, quả thật chương trình dịch rất ngon, không còn một lỗi nào cả. Cảm ơn anh Nam rất nhiều.
À, em cũng đã đặt câu hỏi này bên diễn đàn khoa Điện của DHBK HCM mà chưa thấy ai trả lời. Anh cho phép em chép nguyên văn trả lời của anh qua đó nha anh Nam, để bạn nào bị giống em có cách giải quyết. (em chép trước rồi ,hihii)
Cảm ơn anh Nam rất nhiều.

microchipnam 25-11-2007 02:52 PM

loi nay nen viet nhu sau moi dung:
org 0x00
goto start
org 0x06 ;gia tri nay co the tuy thuoc vao lenh bao "..lengh..." o phan bao loi!!!

microchipnam 25-11-2007 02:57 PM

loi nay anh cung gap ,em nen them vao cac lenh sau (nen dat o dau chuong trinh)
org 0x00
goto start
org 0x46


Múi giờ GMT. Hiện tại là 05:11 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam