Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
中級會員
|
我把你的程式複製下來試了一下, 得到了正確的結果.
source code 上看起來也應該是正確的. 我能給你的建議只有重新 Build All 一次看看是否會正確了.
發表於: 2008/3/20 16:25
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
中級會員
|
開啟 Watch 監看視窗,
選擇 sqrt_in 項目, 按滑鼠右鍵開啟選單, 點選 properties 開啟屬性視窗. 點選 Size 的項目更改為 24 bits. 相同的, 也更改 sqrt_root 的屬性成為 24 bits. 這樣應該就可以看得到正確的結果值了.
發表於: 2008/3/20 15:12
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
中級會員
|
監看時資料錯誤嗎!
可能是監看的資料型態選擇不正確. PICC double 的資料型態與一般常用的 32 bits double型態是不同的, 它預設為 24 bits 的資料型態. 所以你可能需注意一下監看時的資料型態選擇是否正確.
發表於: 2008/3/20 14:45
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
中級會員
|
在主程式中加入 #include <math.h>,
然後把 sqrt.c 加入到你的專案中一起編譯與 link 應該就可以了. 不然也可以把 sqrt.c 的內容如以下的方式直接加入你的程式中.
[color=CC0000]// sqrt.c 中使用到的兩個 include 述敘[/color]
發表於: 2008/3/20 13:37
|
|||
|
Re: 想請問一下 Reset時, 是否能設置其他腳位的準位
|
||||
---|---|---|---|---|
中級會員
|
印象裡是沒有這樣的功能存在(若有錯誤請多指教)。
但如果你不介意在硬體上加幾顆電阻, 大致可用以下的方法來保證 reset 時為 low 準位. 因為 pic 在 reset 時會被設置成輸入狀態, 此時 I/O 腳上為高阻抗狀態, 將需要為 low 的 I/O 腳連接一個 約 1K ~ 10K 的電阻到 Vss, 這樣便可以讓一個輸出 I/O 在 reset 時保持在 low 的準位.
發表於: 2008/3/14 17:04
|
|||
|
Re: 可以幫我說明一下這顆 Pic 裡面的記憶體大小嗎?
|
||||
---|---|---|---|---|
中級會員
|
程式存在 Program Memory。
SFR 與 RAM 使用相同的位址線, 所以應該可以說是在同一個區域, 但並沒有從 Data Memory (Bytes) 8192 佔用, 所以使用者有 8K RAM可使用。 Program Memory (Bytes) 64K Program Memory (Instructions) 22,016 這兩個都是敘述 Program Memory 的大小, (Bytes)是指用 byte 的大小來計算有 64k, (Instructions)則是指用 機械碼指令 來計算有 22,016 個指令。 microchip 的 PIC24F 系列, 它的 RISC 指令有 3 bytes 的長度喔!
發表於: 2008/3/14 14:34
|
|||
|
Re: 關於F877A的AD中斷問題...
|
||||
---|---|---|---|---|
中級會員
|
這是因為主要程式裡沒有令 ADIF=1 的程式存在。
ADIF會被設定為1, 是因為A/D轉換工作的完成, 而你從舊程式改過來時只執行了 init_a2d(); 其中並沒有設定 channel 與 ADGO = 1, 所以沒有任何 A/D 轉換被起始, 當然也就不會有 A/D 轉換完成時 ADIF 會被設定為1的動作了。 ---------------------------------------------------------------------- 建議修改... 將原本的 void init_a2d() 與 unsigned char read_a2d() 工作內容合併為新的 void init_a2d(), void init_a2d(unsigned char channel){ ADCON0=0b01000000; ADCON1=0; ADON=1; channel&=0x07; ADCON0&=0xC5; ADCON0|=(channel<<3); ADIF=0; ADGO=1; } 這樣可以設定好 channel 並使 A/D轉換開始, 然後修改中斷程式內容... void interrupt usart(void) { unsigned char x; // 參考原本的 read_a2d(), 但不需設定 channel // 所以直接從 ADRESH 讀取轉換完成的結果值 x=ADRESH; PORTD = (8>>(x>>6)); ADIF=0; ADGO=1; // 最後讓 A/D 轉換再次開始, 否則就不會連續不停的轉換了 } 然後呢! 主程式會有一點點不一樣... void main(void){ // 因為新的 init_a2d(channel) 需要一個 channel 的引數 init_a2d(1); GIE=1; PEIE=1; ADIE=1; TRISD=0xF0; while(1) {;} }
發表於: 2008/3/13 9:36
|
|||
|
Re: 請問支援 SSI 介面的料號
|
||||
---|---|---|---|---|
中級會員
|
參考一下 SPI 的資料吧!
說不定會適合你的使用需求。
發表於: 2008/3/13 8:25
|
|||
|
Re: PIC24FJ128GA的PORTB無法做寫入控制
|
||||
---|---|---|---|---|
中級會員
|
建議你檢查一下有無設定 AD1PCFG ,
因為 PORTB 與 ANALOG INPUT 功能腳共用, 當AD1PCFG:n 被設定為 1 時, PORTB:n 才會被當作 DIGITAL I/O 操作, 這樣操作 PORTB 的 DIGITAL 功能腳位才會正常 。
發表於: 2008/3/7 14:57
|
|||
|