用單片機的I/O口模擬I2C協議
I2C用IO模擬程序網上范例最多的就是51的程序了,這些范例的正確性無需懷疑.但是如果直接以它為藍本將它"AVR化",一不留神,就會有點問題了.
這要從I2C的硬件規范和AVR及51單片機的IO口說起.I2C要求SCL,SDA二線都有 線與 功能,即I2C驅動口應該是 漏極開路 電路,其高電平的維持是靠上拉電阻來實現的, 而低電平則需要驅動口的強下拉能力.
51單片機IO口正好完全符合這個特性.寫起I2C驅動頗為得心應手.但是AVR的IO口強大了,它輸出的高電平是實實在在的高電平,而不是靠什么上拉電阻來提供,只有10mA都不到的電流!于是如果直接使用 PORTB_Bit0 = 1這樣的操作,就不能滿足I2C的線與功能了,如果此時有別的設備要將SCL或者SDA拉低,那么結果就是二個IO口打架,誰贏誰輸不得而知,時間長了,多半是兩敗俱傷,芯片發熱吧.
當然AVR的IO口自然有辦法滿足I2C的電氣特性要求,不就是不能輸出1么,那么用它的高阻狀態即可(DDRB_Bit0=0,PORTB_Bit0=0即可),要輸出0么(DDRB_Bit0=1,PORTB_Bit0=0).
標簽:
I2C
AVR
程序
范例
上傳時間:
2016-07-19
上傳用戶:gxrui1991
11. 停車場管理2(9)
(1) 有一個兩層的停車場, 每層有6個車位, 當第一層車停滿后才允許使用第二層. ( 停車場可用一個二維數組實現, 每個數組元素存放一個車牌號 ) 每輛車的信息包括車牌號, 層號, 車位號, 停車時間共4項. 其中停車時間按分鐘計算
(2) 假設停車場初始狀態為第一層已經停有4輛車, 其車位號依次為1—4 , 停車時間依次為20, 15, 10 , 5 . 即先將這四輛車的信息存入文件”car.dat”中( 數組的對應元素也要進行賦值 )
(3) 停車操作: 當一輛車進入停車場時, 先輸入其車牌號, 再為它分配一個層號和一個車位號(分配前先查詢車位的使用情況, 如果第一層有空則必須停在第一層), 停車時間設為5 , 最后將新停入的汽車的信息添加文件”car.dat”中, 并將在此之前的所有車的停車時間加5.
(4) 收費管理(取車): 當有車離開時, 輸入其車牌號, 先按其停車時間計算費用, 每5分鐘0.2元. (停車費用可設置一個變量進行保存), 同時從文件”car.dat”中刪除該車的信息, 并將該車對應的車位設置為可使用狀態(即二維數組對應元素清零). 按用戶的選擇來判斷是否要輸出停車收費的總計.
(5) 輸出停車場中全部車輛的信息.
(6) 退出系統.
標簽:
停車場
數組
車牌
11
上傳時間:
2016-08-01
上傳用戶:330402686