




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片機畢業設計:基于單片機的復費率智能電能表軟件系統設計 國防科學技術大學本科生學位論文基于單片機的復費率智能電能表軟件系統設計姓名: 申請學位級別:本科專業:電子計算機目錄 摘要 第一章引言 §1.1 單片機的發展 §1.2 復費率表的需求背景 §1.3 復費率表目前的技術狀況 §1.4 設計的基本目標、實現狀況、后續開展 第二章MCS-51系列單片機及其AT89C51簡介 §2.1 MCS-51系列單片機 §2.2 AT89C51之新特點 第三章硬件的基本構成及軟硬接口 §3.1 系統的大致硬件結構 §3.1
2、PCF8583 日歷時鐘芯片簡介 §3.3 軟硬件之間的接口 第四章軟件總要及關鍵技術分析 §4.1 軟件總體思想 §4.2 軟件組成 §4.3 各模塊功能分配及調用關系 §4.4 幾處關鍵算法的說明 §4.5 關鍵技術分析 第五章軟件模擬 I2C通訊 §5.1 I2C總線規約 §5.2 軟件模擬 I2C的實現 §5.3 出現的問題及其解決 第六章鍵處理 §6.1 鍵之功能安排 §6.2 鍵盤監控程序設計方法綜述 §6.3 鍵分析法及安排 第七章軟件采用的抗干擾及容錯技術 &
3、#167;7.1 可靠性設計綜述 §7.2 抗干擾及容錯技術簡介 §7.3 系統采用的抗干擾容錯措施 第八章系統評價 附錄 1 參考書目 2 致謝 3 軟件文檔及程序清單 摘要 本文主要論述了如何用 AT89C51單片機構復費率智能電能表的計費模塊設計,而且主要涉及其中的軟件問題。 復費率表的主要特點是隨時段變化將電量計入不同的計量單元。本文主要論述了采用 AT89C51 單片機作為分時計量之核心,將其計量模塊的時段編制、分時計量、數據顯示、數據處理及下電保存和上電恢復給以有效實現的一般技術。這其中之關鍵問題有:一、時段的準確切換。二、數據的可靠計量與安全保存。 為了保證系
4、統實時時鐘的精度, 該系統采用了飛利浦PCF8583日歷時鐘芯片, 并通過軟件模擬I2C總線實現了 89C51與 PCF8583的有效通訊, 為系統提供了精確的實時時鐘和掉電時數據在 PCF8583里的可靠保存。 在系統監控程序的編制中, 成功地用軟件模擬了 I2C的通訊;在分析已有的直接分析法、圖解法、狀態分析法等的基礎上, 提出并成功地使用了一種新型鍵分析技術; 綜合采取了軟件WATCHDOG、數據冗余、軟件陷肼等多種軟件抗干擾容錯措施。 通過對系統硬件資源的合理配置使用及軟件的精心設計安排, 該系統較好地解決了編程、顯示、下電保存、上電恢復等,取得了滿意的效果。 關鍵詞: 89C51單片
5、機PCF8583日歷時鐘 復費率表 軟件模擬 I2C通訊 鍵分析技術 軟件抗干擾容錯技術 軟件WATCHDOG第一章 引言 我們這次畢業設計主要任務是利用AT89C51單片機研制開發一種新型復費率智能電能表。設計的硬件部分由唐靖飆同學完成,我則負責其中的軟件部分。下面對這次設計的背景做一些介紹。§ 本世紀40年代以來信息和微電子技術的飛速發展, 給人類的生活帶來了深刻的影響。 而70年代大規模集成電路的發展更為自動化技術的革新迎來了黎明前的曙光-單片機誕生了。 單片微型計算機 Single Chip Microcomputer簡稱單片機, 又稱微處理器 Microcontroller
6、 , 是將計算機的基本部件微型化, 使之集成在一塊芯片上的微機。片內含有 CPU、ROM、RAM、并行I/O、串行 I/O、定時器/計數器、中斷控制、系統時鐘及系統總線等等。單片機有著體積小、功耗低、功能強、性能價格比高、易于推廣應用等顯著優點, 在自動化裝置、智能化儀表、過程控制和家用電器等領域得到日益廣泛的應用。近年來, 單片機結合專用集成電路ASIC Applied Specific Integrated Circuit 和精簡指令集計算機 RISC Reduced Intruction Set Computer技術發展成嵌埋式處理器Embedded Procssor, 使得單片機可集成
7、眾多的軟件和硬件, 而成為更深意義上的單片應用機型, 使其更強的功能深入到數據、數值分析, 信號處理, 智能機器人及圖象處理等高技術領域。 自1974年美國德克薩斯儀器公司推出第一塊單片機以來, 許多家公司參與了單片機的研制和生產的競爭。 目前通用型單片機至少有50多個系列400 多個品種。 其中最具代表性的典型機種為 Intel公司的MCS-51系列, Motorola公司的MC6805系列和Zilog公司的 Z8系列及其派生的各種產品。而我國應用最多的是MCS-51系列, 它為我國單片工作者所最熟悉, 而且有多種性能完善的開發工具, 在各個技術領域的科研和技術改造、產品開發中起著越來越大的
8、作用。 同時, 這也為我們開發研制新型復費率智能電能表提供了良好的基礎。§1.2 復費率表的需求背景 隨著我國國民經濟的迅猛發展, 電力資源的緊張日顯突出。而且眾所周知, 電力生產的特點是發、供、用電同時完成, 加之電能存儲既困難成本又高, 因而在一般情況下,發電量是由用電量多少決定的。電力的使用又有明顯的時段性: 在用電集中時,要求發電量增加形成電網負荷高峰; 反之, 當用電負荷大量減少時, 則要求減少發電量形電網負荷低谷。這種運行狀況不僅很不經濟, 有時甚至危及電網的安全。為了平衡負荷, 電力部門采取了許多措施, 實行多部電價就是主要措施之一。 所謂多部電價就是根據用電的時段性特
9、征, 在用電高峰期提高電價, 限制用電; 在低谷期降低電價, 以鼓勵用電。這樣, 對于供電部門有利于提高電網的效率; 對于用電部門來說可適當減少電費開支, 并避免在用電高峰期的拉閘限電現象。 這對于雙方都是有利的。因此就需要有可以將不同時段的用電情況分別記量的復費率電表。而我國目前生產的電表多為機械式總量表, 不具備復費率功能, 從國外引進的不僅價格十分昂貴, 許多質量也不穩定。電力部門迫切需要研制與生產我們自己的復費率表, 以期多部電價順利實施, 并對電能的使用管理起到許多積極作用。§1.3 復費率表目前的技術狀況 復費率表 Multitariff Watt Hour Meter
10、最早出現于七十年代后期的美國, 我國于八十年代初期進行了有限的引進。其主要特點是按時段不同將電量計入不同的計量單元, 以提供按多部電價收費的依據和給電力技術經濟管理提供數據。 從國內外的各種復費率電表生產情況來看, 各廠家設計的結構、選用的元件、所采用的技術措施方式很多, 因此表的品種也較繁多, 性能不一, 但總的來說大都是在機械母表的基礎上增加分時計量和顯示功能而成。其發展過程中大致出現過以下幾種:一 按工作原理分類: * 采用全機械傳動的機械式;* 分時計量和時鐘控制均采用電子線路實現的電子式;* 采用電子時鐘電路和機械計時部件與機械計數部件的機電混和式;二 按分時計量模塊和機械母表的結合
11、方式分類: * 兩相合一的一體式; * 兩相分離的分離式;三 按電能計數的轉換方式分類: * 機械式; * 感應脈沖式; * 光電轉換式;在各種表的種種不同中, 核心內容是工作原理的區別。 從復費率表的特點和功能可知, 任一復費率表都必須有以下四個基本組成部分: 電能測量部分, 時間控制部分, 電量分別計錄裝置和切換部分, 控制及時控電源。 采用何種技術措施來將其給以有效的實現就是問題之根本點。 復費率表剛剛出現之時, 由于技術上的不成熟, 最為簡單的機械式和機電混和式占很大部分。而近年來隨著單片機技術的廣泛應用和日趨完善, 采用單片機作為其分時計量的核心單元的復費率表成了技術上的主流, 其余
12、的都已經和正在被淘汰。而且,由于用戶需求的不斷提出, 復費率表已不僅僅是分時計量和顯示,而成為集計量、顯示、編程、電力數據統計、負荷控制信號傳送等于一體的智能儀器, 其組成部分大都要求有: 光電脈沖電能信號轉換、單片機時控、分時計量、需量功能、紅外抄表、數碼管/液晶板顯示、RS232/RS485接口以實現與微機聯網和遠程抄表等等。但目前市場上出現的復費率表 包括從國外進口的一些表往往都存在著這樣或那樣的不足, 如: 時鐘誤差較大、數據可靠性不高、與微機聯網的接口不完善等。基于此, 我們決定研制開發一種各方面較為完善的新型復費率智能電能表。§1.4 設計的基本目標、實現狀況、后續開展
13、一 基本目標基于對新型復費率智能電能表的需求, 我們決定采用以AT89C51單片機和飛利浦PCF8583日歷時鐘芯片作為主要器件,而這次設計的基本目標就是完成其中軟件部分的時段編制、分時計量、數據顯示、數據處理及下電保存和上電恢復。由于PCF8583日歷時鐘芯片是通過 I2C接口與外界通訊, 而 AT89C51沒有I2C接口, 所以軟件還要完成模擬 I2C通訊的任務。 二 實現情況由于銀河計算技術發展中心已經開發并投放市場了一種復費率電能表 采用的是專用單片機。 軟時鐘技術, 設計開發的新型表要和原有的保持功能兼容,設計中就基本按照原有 產品說明, 將其顯示和編程完全給以實現,并將時段由八個增
14、加為十個。 軟件順利實現了模擬 I2C通訊, 為系統提供了高精確度的實時時鐘。至此, 新型表軟件模塊的設計已基本完成。三 后續開展這次畢業設計由于時間緊, 任務重, 軟件設計簡化掉了紅外抄表和RS485串行通訊, 但留下了較好的接口, 使得紅外遙控只需將鍵碼分析出來就可使用已有程序完成功能, RS485串行通訊也正著手編制加入, 爭取早日將新型復費率智能電能表推上市場。第二章MCS-51系列單片機及AT89C51簡介§2.1 MCS-51系列單片機 MCS-51系列單片機根據片內有無程序存貯器及存貯器的形式, 分為3 種基本產品: 8051, 8751和8031。8051單片機片內含
15、有掩膜 ROM型程序存貯器; 8751片內含有EPROM型程序存貯器, 其程序可多次擦除重寫; 8031片內沒有程序存貯器, 但可外部擴展一片或多片含用戶程序的EPROM, 使用較為靈活。 它們之間除程序存貯器的形式不同外, 其它結構與功能全都相同。 MCS-51系列單片機的主要特征如下: * 適合于控制應用的 8位 CPU; * 64K 外部程序存貯器地址空間; * 64K 外部數據存貯器地址空間; * 128/256 Byte 內部 RAM; * 3256 位雙向可分別尋址的 I/O 線; * 24 個16位定時/計數器; * 全雙工異步串行口 UART ; * 519個中斷源/511個向
16、量的中斷結構; * 片內時鐘振蕩器; * 布爾處理器。§2.2 AT89C51之新特點 AT89C51是一種低功耗。高性能的 8位CMOS微處理器芯片, 片內含有4K 字節的閃速可編程及可擦除只讀存貯器 Flash Programmable and Erasable ROM, 簡寫為PEROM, 128字節的RAM, 32條I/O線, 2 個 16位定時/計數器, 一個全雙工異步串行口 UART , 一個五源兩級的中斷結構, 片上振蕩器與時鐘電路。 經我們實驗認為, AT89C51是一種很可靠的性能非常優良的芯片, 它的使用給我們這次設計提供了很多便利。第三章硬件的基本構成及軟硬接口
17、§3.1 系統的大致硬件結構 系統使用了一片帶有4K 字節的閃速可編程及可擦除只讀存貯器的 AT89C51單片機作為中央控制器; 采用一片飛利浦 PCF8583 日歷時鐘芯片作為系統硬時鐘, 并使用其中的 256個 Byte RAM 作為掉電時數據保存區; 采用 8位 LED七段顯示器作為顯示部件, 4個發光二極管作為峰平谷和電能脈沖指示燈; 用七個按鈕接到P2.0P2.6作為系統控制鍵; 用光電頭得到電能脈沖信號, 以外部中斷方式INT1將脈沖信號送入89C51; 用一塊7705得到上電復位和掉電中斷信號,掉電信號從INT0接入89C51; 用變壓器作為系統正常工作電源,用一個高能
18、鋰電池作為掉電時PCF8583備用電源以維護系統實時時鐘和數據。§3.2 PCF8583 日歷時鐘芯片簡介 PCF8583是一個低電壓源的日歷時鐘芯片和RAM電路, 它的主要功能特性如下: * 4 年日歷時鐘, 24或12點格式; * 具有串行I2C總線接口; * 256字節RAM, 自動字節地址增量; * 具有可編程的鬧鐘.定時和中斷功能。 RAM的頭8個字節單元地址為0007作為可尋址的寄存器, 其中地址為00的單元為控制/狀態寄存器, 0107單元為時鐘計數器,地址為的080F的單元可編程為空閑單元或鬧鐘寄存器。 由于我們只用到了它的計時功能, 所以下面只簡單談一下時鐘計數器和
19、控制寄存器。 00單元: 復位后狀態為的00H, 此時為32.767kHz時鐘方式, 取消了起鬧功能, 讀5至6單元時不屏蔽。裝入實時時間時應先給00單元送80H; 01, 02, 03, 04單元依次為百分之一秒、秒、分、時計數器,其數據格式為壓縮BCD碼; 05單元為年和日期寄存器, 06單元為星期和月份寄存器,其格式如下: PCF8583的其它單元被用作RAM,本文將在附錄中對其詳細說明。§3.3 軟硬之間的接口及硬件資源的分配 由上述硬件構成可知, 硬件在外圍電路方面為軟件提供的接口有:* 顯示部分: P0.0P0.3為數字09的BCD碼, P0.4為小數點, P1 為八個七
20、段的位選擇, 如0010,0000B 則顯示左數第三個七段。* 按鍵信息: 七個按鈕分別掛接在P2.0P2.6上, 平時為高電平, 按下時為低, 定義如下: 鍵名 鍵值對應89C51引腳 ? 01000000BP2.6 00100000BP2.500010000BP2.400001000BP2.3 00000100BP2.2 00000010BP2.1 00000001BP2.0* 掉電中斷: 掉電信息由INT0引入89C51。* 電能脈沖: 電能脈沖由INT1引入89C51。* 與PCF8583的通訊:PCF8583具備I2C接口, 其中SDA數據線接P0.7,SCL時鐘線接P2.7。又:
21、PCF8583有開放式中斷, 接P0.5, 軟件檢測其由高到低跳變作為秒信號。* 指示燈:P3.4P3.7接四個發光二極管, 軟件將其定義如下: P3.4 峰電指示,P3.5 平電指示, P3.6 谷電指示,P3.7 電能脈沖指示, P3.4和P3.5同時亮為尖峰電量指示, P3.4P3.6全亮為總電量指示。 程序對系統內部硬件的資源分配為: T0定時器用作定時, 它的中斷用于軟件WATCHDOG, T1計數/定時器、TI/RI串行I/O 中斷留作系統擴展用。 其余如P0,P1,P2,P3等在軟硬接口中已有定義, 不再贅述。AT89C51中128字節RAM分配為: 25字節用作堆棧, 30 字
22、節用作計算需量用的滑差隊列, 第0第1兩組寄存器, 8 字節的顯示緩沖區以及一些常用常修改的數據。 PCF8583的RAM中設有實時時鐘, 并存放下電保護數據和系統一些不常修改的數據如: 時段定義、用戶號、抄表密碼等。 在上述軟硬接口定義和硬件資源分配下進行了軟件設計以完成系統功能。 第四章軟件總要及關鍵技術分析§4.1 軟件總體思想 單片機程序又稱為監控程序, 它負責監督管理智能儀器的全部資源和全部操作。它是智能儀器的心臟和靈魂, 監控程序質量的好壞直接決定著一個智能儀器性能。 由于程序將用在新型電表上, 所以其數據的安全性與可靠性就是至關重要的了, 這就要求首先要盡可能保證程序的
23、正確性。而簡單將在某種程度上導致正確, 因此在編程處理中盡可能避免了程序結構的過于復雜,而將其分為相對較為獨立的功能模塊。并且, 按照軟件工程學的思想, 軟件在其生存周期中其維護是很占用人力的, 所以盡可能應使程序有較好的可讀性。本著正確、簡單、可讀的原則編制了整個軟件。當然, 這是以程序代碼效率的降低為代價的。 筆者認為, 在內存不是主要矛盾的情況下, 代碼量在一定限度內的增加以換取軟件的高可靠性和良好的可讀性是很值得的。§4.2 軟件組成 本設計中監控程序由主程序和三個中斷服務程序組成。 T0中斷服務程序和RAM H單元一起作為軟件WATCHDOG, 是系統抗干擾措施之一。 電能
24、脈沖中斷服務程序負責記錄電能脈沖數目, 如果滿一個計量單位就修改總電量, 并根據當前時段峰平谷值修改分電量。 掉電中斷服務程序負責保存掉電保護數據, 然后停止程序執行以防數據丟失。 主程序則首先調用初始化, 給各特殊寄存器置初始值, 并依掉電標志的狀態不同給各工作單元送初值。 如果是掉電恢復還要處理掉電時間記錄和抄表等工作, 然后進入主循環。在這個主循環中喂軟件WATCHDOG一次; 不斷調用顯示子程序顯示數據;同時, 檢測 PCF8583秒信號得到實時時間, 維護滑差隊列、計算最大需量、修改相應記錄,并檢測是否到時段轉換點, 是則更新當前時段峰平值; 檢測有無鍵按下, 若有, 則轉到鍵處理子
25、程序完成處理; 然后跳轉到循環頭繼續循環; 這期間如果有中斷則由中斷服務程序處理之。 整個軟件中顯示項號是系統最重要的數據: 顯示內容由它指示, 在調用鍵處理程序和數據送顯示的子程序時都靠它來傳遞參數。 主程序流程如下: 軟件大體框架如下:§4.3 各模塊功能分配及調用關系 軟件大體按功能分為多個模塊, 其功能分配及調用關系如下:.1. I2C通訊模塊: 從PCF8583中讀出或向PCF8583寫入若干個數據。.2. 掉電中斷INT0服務程序: 保存脈沖計數值, 顯示項號和當前時間, 中止程序執行。 調用:1I2C通訊模塊.3. 電能脈沖中斷INT1服務程序:接收脈沖信號, 并判斷是
26、否需要修改總電量, 及按當前時段峰平谷值指示修改分電量。調用:1. I2C通訊模塊.4. T0中斷服務程序: 軟件WATCHDOG監視器, 將 H增1, 并判是否大于3, 是則轉出錯處理。.5. 更新顯示緩沖區模塊READ:將DSPNUM顯示項號所指示的數據送入顯示緩沖區。調用:1. I2C通訊模塊.6. 編程數據記錄模塊:記錄修改過的編程數據。調用:1. I2C通訊模塊。.7. 上電初始化模塊:各單元送初始值, 初始化各特殊寄存器, 各變量送缺省值。調用:.1I2C通訊模塊.5更新顯示緩沖區模塊READ.8. 抄表模塊:記錄抄表數據, 重置工作單元, 記錄需量數據。調用:1I2C通訊模塊.9
27、. 掉電恢復模塊:恢復掉電保護數據, 記錄停電時間, 如需要則抄表。 判斷當前時段, 恢復正常工作。調用:1I2C通訊模塊.5更新顯示緩沖區模塊READ.8抄表模塊.10. 鍵處理模塊:分析鍵碼, 并按程序不同狀態執行對應操作。調用:1I2C通訊模塊.5更新顯示緩沖區模塊READ.8抄表模塊.11. 顯示模塊:將顯示緩沖區數據送數碼管顯示。.12. 主程序模塊:根據系統時鐘及時切換時段, 調用各模塊完成系統功能。§4.4 幾處關鍵算法的說明1 秒信號的獲得:PCF8583的INT腳有開放中斷,當它不作鬧鐘功能時,此引腳上為以秒為周期的方波信號,讀該引腳,如有由高到低跳變記為1秒,秒計
28、數在8951里完成,滿一分鐘時讀PCF8583內時間,修改8951 內時間以和8583保持一致。2 需量的計算:設有滑差隊列指針QUETHIS, 抄表后自動回到隊列頭QUEHEAD, 當QUETHIS指向隊列最后一個元素時置隊列滿標志QUEFALL,軟件檢測到有這個標志時開始計算當前需量,及判讀并記錄最大需量。3 循環顯示的實現:非編程態當循環鍵 摁下,則進入循環顯示。 置循環標志,同時置顯示項號DSPNUM為01項,軟件檢測有循環標志則做如下動作: SC_LAST移入PRE_LAST, 秒最后一位移入SC_LAST, 若PRE_LASTSC_LAST 則顯示項號DSPNUM增1, 增 1后若
29、DSPNUM06就置DSPNUM為01, 即只顯示前五項, 這樣就依次循環顯示0105項。4 判當前時段SD_NOW:程序先判斷用戶定義了多少個時段, 由于規定最后一個時段為23:59, 軟件從時段02 開始檢測最后一個時段值不為23:59 的時段, 則SYSDS 使用時段數等于這個時段號,再看該時段的費率是否為谷, 不為谷SYSDS再增1, 這樣就得到用戶定義的時段數目。根據當前時間, 程序搜索最后一個小于當前時間的時段值, 它即為當前時段,將當前時段費率填入DQSDFPG 當前時段峰平谷值, 它指示分電量的記錄, 并將下個時段值填入 XGSD 下個時段, 以供軟件在出現分信號時檢測,若時鐘
30、等于XGSD則更新DQSDFPG和XGSD。5 時段的切換系統設有 XGSD 下個時段值, 兩個字節, 分別為下個時段點的小時和分鐘值, 以供軟件在出現分信號秒計時為00H時檢測,若時鐘等于XGSD則更新DQSDFPG和XGSD。 將當前時段費率填入DQSDFPG當前時段峰平谷值, 它指示分電量的記錄, 并將下個時段值填入XGSD 下個時段, 以供下次檢測。 6 數據的顯示 顯示由兩部分共同完成,顯示程序 DISPLAY和顯示緩沖區更新程序READ。DISPLAY負責把顯示緩沖區的內容送到八個七段上顯示出來,做法是:關閉P1口送00H, 顯示緩沖區一個字節送P0, P1口開放 每次開放一位,
31、如01000000B開放左數第二個七段, 順次從高則低送八個七段同時開放該數碼管。 READ負責把顯示項號DSPNUM 指示的數據送到顯示緩沖區 DSPNUM50 時為普通非編程態顯示, DSPNUM50時為編程態顯示。 做法是利用類似高級語言Switch的機構, 用 CJNEA,#項號1,#標號1 AJMP#功能子程序標號2 標號1: CJNEA,#項號2,#標號3 AJMP#功能子程序標號4 標號3: : : 功能子程序標號2: 送項號為項號1的數據; AJMP READ_END 功能子程序標號4: 送項號為項號2的數據; AJMP READ_END: : READ_END更新程序結束點:
32、 語句來實現跳轉到該項數據處理處, 這使和分折和處理兩相分離, 程序易讀、易編制、易調試, 更方便后續工作的開展和維護如需增加顯示項僅增加 CJNEA,#新項號,#處理 AJMP#新處理標號 新處理標號: 處理 AJMP READ_END 即可。 若READ數據在PCF8583中,則先調用READPCF子程序將數據讀入讀緩沖區R_BUF, 然后將之分解送入DSPBUF, 同時根據對該數據意義的解釋對相應位置小數點位, 如DSPNUM01時是總電量, 此時若為兩位小數, 則DSPBUF的37H第4bit置1, 送顯示時即有小數點被點亮。 7 編程數據記憶FWRITE: 對數據編程時, 有一個MO
33、DI_F位,若該位為1 時,則說明該項數據系統修改過, 則調用FWRITE記憶之, 否則不修改原值。 FWRITE先按DSPNUM的不同解釋顯示緩沖區數據的意義, 將數據裝配起來, 例由六字節變為三字節壓縮 BCD碼, 且不含小數點信息 小數點只在顯示時按對該數據的解釋加上。 同樣對 DSPNUM采用了類似 Switch的機構。若數據存放在PCF8583則調用WRITEPCF寫入之。 8 鍵處理程序: 鍵分析時程序分為兩個狀態: 編程態和非編態。 在不同的狀態下同一個鍵功能不同, 程序也按不同功能狀態聚簇, 在不同的狀態下分析到同一個鍵也執行不同的程序。 9 編程態數據閃爍的實現: 程序設了一
34、個閃爍指示字BLINK, 一個閃爍標志位BLINK_F, 進入編程態時置位BLINK_F, 當秒計數最后一位為 1時, DISPLAY程序就不打開BLINK 所指示的對應數碼管, 當秒計數最后一位為0時, DISPLAY程序正常顯示所有有值的數碼管。 這樣就得到了閃爍的效果。§4.5 關鍵技術分析 為了程序較好的可讀性, 在軟件的編制中許多地方使用了類似高級語言的結構化技術, 并使用了類似 C語言中SWITCH機構的結構。具體實踐中主要就是嚴格按功能劃分程序模塊, 使得各模塊之間功能相對獨立, 接口定義清晰, 參數傳遞盡量簡單,以減少可能出現的失誤, 避免引起系統功能紊亂。 設計過程
35、中還嚴格按照軟件工程學的要求,先行設計出了偽代碼程序, 這也給軟件由抽象的設計思想到具體的匯編程序的編制帶來了很大的方便。 這使得程序代碼段功能分配明確, 控制轉移十分清楚, 給程序的編制和調試帶來了很大方便。 突出例證就是程序在編碼完成后, 僅用了五天就基本上調通了近3000行匯編程序。 而且, 可以預見, 它還將給以后的維護工作帶來極大的便利。 由于程序數據量較大, 8951的128字節RAM不能滿足要求, 再加上下電時數據要在PCF8583中保存, 如何實現沒有I2C接口的 AT8C951和只靠I2C接口和外部聯系的PCF8583之間的有效通訊, 便成為設計能否成功的關鍵。這個問題將在第
36、五章中予以詳細討論。 作為智能儀器的單片機系統是要和外部有聯系的。這其中的主要手段之一就是鍵盤。當然這里所說的鍵盤可能只有很少幾個按鈕組成。而且常常出現同一鍵在不同狀態下按下具有不同的意義, 如何編制出高質量的鍵盤監控程序就成了一個需要好好研究的問題。我們將在第六章重點研究這個問題。 由于電能表使用的環境比較復雜, 各種干擾可能很大,而且還會因用戶的誤操作給系統帶來難以預料的不良影響, 所以如何提高系統的可靠性就也成為了一個至關重要的事情。第七章將會有這方面的詳細說明。 對于以上的幾個問題系統都給予了較好的解決。第五章 軟件模擬 I2C通訊 §5.1 I2C總線規約 1 I2C總線概
37、念: I2C串行總線是器件與器件IC與IC簡稱為I2C之間的通訊總線, 使用兩根線 時鐘線 SCL和數據線 SDA 就可以實現器件之間的串行通訊。飛利浦的很多單片機具有I2C總線接口,同時還生產配置I2C接口的外圍電路RAM,I/O口,AD,DA 等, 它為系統的擴展提供了很方便的手段。I2C的硬件邏輯提供了開始和結束信號檢測。 從器件地址識別、總線的競爭與同步、定時和控制等功能。 這里我們主要關心有關軟件模擬方面的特性。 I2C 總線根據地址識別每個器件。根據器件的功能可以工作于發送或接收方式。 另外, 對于發送器或接收器來說, 在進行數據傳送時可以認為是主器件或從器件。 一個主器件是啟動在
38、總線上傳送數據并產生時鐘以允許傳送的器件, 這時任何被尋址的器件認為是從器件。 數據有效性: 在時鐘高電平期間SDA上的數據必須穩定見下圖,只有在時鐘線SCL低電平期間SDA線上高電平后低電平狀態才能發生變化。 開始和結束信號:開始信號: SCL為高時, SDA由高到低跳變;結束信號: SCL為高時, SDA由低到高跳變; 2 數據傳送:.1. 字節格式送到SDA線上的每個字節必須為 8位長度, 每次傳送的字節數是不受限制的, 每個字節后面必須跟一個響應位。 數據在傳送時先傳送最高位詳見下圖。2. 響應認可確認數據是必須的, 認可位相對于主器件產生的 1 個時鐘,在這個時鐘內發送器釋放SDA線
39、。s, 最小高電平為4s, 主器件產生的時鐘頻率為0100kHz。§5.2 軟件模擬 I2C的實現飛利浦公司生產的具有I2C總線接口的外圍芯片種類十分繁多,其.性能和操作要求也多種多樣, 這里我們主要以PCF8583 為例介紹一下.如何用軟件模擬的方法來實現沒有I2C接口的主處理器和只靠I2C接口和外部聯系的具有RAM 特性的外圍器件之間的有效通訊, 且將它們統稱為外部RAM器件。 根據I2C總線規約可知, 軟件模擬I2C通訊的大體流程可劃分如下: 1 向外部RAM里寫入:*1* 發開始信號; SCL為高時, SDA由高到低跳變*2* 發從器件地址7 個Bit和R/W 0為寫入 位;
40、*3* 檢測等待外部RAM器件的應答信號ACK;*4* 發送字地址 即RAM 單元的地址;*5* 檢測等待外部RAM器件的應答信號ACK;*6* 發送數據 .1. 發送一個數據字節; .2. 檢測等待外部RAM器件的應答信號ACK; .3. 是最后一個字節嗎 是, 則轉到*7*; 否則, 轉到.1 *7* 發送結束信號; SCL為高時,SDA由低到高跳變2 從外部RAM里讀出:*1* 發開始信號; SCL為高時, SDA由高到低跳變*2* 發從器件地址7 個Bit和R/W 0為寫入 位;*3* 檢測等待外部RAM器件的應答信號ACK;*4* 發送字地址 即RAM 單元的地址;*5* 檢測等待外
41、部RAM器件的應答信號ACK;*6* 發開始信號; SCL為高時, SDA由高到低跳變*7* 發從器件地址7 個Bit和R/W 1為讀出 位;*8* 檢測等待外部RAM器件的應答信號ACK;*9* 發送數據 .1. 發送一個數據字節; .2. 是最后一個字節嗎 是, 則轉到 .5. ; 否則,執行 .33. 主器件如本例中的 8951發應答信號ACK,即在一個時鐘周期內SCL為高時拉低SDA電平; .4. 轉 .15. 主器件不響應, 即在一個時鐘周期內SCL為高時保持SDA為高電平; 從器件檢測到這個高電平的下一個時鐘周期放棄SDA線, 以使主器件能產生結束信號6. 轉*10* ; *10*
42、 發送結束信號; SCL為高時,SDA由低到高跳變 有關的詳細說明請參考附錄的軟件文檔。 這里有很關鍵的一點就是要嚴格保證, 在一次傳送開始后和結束前數據線SDA 在時鐘線為高時不能發生變化 因為I2C 規約將之定義為開始或結束信號, 否則將會導致傳送的非常結束。 只要滿足I2C規約的時序定義, SCL的低電平時間可以根據需要適當延長。 軟件在給以實現時, 可考慮使用一個定時/計數器來實現I2C對時序的要求。 這樣軟件可以在I2C通訊的同時執行其它的操作。其不足是軟件編制較為復雜, 較易出錯。 還可考慮全由軟件來滿足時序要求, 靠調整指令安排順序來實現, 包括加入一些 NOP指令。這樣的不足是
43、要占處理器的全部時間, 很難再插入其它操作。而且還要考慮中斷可能造成的影響。本系統是采用純軟件方法實現時序要求的, 對中斷的處理是采用全屏蔽的方法, 在一次通訊開始就關閉所有的中斷, 結束時將之重新打開。由于一次通訊耗時極短,實驗證明對中斷的響應基本上沒有影響 讀/寫一個字節耗時不到 0.2ms, 讀/寫完成后立即開中斷。而電能脈沖中斷最快也只有每隔250ms有一次, 所以不會造成中斷信號丟失 。 另外一種處理方法是不屏蔽中斷, 但進入中斷后不馬上進行中斷處理, 而是先等待 SCL為低再開始中斷處理, 并在中斷處理過程中始終保持SCL為低即可。 這一方法適于在中斷不宜屏蔽的系統中使用。
44、67;5.3 出現的問題及其解決在程序的調試過程中, 發現所編制的I2C通訊程序工作不正常,具體表現是如果一次傳送大批量數據, 則會有前幾個數據正確, 而后面的讀出錯誤或者讀出幾個字節后死機的可能, 但如果每次只讀寫一個字節則可保證正確。 經過對程序的反復檢查, 發現可能問題出在指令的安排不能滿足 I2C規約對時序的要求。于是, 程序調整了對SDA 和SCL操作的指令的時序, 把在SDA線上輸出一位"0"或"1"的功能由一個子程序完成改變為直接語句輸出, 使得該操作與啟/停信號和ACK信號的時序取得一致,并減少了子程序調用的開銷和可能因此帶來的錯誤。并在
45、寫SCL線和寫SDA線的指令之間加入了一條NOP指令, 以調整時序。重新編譯之后, 問題果然得到解決。 最初的程序還有一個不令人滿意的地方就是通訊速度太慢, 有些地方大量數據傳送時可以看到明顯的滯留, 影響到顯示的效果, 而且, 這還給掉電時通過 I2C通訊保存數據帶來一定的困難。在上面所談到的時序問題解決后, 盡可能減少了通訊子程序中的空等待, 而是調整指令次序以配合定時要求。結果將傳送一個字節所需要的時間從2ms左右減少到 0.2ms, 從而使通訊速度得到了很大提高, 也保證了通訊的質量。第六章 鍵處理 作為智能儀器的單片機系統主要通過鍵盤和外部有聯系, 當然這里所說的鍵盤通常是幾個按鈕組
46、成或一個4×4的小鍵盤。為了完成較為復雜的操作, 常常要定義一系列鍵盤指令來實現各種不同的功能, 這樣就會出現同一鍵在不同狀態下按下具有不同的意義, 要想編制出高質量的鍵盤監控程序就要有一個科學的方法來指導, 這就是所謂鍵分析法。 下面結合這次設計的實踐來給以討論。 §6.1 鍵之功能安排 系統采用了七個按鈕, 分別掛接在P2.0P2.6上,平時為高電平, 按下時為低電平, 定義如下: 鍵名 鍵值對應89C51引腳 ? 01000000BP2.6 00100000BP2.5 00010000BP2.4 00001000BP2.3 00000100BP2.200000010B
47、P2.1 00000001BP2.0 功能說明: 1 編程態 退出編程態。系統總清, 恢復為出廠狀態。 無效。 如已選擇了數據位, 該位值增1模10, 否則, 編程項號增1模21如已選擇了數據位, 該位值減1模10, 否則, 編程項號減1模21 選擇要編程改變的數據位。 如果數據被改變,記憶改變后的數據,同時編程項號增1否則,編程項號增1,但不記憶當前數據。 2 非編程態 進入編程態。無效。 抄表,同時進行需量清零。 進入非循環顯示,顯示項號增1模 50。 進入非循環顯示,顯示項號減1模 50。進入循環顯示, 同時置顯示項號為01H 進入非循環顯示, 同時置顯示項號為01H§6.2
48、鍵盤監控程序設計方法綜述鍵盤監控程序要完成的工作主要有兩部分: 一是獲得鍵碼, 二是分析是哪一鍵, 并根據不同的程序狀態調用相應的處理程序完成鍵的功能。 由于鍵盤監控程序設計是以計算機為基礎的設計的基本組成部分之一, 具有很重要性的意義, 所以已經有很多人對這個問題進行過深入研究, 提出了一些很好的方法。 目前, 設計鍵盤監控程序主要有兩種方法: 直接分析與轉移表法和狀態分析法。 早期多采用直接分析法。 這種方法的缺點是鍵盤分析程序與動作程序混為一體, 不可分割。 程序的編寫。 修改。 閱讀。 移植都比較麻煩。 對一鍵多義鍵盤尤甚。 而美國學者 /.tman 在1977年提出的 "
49、鍵盤分析算法" 克服了直接分析法的不足, 國內從1982年開始使用這種方法, 并稱之為"狀態分析法"。 隨著單片機應用的日益廣泛, 人們又逐漸認識到了這種方法的缺點與不足, 并提出了相應的改進方法, 其中以中國科學院感光化學研究所陶培德提出的 "圖解法" 為優秀的代表。 直接分析與轉移表法由于大家都比較熟悉, 這里就不再贅述。 下面簡要介紹一下鍵碼的獲得和"圖解法"。鍵碼的獲得: 鍵碼的獲得其實也是鍵分析法研究的一個方面, 但又有相對的獨立性, 它是分析實現鍵功能的基礎,所以先單獨給以討論。 鍵碼獲取方法較多不同的方法可以給
50、出不同的鍵碼, 它可以完全由鍵盤硬件電路直接給出編碼鍵盤, 也可以由簡單的鍵盤接口電路配上一定的鍵掃描, 由鍵譯碼程序給出非編碼鍵盤。 智能儀器為充分利用微電腦的軟件資源, 減少硬件開支,一般多采用非編碼鍵盤。非編碼鍵盤又有行掃描法和線翻轉法兩種給出鍵碼的方法, 其中線翻轉法采用中斷技術。 "圖解法" "圖解法"的基本思想是把監控程序看作一個系統, 鍵開關作為該系統的輸入, 動作程序看作系統的輸出。 根據系統理論: 系統的輸出取決于系統當前的狀態和輸入激勵, 并 伴隨當前狀態躍遷到下一個狀態有時下一個狀態與當前狀態相同,構成自身循環。若令PREST PREsent STate表描述當前狀態, 令NEXST NEXt STate 表描述下個狀態簡稱"次態"。 那么監控程序可以描述為: 系統輸出的動作程序取決于輸入鍵開關的鍵碼和系統現態值, 并由現態PREST 躍遷到次態NEXST。 而任一時刻系統的狀
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學化學課程標準試題及答案
- 航空警示球為什么用玻璃鋼材質
- 2025年歷史文化與社會發展試卷及答案
- 2023年全國生物聯賽試題及答案
- 商品加工購銷合同協議
- 戀愛贈予協議合同書模板
- 模板代理協議合同協議
- 員工追償協議書范本
- 和律師簽合同協議
- 商業美陳設計合同協議
- 甲方對監理評價表-副本
- 新疆普通高校招生網上填報志愿草表
- 畜禽生物質沼氣發電項目環境影響報告
- DB12-T 1233-2023 政務信息資源共享政務信息資源目錄編碼規范
- 2023年公路水運交安ABC考試題庫及答案
- 絮凝劑原理綜合講義
- 配電室安全檢查表
- 我國區域發展戰略 【核心知識精講精思】 高一地理下學期 (湘教版2019必修第二冊)
- 2023年美國AHA心肺復蘇指南
- DL-T 2087-2020 火力發電廠熱電聯產供熱技術導則
- GB/T 21334-2017物流園區分類與規劃基本要求
評論
0/150
提交評論