toc 微控制器程式設計中的一些時序問題

2021-10-04 05:37:41 字數 1300 閱讀 7975

本文的的delay原型:

void

delay

(unsigned

int t)

今天在微控制器程式設計時遇到了一些問題:

lcd1602的第二行無法顯示

ds18b20的溫度一開始一直為0,後來一直是變化的負數

這裡面有兩個原因,乙個是延時時間不夠,如以下lcd程式中,在埠被賦值乙個位元組後的延時是必不可少的,lcd1602需要時間處理乙個位元組的資料.

en=1;

gpio_lcd=order;

//#define gpio_lcd p0

delay

(2000);

en=0

;

再如ds18b20的初始化中,釋放匯流排後的延時不能太短,我按照以下描述寫了個delay(10),結果溫度一直0.06.

控制器首先將匯流排拉低480-960us.然後釋放匯流排,產生復位脈衝,ds18b20在接收到復位脈衝後會等待15-60us,之後將匯流排拉低並保持60-240us,產生存在脈衝,這表明ds18b20已經初始化完成

結果寫成delay(20);就可以了

bit init18b20()

dsport=1;

//whatever successful or fail,release the bus

return1;

//initial fail;

}

另乙個問題則是我在寫讀 ds18b20時忘了釋放匯流排,下面的時序圖里也沒有釋放匯流排的時序,但是釋放匯流排是必不可少的,只有釋放了匯流排,ds18b20才可以在匯流排上寫1寫0.不然的話,匯流排將一直保持低電平,ds18b20無法把它拉高

u8 read18b20()

return dat;

}

首先將匯流排拉低並保持超過1us後釋放匯流排,ds18b20檢測到這一操作後,迅速將要輸出的資料放到匯流排上。控制器會在拉低匯流排後的1~15us時間段內對匯流排進行取樣,如果檢測到低電平,就是從ds18b20中讀出了「0」,如果檢測到高電平,就是從ds18b20中讀出了「1」

51微控制器的一些複習

51微控制器的一些複習 sfr special function register特殊功能暫存器的縮寫 宣告可位元組定址的特殊功能暫存器,如sfr po 0x80,sbit 特殊功能暫存器位 宣告可位定址的特殊功能暫存器,如sbit a p0 0 這些都在標頭檔案中有定義 或reg51.h 中一共定...

關於微控制器程式執行的一些理解

關於程式的執行,以前想的不多,沒有意識到乙個程式在執行時,從 讀指令,資料又寫在 從微控制器上知道,在上電的那一刻,mcu的程式指標pc會被初始化為上電復位時的位址,從哪個位址處讀取將要執行的指令,由此程式在mcu上開始執行 當然在呼叫程式的 main之前,還有一系列其他的的初始化要做,如堆疊的初始...

C語言在微控制器開發中的一些技巧

1 不改變其他位的值的狀況下,對某幾個位進行設值,方法就是先對需要設定的位用 操作符進行清零操作,然後用 操作符設值。比如我要改變gpioa bsrrl的狀態,可以先對暫存器的值進行 清零操作 gpioa bsrrl 0xff0f 將第4 7位清0 然後再與需要設定的值進行 或運算 gpioa bs...