標(biāo)題:
DS18B20遙控調(diào)整上下限和精度
[打印本頁]
作者:
新鄉(xiāng)家電維修
時間:
2020-1-2 21:06
標(biāo)題:
DS18B20遙控調(diào)整上下限和精度
/*
DS18B20數(shù)字溫度計89C51(晶振12M),(-55.0℃---125.0℃)遙控調(diào)整溫度范圍。利用18B20內(nèi)部E2PRAM存儲溫度。上下限溫度設(shè)定成功(-50℃---110℃)
回差電壓特性輸出控制(如:TH=30,TL=20)低溫+調(diào)整不會超過高溫,反之,高溫-調(diào)整不會小于低溫
只有返回正常顯示時候才存儲到18B20中E2PROM
功能如下:
1、-55.0℃---125.0℃顯示
2、遙控任意設(shè)定上下限溫度區(qū)間(-50℃---110℃)
3、9位精度----12位精度遙控任意切換
2019.12.30完成功能。
*/
;18B20精度和輸入端修改
DQ BIT P3.6 ;18b20輸入腳
;顯示端口定義
WEI_1 BIT P2.0 ;顯示右數(shù)第一位
WEI_2 BIT P2.1 ;2
WEI_3 BIT P2.2 ;3
WEI_4 BIT P2.3 ;4
OUT EQU P0
;遙控碼與輸出端口修改
IR_YK1 EQU 0CCH;遙控用戶碼1(改遙控器按鍵)
IR_YK2 EQU 1DH ;遙控用戶碼2
IR_YK3 EQU 04H ;遙控功能碼
IR_YK4 EQU 05H ;遙控加
IR_YK5 EQU 06H ;遙控減
JK_LENG BIT P2.6 ;繼電器輸出制冷恒溫
JK_RE BIT P2.7 ;繼電器輸出加熱恒溫
;以上定義可修改端口,以下定義不可修改以免影響程序
FLAG BIT 38H ;DS18B20存在標(biāo)志(位定義)
FUHAO BIT 39H ;負溫度標(biāo)志(位定義)
IRIN BIT P3.2 ;紅外線輸入腳
A_BIT EQU 34H ;放百位
B_BIT EQU 35H ;放十位
C_BIT EQU 36H ;放個位
D_BIT EQU 37H ;個位小數(shù)
WENDU_TH EQU 32H ;上限溫度按鍵調(diào)整位置
WENDU_TL EQU 33H ;下限溫度按鍵調(diào)整位置
JINGDU EQU 25H ;配置精度位1FH(9位)3FH(10位)5FH(11位)7FH(12位)
ORG 00H
AJMP MAIN
ORG 03H ;外部中斷P3.2(遙控調(diào)整上下限和精度)
AJMP INT_0
ORG 40H
;======================主程序==========================
MAIN: ;
MOV DPTR,#TAB
SETB EA ;打開CPU總中斷請求
SETB IT0 ;設(shè)定INT0的觸發(fā)方式為脈沖負邊沿觸發(fā)
SETB EX0
MOV A,#0
MOV 20H,A
MOV 21H,A
MOV 22H,A
MOV 23H,A
MOV R4,#0
AAAA:
MOV A,R4
JNZ AAAA_0 ;R4=0正常轉(zhuǎn)換溫度,R4不為0只掃描按鍵和顯示程序
ACALL RE_TEMP ;讀取溫度值子程序
ACALL TURN ;數(shù)據(jù)轉(zhuǎn)化子程序
ACALL SHUCHU ;比較輸出控制程序
MOV R7,#150 ;降低讀取溫度頻率,防止觸發(fā)溫度跳變
AAAA_0:
ACALL DISPLAY ;顯示程序
ACALL KEY_0 ;溫度調(diào)整程序
DJNZ R7,AAAA_0
JMP AAAA
回復(fù)的人多的,感興趣的話,過兩天我燒寫程序發(fā)上來
作者:
越南超級人類
時間:
2020-1-3 11:01
匯編的就算了吧
作者:
新鄉(xiāng)家電維修
時間:
2020-12-26 09:34
BCD碼的運算規(guī)則:
BCD碼是十進制數(shù),而運算器對數(shù)據(jù)做加減運算時,都是按二進制運算規(guī)則進行處理的。這樣,當(dāng)將 BCD碼傳送給運算器進行運算時,其結(jié)果需要修正。修正的規(guī)則是:當(dāng)兩個BCD碼相加,如果和等于或小于 1001(即十進制數(shù) 9),不需要修正;如果相加之和在 1010 到1111(即十六進制數(shù) 0AH~0FH)之間,則需加 6 進行修正;如果相加時,本位產(chǎn)生了進位,也需加 6 進行修正。這樣做的原因是,機器按二進制相加,所以 4 位二進制數(shù)相加時,是按“逢十六進一”的原則進行運算的,而實質(zhì)上是 2 個十進制數(shù)相加,應(yīng)該按“逢十進一”的原則相加,16 與10相差 6,所以當(dāng)和超過 9或有進位時,都要加 6 進行修正。
eg:
(1) 將 5 和 8 以 8421 BCD輸入機器,則運算如下:
0 1 0 1
+) 1 0 0 0
1 1 0 1 結(jié)果大于 9
+) 0 1 1 0 加 6 修正
1 0 0 1 1 即13 的 BCD碼
結(jié)果是 0011,即十進制數(shù) 3,還產(chǎn)生了進位。5+8=13
(于2012年5月22日20:06:11)
DA為十進制調(diào)整指令,功能是在進行BCD碼加法運算時,用來對BCD碼的加法運算結(jié)果進行自動修正。但對BCD碼的減法不能用此指令來進行修正。因為BCD碼本質(zhì)上時十進制,而單片機只懂二進制,因此當(dāng)兩個BCD數(shù)相加大于9時,單片機仍按二進制加法相加,應(yīng)進位而不產(chǎn)生進位,導(dǎo)致出現(xiàn)非法BCD碼,導(dǎo)致計算結(jié)果出錯。在此種情況下必須進行+6修正才能得到正確的BCD碼。但是判斷后+6指令繁瑣,因此出現(xiàn)DA這個指令,可以減少代碼長度。
12D+39D(十進制)
12H和39H(十六進制) 這兩個數(shù)是相等的嗎,12H=18D? 39H=57D ?
DA調(diào)整的對象是ADD或ADDC以后的結(jié)果,而且是BCD碼相加以后才能夠加以調(diào)整,否則沒有實際意義!
比如,現(xiàn)在我想執(zhí)行12D+39D也就是兩個十進制數(shù)相加這樣一個加法(有時候程序處理的需要,數(shù)據(jù)在單片機中是以BCD碼的形式存儲的,也就是12H和39H(十六進制),但我們可以人為將它 們看為12D和39D(十進制),而且還希望相加以后的結(jié)果為51H,也就是說符合十進制運算規(guī)則12+39=51,而不是4BH的結(jié)果),但這樣的十進制加法運算在單片機中是不能夠直接實現(xiàn)的。因 為單片機只能夠執(zhí)行二進制加法指令,也就是所有的運算都按照二進制中的規(guī)則進行!于是就出現(xiàn)了DA調(diào)整指令!現(xiàn)在12H+39H,將12H放于A中,執(zhí)行 ADD A,#39H指令,則結(jié)果為4BH,這不是我們希望的51H的數(shù)據(jù)形式!!這時執(zhí)行DA A 指令后,就會將A中的數(shù)據(jù)調(diào)整為51H(具體調(diào)整過程和原理你可以 詳細看書,如果單片機書中講的不詳細,那么微機原理中一定說的非常詳細),而我們按照BCD碼規(guī)則就將其看為51D,符合我們的要求!也就是說加數(shù)和被加數(shù)都是BCD碼的形式,最大也只可能是99H,也就是我們十進制數(shù)中的99,只有這樣才會有實際的意義
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1