普通IO口測(cè)量溫度(NTC)(asm程序)
這是一段利用單片機(jī)IO口作的溫控程序,感溫元件是NTC。功能是當(dāng)溫度低過(guò)某值時(shí)開(kāi)始加熱,隨著溫度上升;當(dāng)高到某值時(shí)停止加熱,然后開(kāi)始冷卻,不斷重復(fù)。使用時(shí)要注意RC常數(shù),常數(shù)過(guò)大會(huì)造成16位計(jì)數(shù)溢出,得不到正確結(jié)果。程序是作產(chǎn)品前的一個(gè)試驗(yàn)程序,當(dāng)時(shí)調(diào)試已通過(guò),能作到±0.5℃。
;******************************************************
;filename: IOTestNTC.asm
;mcu: MDT2005EP
;clock: 4 MHz for EXTXT
;date: 2006/03/17
;writer: aLin
;******************************************************
;計(jì)算被測(cè)量電阻。只做比較,不作計(jì)算。
;計(jì)算公式:Rx = Rf * (Tx/Tf)
;Rx為被測(cè)電阻
;Rf為已知電阻,Rf=10K
;Tx為被測(cè)電阻對(duì)電容C放電的計(jì)數(shù)值,為16位數(shù)
;Tf為被測(cè)電阻對(duì)電容C放電的計(jì)數(shù)值,為16位數(shù)
;查溫度特性表(NTC型號(hào)為:CWF2-473F-3950K,大亞科技制造):
;下限溫度5攝氏度時(shí)電阻為121545.44歐,即121.54544K
;換算為:Tx/Tf=Rx/Rf=12.154544
;擴(kuò)大1000倍后結(jié)果為:12154.544,約為12155,即2F76H
;上限溫度8攝氏度時(shí)電阻為104712.92歐,即104.71292K
;換算為:Tx/Tf=Rx/Rf=10.471292
;擴(kuò)大1000倍后結(jié)果為:10471.292,約為10471,即28E7H
;-------------------------------------------------------------------
listp=pic16c54
#i nclude"p16c5x.inc"
;定義I/O口
#definevtportb,0
#definerfportb,1
#definerxportb,2
#defineonportb,4
#defineoffportb,4
#definef0user,0
;RAM 分配
CNTEQU10H;計(jì)數(shù)器
SOU1EQU11H;四字節(jié)被除數(shù)最低位和16位商的低8位
SOU2EQU12H;被除數(shù)和16位商高8位
SOU3EQU13H;被除數(shù)和16位余數(shù)的低8位
SOU4EQU14H;四字節(jié)被除數(shù)最高位和16位余數(shù)的高8位
USEREQU15H;用戶標(biāo)記位
SOUEQU16H;被數(shù)低8位和積(四字節(jié)積的最低位)和RX電阻計(jì)數(shù)器低8位
SOUHEQU17H;被乘數(shù)高8位和積和RX電阻計(jì)數(shù)器高8位
RLTEQU18H;乘數(shù)低8位和積
RLTHEQU19H;乘數(shù)高8位和積(四字節(jié)積的最高位)
TEMP1EQU1AH;臨時(shí)寄存器1-4
TEMP2EQU1BH
TEMP3EQU1CH
TEMP4EQU1DH
RFCNTLEQU1EH;RF電阻計(jì)數(shù)器低8位
RFCNTHEQU1FH;RF電阻計(jì)數(shù)器高8位
;---------------------------------
ORG0000h
startbcffsr,6;選擇bank0
bcffsr,5
movlwb'11101111';RB4定義為輸出,其余輸入,PortB4為一直輸出
tris06h
;---------------------------------------------------
;停止加熱處理程序
;等待溫度降到5攝氏度以下是,重新加熱,跳到加熱處理程序
;
;負(fù)溫度系電阻,阻值越大,溫度越低
;用5攝氏度時(shí)對(duì)應(yīng)的電阻減去測(cè)出的電阻,為負(fù)數(shù),表明實(shí)際溫度已低過(guò)5攝氏度
;需加熱處理
;
HOT_DOWNbcfoff;停止加熱
;calld1s;延時(shí)1秒
callio_rm;調(diào)用測(cè)量電阻程序
callDUMUL;調(diào)用16位無(wú)符號(hào)乖法程序
callDUDIV;調(diào)用32位除以16位無(wú)符號(hào)除法程序
;比較商大小
;0E10 對(duì)應(yīng)36K電阻,溫度是31度
MOVLW2FH
MOVWFTEMP1
MOVFSOU2,W
SUBWFTEMP1,W;商高8位先減
BTFSSSTATUS,C;檢查是否有借位,有借位時(shí)C=0
GOTOHOT_UP;有借位,被減數(shù)小于減數(shù),跳到加熱程序
BTFSSSTATUS,Z;無(wú)借位,查相減結(jié)果是否為0
GOTOHOT_DOWN;結(jié)果不為0,則被減數(shù)大于減數(shù),跳到停止加熱程序
MOVLW76H;商高8位相等,商低8位相減
MOVWFTEMP1
MOVFSOU1,W
SUBWFTEMP1,W
BTFSSSTATUS,C
GOTOHOT_UP
BTFSSSTATUS,Z
GOTOHOT_DOWN