keil C 一問 |
答題得分者是:addn
|
sissy
一般會員 發表:1 回覆:1 積分:0 註冊:2006-07-23 發送簡訊給我 |
小弟的硬體有兩顆使用SPI傳輸的IC
接法是DIN,DO,CLK 為共用 而兩顆IC的CS腳各別獨立 設定如下 sbit DIN = P2^0 ; sbit DO = P2^1 ; sbit CLK = P2^2 ; sbit CS1 = P2^3 ; sbit CS2 = P2^4 ; 而小弟也把SPI的Function寫出來了 然而原本是把CS的控腳寫在SPI裡面如下 部分code [code cpp] void main() { unsigned char cx; cx = ReadByte(0x10); ... ... } ... ... ... unsigned char ReadByte(unsigned char Addr) { unsigned char i,ch=0; CS1=1; DI= 1; Clock(); DI= 1; Clock(); DI= 0; Clock(); ... ... ... CS1= 0; return ch; } [/code] 但問題來了,這樣的SPI function並不夠完美 因為需要寫兩個獨立的SPI function @_@ 小弟也試著把它改成如下 [code cpp] void main() { unsigned char cx; cx = ReadByte(CS1,0x10); ... ... } ... ... ... unsigned char ReadByte(bit CS,unsigned char Addr) { unsigned char i,ch=0; CS=1; DI= 1; Clock(); DI= 1; Clock(); DI= 0; Clock(); ... ... ... CS= 0; return ch; } [/code] 但不行..是傳值呼叫的問題吧. 那要怎麼改成傳址呼叫呢?? 還是應該如何改進呢? 才能讓這個Function能共用?? 以上.. 編輯記錄
sissy 重新編輯於 2008-03-23 14:06:11, 註解 無‧
|
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
您好
你的程式看起來怪怪的(把CS1指定給參數CS) 你CS1不是輸出嘛 其實寫成兩個讀取的副程式,也沒甚不好,如果堅持要合併可以試試以下 讀取IC1 cx = ReadByte(0,0x10); 讀取IC2 cx = ReadByte(1,0x10); unsigned char ReadByte(bit CS,unsigned char Addr) { unsigned char i,ch=0; if(CS==0) CS1=1; else CS2=1; DI= 1; Clock(); DI= 1; Clock(); DI= 0; Clock(); ... ... ... CS1= 0; CS2=0; return ch; } |
sissy
一般會員 發表:1 回覆:1 積分:0 註冊:2006-07-23 發送簡訊給我 |
在此先謝謝addn 的回答
addn給的方法小弟有用過.是可以 但若是以後換了個電路(假設有3個SPI或更多)是必要再改寫一次SPI這個Function 由於小弟是把SPI寫成另一個 .c檔案 就是想說以後不想要再改這支程式 或許小弟太過了 =.= 但不知道有沒有更佳的方式?? ===================引 用 addn 文 章=================== 您好 你的程式看起來怪怪的(把CS1指定給參數CS) 你CS1不是輸出嘛 其實寫成兩個讀取的副程式,也沒甚不好,如果堅持要合併可以試試以下 讀取IC1 cx = ReadByte(0,0x10); 讀取IC2 cx = ReadByte(1,0x10); unsigned char ReadByte(bit CS,unsigned char Addr) { unsigned char i,ch=0; if(CS==0) CS1=1; else CS2=1; DI= 1; Clock(); DI= 1; Clock(); DI= 0; Clock(); ... ... ... CS1= 0; CS2=0; return ch; } |
addn
高階會員 發表:64 回覆:221 積分:202 註冊:2005-03-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |