久久久久亚洲精品,久久亚洲精品成人av无码网站,无码国产伦一区二区三区视频,天天躁人人躁人人躁狂躁

短信息溫度遙測遙傳系統(tǒng)
   *雙擊自動(dòng)滾屏*
    這是我們新開發(fā)的短信息溫度遙測遙傳系統(tǒng),它可以把重要設(shè)備的溫度通過短消息隨時(shí)發(fā)送到特定的手機(jī)上,使主人能隨時(shí)掌握設(shè)備的溫度,起到遠(yuǎn)程監(jiān)控的功能。

設(shè)計(jì)思路:

    有些系統(tǒng)對溫度比較敏感,例如正在高速運(yùn)轉(zhuǎn)的發(fā)電機(jī),當(dāng)溫度出現(xiàn)超高時(shí)說明內(nèi)部有嚴(yán)重的故障,必須馬上停機(jī),否則發(fā)電機(jī)會(huì)損壞,或者是一個(gè)現(xiàn)代化的暖棚,當(dāng)溫度異常升高或者過低時(shí)會(huì)引起巨大的經(jīng)濟(jì)損失,這些應(yīng)用場合我們希望能隨時(shí)掌握其溫度,以便在需要的時(shí)候加以控制,我們開發(fā)的這個(gè)系統(tǒng)就能滿足這類需要。我們采用AT89C2051單片機(jī),通過DS18B20來采集設(shè)備的溫度,然后把溫度存儲(chǔ)到單片機(jī)內(nèi)存中,當(dāng)滿足特定的外部條件觸發(fā)時(shí),單片機(jī)立即把溫度數(shù)值打包成中文短消息,并且通過TTL串口觸發(fā)JB35G,讓它發(fā)送短消息,這樣特定的手機(jī)就能立即收到例如“現(xiàn)在溫度是10.625度,溫度過低! 溫度過高預(yù)定值32度, 溫度過低預(yù)定值14度, 超限報(bào)警:允許”的短消息,非常直觀。

產(chǎn)品功能:

0。測溫響應(yīng)時(shí)間:從發(fā)出振鈴遙控指令到收到溫度短消息的時(shí)間:10~20秒。

1。溫度測量范圍0~125度,測溫精度:0.125度,顯示精度:小數(shù)點(diǎn)后面三位。

2。溫度數(shù)據(jù)第一位和第二位是0自動(dòng)不顯示,比較美觀。

3。溫度短消息包含:現(xiàn)場溫度、溫度是否正常、溫度過高預(yù)定值、溫度過低預(yù)定值、超限報(bào)警是否允許等信息。

4。當(dāng)溫度超過預(yù)定的上限或者下限時(shí),系統(tǒng)自動(dòng)發(fā)出兩條(可程序修改成若干條)報(bào)警短消息,然后停止發(fā)送,只有當(dāng)溫度退回正常溫度后,如果再次越限時(shí)再發(fā)送越限短消息,這個(gè)功能既可以保證超限短消息的可靠發(fā)送,同時(shí)也能防止在溫度越限后系統(tǒng)無休止發(fā)送報(bào)警短消息,在系統(tǒng)溫度返回正常溫度后重新開啟越限短消息報(bào)警功能,這個(gè)功能可以遠(yuǎn)程通過DTMF遙控或者短消息遙控來禁止或者允許。

5?梢噪S時(shí)通過振鈴遙控的方式讓系統(tǒng)發(fā)送一次當(dāng)前的溫度短消息。

6。通過發(fā)送"打開第七路"可以設(shè)置超限報(bào)警允許,發(fā)送"關(guān)閉第七路"可以設(shè)置超限報(bào)警禁止.

7。ABS塑料外殼大小:145X90X30毫米

8。AT89C2051單片機(jī)源程序公開,便于客戶二次改進(jìn)開發(fā)。

9。支持短信息溫度設(shè)定值修改功能。只要發(fā)送定值修改中文短信"定值修改038012"可以自動(dòng)將溫度過高定值修改為38度,溫度過低定值修改為12度,并自動(dòng)回復(fù)一條短消息確認(rèn)。

10。帶有四路短信繼電器遙控功能,可以用于遠(yuǎn)程遙控加熱器或者冷卻器電源等

    這里我們采用振鈴遙控來觸發(fā)主機(jī)發(fā)送一次溫度測量結(jié)果的短消息。用手機(jī)或者電話拔打JB35G內(nèi)部的手機(jī)卡號(hào)碼,JB35G會(huì)發(fā)出振鈴聲,電話聽筒內(nèi)也應(yīng)聽到回鈴音“嘟——嘟”,當(dāng)聽到兩聲回鈴音后馬上掛斷,因?yàn)檫@時(shí)通話雙方都未進(jìn)入通話狀態(tài),所以是沒有費(fèi)用產(chǎn)生。這時(shí)JB35G的第八路輸出狀態(tài)會(huì)翻轉(zhuǎn)一次,當(dāng)主機(jī)內(nèi)部的AT89C2051單片機(jī)檢測到JB35G的第八路狀態(tài)發(fā)生翻轉(zhuǎn),就會(huì)立即把當(dāng)時(shí)采集到的溫度數(shù)值,打包到短消息中發(fā)送出去。

   當(dāng)然通過修改單片機(jī)軟件程序可以實(shí)現(xiàn)諸如:現(xiàn)場觸發(fā)發(fā)送、定時(shí)發(fā)送(每隔若干分鐘或者若干小時(shí))等方式。

使用方法:

    首先要插入一張GSM的SIM卡(13xxxxxxxxx),可以是聯(lián)通的也可以是電信的,要保證這張手機(jī)卡有一定的資金余額,用于支付發(fā)短信時(shí)產(chǎn)生的費(fèi)用,并且SIM卡在使用前,應(yīng)先放入手機(jī)中設(shè)置好短信息中心服務(wù)號(hào)碼,短信息中心服務(wù)號(hào)碼每個(gè)地方都不相同,具體可以詢問當(dāng)?shù)氐?860或1001。

    然后把SIM卡插入SIM卡座內(nèi),并向右滑動(dòng)SIMLOCK翻蓋鎖住SIM卡。

  

    將配套的健伍交流電源的電源插頭插入主機(jī)的電源座中,按下紅色的電源開關(guān),這時(shí)紅色的電源指示燈就會(huì)點(diǎn)亮,如果是第一次接通電源,須等待20秒~10分鐘,LED0發(fā)光二極管才亮,進(jìn)入待機(jī)狀態(tài)。如果是第二次以后接通電源,則只須等待20~30秒,LED0發(fā)光管亮,進(jìn)入待機(jī)狀態(tài)。(在此等待時(shí)間內(nèi)JB35先進(jìn)行GSM網(wǎng)絡(luò)搜尋,再進(jìn)行SIM卡格式化過程。GSM網(wǎng)絡(luò)搜尋大約須要20~30秒時(shí)間。SIM卡格式化過程大約須要1S~10分鐘不等。格式化SIM卡的目的是刪除SIM卡內(nèi)的電話簿和短信箱中的內(nèi)容,因?yàn)檫@些存儲(chǔ)空間是JB35以后用來存儲(chǔ)運(yùn)行中一些重要數(shù)據(jù)的。格式化時(shí)間的長短取決于電話簿里的內(nèi)容多少,如果電話簿內(nèi)容本身為空,則只須10秒就完成格式化。)登陸網(wǎng)絡(luò)成功以后LED0會(huì)變成常亮,而且手機(jī)模塊上側(cè)面的一個(gè)綠色貼片LED也會(huì)以0.5HZ的頻率閃光,表示網(wǎng)絡(luò)連接成功,可以透過外殼側(cè)面的方形孔中觀察到。

    短信息溫度遙測遙傳系統(tǒng),使用前必須進(jìn)行軟件功能設(shè)置,這樣才能充分發(fā)揮其功能優(yōu)勢,這里我們來詳細(xì)介紹一下JB35G專用軟件的設(shè)置。

    把網(wǎng)上下載到的JB35.CAB文件用WINRVR解壓縮軟件打開后,直接雙擊其中的JB35.EXE文件就能免安裝運(yùn)行設(shè)置軟件。

    首先請用隨機(jī)附帶的串口通訊電纜連接報(bào)警器和電腦的串口,根據(jù)實(shí)際連接的電腦COM1或COM2在軟件中正確選擇。

    可以點(diǎn)擊軟件界面的“立即查詢本機(jī)版本”按鈕,這時(shí)軟件應(yīng)該能顯示是帶串口數(shù)據(jù)傳輸功能的JB35G,這說明串口通訊正常。

    觸發(fā)發(fā)送溫度短消息我們是利用JB35G的第八路繼電器輸出狀態(tài)高低平電平變化來完成的,所以我們要確認(rèn)軟件輸出設(shè)置界面的“第八路繼電器輸出狀態(tài)”應(yīng)該點(diǎn)選“開關(guān)狀態(tài)輸出”。

    點(diǎn)擊“立即寫入本頁設(shè)置”按鈕可以將本頁設(shè)置寫入報(bào)警器內(nèi)部的控制器。

    因?yàn)槲覀冇|發(fā)主機(jī)發(fā)送溫度短消息是通過撥打SIM卡的手機(jī)號(hào)碼來實(shí)現(xiàn)遙控的,如果隨便哪個(gè)電話撥打這個(gè)手機(jī)號(hào)碼都能,觸發(fā)主機(jī)發(fā)送溫度短消息那么這個(gè)系統(tǒng)的安全性就會(huì)大打折扣,所以我們可以根據(jù)需要在軟件中對呼叫號(hào)碼進(jìn)行過濾,只有特定的號(hào)碼打入才能觸發(fā)主機(jī)發(fā)送溫度短消息,其它號(hào)碼呼叫不予響應(yīng),這個(gè)功能其實(shí)是巧妙利用手機(jī)的來電顯示功能來完成的,所以必須手機(jī)要開通來電顯示哦。

    這里我們必須設(shè)置一下在發(fā)送含有溫度測量信息短信息時(shí)默認(rèn)的接收方手機(jī)號(hào)碼。

    點(diǎn)擊“立即寫入本頁設(shè)置”按鈕可以將本頁設(shè)置寫入報(bào)警器內(nèi)部的控制器。

JB35G的發(fā)送特定中文短消息功能

    JB35G所特有的功能就是可以通過串口發(fā)送特定的數(shù)據(jù),甚至是中文,這就意味這我們可以隨意發(fā)送所想要的中文短消息內(nèi)容,例如我們用AT89C2051單片機(jī)來采集溫度,然后發(fā)送一條“現(xiàn)在的溫度為XX度,正常!”

   因?yàn)閱纹瑱C(jī)的串口只能發(fā)送16進(jìn)制的字符,所以我們必須把中文文字轉(zhuǎn)換成16進(jìn)制的Unicode碼,方法很簡單,我們開發(fā)了漢字ASCII碼=Unicode碼專用軟件,只要你在下載并安裝這個(gè)軟件,直接在軟件窗口中輸入需要的中文,在按轉(zhuǎn)化按鈕,立即就能得到轉(zhuǎn)換成功的數(shù)據(jù)代碼,然后我們把這個(gè)代碼利用單片機(jī)的串口以9600波特率發(fā)送給JB35G,就能發(fā)出特定內(nèi)容。

    網(wǎng)友可以看到圖中畫紅線的四個(gè)數(shù)值就是溫度數(shù)據(jù)34,數(shù)字3對應(yīng):00 33、數(shù)字4對應(yīng):00 34,可以看出其中的規(guī)律。我們只要把測到溫度替換其中的四個(gè)數(shù)值,就變成含有有效的溫度信息的短消息了。甚至我們還可以在程序加以判斷,當(dāng)溫度過高時(shí),短信息就提示溫度超高!過低就提示溫度過低!真的非常直觀哦~

    如果在發(fā)送數(shù)據(jù)時(shí),在數(shù)據(jù)前面加上ASCII碼的“!痢痢痢痢痢痢痢痢痢粒!逼渲小痢痢痢痢痢痢潦潜硎疽粋(gè)手機(jī)號(hào)碼,這時(shí)數(shù)據(jù)不會(huì)發(fā)送給默認(rèn)手機(jī)號(hào),而是直接發(fā)送給××××××××這個(gè)手機(jī)號(hào)碼。

    網(wǎng)友可以看到JB35G其實(shí)不但可以發(fā)送任何內(nèi)容的短消息,而且還能選擇接收方的手機(jī)號(hào)碼,這些功能在二次開發(fā)時(shí)非常有用。

    JB35G每發(fā)送一次短信息,最多只能傳輸130個(gè)字節(jié)約60個(gè)漢字到的數(shù)據(jù),因此應(yīng)用時(shí)需要特別注意。

系統(tǒng)的開發(fā)擴(kuò)展

    這里我們舉了一個(gè)溫度方面的詳細(xì)應(yīng)用,其實(shí)網(wǎng)友只要稍加變通,加上適當(dāng)?shù)膫鞲衅鳎湍馨阎T如:電壓、頻率、流速、電表電量、產(chǎn)品數(shù)量等等信息,也打包到短消息中,作為一個(gè)特定領(lǐng)域的相關(guān)應(yīng)用。

短信息溫度遙測遙傳系統(tǒng)的全套清單:

1。短信息溫度遙測遙傳主機(jī)一個(gè)(內(nèi)部包含JB35G模塊)

2。配套軟件光盤一張

3。健伍高品質(zhì)12V1000毫安交流穩(wěn)壓電源一個(gè)

4。DS18B20測溫探頭一個(gè)

5。串口通訊設(shè)置連線一根

(無產(chǎn)品,不供貨,請勿詢問)

相關(guān)鍵連:多功能GSM短消息遙控系統(tǒng)

相關(guān)鍵連:超級(jí)車輛短消息防盜報(bào)警器

相關(guān)鍵連:短消息溫度遙測遙傳系統(tǒng)

相關(guān)鍵連:GPS衛(wèi)星定位及短信遙傳系統(tǒng)

相關(guān)鍵連:家庭短消息防盜報(bào)警系統(tǒng)

相關(guān)鍵連:用手機(jī)發(fā)短消息遙控家電或者汽車

匯款地址:226200 江蘇省啟東市城河新村103樓401房間 謝剛 收

點(diǎn)擊查看郵購需知!        立即進(jìn)入訂貨系統(tǒng)!

電話/傳真:0513-3342087 小靈通:0513-3082087 聯(lián)系人:謝剛

主郵箱: (推薦使用)

點(diǎn)擊返回《電子制作實(shí)驗(yàn)室》網(wǎng)站主頁

;這是溫度短信息遙測系統(tǒng)的最新源程序
;采用帶串口數(shù)傳功能的JB35G,通過串口觸發(fā)發(fā)送包含溫度信息的短消息
;采用AT89C2051單片機(jī),晶振11.0592MHZ,通訊速率9600,采用TTL串口通訊
;P3.4是振鈴遙控端,檢測到振鈴就發(fā)送一次溫度測量結(jié)果的短消息
;P3.2為溫度測量芯片DS18B20的數(shù)據(jù)腳
;P3.5(JB35的第7路)超限報(bào)警的標(biāo)志位0為允許,1為禁止
;P1.1為GSM網(wǎng)絡(luò)檢查端,0為在線,1為斷線
;帶短信定值修改功能,例如發(fā)送中文短信"定值修改038012"可以自動(dòng)將溫度過高定值
;修改為38度,溫度過低定值修改為12度,并自動(dòng)回復(fù)一條短消息確認(rèn)
;位地址38H是否檢測到DS18B20標(biāo)志位,1為檢測到,0為檢測不到
;位地址39H為溫度過低標(biāo)志位,1為過低,0正常
;位地址3AH為溫度過高標(biāo)志位,1為過高,0正常
;20H--溫度百位整數(shù)存放地址
;21H--溫度十位整數(shù)存放地址
;22H--溫度個(gè)位整數(shù)存放地址
;23H--溫度小數(shù)點(diǎn)存放地址(固定為2EH)
;24H--溫度小數(shù)第1位存放地址
;25H--溫度小數(shù)第2位存放地址
;26H--溫度小數(shù)第3位存放地址
;2FH--溫度超高預(yù)設(shè)值
;2EH--溫度過低預(yù)設(shè)值
;40H--溫度過高預(yù)定值的百位存放地址
;41H--溫度過高預(yù)定值的十位存放地址
;42H--溫度過高預(yù)定值的個(gè)位存放地址
;43H--溫度過低預(yù)定值的百位存放地址
;44H--溫度過低預(yù)定值的十位存放地址
;45H--溫度過低預(yù)定值的個(gè)位存放地址
;49H--超限后允許發(fā)送短消息次數(shù)存放地址

ORG 0000H

AJMP MAIN;轉(zhuǎn)入主程序
ORG 0003H
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETI
ORG 000BH;中斷陷阱
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETI
ORG 0013H;中斷陷阱
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETI
ORG 001BH;中斷陷阱
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETI
ORG 0023H;中斷陷阱
AJMP UARTI ;轉(zhuǎn)入串口接收中斷程序
NOP
NOP
NOP
NOP
RETI

MAIN:
CLR EA
CLR IT1;立即禁止中斷1,否則會(huì)錯(cuò)誤進(jìn)入中斷!

CLR P1.6;確保紅綠LED中只有一個(gè)亮
SETB P1.7;確保紅綠LED中只有一個(gè)亮
HLB:
ACALL DELAY500;延時(shí)500毫秒
CPL P1.6;紅綠交替變色
CPL P1.7;紅綠交替變色
JB P1.1,HLB;檢測到JB35上線后結(jié)束開機(jī)延時(shí)!
SETB P1.6;確保紅綠ED都熄滅
SETB P1.7;確保紅綠ED都熄滅
;開機(jī)延時(shí)結(jié)束,表示可以開始工作

;單片機(jī)內(nèi)存分配申明!
TEMPER_L EQU 29H;用于保存讀出溫度的低8位
TEMPER_H EQU 28H;用于保存讀出溫度的高8位(特別是可位尋址,程序中用的著哦)
FLAG1 EQU 38H;是否檢測到DS18B20標(biāo)志位
a_bit equ 22h ;溫度個(gè)位數(shù)存放內(nèi)存位置
b_bit equ 21h ;溫度十位數(shù)存放內(nèi)存位置
c_bit equ 20h ;溫度百位數(shù)存放內(nèi)存位置
MOV 2FH,#27;設(shè)定高于27度為溫度過高
MOV 2EH,#17;設(shè)定低于17度為溫度過低
MOV 23H,#2EH;這是小數(shù)點(diǎn)的漢字內(nèi)碼
MOV 19H,#0;對允許超限報(bào)警次數(shù)內(nèi)存清零

MOV SCON,#50H;設(shè)置成串口1方式
MOV TMOD,#20H;波特率發(fā)生器T1工作在模式2上
MOV TH1,#0FDH;預(yù)置初值(按照波特率9600BPS預(yù)置初值)
MOV TL1,#0FDH;預(yù)置初值(按照波特率9600BPS預(yù)置初值)
SETB TR1;啟動(dòng)定時(shí)器T1
;以上完成串口9600通訊初始化設(shè)置

;-------------------
mov a,2FH;對溫度過高預(yù)定值取出百位、十位、個(gè)位
mov b,#10 ;取出十位和個(gè)位
div ab
ORL A,#00110000B
mov 41H,a ;十位
mov 42H,b ;個(gè)位
MOV A,42H
ORL A,#00110000B;轉(zhuǎn)化成ASCII碼
mov 42H,A
mov a,2FH
mov b,#100 ;取出百位
div ab
ORL A,#00110000B
mov 40H,a ;百位
;---------------------------------------
mov a,2EH;對溫度過低預(yù)定值取出百位、十位、個(gè)位
mov b,#10 ;取出十位和個(gè)位
div ab
ORL A,#00110000B
mov 44H,a ;十位
mov 45H,b ;個(gè)位
MOV A,45H
ORL A,#00110000B
mov 45H,A
mov a,2EH
mov b,#100 ;取出百位
div ab
ORL A,#00110000B
mov 43H,a ;百位
;------------------

JB P3.4,AA;開機(jī)時(shí)對P3.4口狀態(tài)作一個(gè)備份(JB35G的第八路,振鈴遙控端)
MOV R6,#00H;如果P3.4口為低電平,那么R6=#00H
AJMP KKB
AA:MOV R6,#0FFH;如果P3.4口為高電平,那么R6=#0FFH
;-------------------------------------------------------------
KKB:
SETB EA;允許中斷
SETB ES;允許串口數(shù)據(jù)中斷
SETB P1.6;點(diǎn)亮綠燈
CLR P1.7;熄滅紅燈
LCALL GET_TEMPER;調(diào)用讀溫度子程序(存放在28H/29H中)

;先對溫度值的3位小數(shù)加以轉(zhuǎn)化,精度0.125度,存放在24H/25H/26H中
MOV A,29H
RR A;將29H中的第2/3/4位移入A的第1/2/3位
ANL A,#00000111B;屏蔽A的高5位
CJNE A,#0,GO1;000
MOV 24H,#30H
MOV 25H,#30H
MOV 26H,#30H
GO1:CJNE A,#1,GO2;125
MOV 24H,#31H
MOV 25H,#32H
MOV 26H,#35H
GO2:CJNE A,#2,GO3;250
MOV 24H,#32H
MOV 25H,#35H
MOV 26H,#30H
GO3:CJNE A,#3,GO4;375
MOV 24H,#33H
MOV 25H,#37H
MOV 26H,#35H
GO4:CJNE A,#4,GO5;500
MOV 24H,#35H
MOV 25H,#30H
MOV 26H,#30H
GO5:CJNE A,#5,GO6;625
MOV 24H,#36H
MOV 25H,#32H
MOV 26H,#35H
GO6:CJNE A,#6,GO7;750
MOV 24H,#37H
MOV 25H,#35H
MOV 26H,#30H
GO7:CJNE A,#7,GO8;875
MOV 24H,#38H
MOV 25H,#37H
MOV 26H,#35H

GO8:
;將測量到的溫度值的整數(shù)部分放入29H中
MOV A,29H
MOV C,40H;將28H中的最低位移入C
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A;29H中的數(shù)值就是溫度的整數(shù)部分了
;取出溫度整數(shù)部分的百位/十位/個(gè)位
mov a,29H
mov b,#10 ;取出十位和個(gè)位
div ab
ORL A,#00110000B
mov b_bit,a ;十位在a
mov a_bit,b ;個(gè)位在b
MOV A,a_bit
ORL A,#00110000B
mov a_bit,A
mov a,29H
mov b,#100 ;取出百位
div ab
ORL A,#00110000B
mov c_bit,a ;百位在c

;判斷現(xiàn)場溫度是否過高或者過低
MOV A,29H;將現(xiàn)場實(shí)際溫度傳遞給A
CJNE A,2FH,LL1;和溫度超高定值比較,利用C標(biāo)志位
LL1:JNC LL2;判斷溫度是否過高?過高跳轉(zhuǎn)
CJNE A,2EH,LL3;和溫度過低定值比較,利用C標(biāo)志位
LL3:JC LL4;判斷溫度是否過低?過低跳轉(zhuǎn)

CLR 39H
CLR 3AH
MOV 19H,#0;溫度正常時(shí)恢復(fù)超限報(bào)警允許次數(shù)
AJMP LL5;說明溫度在上下限范圍內(nèi)

LL2:SETB 3AH;對溫度過高標(biāo)志位置1

CLR 39H
AJMP MM1

LL4:SETB 39H;對溫度過低標(biāo)志位置1

CLR 3AH

MM1:JNB P3.5,CB2;判斷是否允許超限報(bào)警?0允許/1禁止
AJMP LL5;如果超限報(bào)警禁止,馬上返回

CB2:MOV A,19H;比較報(bào)警次數(shù)是否符合?
CJNE A,#2,PP8;立即發(fā)出溫度超限報(bào)警短消息,默認(rèn)發(fā)送2條!

LL5:;判斷是否振鈴遙控?
JB P3.4,BB;判斷此時(shí)P3.4口電平高低?
MOV R7,#00H;如果P3.4口為低電平,那么R7=#00H
AJMP K2
BB:MOV R7,#0FFH;如果P3.4口為高電平,那么R7=#0FFH
K2:MOV A,R6;比較R6和R7是否相同?也就是檢測P3.4口電平是否變化過
XRL A,R7;如果P3.4口電平變化A=1;沒有變化A=0
JNZ HH;如果P3.4口電平有變化,就改變輸出狀態(tài)

JB P1.5,HPS;判斷P1.5的按鈕是否按下?
ACALL DELAY100
JB P1.5,HPS;軟件抗干擾檢測一次!
JNB P1.5,$;等待按鍵松開
AJMP PP;發(fā)送一次溫度短信

HPS:AJMP KKB

PP8:INC 19H
AJMP PP

HH:JB P3.4,BBB;檢測到P3.4口發(fā)生變化(振鈴遙控)
MOV R6,#00H;如果此時(shí)P3.4口為低電平,那么R6=#00H,對R6更新
AJMP PP
BBB:MOV R6,#0FFH;如果此時(shí)P3.4口為高電平,那么R6=#0FFH,對R6更新

PP:ACALL FSWWW;調(diào)用發(fā)送溫度短消息的子程序
AJMP KKB

FS8:MOV R1,#0
CF3:
CLR TI;對TI軟件復(fù)位
MOV A,R1
MOVC A,@A+DPTR ;查表漢字的內(nèi)碼
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
INC R1
CJNE R1,#18,CF3
RET

;這是“現(xiàn)在的溫度是”六個(gè)漢字的內(nèi)碼
TAB1: DB 73H,0B0H,57H,28H,76H,84H,6EH,29H
DB 5EH,0A6H,66H,2FH

;這是“度,溫度正常! ”七個(gè)漢字的內(nèi)碼
TAB2: DB 5EH,0A6H,0FFH,0CH,6EH,29H,5EH,0A6H
DB 6BH,63H,5EH,38H,0FFH,01H

;這是“度,溫度過高! ”七個(gè)漢字的內(nèi)碼
TAB3:DB 5EH,0A6H,0FFH,0CH,6EH,29H,5EH,0A6H
DB 8FH,0C7H,9AH,0D8H,0FFH,01H

;這是“度,溫度過低! ”七個(gè)漢字的內(nèi)碼
TAB4:DB 5EH,0A6H,0FFH,0CH,6EH,29H,5EH,0A6H
DB 8FH,0C7H,4FH,4EH,0FFH,01H

;這是“ 溫度過高預(yù)定值:”9個(gè)漢字的內(nèi)碼
TAB5:DB 00H,20H,6EH,29H,5EH,0A6H,8FH,0C7H,9AH,0D8H
DB 98H,84H,5BH,9AH,50H,3CH,0FFH,1AH

;這是“ 溫度過低預(yù)定值:”9個(gè)漢字的內(nèi)碼
TAB6:DB 00H,20H,6EH,29H,5EH,0A6H,8FH,0C7H,4FH,4EH
DB 98H,84H,5BH,9AH,50H,3CH,0FFH,1AH

;這是“度 超限報(bào)警:允許”9個(gè)漢字的內(nèi)碼
TAB7:DB 5EH,0A6H,00H,20H,8DH,85H,96H,50H,62H,
DB 0A5H,8BH,66H,0FFH,1AH,51H,41H,8BH,0B8H

;這是“度 超限報(bào)警:禁止”9個(gè)漢字的內(nèi)碼
TAB8:DB 5EH,0A6H,00H,20H,8DH,85H,96H,50H,62H,
DB 0A5H,8BH,66H,0FFH,1AH,79H,81H,6BH,62H

;100毫秒延時(shí)子程序,占用R4、R5
DELAY100:MOV R4,#100
D222:MOV R5,#248
DJNZ R5,$
DJNZ R4,D222
RET

FSWWW:;發(fā)送溫度短消息的子程序
CLR ES;禁止串口中斷
JB P1.1,$;判斷GSM網(wǎng)絡(luò)是否正常?0為在線

ACALL DELAY7;延時(shí)7秒再發(fā)送短消息,否則會(huì)掉線

CLR P1.7;點(diǎn)亮綠色指示燈
SETB P1.6;確保紅色指示燈在熄滅狀態(tài)

MOV DPTR,#TAB1;發(fā)送“現(xiàn)在的溫度是”六個(gè)漢字的內(nèi)碼
MOV R1,#0
CF1:
CLR TI;對TI軟件復(fù)位
MOV A,R1
MOVC A,@A+DPTR ;查表漢字的內(nèi)碼
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
INC R1
CJNE R1,#12,CF1

;發(fā)送溫度的三位整數(shù)/小數(shù)點(diǎn)/三位小數(shù)

MOV A,20H
CJNE A,#30H,BB1
MOV A,21H
CJNE A,#30H,BB2
MOV R1,#22H
AJMP USA
BB2:MOV R1,#21H
AJMP USA
BB1:MOV R1,#20H;如果百位和十位是0,就自動(dòng)消隱

USA:CLR TI;對TI軟件復(fù)位
MOV A,#00H;漢字?jǐn)?shù)字前面必須加00H(雙字節(jié))
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,@R1
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
INC R1
CJNE R1,#27H,USA

;根據(jù)現(xiàn)場溫度,發(fā)出溫度是否正常的短信息(7個(gè)漢字)
JB 39H,KK1;1為溫度過低
JB 3AH,KK2;1為溫度超高
MOV DPTR,#TAB2;顯示溫度正常
AJMP KK3
KK1:MOV DPTR,#TAB4;顯示溫度過低
AJMP KK3
KK2:MOV DPTR,#TAB3;顯示溫度過高

KK3:MOV R1,#0
CF2:
CLR TI;對TI軟件復(fù)位
MOV A,R1
MOVC A,@A+DPTR ;查表漢字的內(nèi)碼
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
INC R1
CJNE R1,#14,CF2

;×××××××××××××××
MOV DPTR,#TAB5;溫度過高預(yù)定值:
ACALL FS8;調(diào)用發(fā)送9個(gè)漢字的子程序

;發(fā)送溫度過高預(yù)定值

MOV A,40H
CJNE A,#30H,BB11
MOV A,41H
CJNE A,#30H,BB21
MOV R1,#42H
AJMP USA1
BB21:MOV R1,#41H
AJMP USA1
BB11:MOV R1,#40H;如果百位和十位是0,就自動(dòng)消隱

USA1:CLR TI;對TI軟件復(fù)位
MOV A,#00H;漢字?jǐn)?shù)字前面必須加00H(雙字節(jié))
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,@R1
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
INC R1
CJNE R1,#43H,USA1
;加一個(gè)度字符
CLR TI;對TI軟件復(fù)位
MOV A,#5EH
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,#0A6H
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待

MOV DPTR,#TAB6;溫度過低預(yù)定值:
ACALL FS8;調(diào)用發(fā)送9個(gè)漢字的子程序

;發(fā)送溫度過低預(yù)定值

MOV A,43H
CJNE A,#30H,BB12
MOV A,44H
CJNE A,#30H,BB22
MOV R1,#45H
AJMP USA2
BB22:MOV R1,#44H
AJMP USA2
BB12:MOV R1,#43H;如果百位和十位是0,就自動(dòng)消隱

USA2:CLR TI;對TI軟件復(fù)位
MOV A,#00H;漢字?jǐn)?shù)字前面必須加00H(雙字節(jié))
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,@R1
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
INC R1
CJNE R1,#46H,USA2

JB P3.5,CC1;判斷超限報(bào)警是否允許?0為允許,1為禁止
MOV DPTR,#TAB7
AJMP CC2
CC1:MOV DPTR,#TAB8
CC2:ACALL FS8;調(diào)用發(fā)送9個(gè)漢字的子程序
;×××××××××××××××
CLR P1.6;點(diǎn)亮紅色指示燈
SETB P1.7;確保綠色指示燈在熄滅狀態(tài)

ACALL DELAY7;再延時(shí)7秒,確保短消息發(fā)送完畢

CLR P1.7;點(diǎn)亮綠色指示燈
SETB P1.6;確保紅色指示燈在熄滅狀態(tài)
SETB ES;允許串口中斷
CLR TI;清除串口發(fā)送標(biāo)志位
CLR RI;清除串口接收標(biāo)志位
RET


;DS18B20復(fù)位初始化及判斷是否檢測到器件的程序
INIT_1820:
SETB P3.2
NOP
CLR P3.2
MOV R0,#06BH;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖
MOV R1,#03H
TSR1:
DJNZ R0,TSR1
MOV R0,#6BH
DJNZ R1,TSR1
SETB P3.2;然后拉高數(shù)據(jù)線
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P3.2,TSR3;等待DS18B20回應(yīng)
DJNZ R0,TSR2
LJMP TSR4 ; 延時(shí)
TSR3:
SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
TSR6:
DJNZ R0,TSR6 ; 時(shí)序要求延時(shí)一段時(shí)間
TSR7:
SETB P3.2
RET

;寫DS18B20的子程序(有具體的時(shí)序要求)
WRITE_1820:
MOV R2,#8;一共8位數(shù)據(jù)
CLR C
WR1:
CLR P3.2
MOV R3,#5
DJNZ R3,$
RRC A
MOV P3.2,C
MOV R3,#21
DJNZ R3,$
SETB P3.2
NOP
DJNZ R2,WR1
SETB P3.2
RET

; 讀出轉(zhuǎn)換后的溫度值
GET_TEMPER:
LCALL INIT_1820;先復(fù)位DS18B20
JB FLAG1,TSS2
RET ; 判斷DS1820是否存在?若DS18B20不存在則返回
TSS2:
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令
LCALL WRITE_1820
LCALL DELAY100;延時(shí)750微秒以上,等待18B20 A/D轉(zhuǎn)換結(jié)束
LCALL INIT_1820;準(zhǔn)備讀溫度前先復(fù)位
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 發(fā)出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200; 將讀出的溫度數(shù)據(jù)保存到28H/29H
RET

; 讀DS18B20的程序,從DS18B20中讀出兩個(gè)字節(jié)的溫度數(shù)據(jù)
READ_18200:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:
MOV R2,#8
RE01:
CLR C
SETB P3.2
NOP
NOP
CLR P3.2
NOP
NOP
NOP
SETB P3.2
MOV R3,#08
RE10:
DJNZ R3,RE10
MOV C,P3.2
MOV R3,#21
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET

;7秒延時(shí)子程序,占用R4、R5、R3(期間紅燈閃光)
DELAY7:
SETB P1.7
MOV R3,#120
FRT:ACALL DELAY100
CPL P1.6
DJNZ R3,FRT
SETB P1.6
RET

;500毫秒延時(shí)子程序,占用R4、R5
DELAY500:MOV R4,#248
DA222:MOV R5,#248
DJNZ R5,$
DJNZ R4,DA222
RET

;發(fā)送COMSMSXX的子程序
FSDX:
ACALL COMSMS;調(diào)用發(fā)出COMSMS指令子程序
CLR TI;對TI軟件復(fù)位
MOV A,28H
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,29H
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
RET

COMSMS:
CLR TI;先對TI進(jìn)行軟件復(fù)位
MOV A,#43H;將ASCII碼C發(fā)送到串口去
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,#4FH;將ASCII碼O發(fā)送到串口去
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,#4DH;將ASCII碼M發(fā)送到串口去
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,#53H;將ASCII碼S發(fā)送到串口去
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,#4DH;將ASCII碼M發(fā)送到串口去
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
CLR TI;對TI軟件復(fù)位
MOV A,#53H;將ASCII碼S發(fā)送到串口去
MOV SBUF,A
JNB TI,$;如果TI為0說明發(fā)送沒有完成,程序等待
RET

;**********************************************
;進(jìn)入串口中斷方式接收;進(jìn)入串口中斷方式接收
UARTI:
CLR EA;禁止總中斷
CLR RI;清楚串口中斷標(biāo)志

MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
CJNE A,#5BH,EXITT;判斷串口數(shù)據(jù)
CLR RI;軟件清除串口中斷標(biāo)記
JNB RI,$;等待下一個(gè)串口數(shù)據(jù) MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
CJNE A,#9AH,EXITT;判斷串口數(shù)據(jù)
CLR RI;軟件清除串口中斷標(biāo)記
JNB RI,$;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
CJNE A,#50H,EXITT;判斷串口數(shù)據(jù)
CLR RI;軟件清除串口中斷標(biāo)記
JNB RI,$;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
CJNE A,#3CH,EXITT;判斷串口數(shù)據(jù)
CLR RI;軟件清除串口中斷標(biāo)記
JNB RI,$;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
CJNE A,#4FH,EXITT;判斷串口數(shù)據(jù)
CLR RI;軟件清除串口中斷標(biāo)記
JNB RI,$;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
CJNE A,#0EEH,EXITT;判斷串口數(shù)據(jù)
CLR RI;軟件清除串口中斷標(biāo)記
JNB RI,$;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
CJNE A,#65H,EXITT;判斷串口數(shù)據(jù)
CLR RI;軟件清除串口中斷標(biāo)記
JNB RI,$;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
CJNE A,#39H,EXITT;判斷串口數(shù)據(jù)
CLR RI;軟件清除串口中斷標(biāo)記

;檢測到"定值修改"的4漢字內(nèi)碼的16進(jìn)制代碼--------

MOV R3,#12;定義接收數(shù)據(jù)的總長度
MOV R0,#30H;數(shù)據(jù)在內(nèi)存的存放位置
ACALL TT;調(diào)用接收串口數(shù)據(jù)子程序

MOV 40H,31H;更新溫度過高定值百位

MOV 41H,33H;更新溫度過高定值十位

MOV 42H,35H;更新溫度過高定值個(gè)位

MOV 43H,37H;更新溫度過低定值百位

MOV 44H,39H;更新溫度過低定值十位

MOV 45H,3BH;更新溫度過低定值個(gè)位

ACALL DELAY7;延時(shí)7秒再發(fā)送短消息,否則會(huì)掉線
ACALL DELAY7;延時(shí)7秒再發(fā)送短消息,否則會(huì)掉線
ACALL DELAY7;延時(shí)7秒再發(fā)送短消息,否則會(huì)掉線

ACALL FSWWW;調(diào)用發(fā)送溫度短消息的子程序,提醒客戶定值已經(jīng)更新!

EXITT:CLR RI;軟件清除串口中斷標(biāo)記,退出串口中斷
SETB EA
RETI

;調(diào)用接收串口數(shù)據(jù)子程序
TT:
CLR RI;軟件清除串口中斷標(biāo)記
JNB RI,$;等待下一個(gè)串口數(shù)據(jù)
MOV A,SBUF;將串口寄存器中接收到的數(shù)據(jù)給A
MOV @R0,A
INC R0;對內(nèi)存單元地址加1
DJNZ R3,TT;判斷是否已經(jīng)收全數(shù)據(jù)?
RET

END

 
 

 OICQ:9276432