林 剛,田二虎
(成都信息工程學(xué)院,四川 成都 610225)
PIC16F84A單片機(jī)是Microchip公司生產(chǎn)的PIC系列單片機(jī)中的一款中檔產(chǎn)品。此型號(hào)單片機(jī)硬件資源豐富,指令系統(tǒng)簡(jiǎn)單,體積小,價(jià)格便宜,市場(chǎng)供應(yīng)量充足。特別是它所具有的E2PROM,可以在程序運(yùn)行時(shí)隨時(shí)讀寫(xiě)數(shù)據(jù),并且掉電后不丟失,保存時(shí)間長(zhǎng)達(dá)40年之久,所以非常適合在需要收集并長(zhǎng)期保存記錄數(shù)據(jù)的應(yīng)用中使用[1-2]。
本設(shè)計(jì)利用PIC16F84A單片機(jī)設(shè)計(jì)電視機(jī)智能跟蹤系統(tǒng)。要求軟、硬件結(jié)合,可自動(dòng)記錄并顯示電視(或電腦顯示器)工作時(shí)間、通電時(shí)間以及使用次數(shù),以方便科研人員獲知電視使用壽命和工作情況,從而進(jìn)一步對(duì)電視產(chǎn)品進(jìn)行分析評(píng)價(jià)、改善技術(shù)、指導(dǎo)生產(chǎn)[3]。它可以作為電視機(jī)產(chǎn)品的擴(kuò)展功能方便地添加到電視機(jī)中,具有極大的使用價(jià)值和商業(yè)價(jià)值。其設(shè)計(jì)思路和程序流程也能方便地應(yīng)用在諸如此類(lèi)智能跟蹤系統(tǒng)的其他電子產(chǎn)品當(dāng)中,方便地存儲(chǔ)記錄各類(lèi)其他電子數(shù)據(jù)。
在試驗(yàn)開(kāi)發(fā)階段,主要任務(wù)是初步驗(yàn)證系統(tǒng)的可行性,通過(guò)硬件電路設(shè)計(jì)和程序代碼的編寫(xiě)實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)的基本功能,可以用簡(jiǎn)單的電平信號(hào)模擬電視機(jī)內(nèi)部電路的采集信號(hào),不必考慮占用體積和電視機(jī)內(nèi)部安裝位置的因素,將顯示部分做到一起。系統(tǒng)結(jié)構(gòu)由單片機(jī)MCU、信號(hào)采集模塊、按鍵輸入模塊、輸出顯示模塊和電源時(shí)鐘電路模塊5部分組成。系統(tǒng)設(shè)計(jì)框圖如圖1所示。
圖1 試驗(yàn)開(kāi)發(fā)方案結(jié)構(gòu)框圖
在實(shí)際的電視機(jī)整機(jī)配套生產(chǎn)時(shí),可省去按鍵輸入模塊和輸出顯示模塊,只需對(duì)所要記錄的數(shù)據(jù)進(jìn)行跟蹤保存即可。生產(chǎn)廠(chǎng)家只需自己保留少量的讀取和顯示裝置,在其需要讀取記錄的數(shù)據(jù)時(shí),只需通過(guò)售后回訪(fǎng)服務(wù)等多種渠道,將消費(fèi)者使用的電視機(jī)中的此系統(tǒng)芯片取出,進(jìn)行讀取顯示,不影響電視機(jī)的正常工作。這樣既最大程度地縮小了該產(chǎn)品的體積,又可以利用空出來(lái)的管腳采集更多的參數(shù),極大地提高了它的應(yīng)用價(jià)值。而且,由于顯示模塊和按鍵模塊的減少,可以節(jié)約生產(chǎn)成本,減輕購(gòu)買(mǎi)者的負(fù)擔(dān),極大地提高了經(jīng)濟(jì)效益。其方案結(jié)構(gòu)框圖如圖2所示。
圖2 實(shí)際生產(chǎn)方案結(jié)構(gòu)框圖
筆者只對(duì)試驗(yàn)開(kāi)發(fā)方案做了具體的設(shè)計(jì)和實(shí)施,稍微改進(jìn)其電路原理、編程思路和程序代碼,便可以直接應(yīng)用到實(shí)際生產(chǎn)方案中去,對(duì)實(shí)際生產(chǎn)有著重要的指導(dǎo)作用。
本設(shè)計(jì)首先利用PIC16F84單片機(jī)內(nèi)部定時(shí)器TMR0溢出中斷制作一個(gè)定時(shí)時(shí)鐘,程序初始化后便開(kāi)始記時(shí),并將E2PROM中數(shù)據(jù)讀入相應(yīng)的RAM寄存器中,按周期1 min對(duì)隨機(jī)數(shù)據(jù)存儲(chǔ)器RAM的通電時(shí)間計(jì)時(shí)區(qū)數(shù)據(jù)進(jìn)行累加,得到通電時(shí)間(文中用LTIME表示);通過(guò)對(duì)電視機(jī)顯示信號(hào)采集點(diǎn)電平高低變化的查詢(xún),來(lái)記錄顯示工作次數(shù)(SHOW_NUM),同時(shí)用程序控制RAM的電視工作時(shí)間存儲(chǔ)區(qū)域數(shù)據(jù)的累加,得到電視工作時(shí)間(STIME)。上述3個(gè)數(shù)據(jù)均需要累計(jì)存入E2PROM存儲(chǔ)器。雖然E2PROM存儲(chǔ)器可重復(fù)擦寫(xiě)100萬(wàn)次,但是相對(duì)于電視機(jī)長(zhǎng)達(dá)10年左右的使用壽命,其存儲(chǔ)次數(shù)仍然不足,所以本系統(tǒng)每隔5 min對(duì)需要保存的數(shù)據(jù)進(jìn)行一次寫(xiě)E2PROM操作。系統(tǒng)隨電視機(jī)電源的關(guān)閉而斷電,當(dāng)再次通電時(shí),系統(tǒng)將自動(dòng)讀出上次最后保存的數(shù)據(jù),并在此數(shù)據(jù)的基礎(chǔ)上繼續(xù)累加記錄數(shù)據(jù)。
要求開(kāi)機(jī)直接顯示電視通電時(shí)間,然后通過(guò)按動(dòng)顯示切換鍵(S_SHIFT),依次把通電時(shí)間、電視工作時(shí)間、開(kāi)關(guān)次數(shù)3種數(shù)據(jù)分別讀取并顯示出來(lái)。主要指示器件利用4位LED數(shù)碼管。
通電時(shí)間記錄信號(hào)為系統(tǒng)電源部分,由于該系統(tǒng)電源為電視機(jī)內(nèi)部5 V直流電源,當(dāng)電視機(jī)打開(kāi)電源開(kāi)關(guān)后,該系統(tǒng)便自動(dòng)上電工作,進(jìn)行通電時(shí)間的記錄。
工作時(shí)間記錄信號(hào)取自圖3的J1處,它是顯像電路的電信號(hào)統(tǒng)過(guò)限流、穩(wěn)壓、反相后得到的電平信號(hào)。當(dāng)打開(kāi)顯示開(kāi)關(guān),電視機(jī)工作時(shí),該信號(hào)為持續(xù)低電平;關(guān)閉顯示開(kāi)關(guān)后,該信號(hào)為持續(xù)高電平,由此來(lái)判斷電視機(jī)工作時(shí)間記錄的起止點(diǎn)。
工作次數(shù)記錄信號(hào)也是取自圖3中J1處。每當(dāng)J1處信號(hào)由高變低1次,工作次數(shù)增加1次。
PIC16F84是Microchip公司的產(chǎn)品,它采用精簡(jiǎn)指令集系統(tǒng),只有35條匯編指令,簡(jiǎn)單易學(xué),方便高效,故本系統(tǒng)采用匯編語(yǔ)言編程。
主程序是將整個(gè)程序設(shè)計(jì)的思想和實(shí)現(xiàn)方法簡(jiǎn)潔而又完整地體現(xiàn)出來(lái),如圖4。可以看出系統(tǒng)上電復(fù)位后,首先對(duì)各特殊功能寄存器進(jìn)行初始化工作,再將保存在E2PROM中的數(shù)據(jù)讀入相應(yīng)的隨機(jī)數(shù)據(jù)存儲(chǔ)器RAM中,以便數(shù)據(jù)的快速處理;通過(guò)對(duì)定時(shí)器TMR0的設(shè)置,利用定時(shí)器溢出中斷進(jìn)行正確定時(shí),并根據(jù)計(jì)時(shí)標(biāo)記,對(duì)通電時(shí)間LTIME內(nèi)數(shù)據(jù)按1 min的間隔遞增,實(shí)現(xiàn)計(jì)時(shí);然后通過(guò)查詢(xún)按鍵狀態(tài)或是顯示信號(hào)的有無(wú)對(duì)電視機(jī)顯示次數(shù)和工作時(shí)間數(shù)據(jù)進(jìn)行處理或是顯示切換功能;通過(guò)查詢(xún)?cè)诙〞r(shí)器TMR0溢出中斷程序的標(biāo)志設(shè)置,每隔5 min,把RAM中的數(shù)據(jù)存入相應(yīng)的E2PROM中;在查詢(xún)無(wú)效或是子程序調(diào)用完成的情況下,程序運(yùn)行顯示子程序,最后再跳回到按鍵查詢(xún)位置,實(shí)現(xiàn)程序的循環(huán)運(yùn)行。
圖3 基于PIC16F84的電視機(jī)智能跟蹤系統(tǒng)
圖4 主程序流程圖
與讀E2PROM數(shù)據(jù)同理,程序每隔5 min,對(duì)電視機(jī)通電時(shí)間LTIME、工作時(shí)間STIME、工作次數(shù)SHOW_NUM對(duì)應(yīng)的12 byte的寄存器空間寫(xiě)入當(dāng)前數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的保存。這里同樣采用間接尋址方式,將首地址20H賦給間接地址寄存器FSR,每保存一位數(shù)據(jù),就將FSR中所存地址加1,循環(huán)12次就可完成所有數(shù)據(jù)的讀取工作。將地址和數(shù)據(jù)賦給相應(yīng)的寄存器后,向E2PROM寫(xiě)一位數(shù)據(jù),在PIC單片機(jī)中必須使用固定的編寫(xiě)格式,流程如圖5所示。
圖5 寫(xiě)1次E2PROM子程序流程圖
關(guān)閉中斷是為了防止在寫(xiě)E2PROM時(shí)發(fā)生中斷,導(dǎo)致數(shù)據(jù)不能正確保存,其關(guān)閉中斷的時(shí)間極短,只有幾個(gè)指令周期,因而對(duì)定時(shí)器的定時(shí)影響可以忽略;而向寄存器EECON2一次寫(xiě)入55H和0AAH,是為了避免向E2PROM誤寫(xiě)入,確保E2PROM存儲(chǔ)器的使用都是編程者有意為之,延長(zhǎng)E2PROM存儲(chǔ)器的使用壽命。
圖6 切換子程序流程圖
此模塊硬件電路采用模塊化的設(shè)計(jì)方法,可根據(jù)實(shí)際需要擴(kuò)展系統(tǒng)的控制功能,目前該模塊測(cè)試性能良好,用于實(shí)際生產(chǎn)應(yīng)用時(shí)還需考慮電磁屏蔽的功能,有待進(jìn)一步應(yīng)用于市場(chǎng)開(kāi)發(fā)。
[1]羅翼,張宏偉.PIC單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)典型實(shí)例[M].北京:中國(guó)電力出版社,2005.
[2]李學(xué)海.PIC單片機(jī)原理[M].北京:北京航空航天大學(xué)出版社,2004.
[3]黎旺星.基于模型診斷技術(shù)在數(shù)字電視機(jī)中的應(yīng)用[J].電視技術(shù),2003(11):63-65.
[4]周杰,張銀勝,劉金鑄.PIC單片機(jī)原理與系統(tǒng)設(shè)計(jì)[M].北京:氣象出版社,2008.