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

ORG 0000H ;開機(jī)復(fù)位PC指向0000H地址
AJMP MAIN ;轉(zhuǎn)入主程序
ORG 001BH ;定時(shí)器T1入口
LJMP WT0 ;轉(zhuǎn)入定時(shí)器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ù)為多少?如何計(jì)算?答×初值為6,那么256-6=250,當(dāng)T0計(jì)數(shù)250個(gè)脈沖后發(fā)生中斷,如果時(shí)鐘頻率為6M那么機(jī)器周期為2us,T0的定時(shí)時(shí)間為500us。
MOV TL0,#6 ;不懂!
MOV TMOD,#02H ;TO工作方式為2
SETB EA ;打開總中斷
SETB ET0 ;開T0中斷
SETB TR0 ;T0開始計(jì)數(shù)
M: MOV P1,#00H ;P1口輸出低電平(以上程序所做的是開機(jī)初始化,程序進(jìn)行基本設(shè)置)
MOV A,P3 ;將P3口的值賦予A
ANL A,#7FH ;將A的值和01111111作與運(yùn)算,并且結(jié)果保留在A中
CJNE A,#7FH,W37 ;如果A不等于01111111那么跳轉(zhuǎn)到W37(也就是說當(dāng)P3口輸入高電平時(shí)報(bào)警
AJMP M ;返回到M處(處于監(jiān)控等待狀態(tài))
WT0: PUSH ACC ;將累加器A中的數(shù)值壓入堆棧
PUSH PSW ;將程序狀態(tài)字PSW壓入堆棧(保護(hù)現(xiàn)場(chǎng))
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)場(chǎng))
RETI;退出中斷
WBJ: CPL P3.7 ;對(duì)引腳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(增加檢測(cè)時(shí)間,如果重復(fù)10次檢測(cè)到P3口輸入高電平時(shí)程序往下執(zhí)行)
SETB 00H ;對(duì)位地址20H.0置1
AJMP M ;跳轉(zhuǎn)到M
END ;結(jié)束

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

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

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

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

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

    五.我的評(píng)價(jià)(一家之言,僅供參考)
     總體看來功能清晰,但程序?qū)嵲谑侨唛L,有許多地方可簡化和改進(jìn).嚴(yán)格來說有很多漏洞.
     1. 中斷中PSW無須壓棧保護(hù),程序中沒有牽扯到PSW.不是什么都要保護(hù),壓棧使用多了都可靠性不利.
     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)檢測(cè),而用中斷來輸出報(bào)警信號(hào),從資源利用角度來說很不科學(xué).例如:沒有報(bào)警時(shí)程序進(jìn)中斷根本不干事,報(bào)警后輸出不會(huì)停止但還是要中斷返回執(zhí)行主程序的檢測(cè)過程.實(shí)際上定時(shí)中斷是很寶貴的資源,在原程序中沒有涉及到睡眠等問題,中斷輸出方波功能完全可直接寫入主程序,這里用中斷可謂"殺雞用牛刀",利用率太底了。。. 編程學(xué)習(xí)還差不多.
     5. 電路中直接用光電管檢測(cè),光電管卻一直處于恒開狀態(tài).這對(duì)安全要求比較高的場(chǎng)合是根本不行的.紅外主動(dòng)報(bào)警器安全要求較高時(shí)要用到數(shù)據(jù)加密處理的.例如在原電路軟件中各對(duì)光電管分別進(jìn)行動(dòng)態(tài)的可變數(shù)據(jù)通信(即用數(shù)據(jù)光通信進(jìn)行封鎖,注意時(shí)間問題),一旦發(fā)現(xiàn)數(shù)據(jù)出錯(cuò)即處理報(bào)警,這樣安全性就可提高一個(gè)檔次!原電路不需動(dòng).寫出這樣的程序才能算有意思,不是很難,以后有能力你可嘗試.

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

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

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

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

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