Fórum témák
» Több friss téma |
Fórum » PIC16F84 megszakításvektor címzésének problémája
Témaindító: andrewboy999, idő: Ápr 16, 2008
Témakörök:
Üdv mindenkinek!
Éppen programozni tanulok mikrovezérlő áramkörökön. Azt olvastam, hogy a megszakításvektor mindig a 4-es címen kezdődik. De az összes példaprogramomat beírva folyton hibát jelez ott. Mindig más címet akar oda, nagyobbat, mint 4. Ezt nem értem miért csinálja. MPLAB-al dolgozom, v8.00-ás verzió. Olyan, mintha beleszámolná a deklarációs részt is a 0-ik címtől, szóval, ha nagyobb a deklarálás, akor annál nagyobb címet ajánl fel a fordító, de ha azt beírom, akkor hiba nélkül lefordul. Valamit nem állítottam talán be? Bemásolom, hogy hiba esetén mit ír ki: Clean: Deleting intermediary and output files. Clean: Deleted file "D:\programozas\PIC\PROJECTEK\16F84ATMPO.o". Clean: Deleted file "D:\programozas\PIC\PROJECTEK\16F84ATMPO.lst". Clean: Deleted file "D:\programozas\PIC\PROJECTEK\Projectem.cof". Clean Warning: File "D:\programozas\PIC\PROJECTEK\Projectem.cod" doesn't exist. Clean: Deleted file "D:\programozas\PIC\PROJECTEK\Projectem.hex". Clean Warning: File "D:\programozas\PIC\PROJECTEK\Projectem.lst" doesn't exist. Clean: Done. Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84A "16F84ATMPO.ASM" /l"16F84ATMPO.lst" /e"16F84ATMPO.err" /o"16F84ATMPO.o" Message[302] D:\PROGRAMOZAS\PIC\PROJECTEK\16F84ATMPO.ASM 39 : Register in operand not in bank 0. Ensure that bank bits are correct. Message[302] D:\PROGRAMOZAS\PIC\PROJECTEK\16F84ATMPO.ASM 41 : Register in operand not in bank 0. Ensure that bank bits are correct. Executing: "C:\Program Files\Microchip\MPASM Suite\MPLink.exe" "D:\programozas\PIC\PROJECTEK\16f84a.lkr" "D:\programozas\PIC\PROJECTEK\16F84ATMPO.o" /o"Projectem.cof" /M"Projectem.map" /W MPLINK 4.14, Linker Copyright (c) 2007 Microchip Technology Inc. Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000004, length=0x00000090 Errors : 1 Link step failed. BUILD FAILED: Wed Apr 16 18:09:27 2008 Minden segítséget előre köszönök!!!
hali
ha felraknád a progit is akor lehet könnyeb lenne válaszolni vagyis a hibát megtalálni
Már dobom is:
list p=16F84A ; list directive to define processor #include "p16F84A.inc" ; processor specific variable definitions __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF CBLOCK 0x0C T1 T2 ENDC ORG 0x00000090 ;EZT FOGADJA EL ;ORG 0x04 v. ORG 4-et viszont nem veszi be START BSF STATUS,RP0 ;BANK1 MOVLW B'00011111' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB BCF STATUS,RP0 ;BANK0 VISSZA: MOVLW B'10000000' MOVWF PORTB CALL DELAY MOVLW B'01000000' MOVWF PORTB CALL DELAY MOVLW B'00100000' MOVWF PORTB CALL DELAY MOVLW B'00010000' MOVWF PORTB CALL DELAY MOVLW B'00001000' MOVWF PORTB CALL DELAY MOVLW B'00000100' MOVWF PORTB CALL DELAY MOVLW B'00000010' MOVWF PORTB CALL DELAY MOVLW B'00000001' MOVWF PORTB CALL DELAY MOVLW B'00000001' MOVWF PORTB CALL DELAY MOVLW B'00000010' MOVWF PORTB CALL DELAY MOVLW B'00000100' MOVWF PORTB CALL DELAY MOVLW B'00001000' MOVWF PORTB CALL DELAY MOVLW B'00010000' MOVWF PORTB CALL DELAY MOVLW B'00100000' MOVWF PORTB CALL DELAY MOVLW B'01000000' MOVWF PORTB CALL DELAY MOVLW B'10000000' MOVWF PORTB CALL DELAY GOTO VISSZA DELAY: MOVLW d'50' MOVWF T1 DEL: MOVLW d'50' MOVWF T2 DEL1: NOP NOP NOP NOP NOP NOP NOP NOP DECFSZ T2,f GOTO DEL1 DECFSZ T1,f GOTO DEL RETURN END Na most ebben nincs megszakításvektor, de a 0-ik címet el akarja tolni. :S
Szia !
Tipp: Azt is meg kellene nezni hogy mekkora cimtartomany all rendelkezesre 4h-tol kezdodoen, ahova irhatsz. Ez nem csak 4h-ra ervenyes hanem a "main" cimkere is, a 00h -ra. Milyen hosszu rutint raktal oda? Az adott cimrol csak hivast csinalj a rutinra, ne oda ird a rutinod.
LIST P=16F84
#INCLUDE "P16F84.INC" ORG 0 GOTO INIT ORG 4 GOTO INTERRUPT ilyen formába probáld meg beirni neked az include után nincs megadva az include fájl Elöször csak nynit cáltoztass rajt hogy beirod a #INCLUDE "P16F84.INC" ha 16f84-et használsz. na proba éa ha nem megy irj
Nem nézted el, először nem jelent meg, mert szögletes zárójelek között volt, ezért átírtam idézőjelek közé. PIC16F84A-t használok.
Nem tehetsz nagyobb cím után kisebbet. Csináld így:
list p=16F84A ; list directive to define processor
#include __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF CBLOCK 0x0C T1 T2 ENDC ORG 0x0000 GOTO START ORG 0X0004 START BSF STATUS,RP0 ;BANK1 MOVLW B'00011111' MOVWF TRISA Erre ezt a hibát dobja: MPLINK 4.14, Linker Copyright (c) 2007 Microchip Technology Inc. Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x00000090 Errors : 1
Ha minden igaz, akkor 04h-tól 3FFh-ig írhatok.
az ORG 0x0004 után valami ugrást rakj be
mert igy nem sok értelme van amugy minek megszakitás a futofényes progiba?
En nem igy tudom.
Potyo leirta. az org 04 ala rakjad a goto megszakitas_rutin hivast.
Ah, ez igaz, véletlenül rossz példát szúrtam be nektek, ennél a példánál a 0-ik cím nem tetszik, de ha van megszakítás, akkor a megszakítás címét akarja eltolni.
ezt probáld meg
igy lesz jó
Beírtam az org 4 alá egy goto start-ot, de erre ezt kaptam:
MPLINK 4.14, Linker Copyright (c) 2007 Microchip Technology Inc. Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x00000092 Errors : 1 Szal még 2-vel akarja eltolni! :S
másold már be akkor az igazai progit amiben megszakitást akarsz csinálni
mert ez igy őrület Az MPLAB ban minden jó be van állitva?
Huh, nekem mondod?
Itt egy egyszerű megszakításos feladat: LIST P=16F84 #INCLUDE "P16F84.INC" __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF ORG 0 GOTO START ORG 4 BCF INTCON,T0IF MOVLW b'00010000' XORWF PORTB,F RETFIE START BSF STATUS,RP0 ;BANK1 MOVLW B'00011111' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB MOVLW B'10000111' MOVWF OPTION_REG BCF STATUS,RP0 ;BANK0 CLRF PORTB BSF INTCON,GIE BSF INTCON,T0IE VISSZA BTFSS PORTA,0 ; Bekapcs teszt BSF PORTB,0 BTFSS PORTA,1 BSF PORTB,1 BTFSC PORTA,0 ; Kikapcs teszt BCF PORTB,0 BTFSC PORTA,1 BCF PORTB,1 GOTO VISSZA END Erre is hibát jelez: Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x00000030 Errors : 1
Az előbb azért másoltam be csak a hibaüzenetet, mert egy az egyben bemásoltam a te példaprogramodat, azt meg minek írjam le mégegyszer? Ez a Te példaprogramod volt elejétől a végéig, amit feltöltöttél, az az asm fájl.
figyu nekem ez tökéletesen hiba nélkül lefut
szóval akkor az mplab beállitásaivel lehet a baj
Configure--Select Device
ott be van állitva a 16f84A ??
Igen, PIC16F84A. Pedig nagyon nem nyomogattam.
Ezeknek bizony pontosan hiba nélkül kell lefutniuk, de nálam valahogy mégsem.
Csináljuk már meg már engem is aggaszt
szal az elérési ut is hiba szokot lenni nem lehet hosszak mit 64 karakter asszem de most nem ez a baj sztem
Hát hallod, átírtam a 4-et 5-re és jól lefordult! Na erre varrjatok gombot!
Nem a linker bajos? // Sample linker command file for 16F84A // $Id: 16f84a.lkr,v 1.5 2006/02/04 00:06:40 nairnj Exp $ LIBPATH . CODEPAGE NAME=vectors START=0x0 END=0x4 PROTECTED CODEPAGE NAME=page START=0x5 END=0x3FF CODEPAGE NAME=.idlocs START=0x2000 END=0x2003 PROTECTED CODEPAGE NAME=.config START=0x2007 END=0x2007 PROTECTED CODEPAGE NAME=eedata START=0x2100 END=0x213F PROTECTED DATABANK NAME=sfr0 START=0x0 END=0xB PROTECTED DATABANK NAME=sfr1 START=0x80 END=0x8B PROTECTED DATABANK NAME=gprs START=0xC END=0x4F SECTION NAME=STARTUP ROM=vectors // Reset and interrupt vectors SECTION NAME=PROG ROM=page // ROM code space SECTION NAME=IDLOCS ROM=.idlocs // ID locations SECTION NAME=DEEPROM ROM=eedata // Data EEPROM nem 0x3-nak kell lennie?
ezt csomagold ki a gyökérbe egy mappába és loadold be és futtasd le
ha ez sem megy akkor passz
Na ez lefordult, de tele van figylemeztetéssel:
Clean: Deleting intermediary and output files. Clean Warning: File "C:\ora\ora.err" doesn't exist. Clean Warning: File "C:\ora\ora.cod" doesn't exist. Clean Warning: File "C:\ora\ora.hex" doesn't exist. Clean Warning: File "C:\ora\ora.lst" doesn't exist. Clean: Deleted file "D:\qqqqqqqqqqq\ora.mcs". Clean: Done. Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "ora.asm" /l"ora.lst" /e"ora.err" /c- Warning[205] D:\QQQQQQQQQQQ\ORA.ASM 1 : Found directive in column 1. (LIST) Warning[205] D:\QQQQQQQQQQQ\ORA.ASM 3 : Found directive in column 1. (__CONFIG) Warning[205] D:\QQQQQQQQQQQ\ORA.ASM 5 : Found directive in column 1. (ORG) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 6 : Found opcode in column 1. (GOTO) Warning[205] D:\QQQQQQQQQQQ\ORA.ASM 8 : Found directive in column 1. (ORG) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 9 : Found opcode in column 1. (BCF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 10 : Found opcode in column 1. (MOVLW) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 11 : Found opcode in column 1. (XORWF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 12 : Found opcode in column 1. (RETFIE) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 15 : Found opcode in column 1. (MOVLW) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 16 : Found opcode in column 1. (MOVWF) Message[302] D:\QQQQQQQQQQQ\ORA.ASM 16 : Register in operand not in bank 0. Ensure that bank bits are correct. Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 17 : Found opcode in column 1. (MOVLW) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 18 : Found opcode in column 1. (MOVWF) Message[302] D:\QQQQQQQQQQQ\ORA.ASM 18 : Register in operand not in bank 0. Ensure that bank bits are correct. Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 19 : Found opcode in column 1. (MOVLW) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 20 : Found opcode in column 1. (MOVWF) Message[302] D:\QQQQQQQQQQQ\ORA.ASM 20 : Register in operand not in bank 0. Ensure that bank bits are correct. Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 21 : Found opcode in column 1. (BCF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 22 : Found opcode in column 1. (CLRF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 23 : Found opcode in column 1. (BSF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 24 : Found opcode in column 1. (BSF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 28 : Found opcode in column 1. (BSF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 29 : Found opcode in column 1. (BTFSS) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 30 : Found opcode in column 1. (BSF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 32 : Found opcode in column 1. (BTFSC) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 33 : Found opcode in column 1. (BCF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 34 : Found opcode in column 1. (BTFSC) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 35 : Found opcode in column 1. (BCF) Warning[203] D:\QQQQQQQQQQQ\ORA.ASM 37 : Found opcode in column 1. (GOTO) Warning[205] D:\QQQQQQQQQQQ\ORA.ASM 38 : Found directive in column 1. (END) Loaded D:\qqqqqqqqqqq\ora.cod. BUILD SUCCEEDED: Wed Apr 16 19:34:12 2008
Szerintem azért mond linker hibát, mert úgy van beállítva a projected, hogy több asm file fordítása után kellene neki linkelnie a végső kódot. Ilyenkor nem "org"-okkal kell definiálni a kódterületeket, hanem "code"-okkal a kódot tartalmazó szegmenseket.
Ha viszont egyetlen egyszerű asm-ből akarsz futtathatót, akkor ki kellene kapcsolni a projectben ezt, hogy ne objectekből akarjon linkelni!
Nah, kivettem a linker fájlt és most rendben lefut minden. Huh, ezt a szívást. szilva, pontosan hogy érted ezt a "code" dolgot? Le tudnád írni kicsit bővebben?
Az baj, ha kitörlöm a linker fájlt?
|
Bejelentkezés
Hirdetés |