機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
家用防盜報警器源程序
家用防盜報警器源程序
 更新時間:2008-7-27 16:51:36  點擊數(shù):3
【字體: 字體顏色
   家用防盜報警器源程序清單 ;采用89C2051無P3.6引腳!正常時P3口輸入低電平,報警時P3.0~P3.5輸入高電平,從P3.7引腳輸出高低電平間隔1秒的報警脈沖信號。

ORG 0000H ;開機復(fù)位PC指向0000H地址
AJMP MAIN ;轉(zhuǎn)入主程序
ORG 001BH ;定時器T1入口
LJMP WT0 ;轉(zhuǎn)入定時器T1中斷程序
ORG 30H ;這條語句有何作用?指定下一條程序的地址為30H
MAIN: MOV SP,#50H ;堆棧從50H開始
MOV 20H,#0 ;20H清零
MOV 24H,#0 ;24H清零
MOV P3,#0 ;P3口輸出低電平
MOV P1,#0 ;P1口輸出低電平(紅外線發(fā)射二極管工作)
MOV TH0,#6 ;此處不懂,預(yù)置數(shù)為多少?如何計算?答×初值為6,那么256-6=250,當T0計數(shù)250個脈沖后發(fā)生中斷,如果時鐘頻率為6M那么機器周期為2us,T0的定時時間為500us。
MOV TL0,#6 ;不懂!
MOV TMOD,#02H ;TO工作方式為2
SETB EA ;打開總中斷
SETB ET0 ;開T0中斷
SETB TR0 ;T0開始計數(shù)
M: MOV P1,#00H ;P1口輸出低電平(以上程序所做的是開機初始化,程序進行基本設(shè)置)
MOV A,P3 ;將P3口的值賦予A
ANL A,#7FH ;將A的值和01111111作與運算,并且結(jié)果保留在A中
CJNE A,#7FH,W37 ;如果A不等于01111111那么跳轉(zhuǎn)到W37(也就是說當P3口輸入高電平時報警
AJMP M ;返回到M處(處于監(jiān)控等待狀態(tài))
WT0: PUSH ACC ;將累加器A中的數(shù)值壓入堆棧
PUSH PSW ;將程序狀態(tài)字PSW壓入堆棧(保護現(xiàn)場)
INC 22H ;將22H中的值加1
MOV A,22H ;將22H中的值賦予A
CJNE A,#200,TORETI ;如果A中的值不等于200那么跳轉(zhuǎn)到TORETI(退出中斷)(也就是說中斷200次后往下執(zhí)行)
MOV 22H,#0 ;將22H中的數(shù)值清零
INC 23H ;將23H中的值加1
MOV A,23H ;將23H中的值賦予A
CJNE A,#10,TORETI ;1s 如果A中的值不等于10那么跳轉(zhuǎn)到TORETI(退出中斷)(在中斷10次,那么只有中斷200x10=2000次以后程序才能往下執(zhí)行)
MOV 23H,#0 ;將23H中的數(shù)值清零
JNB 00H,WBJ;00H應(yīng)該是位地址20H.0 如果20H.0的值為0那么跳轉(zhuǎn)到WBJ
TORETI: POP PSW ;恢復(fù)PSW中的數(shù)值
POP ACC ;恢復(fù)A中的數(shù)值(恢復(fù)現(xiàn)場)
RETI;退出中斷
WBJ: CPL P3.7 ;對引腳P3.7狀態(tài)取反
AJMP TORETI ;跳轉(zhuǎn)到TORETI (退出中斷)
W37: INC 24H ;將24H中的值加1
MOV A,24H ;將24H中的值賦予A
CJNE A,#10,M ;如果A中的值不等于10那么跳轉(zhuǎn)到M(增加檢測時間,如果重復(fù)10次檢測到P3口輸入高電平時程序往下執(zhí)行)
SETB 00H ;對位地址20H.0置1
AJMP M ;跳轉(zhuǎn)到M
END ;結(jié)束

                  網(wǎng)上的高手解答

    一.功能描述 簡易光電報警器,六個光電對管構(gòu)成六路檢測,如發(fā)生遮擋事件則輸出脈沖報警.
     1.硬件 電路比較簡單也很典型,其中CD4069可換成40106施密特六路非門,效果會更好;P3.7也可利用起來;P1口要串入限流電阻或接三極管放大.
     2.軟件 由主程序和中斷服務(wù)程序組成,主程序負責(zé)檢測外部觸發(fā),由中斷程序輸出報警脈沖.

    二.問題回答
     1. "ORG 30H" ORG,END等都為偽指令,在此指出MAIN段程序的程存地址從30H開始,在本程序中也可省略,這只是一般寫程序的風(fēng)格習(xí)慣而已.因為串口中斷服務(wù)入口地址是23H,從30H開始主程序就避免了對五個中斷服務(wù)程序的干擾,并為以后其他中斷的使用留下程存空間.在此程序中由于只用了T0中斷,所以緊接"LJMP WT0" 后面寫MAIN段也是可以的.
     2. "MOV TH0, #6" 設(shè)TH0初值為6,計算很簡單,方式2時為8位計數(shù)器,256-6=250,故6M時500微秒溢出.你的說明是正確的.
     3. "MOV TL0, #6" 因為方式2為8位自動裝填,每個機器周期只是對TL0加一,加滿后再將TH0的值賦給TL0重新計數(shù),TH0值一直保持不變.設(shè)TL0初值為6意味著只要一打開TR0,則從6開始計數(shù).實際上此句也可省略,因為不管TL0初值為何,最長256周期后TH0值6必然要賦給TL0.

    三.錯誤及更正
     1. "JNB 00H, WBJ"應(yīng)為"JB 00H,WBJ"!! 程序開始時,"MOV 20H, #0"已將位00H清零,所以一開始運行不需觸發(fā)進中斷就產(chǎn)生報警信號(P3.7輸出方波);相反,外部報警觸發(fā)后它反而不回報警了(因為00H被置成1了).
     2. "MOV P3, #0" 應(yīng)去掉!! P3口作為光電檢測輸入口,由P3口的上拉結(jié)構(gòu)可知,要輸出數(shù)據(jù)P3口必須先置為高態(tài),原程序中初始化就將P3口置零,不僅不能輸入任何信號而且很容易燒毀芯片(4069輸出高時),是很嚴重的錯誤!
     3. "ANL A, #7FH.CJNE A, #7FH,W37" 其中7F改為3F. P3.6口在2051芯片中作為P1.0和P1.1的比較輸出(片內(nèi)),其值取決于P1.0和P1.1.在此應(yīng)用中不能保證P3.6一定為高,很容易導(dǎo)致誤報或根本不能工作.實際上只用了6路輸入檢測,干嗎是7F呢?
     4. 22H,23H是用來作為分頻計數(shù)控制P3.7輸出周期,最好在初始化MAIN將兩者清零,避免不必要的麻煩.如22H為200,23H為10時需好長時間才能進入處理P3.7.
     5.中斷入口地址.....

    四.其它
     1.時間問題 22H,23H兩者作為P3.7輸出方波周期的延時計數(shù),故P3.7周期T=2*200*10*500微秒=2秒,占空比為1.
     2.24H用來計數(shù)檢測10次其目的是為了提高抗干擾能力.

    五.我的評價(一家之言,僅供參考)
     總體看來功能清晰,但程序?qū)嵲谑侨唛L,有許多地方可簡化和改進.嚴格來說有很多漏洞.
     1. 中斷中PSW無須壓棧保護,程序中沒有牽扯到PSW.不是什么都要保護,壓棧使用多了都可靠性不利.
     2. "INC 22H.MOV A,22H. CJNE A, #20, TORETI"換為"DJNZ R2,TORETI. MOV R2, #200 ",初始化中加入" MOV R2, #200"豈不更好(參見我以前給你程序),甚至不用什么"PUSH ACC. POP ACC"了,盡量避免用"CJNE..."之類的指令.程序中其它類同(共有三處).
     3. 猜猜WBJ段中" RETI"干什么用?
     4. 原程序在主程序中采用循環(huán)檢測,而用中斷來輸出報警信號,從資源利用角度來說很不科學(xué).例如:沒有報警時程序進中斷根本不干事,報警后輸出不會停止但還是要中斷返回執(zhí)行主程序的檢測過程.實際上定時中斷是很寶貴的資源,在原程序中沒有涉及到睡眠等問題,中斷輸出方波功能完全可直接寫入主程序,這里用中斷可謂"殺雞用牛刀",利用率太底了。。. 編程學(xué)習(xí)還差不多.
     5. 電路中直接用光電管檢測,光電管卻一直處于恒開狀態(tài).這對安全要求比較高的場合是根本不行的.紅外主動報警器安全要求較高時要用到數(shù)據(jù)加密處理的.例如在原電路軟件中各對光電管分別進行動態(tài)的可變數(shù)據(jù)通信(即用數(shù)據(jù)光通信進行封鎖,注意時間問題),一旦發(fā)現(xiàn)數(shù)據(jù)出錯即處理報警,這樣安全性就可提高一個檔次!原電路不需動.寫出這樣的程序才能算有意思,不是很難,以后有能力你可嘗試.

    好了,就說怎么多,請你細細分析一下,完全理解后請給我詳細談?wù)勀愕母杏X.我想如果原程序能順利工作,我馬上就去跳樓(通知我一聲).實際上根據(jù)電路功能程序有好多寫法,都比這個要強.由于時間關(guān)系在此省略,見諒,請自行練習(xí).

  • 上一篇: 嵌入式GSM短信息接口的軟硬件設(shè)計
  • 下一篇: 譯碼集成塊PT2272的應(yīng)用
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責(zé)信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1