Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
新會員
|
哇~再次感謝pic5566的熱情解答
感激感激~~~
發表於: 2005/8/9 21:18
|
|||
|
Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
高級會員
|
嗯
解開就好,有問題再問好了。
發表於: 2005/8/9 19:14
|
|||
|
Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
新會員
|
一切謎底都解開了
感謝 pic5566 的熱情與解答 小弟我感激不盡
發表於: 2005/8/9 19:10
|
|||
|
Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
高級會員
|
Re: 想請問I2C應用範例
版主~各位大大~ 小弟我想把上述的程式改成C18可以compiler的程式 不過在"解讀"上述ccs的程式時遇到一些問題= =" 問題如下: 問題一 函式input()的作用是做什麼用的? 就是c18 的 if (Port==1 or 0) CCS 比較C化他都幫使用者寫好函數但是他也是笨笨的不管怎樣他都會翻出比較多的CODE 難道作用在於讀取腳位電位?如果是,是不是對應到C18指的PORTXbits.RXX? ans: 對 問題二 函式debug_pin()的作用是做什麼用的? ans: 由於我沒有ICE,PIC12Fxx實在太小顆了,我很窮沒錢買ICE,我只有一台三十幾萬的是波器而已,所以我會利用一隻IO腳輸出信號用示波器量測看輸出幾個脈波就可以知道程式跑到那裡了,這是一種DEBUG技巧,有時你無法停下MCU,所以就必須藉助這一個方法來做。 乾脆我再送你一個我的DEBUG(); 這一個我是用C18寫的希望你好好運用一下窮人DEBUG法說不定你會用到 使用方法: 例如你要輸出一個脈波 debug_p4(1); ----+ +-------- | | +--+ 就會在示波器顯示這樣的波形 void debug_p4(uchar i) { switch(i) { case 10: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 9: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 8: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 7: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 6: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 5: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 4: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 3: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 2: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; case 1: L_TEST2 = 0; DLY10US(); L_TEST2 = 1; default: break; } } 我再示範一下 ex: switch(step) { case 1: { debug_p4(1); break;} case 2: { debug_p4(2);break} . . } 問題三 delay_us(2)--->延遲2us?? ans--->yes這也是CCS C compiler所提供的函數 delay_ms(100)--->延遲100ms?? ans -->yes這也是CCS C compiler所提供的函數 問題四 BUFFER1 = IIC_RECEIVE_BYTE(); BUFFER2 = IIC_RECEIVE_BYTE(); PORTDATA = IIC_RECEIVE_BYTE(); input(P_INTERRUPT); 問題四 C code 中提到BURRER1、BURRER2、 PORTDATA、P_INTERRUPT分別指的是什麼?? 透過IIC_RECEIVE_BYTE()向裝置讀資料進來然後放在記憶體備用因為我需要讀兩筆資料所以開兩個bytes的記憶體 input(P_INTERRUPT); 將IO port設定為輸入端,因為我這一個程式是用來控制MICROCHIP公司的MCP23016 IO PORTS EXPANDER 所以他有一隻腳是在通知io port有輸入 我是原作者啦~~~~不好意思喔害你讀的這麼辛苦 版主還有其他大大可以幫忙解答嗎?? 小弟我感激不盡!!!
發表於: 2005/8/9 18:21
|
|||
|
Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
新會員
|
版主~各位大大~
小弟我想把上述的程式改成C18可以compiler的程式 不過在"解讀"上述ccs的程式時遇到一些問題= =" 問題如下: 問題一 函式input()的作用是做什麼用的? 難道作用在於讀取腳位電位?如果是,是不是對應到C18指的PORTXbits.RXX? 問題二 函式debug_pin()的作用是做什麼用的? 問題三 delay_us(2)--->延遲2us?? delay_ms(100)--->延遲100ms?? 問題四 BUFFER1 = IIC_RECEIVE_BYTE(); BUFFER2 = IIC_RECEIVE_BYTE(); PORTDATA = IIC_RECEIVE_BYTE(); input(P_INTERRUPT); 問題四 C code 中提到BURRER1、BURRER2、 PORTDATA、P_INTERRUPT分別指的是什麼?? 版主還有其他大大可以幫忙解答嗎?? 小弟我感激不盡!!!
發表於: 2005/8/9 17:48
|
|||
|
Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
高級會員
|
SORRY
我又忘了交代,這一些函數我都有測試過是量產程式基本上沒問題我是寫來控制microchip MCP23016的 你應該可以很容易改成控制EEPROM或者其他IIC的裝置 還有一點這一個程式為了抗雜訊干擾還加上當通訊沒有獲得ACK信號他會送出STOP然後重新RETRY 10次 所以看起來有一點複雜 慢慢看吧 不懂再問 OK 我是用pic12f508寫的 所以你用pic18f452他應該有硬體的IIC介面C18也有支援IIC函數,你如果不想用內部硬體介面當然也可以使用這一些函數。 不過你要注意一下IO PORT方向設定 不然動不了
發表於: 2005/8/8 16:01
|
|||
|
Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
高級會員
|
忘了跟你講
這是用CCS C compiler寫的 如果用其他的c compiler 可以改成 output_high(P_xx)------> P_xx = 1; output_low(P_xx)-------> P_xx = 0; output_high(); output_low(); 這是CCS 內定函數
發表於: 2005/8/8 15:56
|
|||
|
Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
資深會員
|
引言:
<對了!!請問這是c16還是c18的程式??> 當然是C18 因為microchip只有C18 AND C30 沒有C16的語言
發表於: 2005/8/5 11:23
|
|||
==== ^^ ^^ ====
|
||||
|
Re: 想請問I2C應用範例
|
||||
---|---|---|---|---|
新會員
|
恩 剛試了一下這個程式
他說 output_low(P_SDA); output_high(P_SCL); 這未定義 請問這個還有.h黨的宣告需要一起執行ㄇ
發表於: 2005/8/4 18:13
|
|||
|