您的位置:網站首頁 > 電器維修資料網 > 正文 >
會造句就會編程-編程技巧
來源: 日期:2013-11-12 11:54:07 人氣:標簽:
我們以智能紅外干手機為例,介紹其編程技巧。此智能紅外干手機線路簡捷明快,能很方便地利用程序來解決抗干擾問題,若改變負.載,可實現其它控制。本文還要講一下累加器a“為零轉移”和“非零轉移”等指令,并作必要的程序執行結果分析,提高大家的編程能力。
1、工作原理
電原理見下圖。該系統主要由at89c2051、6mhz晶振及簡單的輸入輸出等器件組成。圖中經r2、r8分壓后使pl.0的電壓為0.5v。此電壓作為輸入檢測基準。系統上電復位后進行初始化,先向p1.3送高電位,于是,光耦ic2截止,使vt1亦截止,可控硅ks1關斷,切斷執行負截的電源,電熱絲rll和風扇yd不工作。然后向p1.2送低電位,使vd1導通發射紅外線。此時調用檢測子程序檢測片內比較器輸出端p3.6的電位。如果有人靠近,vd1發射的紅外線就會被反射到vd2的接收窗口上,使vd2的電阻變小,導致vt2發射極電流增大,r9上的壓降便升高。當其值超過0.5v時,pl.l的電位高于pl.0的電位,at89c2051內部比較器輸出端p3.6的狀態發生跳變,呈低電位,否則呈高電位。這樣,檢測到p3.6呈低電位,就可判斷vd2接收到了紅外光。為區別干擾信號,還需關掉vd1,再進行檢測。向p1.2送高電位,使vd1截止,不再發射紅外線。
此時,因vd2收不vd1發出的紅外線而截止,使pl.l的電壓遠小于0.5v,即pl.l的電位低于pl.0的電位。因此,檢測p3.6應為高電位。此時若檢測到p3.6為低電位,說明vd2仍然受到紅外線的照射,此紅外線一定是干擾信號。這樣就把正確動作信號和干擾信號區別開了。
編程時采用多次采樣比較的方式,判斷無誤后再執行清位p1.3,向p1.3送低電位使光耦ic2導通,推動vt1飽和,觸發ks1導通,使yd和rll通電。風扇yd將電熱絲產生的熱量送出。這樣,整個系統就十分可靠了。hd、vd3、vd4、vd5、用作狀態提示或指示。上電和完成一次開關動作返回時,hd都要發出樂聲;進入等待狀態后,vd3以1hz的頻率閃爍作為等待狀態指示。當有人靠近時,vd4、vd5同時點亮使之呈黃色表示準備動作;當人的靠近時間超過0.5秒時,系統即確認為有效靠近,接通負載,并使vd4、vd5輸流導通,使之交替變換紅色和綠色。有效靠近解除,系統仍使負載延遲通電3秒,之后才返回等待狀態。此線路無需調試,只要焊接正確,編好程序后,上電即能可靠運行。
2、程序分析
由于主程序是從003bh處開始安放的,所以,在程序存貯區的ooooh至0002h的這三個單元內要安放一條轉移指令:“轉移ql”,用以引導cpu復位后無條件地跳轉到003bh處去執行程序。因此,ooooh至0002h中應寫入機器碼02003bho初始化過程由ql至q2共5條指令組成,“送數pl,#ffh”和“送數p3,#ffh”,使圖1中ic1的“2、3、6、7、8、9、11”和“12、13、14、15、16、17、18、19”引腳呈高電位,這樣vd1、vd3、vd4.5都不發光,ks1截止,使yd和rll.斷電,整個系統的負載皆不工作。“送數sp.#30h”,其結果是修改了堆棧指針,使壓棧數據從片內ram的31h開始壓入。有關堆棧的作用將在以后的智能產品開發中說明。“送數20h,#ooh”,是為檢測系統有無人員靠近情況作準備的,我們將片內ram的20h單元作為靠近情況,記錄單元,知果無靠近情況,20h中的內容為#ooh,如果有靠近情況20h中的內容則為#ffh,此記錄是由檢測子程序來完成的(單片機內部有一些標志位是可以供用戶作記錄使用的,但在此文中不做說明)。因此,在系統上電后調用檢測子程序前必須將其清零,以擦除以往或錯誤的記錄。“調用qs1”能使hd發出一段樂音,提示系統初始化完成,然后送上指示燈閃爍時間常數,使指示燈能間歇發光,以作系統正常工作的指示。q3至q8中的大部分指令我們已經學過,下面重點分析一下指令“非零轉移”的操作過程。初始化并設置好閃爍常數以后,系統執行q6調用檢測子程序qj1,然后再檢查是否有靠近記錄。由于在程序中是將靠近情況記錄在20h之中的,所以,每每調用檢測子程序以后,只要對20h的內容進行判斷就行了。如果20h中的內容為零,說明該時間內無人靠近系統;如果20h中的內容為非零(#ffh),說明有人靠近系統,應立即轉去判斷靠近時間的長短,以確認該次靠近是否為有效靠近,繼而確定是否通電輸出熱風。而20h中的內容是否為零,cpu是不能直接對其進行判斷的。必須將其傳送到累加器a中才行。所以,q7:“傳數a,20h”一句,就將20h單元內所存的數據傳遞到累加器a中,這和以前講過的的送數是有一點區別的。
q8就是判斷a中的數據是否為零的指令。“非零轉移”被操作的對象是累加器ao如果a中的數據不為零,就轉移至指令中指出的目的地址;如果a中的數據為零,就接著執行下面的轉序。“非零轉移”的指令代碼是70h,后面的字節指出了轉移量。如上述“q6,非零轉移q16”的機器碼是7017h。其執行結果是,如果a中的數據不為零,說明有靠近情況發生,就向下轉移17h個字節,也就是由0056h-下子跳轉到了006eh空間去,進行靠近時間長短的判斷;如果a中的數據為零,說明沒有靠近情況發生,接著執行0057h以下的程序,進行閃爍指示并進行下一輪調用檢測子程序和對檢測結果進行判斷的過程。明白了“非零轉移”,“為零轉移”也就理解了,其它程序的操作結果,大家可根據工作原理和程序注釋來分析。
3、程序流程圖(見下圖)。
4、程序清單
【看看這篇文章在百度的收錄情況】
相關文章
- 上一篇: PIC16F62X單片機主要特點及內部資源
- 下一篇: SIM84軟硬件模擬器運行與調試