|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
如何在占用最少資源的情況下,只利用一個IO來通信——? |
| 作者:Wxy8030 欄目:單片機(jī) |
主機(jī)不停的往外發(fā),從機(jī)接受(兩個單片機(jī)在一塊板子上),要求主機(jī)在盡量少占用資源(盡量少占用RAM,不要使用軟件延時,每個字節(jié)的發(fā)送時間盡量不要超出100個NOP時間,數(shù)據(jù)更新速度只要不大于1S就可以,不能占用定時器、串口之類的硬件資源)的情況下把八位數(shù)據(jù)發(fā)出來。(從機(jī)除了接受主機(jī)的數(shù)據(jù)把它顯示出來外,無別的任務(wù))。 各位大俠可有好的思路? * - 本貼最后修改時間:2005-1-11 14:02:09 修改者:Wxy8030 |
| 2樓: | >>參與討論 |
| 作者: china_fog 于 2005/1/11 16:54:00 發(fā)布:
1-wire LOOK |
|
| 3樓: | >>參與討論 |
| 作者: dengm 于 2005/1/11 19:37:00 發(fā)布:
最快 3 指令周期一bit 發(fā)端: ;..... ;..... CLR EA CLR P1.5 MOV A, #4 DJNZ ACC, $ SETB P1.5 MOV A, @R0 INC R0 NOP NOP NOP NOP MOV C, ACC.0 MOV P1.5, C ; BIT 0 MOV C, ACC.1 MOV P1.5, C ; BIT 1 ;... ;... MOV C, ACC.7 MOV P1.5, C ; BIT 1 JC EXIT NOP SETB P1.5 EXIT: SETB EA ;..... 收端: ORG 03H ; INT 0 / P3.2 電平 AJMP SUB_INT0 ; 03 - 09 指令周期 ORG 08H ; TIMER 0/ GATE CONSOLE / 惟一高優(yōu)先級中斷 ; MODE 2 TH0=0 : TL0=0FFH ORG 50h SUB_INT0: SETB TR0 NOP NOP NOP NOP NOP ... ... ... ... RETI SUB_INT0: PUSH PSW MOV C, P3.2 ; BIT 0 ; 每3周期一bit MOV TEMP.0, C MOV C, P3.2 ; BIT 1 MOV TEMP.1, C MOV C, P3.2 ; BIT 2 MOV TEMP.2, C MOV C, P3.2 ; BIT 3 MOV TEMP.3, C MOV C, P3.2 ; BIT 4 MOV TEMP.4, C ;... XCH A, R0_BAK XCH A, R0 XCH A, TEMP MOV @R0, A INC R0 MOV A, TEMP XCH A, R0 XCH A, R0_BAK POP PSW ACALL INT_RET DEC SP DEC SP INT_RET: RETI |
|
| 4樓: | >>參與討論 |
| 作者: renmingcan 于 2005/1/11 20:30:00 發(fā)布:
這樣應(yīng)該可以的! 這樣應(yīng)該可以的!但是沒有發(fā)送起始標(biāo)志位! * - 本貼最后修改時間:2005-1-11 20:34:51 修改者:renmingcan |
|
| 5樓: | >>參與討論 |
| 作者: renmingcan 于 2005/1/11 20:46:00 發(fā)布:
是不是可以才兩個單片機(jī)之間加一個D觸發(fā)器? |
|
| 6樓: | >>參與討論 |
| 作者: 汽車電子 于 2005/1/11 22:03:00 發(fā)布:
模擬UART就行了 |
|
| 7樓: | >>參與討論 |
| 作者: crazyeda 于 2005/1/11 23:55:00 發(fā)布:
好苛刻,不給用定時器 如果你的程序結(jié)構(gòu)是用節(jié)拍發(fā)生器產(chǎn)生中斷定時掃描消息寄存器,可以順便掃描一下口線,我是說接收部分,建議采用脈寬編碼,這樣利于位同步 |
|
| 8樓: | >>參與討論 |
| 作者: Wxy8030 于 2005/1/12 9:47:00 發(fā)布:
苛刻只是對主機(jī)而言—— 從機(jī)的資源可以隨便用,,, 做這個的主要目的是我們的維修人員在現(xiàn)場維修時,常常為了分析錯誤浪費大量的時間,所以我們的主管就想——能不能利用一個單片機(jī)的IO,在主循環(huán)里(主循環(huán)肯定大于100uS,但會控制在100MS之內(nèi))把系統(tǒng)自檢的一些狀態(tài)發(fā)出來,,,然后我們自己做一個顯示板(一個單片機(jī)+數(shù)碼管),需要維修時到現(xiàn)場往原來的電路板上一插,可以為分析現(xiàn)場的問題提供一些幫助、、、、、、、、、 我的思路是這樣的——主循環(huán)每循環(huán)一次就發(fā)送一個BIT,每一個位以一個1-2uS的低電平開頭,然后發(fā)送位是0時就保持低電平,如果是1就馬上拉高,每一個字節(jié)發(fā)送完了后有一個終止位,終止位就是1-2uS后發(fā)送一個低電平,然后10uS后變成高發(fā)出、、、這樣從機(jī)利用外部中斷來檢測數(shù)據(jù),如果下跳沿后2uS和10uS電平相同則為數(shù)據(jù),讀取并保存,不同則為終止位、、、這樣主機(jī)在發(fā)送終止位時占用了10uS的時間,別的占用的資源很少,我覺得似乎可以接受的、、、 * - 本貼最后修改時間:2005-1-12 10:55:26 修改者:Wxy8030 |
|
| 9樓: | >>參與討論 |
| 作者: crazyeda 于 2005/1/12 10:05:00 發(fā)布:
你這不就是UART通信么 波特率怎么適應(yīng)呢你,還不如按我說的用脈寬編碼,寬脈是0,窄脈是1,自己就可以位同步,接收端程序里用狀態(tài)機(jī)轉(zhuǎn)換的結(jié)構(gòu),這個你參考一下51/AVR的UART口硬件狀態(tài)機(jī)轉(zhuǎn)換的模式就可以了,很簡單的 |
|
| 10樓: | >>參與討論 |
| 作者: williamL 于 2005/1/12 10:12:00 發(fā)布:
一點建議 由于主機(jī)發(fā)送的太快只有幾個us,從機(jī)就會忙于中斷接收數(shù)據(jù),顯示根本沒時間,并且中斷來的太快,中斷處理程序的時間我想肯定會比中斷的間隔時間常,所以這個系統(tǒng),還是要考慮從機(jī)的處理速度的,個人認(rèn)為要達(dá)到這個功能,主機(jī)沒有必要發(fā)那么快,并且對于這個系統(tǒng)應(yīng)用對象來說,還是加校驗碼比較保險點,確保數(shù)據(jù)的正確性 |
|
| 11樓: | >>參與討論 |
| 作者: Wxy8030 于 2005/1/12 10:52:00 發(fā)布:
—— 主循環(huán)每循環(huán)一次才發(fā)送一個位,應(yīng)該可以接受啊 思路基本跟樓上的“寬脈是0,窄脈是1”相同,寬脈沖是大于100uS的低電平,窄脈沖是一個1-2uS的低電平,而同步位我采用的是一個10-15uS左右的低電平... * - 本貼最后修改時間:2005-1-12 11:06:28 修改者:Wxy8030 |
|
| 12樓: | >>參與討論 |
| 作者: dengm 于 2005/1/12 18:32:00 發(fā)布:
寬脈沖是6uS的高電平,窄脈沖是一個3uS的高電平,周期>30uS gate console timer 接收 |
|
| 13樓: | >>參與討論 |
| 作者: cf100 于 2005/1/12 19:31:00 發(fā)布:
那一串NOP不算軟件延時? 請問:那幾個NOP接在一起算什么延時? |
|
| 14樓: | >>參與討論 |
| 作者: rong820913 于 2005/1/15 16:06:00 發(fā)布:
你可以試試 用從機(jī)發(fā)脈沖,主機(jī)檢測到脈沖,主機(jī)回脈沖,再改變電平,從機(jī)讀電平(所有操作在一個I/O口上完成)應(yīng)該可以 |
|
| 15樓: | >>參與討論 |
| 作者: edifier 于 2005/1/15 17:25:00 發(fā)布:
用spi吧,自動處理 |
|
| 16樓: | >>參與討論 |
| 作者: st963432 于 2005/1/16 0:08:00 發(fā)布:
使用i2c試試 |
|
| 17樓: | >>參與討論 |
| 作者: hotpower 于 2005/1/16 1:12:00 發(fā)布:
單線通信的可靠在于協(xié)議制訂的完善 dengm同志只追求了速率,忽略了長線傳輸信號變異等問題... 總之,任何單線(包括無線,紅外等)傳輸必須有同步問題... UART靠啟始位(下降沿后一定寬度的低電平即波特率) SPI靠SS(CS)片選(高/低電平選通) I2C靠START信號(在SCL高時,SDA跳低) 1-Wire靠復(fù)位(同步),寫'1'(讀),寫'0' 紅外有高低電平比 也有以低電平寬度表示START,'0','1',而與高電平的寬度無關(guān)的... 所以本人認(rèn)為單線通信的可靠在于協(xié)議制訂的完善而不在與對速率的刻意追求... 個人意見... * - 本貼最后修改時間:2005-1-16 1:13:36 修改者:hotpower |
|
| 18樓: | >>參與討論 |
| 作者: dengm 于 2005/1/16 10:35:00 發(fā)布:
樓主在追求速率,開始要求1byte/100指令周期,后改為1bit/100指令 |
|
| 19樓: | >>參與討論 |
| 作者: hotpower 于 2005/1/16 10:47:00 發(fā)布:
加速8倍??? |
|
| 20樓: | >>參與討論 |
| 作者: yunwuzhong 于 2005/1/16 13:33:00 發(fā)布:
1線協(xié)議 |
|
| 21樓: | >>參與討論 |
| 作者: vryyw0719 于 2005/1/16 14:05:00 發(fā)布:
詳情 |
|
| 22樓: | >>參與討論 |
| 作者: mailbert 于 2005/1/16 16:31:00 發(fā)布:
同意用模擬UART |
|
| 23樓: | >>參與討論 |
| 作者: gtzs 于 2005/1/17 8:24:00 發(fā)布:
用maxim-dallas的1-wire協(xié)議 從速度和可靠性上都可以保證的 |
|
| 24樓: | >>參與討論 |
| 作者: Wxy8030 于 2005/1/17 9:21:00 發(fā)布:
呵呵......對不起,俺描述有誤...... 1、俺追求的不是速度,而是占用資源最少.... 1BYTE/100周期,我的意思是指發(fā)送一個字節(jié)占用CPU的運行時間盡量控制在100個指令周期,不是說每100周期必須發(fā)送一個字節(jié),,,數(shù)據(jù)的更新可以0.5S左右(也就是說只要在0.5S內(nèi)想辦法把8個BIT發(fā)送出去就行了) 2、兩個CPU靠的很近,這根通信線不會超過25cm |
|
| 25樓: | >>參與討論 |
| 作者: abc2001 于 2005/1/17 9:46:00 發(fā)布:
看看1820吧,也許對你會有所幫助. |
|
| 26樓: | >>參與討論 |
| 作者: sun0_liang 于 2005/1/17 9:47:00 發(fā)布:
你的單片機(jī)還有定時器資源嗎? 就你的要求——如果有,那你也太菜了——主機(jī)直接模擬串口輸出即可。 * - 本貼最后修改時間:2005-1-17 9:49:23 修改者:sun0_liang |
|
| 27樓: | >>參與討論 |
| 作者: sun0_liang 于 2005/1/17 9:58:00 發(fā)布:
看到_不許用定時器,_ 直接模擬又占用系統(tǒng)時間。 問一下,你的指令周期=?us. |
|
| 28樓: | >>參與討論 |
| 作者: mailbert 于 2005/1/17 12:18:00 發(fā)布:
1-wire協(xié)議是雙向的 如果不考慮擴(kuò)展,我認(rèn)為單向傳輸用RS-232的格式最簡單 |
|
| 29樓: | >>參與討論 |
| 作者: wswh2o 于 2005/1/17 16:48:00 發(fā)布:
這樣行不行? 接上你的顯示模塊后,可以向系統(tǒng)發(fā)送一個請求,系統(tǒng)收到請求后把參數(shù)發(fā)給顯示模塊,平時只要檢測這個端口的狀況就可以了,不會消耗很多系統(tǒng)時間。 |
|
| 30樓: | >>參與討論 |
| 作者: wswh2o 于 2005/1/17 16:49:00 發(fā)布:
啊 接上你的顯示模塊后,可以向系統(tǒng)發(fā)送一個請求,系統(tǒng)收到請求后把參數(shù)發(fā)給顯示模塊,平時只要檢測這個端口的狀況就可以了,不會消耗很多系統(tǒng)時間。 |
|
| 31樓: | >>參與討論 |
| 作者: laper 于 2005/1/19 13:25:00 發(fā)布:
奇怪,不用定時器可以實現(xiàn)1-wire 么? |
|
| 32樓: | >>參與討論 |
| 作者: laper 于 2005/1/19 13:32:00 發(fā)布:
你的主循環(huán)可以嚴(yán)格保證周期性么?贊同脈寬調(diào)制方法 啟動位,數(shù)據(jù)位還有其它什么bit都可以用不同的脈寬來表示 個人覺得這樣比較的好 |
|
| 33樓: | >>參與討論 |
| 作者: 阿南 于 2005/1/19 14:50:00 發(fā)布:
雙機(jī)用同樣的時鐘,模擬UART |
|
| 34樓: | >>參與討論 |
| 作者: cf100 于 2005/1/20 15:32:00 發(fā)布:
那就用串行移位就可以了 而且速度極快,但前提是二個MCU共用同一個晶振。 |
|
| 35樓: | >>參與討論 |
| 作者: wsq268 于 2005/1/22 15:43:00 發(fā)布:
用單線i2c,自己定義好協(xié)議就行啦 |
|
| 36樓: | >>參與討論 |
| 作者: cx3333 于 2005/1/26 23:15:00 發(fā)布:
中斷口可以否? |
|
| 37樓: | >>參與討論 |
| 作者: 水管工 于 2005/1/29 4:26:00 發(fā)布:
沒看到自己的帖子,如果重復(fù)請斑竹刪除 平時該IO為0,有信號發(fā)送時,如果是0,就發(fā)一個脈沖(高,低),接受端可以檢測上升沿。如果是1,就發(fā)兩個連續(xù)脈沖(高,低,高,低)。脈沖寬度可以根據(jù)監(jiān)測方式來調(diào)整,要求遠(yuǎn)小于主循環(huán)周期。這樣,當(dāng)收到上升沿時,如果是兩個間隔很短的觸發(fā)就認(rèn)為是1,否則就是零 至于冗余等可自己設(shè)計。兩套系統(tǒng)不需要共享電源、時鐘等 |
|
| 38樓: | >>參與討論 |
| 作者: dengm 于 2005/1/29 9:59:00 發(fā)布:
水管工 方案最好,可從51的T0(P3。4)INPUT |
|
| 39樓: | >>參與討論 |
| 作者: winhiwang 于 2005/1/29 10:34:00 發(fā)布:
類似紅外遙控的編碼方案 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |