Discussion:
I2C的程式問題???
(时间太久无法回复)
老婆的店
2003-12-13 19:26:04 UTC
Permalink
我想用一顆沒有I2C介面的8051當Slave
請問該如何寫呢?
我在網路上找到的sample都是當Master
請有經驗的網友提示一下好嗎?

謝謝
--
* Post by WifeHouse from 210.241.238.166
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
司麥爾先生的豬
2003-12-13 23:26:32 UTC
Permalink
Post by 老婆的店
我想用一顆沒有I2C介面的8051當Slave
請問該如何寫呢?
我在網路上找到的sample都是當Master
請有經驗的網友提示一下好嗎?
謝謝
i2c的界面協議 如果指定給 slave時 順便把主控權丟給slave
這樣應可行吧?!

--
* Origin: 中山大學-美麗之島BBS * From: 61.59.179.221 [已通過認證]
老婆的店
2003-12-14 14:14:20 UTC
Permalink
Post by 司麥爾先生的豬
Post by 老婆的店
我想用一顆沒有I2C介面的8051當Slave
請問該如何寫呢?
我在網路上找到的sample都是當Master
請有經驗的網友提示一下好嗎?
謝謝
i2c的界面協議 如果指定給 slave時 順便把主控權丟給slave
這樣應可行吧?!
我的問題是 如何用8051的IO port來讀取資料
請有經驗的網友指導一下
謝謝
--
* Post by WifeHouse from 210.241.238.166
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
John Doe
2003-12-13 15:20:57 UTC
Permalink
Post by 老婆的店
我的問題是 如何用8051的IO port來讀取資料
1. 不停的probe
2. 用硬體中斷
老婆的店
2003-12-14 18:07:35 UTC
Permalink
Post by John Doe
Post by 老婆的店
我的問題是 如何用8051的IO port來讀取資料
1. 不停的probe
2. 用硬體中斷
你的意思是把SCK接外部中斷
然後在中斷中讀取資料是嗎?

--
* Post by WifeHouse from 210.241.238.166
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
John Doe
2003-12-13 18:15:04 UTC
Permalink
Post by 老婆的店
你的意思是把SCK接外部中斷
然後在中斷中讀取資料是嗎?
我應該說清楚ㄧ點
方法1. 純軟體: 程式不停的去讀你預先連好的port --> probing
方法2. 用硬體中斷:你說的--> 把SCK接外部中斷 然後在中斷中讀取資料
老婆的店
2003-12-15 14:59:19 UTC
Permalink
Post by John Doe
Post by 老婆的店
你的意思是把SCK接外部中斷
然後在中斷中讀取資料是嗎?
我應該說清楚ㄧ點
方法1. 純軟體: 程式不停的去讀你預先連好的port --> probing
方法2. 用硬體中斷:你說的--> 把SCK接外部中斷 然後在中斷中讀取資料
如果是用方法2
請問這樣有足夠的時間搬資料嗎?
進中斷前要先PUSH 然後搬1 bit data 再POP離開中斷
這樣會不會有些bit抓不到啊?


--
* Post by WifeHouse from 210.241.238.166
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
John Doe
2003-12-14 15:17:07 UTC
Permalink
Post by 老婆的店
如果是用方法2
請問這樣有足夠的時間搬資料嗎?
進中斷前要先PUSH 然後搬1 bit data 再POP離開中斷
這樣會不會有些bit抓不到啊?
接下來就是你自己的功課囉。拿起紙和筆,稍微畫個流程,然後自己
算算看哪一種流程速度夠快,可以保證抓到所有的bit
walter
2003-12-16 05:51:19 UTC
Permalink
※ 引述《***@bbs.cis.nctu.edu.tw (老婆的店)》之銘言:
: ==> 在 John Doe <***@no.no> 的文章中提到:
: > 我應該說清楚ㄧ點
: > 方法1. 純軟體: 程式不停的去讀你預先連好的port --> probing
: > 方法2. 用硬體中斷:你說的--> 把SCK接外部中斷 然後在中斷中讀取資料
: 如果是用方法2
: 請問這樣有足夠的時間搬資料嗎?
: 進中斷前要先PUSH 然後搬1 bit data 再POP離開中斷
: 這樣會不會有些bit抓不到啊?

有可能抓不到,所以你要自己算指令執行的時間來不來得及。
I2C 速率最高是 100k, 每個 bit 要在 10 us 內抓住。如果
clock 是你控制的,你不要用這麼快的速度比較不會有問題。

導致抓不到最重要的原因: 如果你 8051 還要處理其他中斷,
那要小心這個接收 I2C 中斷的副程式會因為 8051 正在處理
其他中斷而延遲。

結論: 好好計算你 8051 要處理哪些事,取最壞情況,確保
可以抓住每個 bit。除非你的 8051 只處理 I2C,其他都不做,
否則不要用 polling。

--
※ Origin: 臺大電機 Maxwell 站 ◆ From: 61-222-143-202.HINET-IP.hinet.net
andy
2003-12-17 13:46:39 UTC
Permalink
Post by 老婆的店
Post by 司麥爾先生的豬
i2c的界面協議 如果指定給 slave時 順便把主控權丟給slave
這樣應可行吧?!
我的問題是 如何用8051的IO port來讀取資料
請有經驗的網友指導一下
謝謝
8051 serial is UART (RS232) , 除非是 philips 才能使用 i2c .
i2c 是利用 scl sda 一個 rise /fall 去判斷
所以 必須使用有 edge trig I/O .. 一般 serial I/O 不能

我認為 做 soft UART比較容易
要做到 I2c .. 須要用 edge trig I/o + timer ..
還有 i2c 是用 scl 當 clock ..



--
* Post by andy2000a from 218-160-254-114.HINET-IP.hinet.net
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
Loading...