DELAY10US:
NOP
NOP
NOP
NOP
NOP
NOP
RET
RES1820:SETB DQ ;復(fù)位1820
NOP
MOV R4,#45 ;拉低540uS 45*12=540
CLR DQ
D1: LCALL DELAY10US
DJNZ R4,D1
SETB DQ
MOV R4,#20 ;等應(yīng)答脈沖280uS
D2: LCALL DELAY10US
JNB DQ,RES_OK
DJNZ R4,D2
MOV R0,#0
RET
RES_OK: MOV R4,#40 ;復(fù)位OK,延時(shí)480uS
D3: LCALL DELAY10US
DJNZ R4,D3
MOV R0,#1
SETB DQ
RET
18B20溫度匯編程序問題,不能正常讀出溫度,請(qǐng)各位老師幫忙指點(diǎn).
全部回復(fù)(12)
正序查看
倒序查看
@dxgung
請(qǐng)各位老師幫我看看,我的復(fù)位,讀寫子程度是不是有什么問題?通過一些測試感覺到復(fù)位子程序應(yīng)該是可以的.現(xiàn)在的溫度顯示是不正常的,所以想請(qǐng)各位老師幫我看看讀寫子程序是不是有什么問題,或者通過什么方法可以判定讀寫子程序是否正常.也就是寫數(shù)的時(shí)候是否確實(shí)正常寫進(jìn)了18B20,讀數(shù)的時(shí)候是否確實(shí)有讀出正確的數(shù)據(jù).如果需要,我后續(xù)再把溫度處理子程序貼上來.
仔細(xì)讀一下1820的DATASHEET,還有IIC協(xié)議,看一下你的時(shí)序是不是正確,還有
信號(hào)時(shí)間是否夠長,一般程序出小問題,都是細(xì)節(jié)沒注意,祝你早日找到問題.
信號(hào)時(shí)間是否夠長,一般程序出小問題,都是細(xì)節(jié)沒注意,祝你早日找到問題.
0
回復(fù)
@dxgung
硬件是可以的.有另一個(gè)C程序能正常工作顯示溫度.我想用匯編做出來,自己感覺到時(shí)序和邏輯同C一樣,也看過多次18B20的資料,感覺時(shí)序也對(duì)得上,但就是做出來的結(jié)果不對(duì).不知道程序問題到底出在哪里?
18B20在網(wǎng)上的資料很多,通信對(duì)時(shí)序的要求很高,要搞一陣才行,簡單點(diǎn)的辦法是用示波器調(diào)你的延遲時(shí)間,一定要弄好,再一個(gè)是回路不能有電容,另上拉電流要足,否則低電平回到高電平的時(shí)間不好.慢慢來,用51還好點(diǎn),用PIC更累
0
回復(fù)
@xing1234
18B20在網(wǎng)上的資料很多,通信對(duì)時(shí)序的要求很高,要搞一陣才行,簡單點(diǎn)的辦法是用示波器調(diào)你的延遲時(shí)間,一定要弄好,再一個(gè)是回路不能有電容,另上拉電流要足,否則低電平回到高電平的時(shí)間不好.慢慢來,用51還好點(diǎn),用PIC更累
我是在一個(gè)學(xué)習(xí)板上弄的,有配套過來的18B20的程序是可以的.不過它是C語言的.我就按C的編程用匯編完全復(fù)制過來,比如C程序那里是多長時(shí)間我的匯編程序相應(yīng)地方就弄多長時(shí)間,而且感覺也是18B20資料上的時(shí)序?qū)Φ蒙?但結(jié)果就是不行.也不知道具體是我哪里弄錯(cuò)了.
0
回復(fù)