• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts (Elly)




Re: 在PIC18f85j10中使用AD0遇到的一些問題,多謝大家能够幫幫我
#1
新會員
新會員


問題已經解决了.

發表於: 2007/12/27 11:32
頂部


在PIC18f85j10中使用AD0遇到的一些問題,多謝大家能够幫幫我
#2
新會員
新會員


在PIC18f85j10中使用AD0遇到的一些問題
在PIC18F85J10中使用AD0做AD變換,我的程序這樣:
void PortInit(void)
{
TRISA = 0x1d;
TRISB=0xfe;
TRISC=0x91;
TRISD=0x00;
TRISE=0x00;
TRISF=0x02;
TRISH=0x00;
TRISG=0x00;
TRISJ=0xf0;

}
void CVPinit(void)
{
INTCON=0x20;
PIR1=0x13;
PIE1=0x23;
CMCON=0x07;
CVRCON=0x00;
ADCON0 = 0x01;
ADCON1 = 0x0c;
ADCON2 = 0xBE; //40MHZ晶振
}
unsigned int FADCDone(void)
{
unsigned int FADCtemp;
FADCdat = 0;
ADCON0 = 0x01;
ADCON0bits.GO_DONE = 1;
while(!PIR1bits.ADIF);
PIR1bits.ADIF = 0;
ADCON0bits.GO_DONE = 0;
FADCtemp = ADRESH;
FADCtemp <<= 8;
FADCtemp += ADRESL;
return FADCtemp;
}
void main(void)
{
unsigned int tdata;
PortInit();
CVPinit():
tdata= FADCDone();
}
AD變換得到的AD值總是一部分值是實際轉換出來的AD值,時不時的冒出一個AD值是0x200,我就不清楚0x200是怎麽得出來的,也不知我這軟件編寫的有什么錯誤?硬件上是采用3.3V基準,多謝大家能够幫幫我啊

發表於: 2007/12/26 14:48
頂部


版主您好,在PIC18f85j10中使用AD0遇到的一些問題
#3
新會員
新會員


在PIC18F85J10中使用AD0做AD變換,我的程序這樣:
void PortInit(void)
{
TRISA = 0x1d;
TRISB=0xfe;
TRISC=0x91;
TRISD=0x00;
TRISE=0x00;
TRISF=0x02;
TRISH=0x00;
TRISG=0x00;
TRISJ=0xf0;

}
void CVPinit(void)
{
INTCON=0x20;
PIR1=0x13;
PIE1=0x23;
CMCON=0x07;
CVRCON=0x00;
ADCON0 = 0x01;
ADCON1 = 0x0c;
ADCON2 = 0xBE; //40MHZ晶振
}
unsigned int FADCDone(void)
{
unsigned int FADCtemp;
FADCdat = 0;
ADCON0 = 0x01;
ADCON0bits.GO_DONE = 1;
while(!PIR1bits.ADIF);
PIR1bits.ADIF = 0;
ADCON0bits.GO_DONE = 0;
FADCtemp = ADRESH;
FADCtemp <<= 8;
FADCtemp += ADRESL;
return FADCtemp;
}
void main(void)
{
unsigned int tdata;
PortInit();
CVPinit():
tdata= FADCDone();
}
AD變換得到的AD值總是一部分值是實際轉換出來的AD值,時不時的冒出一個AD值是0x200,我就不清楚0x200是怎麽得出來的,也不知我這軟件編寫的有什么錯誤?硬件上是采用3.3V基準,多謝大家能够幫幫我啊

發表於: 2007/12/15 8:28
頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#4
新會員
新會員


我在bootloader程序中這樣編寫
#define MPROG_START 0x000000
#define RM_RESET_VECTOR 0x1000
#define RM_HIGH_INTERRUPT_VECTOR 0x001008
#define RM_LOW_INTERRUPT_VECTOR 0x001018
void high_isr(void);
void low_isr(void);

#pragma code high_vector=0x0008
void interrupt_at_high_vector(void)
{
_asm
goto high_isr
_endasm
}
#pragma code
#pragma interrupt high_isr
unsigned char Cnt=0;
void high_isr(void)
{
unsigned char isr_tmp;

if(bootloader==0x5a)
{
_asm
goto RM_RESET_VECTOR+0x08
_endasm
}
}
#pragma code low_vector=0x0018
void interrupt_at_low_vector(void)
{
_asm
goto low_isr
// goto RM_LOW_INTERRUPT_VECTOR
_endasm
}
#pragma code

#pragma interrupt low_isr
void low_isr(void)
{
if(bootloader==0x5a)
{
_asm
goto RM_RESET_VECTOR+0x18
_endasm
}
}
#pragma code
bootloader的lkr函數如下:
// $Id: 18f85j10i.lkr,v 1.2.2.1 2006/01/08 22:33:35 curtiss Exp $
// File: 18f85j10i.lkr
// Sample ICD2 linker script for the PIC18F85J10 processor

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f85j10.lib

CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED
CODEPAGE NAME=boot START=0x2A END=0xfff
CODEPAGE NAME=rm_vectors START=0x1000 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x7FF7
CODEPAGE NAME=config START=0x7FF8 END=0x7FFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED

ACCESSBANK NAME=accessram START=0x0 END=0x5F
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=gpr4 START=0x400 END=0x4FF
DATABANK NAME=gpr5 START=0x500 END=0x5FF
DATABANK NAME=gpr6 START=0x600 END=0x6FF
DATABANK NAME=gpr7 START=0x700 END=0x7F3
DATABANK NAME=dbgspr START=0x7F4 END=0x7FF PROTECTED
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED

SECTION NAME=CONFIG ROM=config

STACK SIZE=0x100 RAM=gpr6
主程序中這樣定義
#pragma code _HIGH_INTERRUPT_VECTOR = 0x001008
void interrupt_at_high_vector(void)
{
_asm
GOTO high_isr
_endasm
}
#pragma code
c018i.c作爲source code,改變如下
#pragma code _entry_scn=0x001000
void
_entry (void)
{
_asm goto _startup _endasm

}
主程序的lkr函數是:
// $Id: 18f85j10i.lkr,v 1.2.2.1 2006/01/08 22:33:35 curtiss Exp $
// File: 18f85j10i.lkr
// Sample ICD2 linker script for the PIC18F85J10 processor

LIBPATH .

//FILES c018i.o
FILES clib.lib
FILES p18f85j10.lib

CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED
CODEPAGE NAME=boot START=0x2A END=0xfff PROTECTED
CODEPAGE NAME=rm_vectors START=0x1000 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x7FF7
CODEPAGE NAME=config START=0x7FF8 END=0x7FFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED

ACCESSBANK NAME=accessram START=0x0 END=0x5F
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=gpr4 START=0x400 END=0x4FF
DATABANK NAME=gpr5 START=0x500 END=0x5FF
DATABANK NAME=gpr6 START=0x600 END=0x6FF
DATABANK NAME=gpr7 START=0x700 END=0x7F3
DATABANK NAME=dbgspr START=0x7F4 END=0x7FF PROTECTED
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED

SECTION NAME=CONFIG ROM=config

STACK SIZE=0x100 RAM=gpr6
這樣編寫bootloader和主程序是合理的嘛?機器一直到執行完bootloader程序后就跑不起來了,不知道這個問題應該怎麽查找。
我在MPLINK的數據手册中查找到當bootloader函數用MPASM編寫時可以用版主給的方法,但用C語言編寫bootloader函數時用的是跟版主不一樣的方法。不知道是否有區別,我也用另外一種方法嘗試去做了,也是同樣的錯誤。
實在不知該怎么解决這個問題了,謝謝版主能够指點一下。

發表於: 2007/12/11 16:27
頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#5
新會員
新會員


版主,您好!
我在程序中增加了中斷的轉移
#pragma code high_vector=0x1008
void interrupt_at_high_vector(void)
{
_asm
GOTO high_isr
_endasm
}
#pragma code

#pragma interrupt high_isr
void high_isr(void)
用ICD2調試發現不能正常的進入中斷,就不知這是爲什麽了?
還有我的bootloader程序是用C語言寫的,可以用您說得方法修改嘛?謝謝版主能幫助我~^_^

發表於: 2007/12/11 8:19
頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#6
新會員
新會員


我明白版主的意思了,我將c018i.c另存爲一個.c文件,保存再source files中,將c018i.c文件改爲如下:
#pragma code _entry_scn=0x001000
void
_entry (void)
{
_asm goto _startup _endasm

}
在18f85j10i.lkr中改變如下:
//FILES c018i.o
FILES clib.lib
FILES p18f85j10.lib

CODEPAGE NAME=vectors START=0x0 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x7FF7
CODEPAGE NAME=config START=0x7FF8 END=0x7FFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF
幷且將主程序的中斷地址也改變了,如下:
#pragma code high_vector=0x1008
這樣改過以後,生成了hex文件,并在bootloader中加載了,但是程序不能正常運行。
所以這樣改過以後程序是否是正確的,我又試著通過這樣的方法將地址還是改爲0x0000,就是改變如下:
#pragma code _entry_scn=0x000000
void
_entry (void)
{
_asm goto _startup _endasm

}
在18f85j10i.lkr中改變如下:
//FILES c018i.o
FILES clib.lib
FILES p18f85j10.lib

CODEPAGE NAME=vectors START=0x0 END=0x0029 PROTECTED
CODEPAGE NAME=page START=0x002A END=0x7FF7
CODEPAGE NAME=config START=0x7FF8 END=0x7FFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF
幷且將主程序的中斷地址也改變了,如下:
#pragma code high_vector=0x0008
下載了這個程序,還是不能正常運行,我想知道我這樣改是否正確?謝謝大家的幫助^_^


發表於: 2007/12/10 10:12
頂部


Re: 用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#7
新會員
新會員


很感謝版主關注我的問題,這個問題我已經想了好久了。
我想問一下版主,我在source files中添加了C:\MCC18\src\traditional\startup中的c018i.c文件編譯后出現了以下錯誤Error - section '_entry_scn' type is non-overlay and absolute but occurs in more than one input file.
我怎麽在source files中添加c018i.c文件呢。
我的LKR檔裡只有18f85j10i.lkr,因爲我用的是ICD2調試,沒有您說得FILE c018i.o 的檔案,所以我不知道怎麽删除,您說得“前面加入 // File. c018i.0 的方式處理”,我也不是很明白。
請版主能够指點一下,非常感謝!

發表於: 2007/12/8 10:36
頂部


用MCCP18怎樣使程序從0x100地址開始編譯,謝謝大家
#8
新會員
新會員


之前用PICC寫bootloader函數時,可以通過設定Specify offset for ROM確定函數的起始地址,但用MCCP18后我不知道怎麽設定起始地址,我只知道可以在c018i.c中改變_entry_scn的起始地址來改變復位地址,但是改變以後從hex文件看,0x100地址之前還是編譯了程序,我迫切想知道怎麽能做到程序從0x0100地址開始,這個問題我已經研究了好久了也沒有結果。謝謝大家!
#pragma code _entry_scn=0x000100
void
_entry (void)
{
_asm goto _startup _endasm

}
#pragma code _startup_scn

發表於: 2007/12/7 14:25
頂部






:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------