9 - bit resolution 93.75 ms 0.5
10 - bit resolution 187.5 0.25
11 - bit resolution 375 0.125
12 - bit resolution 750 0.0625
那么,我肯定不是死等的。死等多浪費(fèi)cpu,效率太低了,實(shí)際工作中根本無法接受。因此,我做了一個(gè)狀態(tài)機(jī):int main(int argc, char const *argv[])
{
while(1)
{
ds18b20_discope();
}
return 0;
}
void ds18b20_discope(void)
{
switch (ds18b20的狀態(tài)機(jī)的全局變量)
{
case 發(fā)送命令:
發(fā)送轉(zhuǎn)換命令
賦值到等待裝態(tài)
break;
case 等待裝態(tài):
判斷是否有超時(shí),
如果有超時(shí),則:讀取,計(jì)數(shù)器清零,并回到發(fā)送命令狀態(tài)
否則,do nothing
break;
default:
break;
}
}
定時(shí)器的基準(zhǔn)中斷可以自己細(xì)化,我是50ms一個(gè)中斷:void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
如果ds18b20已經(jīng)處于等待狀態(tài),
則計(jì)數(shù)
}
這樣就是一個(gè)簡(jiǎn)單的傳感器定時(shí)采樣的狀態(tài)機(jī)思路,不會(huì)死等,效率較高,而且穩(wěn)定。注意:ds18b20的時(shí)序性比較嚴(yán)格,網(wǎng)上說不能被打斷的,但是后來移植到freertos中,也是可以的,溫度采樣還算穩(wěn)定,但是考慮到后續(xù)程序比較大,因此還是裸機(jī)了,狀態(tài)機(jī)的思路基本能解決。掃描二維碼,關(guān)注更多精彩內(nèi)容
在實(shí)際的單片機(jī)控制系統(tǒng)中,有時(shí)候會(huì)使用數(shù)字邏輯芯片對(duì)單片機(jī)和受控元件進(jìn)行隔離,以保護(hù)單片機(jī),或者令單片機(jī)更好地對(duì)后級(jí)進(jìn)行控制。
關(guān)鍵字: 單片機(jī) 數(shù)字邏輯芯片 受控元件大家好,我是小舒,今天我?guī)砹艘粋€(gè)開源項(xiàng)目。學(xué)習(xí)單片機(jī)的小伙伴,對(duì)J-link一定不會(huì)陌生。J-link可以使用JATA和SWD接口進(jìn)行在線Debug和程序的燒錄,曾經(jīng)一段時(shí)間,某寶上J-Link鋪天蓋地,各種各樣,價(jià)格...
關(guān)鍵字: 開源項(xiàng)目 J-link 單片機(jī)