PDA

View Full Version : nó báo lỗi thế này khi dịch


minhtienbk
21-07-2007, 10:15 PM
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
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
;************************************************* *******
;
; 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
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
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.


; 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
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
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.


; 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
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
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:
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
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.

;================================================= ==================================================
;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 :

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]:
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