用單片機(jī)的I/O口模擬I2C協(xié)議 I2C用IO模擬程序網(wǎng)上范例最多的就是51的程序了,這些范例的正確性無(wú)需懷疑.但是如果直接以它為藍(lán)本將它"AVR化",一不留神,就會(huì)有點(diǎn)問(wèn)題了. 這要從I2C的硬件規(guī)范和AVR及51單片機(jī)的IO口說(shuō)起.I2C要求SCL,SDA二線(xiàn)都有 線(xiàn)與 功能,即I2C驅(qū)動(dòng)口應(yīng)該是 漏極開(kāi)路 電路,其高電平的維持是靠上拉電阻來(lái)實(shí)現(xiàn)的, 而低電平則需要驅(qū)動(dòng)口的強(qiáng)下拉能力. 51單片機(jī)IO口正好完全符合這個(gè)特性.寫(xiě)起I2C驅(qū)動(dòng)頗為得心應(yīng)手.但是AVR的IO口強(qiáng)大了,它輸出的高電平是實(shí)實(shí)在在的高電平,而不是靠什么上拉電阻來(lái)提供,只有10mA都不到的電流!于是如果直接使用 PORTB_Bit0 = 1這樣的操作,就不能滿(mǎn)足I2C的線(xiàn)與功能了,如果此時(shí)有別的設(shè)備要將SCL或者SDA拉低,那么結(jié)果就是二個(gè)IO口打架,誰(shuí)贏誰(shuí)輸不得而知,時(shí)間長(zhǎng)了,多半是兩敗俱傷,芯片發(fā)熱吧. 當(dāng)然AVR的IO口自然有辦法滿(mǎn)足I2C的電氣特性要求,不就是不能輸出1么,那么用它的高阻狀態(tài)即可(DDRB_Bit0=0,PORTB_Bit0=0即可),要輸出0么(DDRB_Bit0=1,PORTB_Bit0=0).
上傳時(shí)間: 2016-07-19
上傳用戶(hù):gxrui1991
Program main BIOS image | | /B - Program Boot Block | | /N - Program NVRAM | | /C - Destroy CMOS checksum | | /E - Program Embedded Controller Block | | /K - Program all non-critical blocks | | /Kn - Program n th non-critical block only(n=0-7) | | /Q - Silent execution | | /REBOOT - Reboot after programming | | /X - Don t Check ROM ID | | /S - Display current system s ROMID | | /Ln - Load CMOS defaults
標(biāo)簽: Program Destroy Block NVRAM
上傳時(shí)間: 2016-07-26
上傳用戶(hù):wfl_yy
問(wèn)題描述 設(shè)有n種不同面值的硬幣,各硬幣的面值存于數(shù)組T[1:n]中。現(xiàn)要用這些面值的硬幣來(lái)找錢(qián),可以實(shí)用的各種面值的硬幣個(gè)數(shù)不限。當(dāng)只用硬幣面值T[1],T[2],…,T[i]時(shí),可找出錢(qián)數(shù)j的最少硬幣個(gè)數(shù)記為C(i,j)。若只用這些硬幣面值,找不出錢(qián)數(shù)j時(shí),記C(i,j)=∞。 編程任務(wù) 設(shè)計(jì)一個(gè)動(dòng)態(tài)規(guī)劃算法,對(duì)1≤j≤L,計(jì)算出所有的C( n,j )。算法中只允許實(shí)用一個(gè)長(zhǎng)度為L(zhǎng)的數(shù)組。用L和n作為變量來(lái)表示算法的計(jì)算時(shí)間復(fù)雜性 數(shù)據(jù)輸入 由文件input.txt提供輸入數(shù)據(jù)。文件的第1行中有1個(gè)正整數(shù)n(n<=13),表示有n種硬幣可選。接下來(lái)的一行是每種硬幣的面值。由用戶(hù)輸入待找錢(qián)數(shù)j。 結(jié)果輸出 程序運(yùn)行結(jié)束時(shí),將計(jì)算出的所需最少硬幣個(gè)數(shù)輸出到文件output.txt中。
標(biāo)簽:
上傳時(shí)間: 2016-07-28
上傳用戶(hù):yangbo69
printf(" 請(qǐng)輸入%d個(gè)課程的代表值(<%d個(gè)字符):\n" ,(*G).vexnum,MAX_NAME) for(i=0 i<(*G).vexnum ++i) /* 構(gòu)造頂點(diǎn)向量 */ { scanf(" %s" ,(*G).vertices[i].data) (*G).vertices[i].firstarc=NULL } printf(" 請(qǐng)輸入%d個(gè)課程的學(xué)分值(<%d個(gè)字符):\n" ,(*G).vexnum,MAX_NAME) for(i=0 i<(*G).vexnum ++i) /* 構(gòu)造頂點(diǎn)向量 */ {scanf(" %s" ,(*G).verticestwo[i].data) } printf(&quo
標(biāo)簽: vexnum quot MAX_NAME printf
上傳時(shí)間: 2016-08-15
上傳用戶(hù):Avoid98
已知記錄序列a[1..n] 中的關(guān)鍵字各不相同, 可按如下所述實(shí)現(xiàn)計(jì)數(shù)排序:另設(shè)數(shù)組c[1..n],對(duì)每 個(gè)記錄a[i], 統(tǒng)計(jì)序列中關(guān)鍵字比它小的記錄個(gè)數(shù)存 于c[i], 則c[i]=0的記錄必為關(guān)鍵字最小的記錄,然 后依c[i]值的大小對(duì)a中記錄進(jìn)行重新排列,試編寫(xiě)算 法實(shí)現(xiàn)上述排序方法。
上傳時(shí)間: 2016-08-17
上傳用戶(hù):ljt101007
給定含有n 個(gè)元素的多重集合S = {a1, a2,., an } ,1 ≤ ai ≤ n ,1 ≤ i ≤ n ,每個(gè)元素在S 中出現(xiàn)的次數(shù)稱(chēng)為該元素的重?cái)?shù)。多重集S 中重?cái)?shù)大于n/2 的元素稱(chēng)為主元素。例如,S={2,2,4,2,1,2,5,2,2,8}。多重集S 的主元素是2,其重?cái)?shù)為6。
上傳時(shí)間: 2016-08-20
上傳用戶(hù):chongcongying
cskmeans 聚類(lèi)算法的一種 1. 分裂法(partitioning methods):給定一個(gè)有N個(gè)元組或者紀(jì)錄的數(shù)據(jù)集,分裂法將構(gòu)造K個(gè)分組,每一個(gè)分組就代表一個(gè)聚類(lèi),K<N。而且這K個(gè)分組滿(mǎn)足下列條件:(1) 每一個(gè)分組至少包含一個(gè)數(shù)據(jù)紀(jì)錄;(2)每一個(gè)數(shù)據(jù)紀(jì)錄屬于且僅屬于一個(gè)分組(注意:這個(gè)要求在某些模糊聚類(lèi)算法中可以放寬);對(duì)于給定的K,算法首先給出一個(gè)初始的分組方法,以后通過(guò)反復(fù)迭代的方法改變分組,使得每一次改進(jìn)之后的分組方案都較前一次好,而所謂好的標(biāo)準(zhǔn)就是:同一分組中的記錄越近越好,而不同分組中的紀(jì)錄越遠(yuǎn)越好。使用這個(gè)基本思想的算法有:K-MEANS算法、K-MEDOIDS算法、CLARANS算法;
標(biāo)簽: partitioning cskmeans methods 聚類(lèi)算法
上傳時(shí)間: 2014-01-16
上傳用戶(hù):songyue1991
二叉樹(shù),堆排序模板,時(shí)間復(fù)雜度:為O(N*Log2(N))。空間復(fù)雜度: 2*N-1(個(gè)結(jié)點(diǎn))
標(biāo)簽: 二叉樹(shù)
上傳時(shí)間: 2014-01-26
上傳用戶(hù):hopy
魔法K線(xiàn)多頭線(xiàn)型(上輯)●一柱擎天,翻多起漲 翻多第一 招●一星二陽(yáng),中氣十足 翻多第二招●上升三法,三明夾心 翻多第三招●內(nèi)困三紅,翻多起漲 翻多第四招●三陽(yáng)開(kāi)泰,百花齊放 翻多第五招●三線(xiàn)反紅,趁勝追擊 翻多第六招●外側(cè)三紅,來(lái)日方長(zhǎng) 翻多第七招
標(biāo)簽: 線(xiàn)型
上傳時(shí)間: 2014-01-19
上傳用戶(hù):ANRAN
給定n 個(gè)登山機(jī)器人接力攀登的總高度m,及每個(gè)機(jī)器人連續(xù)攀登1 米,2 米,…,k米,所用的時(shí)間,編程計(jì)算最優(yōu)攀登方案。
標(biāo)簽: 機(jī)器人
上傳時(shí)間: 2016-08-27
上傳用戶(hù):sevenbestfei
蟲(chóng)蟲(chóng)下載站版權(quán)所有 京ICP備2021023401號(hào)-1