Re: 程式碼一問,為何編譯過不了??
|
||||
---|---|---|---|---|
資深會員
|
找一下您整個案子裡的"OC1CON"都改成
"OC1CON1"應該就可以了… 因為新的.h檔裡沒有"OC1CON" 您可以去您的C30安裝目錄看一下 p24FJ64GB106.h裡有關OC1CON1的部份 參照:
發表於: 2008/11/6 18:58
|
|||
|
Re: 程式碼一問,為何編譯過不了??
|
||||
---|---|---|---|---|
資深會員
|
您的linker script好像沒加上去耶,您的MCU是PIC24FJ128GB106,
所以去您安裝的C30目錄下找一個檔案名為p24FJ128GB106.gld,把它加到專案裡看看。
發表於: 2008/11/6 16:04
|
|||
|
Re: 請問C30中(AND)(>>)運算元
|
||||
---|---|---|---|---|
資深會員
|
我在想…這種位元運算子可能只能用在整數的資料型態,尤其是unsigned 的整數資料型態,不然應該很容易弄錯。
您可能需要再去看一下有關指標和強制轉型方面的資料,這對您有幫助的。 就您的需求假設你是用uart將資料傳到另一個MCU,我會像下面這樣的寫法。 extern void uart_tx(unsigned char *data, unsigned char data_length);//利用UART傳資料的函式 double Gps;//你要傳的Gps資料 //----------- // //----------- void double_tx_gps(void) { uart_tx((unsigned char *)&Gps, sizeof(double));//將Gps強制轉成unsigned char送出 } 另外再給您一個函式幫助您思考: //------------ // //------------ void demo_func(void) { unsigned int int_a = 0x1234;//假設sizeof(int) = 2; unsigned char arr[4]; unsigned char *p; double f1 = 0.123;//假設sizeof(double) = 4; double f2; p = (unsigned char *)&int_a; arr[0] = p[0];//此時arr[0]會等於0x34; arr[1] = p[1];//此時arr[0]會等於0x12; p = (unsigned char *)&f1; //以下四行程式已經將f1分成4個byte分別存到arr[]裡,如果各別看arr[]裡的資料是無意義的 arr[0] = p[0]; arr[1] = p[1]; arr[2] = p[2]; arr[3] = p[3]; //將arr[]的位址強制轉型成double,再將這個位址裡的值丟給f2 f2 = *(double)arr;//此時f2會等於0.123 }
發表於: 2008/11/6 12:13
|
|||
|
Re: 請問 C30 的延遲時間怎麼寫
|
||||
---|---|---|---|---|
資深會員
|
參照:
通常我會用一個timer當作系統時間,它通常都會被設定為每10ms中斷一次,然後我會在裡面加一個counter當做delay用的變數,例如我在timer 中斷函式裡放入 void timer_isr(void) { if(DelayTimer) DelayTimer--; } 接下來我就可以在其它函式裡使用它了。 例如: void func1(void) { LATD0 = 1; DelayTimer = 100;//因為每10ms會減1,所以100就等於1秒; While(DelayTimer);//當中斷裡的DelayTimer = 0時就會跳開; LATD0 = 0; }
發表於: 2008/9/9 20:31
|
|||
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已… 解決問題最重要,..... |
||||
|
c30 陣列與強制轉型及指標的問題
|
||||
---|---|---|---|---|
資深會員
|
MCU是24H(16 bits)
Compiler是C30 //----------------------------------------------- // //----------------------------------------------- void func1(void) { unsigned char data[] = {1,2,3,4,5,6,7,8}; unsigned int int_a, int_b;//sizeof(int) = 2 bytes int_a = *(unsigned int *)&data[1]; int_b = *(unsigned int *)&data[2]; //照理說int_a會 = 0x0302;但是實際結果好像不會是如此?不知道為什麼? //難道一定要這樣子嗎?陣列的起始一定要是0或是雙數才可以嗎? int_a = *(unsigned int *)&data[0]; //這種問題我要怎麼解決呢? //我現在的解決方式是 int_a = (data[2] << 8) + data[1]; //不過這樣又太麻煩了。 //不知道有什麼好方法?謝謝 }
發表於: 2008/9/9 20:05
|
|||
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已… 解決問題最重要,..... |
||||
|
Re: HI-TECH compiler "const" 語法問題
|
||||
---|---|---|---|---|
資深會員
|
void ShowFunctionMenu( unsigned const char *SourPtr )
{ unsigned char i, j; unsigned char *DestPtr; DestPtr = LcdDspBuf; for(i = 0 ; i < 10 ; i++) { *(DestPtr++) = 0x00; for(j = 0 ; j < 8 ; j++) *(DestPtr++) = *SourPtr++; }
發表於: 2008/6/12 23:42
|
|||
|
Re: SPI master mode SSx 如何設定?
|
||||
---|---|---|---|---|
資深會員
|
SSx這支腳只有在使用slave模式時才有用,這支腳會被SPI在slave模式時的模組所使用,在slave模式時,只有當SSx這支腳在低電位時,SPI模組(slave mode)才會對Master端送來的SCK有動作,進而產生資料的位移,所以在slave模式時SSx這支腳是不可以隨便換的,因為SPI模組(slave mode)只認識這支腳。
而在master模式下,SSx這支腳是可以當做一般IO的,也就是說,在master下,SSx這支腳並不在SPI模組裡使用,不過因為我們在使用Master模式的SPI時,都是在控制其它元件(slave 元件),所以我們在設計時通常直接用SSx這支腳來當做slave端的cs(或稱ss)腳,也就是將它當成一般IO使用。
發表於: 2008/4/4 1:50
|
|||
|
Re: 請教用MCU和Ethernet 搭配使用方式
|
||||
---|---|---|---|---|
資深會員
|
參照:
PIC18F67J60與PIC18F97J60其實差別不大,最大的不同應該是在程式/資料記憶体上,您可以上Microchip網站比較一下,通常在移植的時候都不會碰到太大的問題(幾乎不會有問題),所以如果您要做測試的話,其實用哪一顆都無所謂,等到要量產時再根據您的code size和腳位是否夠用來選擇最接近的型號就可以了。除非您在還沒測試之前就要百分之百的確認硬体要到位…
發表於: 2008/1/22 12:04
|
|||
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已… 解決問題最重要,..... |
||||
|
Re: 請教用MCU和Ethernet 搭配使用方式
|
||||
---|---|---|---|---|
資深會員
|
Microchip有兩種方式可以實作Ethernet,一個是單純的Ethernet晶片(ENC28J60)要配合一般的MCU,另一個是MCU內含Ethernet模組(67J60)。我們在使用時最初的規畫是使用單純的Ethernet晶片外加一顆18F8722,到最後我們是用67J60,因為它是內建的,所以可想而知它一定比ENC28J60存取的速度快很多(28J60是用SPI傳資料的),另外一點就是67J60的RAM夠大,這樣子在處理一些TCP/IP的Stack就不用怕記憶体不夠了,尤其是我們的做法是搭配sd card做一個有cgi功能的網頁伺服器,如果ram太小的話會寫得很痛苦,因為fat一次抓就是一個sector(512bytes),所以所以用67J60真的是比較好。
目前我們有做到網頁伺服器,並且有CGI的功能,而且可以將大量的資料直接用WEB的方式以表格顯示出來,真的很方便。 Microchip網站有Source code可以抓,我記得它可以用HITECH也可以用C18,我們是用HITECH,雖然可以用HITECH COMPILE,但是我們也是弄了很久才真正搞定,目前已經成功的完成TCP/IP的很多功能了。 我們的心得,給您做參考
發表於: 2007/8/27 22:19
|
|||
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已… 解決問題最重要,..... |
||||
|