熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機開發(fā)--時序影響

單片機開發(fā)--時序影響

作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏

單片機開發(fā)中,如果時序關(guān)系不正確定的話,數(shù)據(jù)就不能正確的讀寫。因此,在程序中,如何正確的控制時序關(guān)系,就顯得特別的重要。

本文引用地址:http://www.bjwjmy.cn/article/201611/320781.htm

先來看以下的兩個例子:

1.DS1302時鐘芯片,采用SPI總線;

2.24C08存儲芯片,采用I2C總線。

在對DS1302進行編程時,發(fā)現(xiàn)數(shù)碼管只顯示時間的奇數(shù)值,而偶數(shù)值則不顯示。

檢查了下程序,問題定位在讀出數(shù)據(jù)與寫入數(shù)據(jù)的函數(shù),原函數(shù)具體如下:

uchar ReadDs1302()

{

uchar dat,i;

SCLK=1;

Delayus(2);

for(i=0;i<8;i++)

{

dat>>=1;

if(DATA==1)

{

dat|=0x80;

}

SCLK=1;

Delayus(2);

SCLK=0;

Delayus(2);

}

return da;

}

將上面紅色字體的那行程序刪除,或者改為:SCLK=0,再重新燒寫后,數(shù)碼管顯示的時間正常。

而寫入數(shù)據(jù)的函數(shù)如下:

void WriteDs1302(uchar dat)

{

uchar i;

SCLK=0;

Delayus(2);

for(i=0;i<8;i++)

{

DATA=dat&0x01;

Delayus(2);

SCLK=1;

Delayus(2);

SCLK=0;

dat>>=1;

Delayus(2);

}

}

若只將上面藍(lán)色部分的程序改為:

if(i<7)

{

SCLK=0;

}

重新燒寫進去后,數(shù)碼管也能正確的顯示。

以藍(lán)色那行程序的修改,分析其原因:

先看下SPI總線的讀操作時序,其為下降沿采樣,如下圖所示:

從時序圖中,可看出,對于寫數(shù)據(jù),是在時鐘的上升沿,而讀數(shù)據(jù),則是在時鐘的下降沿。

程序修改前,在往DS1302中寫入第八位數(shù)據(jù)后,時鐘信號就變?yōu)榈碗娖?。此后,進入讀階段,在DS1302還沒將數(shù)據(jù)送到SDA線上時,時鐘就變?yōu)楦唠娖?,此時對應(yīng)的SDA上的數(shù)據(jù),還是為寫入的數(shù)據(jù)1。

而程序修改后,即在SDA寫入數(shù)據(jù)后,在第八位數(shù)據(jù)時,SCLK就不降為低電平了,一直保持為高電平,直到DS1302將數(shù)據(jù)送到SDA時,才變?yōu)榈碗娖?,在下降沿時對SDA上的數(shù)據(jù)進行采樣。

即修改后的程序,在讀寫操作交替那個時鐘,等到DS1302送數(shù)據(jù)到SDA線上后,才變?yōu)榈碗娖?,進行采樣的。

對于24C08,其采用I2C總線技術(shù),當(dāng)程序燒寫進入后,發(fā)現(xiàn)不能正常的工作。

問題定位在I2C結(jié)束信號函數(shù),具體如下所示:

void Stop()

{

SCL=1;

SDA=0;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

SDA=1;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

上面紅色兩行程序的順序?qū)φ{(diào)下,則能正確的讀寫24C08芯片內(nèi)部的數(shù)據(jù)。

分析其原因,則在于若執(zhí)行Stop()這個函數(shù)之前時,若SDA上存在幾個周期的高電平時,此時執(zhí)行SCL=1;SDA=0,相當(dāng)于多出了個I2C的開始信號,導(dǎo)致錯誤。

在實際中,總結(jié)了下以后幾點,希望可以盡量避免時序操作錯誤:

1. 特別注意單字節(jié)讀,寫函數(shù)剛開始或結(jié)束時,時鐘信號的高低電平;

2. 可確定1或者0為程序的默認(rèn)電平。如對于DS1302的CLK,可以低電平;

3. 從節(jié)省功耗的角度出發(fā),盡量保證默認(rèn)電平功耗低。以I2C總線為例,因其有上拉電阻 的存在,故可保證默認(rèn)電平為高;

4. 同樣從功耗的角度出發(fā),盡量保證各類信號少翻轉(zhuǎn);

5. 對于總線控制信號(如SPI總線的RST),一切信號都準(zhǔn)備好之后,控制信號才開啟。當(dāng)總線要停止工作時,先將控制信號關(guān)斷,再作其他信號的處理;

6. 當(dāng)然,得時刻警惕信號的建立時間與保持時間。

當(dāng)然,若在程序中查找不出問題時,可采用示波器,同時測量時鐘與數(shù)據(jù)信號,判斷時序是否正確。



關(guān)鍵詞: 單片機開發(fā)時序影

評論


技術(shù)專區(qū)

關(guān)閉