1 前 言
1.1 我國出租車的發展
20世紀20-30年代是我國城市出租汽車行業的大發展時期。20年代初,北京自用及營運汽車有1231輛,出租汽車行達51家.據統計,上海市于2933-1934年間,有出租汽車行達91家,營業站153處,營運汽車達1151輛。20年代末,哈爾濱由于外國僑民劇增,使得出租汽車增多,在500輛。
1934年,河南出現了最早的出租汽車。開封有了首家私人出租車戶,經營5輛小客車。1935年,河南長途汽車營業部購進3輛福特牌小客車,也在市區經營出租業務。當時,因出租車很時髦,用戶多是豪紳富商,他們走官場,講闊氣,不惜高價租用,所以,出租車的營業狀況較好。
抗日戰爭爆發后,國土的淪陷,戰爭的紛擾,出租汽車發展受到沖擊,數量急劇減少。至1942年,北京出租汽車行減少到48家,營運汽車約446輛,以后逐漸萎縮,至1946年,僅剩出租汽車303輛。上海在此期間,出租汽車行僅存30家,至1948年,出租汽車行僅有51家,車數減少到705輛。
中華人民共和國成立初期,出租汽車主要由兩種成分組成。一種為私有制的出租汽車,這種成分由于服務對象發生變化,客流量下降,加上車輛難以更新,營運車輛日趨減少,到1956年前,北京市出租一汽車行僅剩30家。另一種成分為公有制事業單位,主要是為了滿足接待外賓來訪和重要會議需要,由各省市人民政府組建成的汽車公司和汽車隊。50年代末至60年代初,國家旅游主管部門為適應旅游事業發展的需要,先后在各地組建了旅游汽車隊。“文革”時期,乘出租車被稱為“四舊”,受到批判,車輛大量停駛,出租汽車行業處于奄奄一息狀態。當時,北京市僅有出租汽車200多輛。其他城市出租汽車也為數不多。
1978年12月,黨的十一屆三中全會召開以后,國家實行了改革開放政策,城市經濟日益繁榮,對外經濟文化交流日益頻繁,人民生活有了很大的改善和提高,出租汽車不再是北京、上海、天津及廣州、哈爾濱等大城市的專利,全國很多中小城市在1980年以后也出現了出租汽車,且連續出現幾次高速發展浪潮。國家為解決群眾“乘車難”問題,滿足不同層次乘客出行的需要,對出租汽車行實行國營、集體、個人一起上,各行各業均可參與經營出租汽車的政策,為出租汽車行業的發展帶來了契機,80年代后期至90年代,形成了快速發展的態勢。根據市場發展的需要,國家有關部委相繼頒布了出租汽車行業的管理規定,各地政府也根據本地實際制定了不少出租汽車管理辦法,使出租汽車行業逐步走上了規范化、正規化的法制管理軌道。
1.2 現階段出租車計價器的要求
隨著出租車行業的發展,對出租車計費器的要求也越來越高,用戶不僅要求計費器性能穩定,計費準確,有防作弊功能;同時還要求其具有車票資料打印 、IC卡付費、語音報話、和電腦串行通信等功能。通常,設計出租車計費器面臨以下三方面的問題:
(1)不同國家和地區的計費方式存在差異。有些地區有夜間收費及郊區收費等,而有些地區則無夜間收費和郊區收費;即使同一地區,不同車型的出租車,其計費方式也有差別;另一方面,出租車還面臨幾年一次的調價或調整計費方式等問題。因此,所設計的計費器不僅要能滿足不同國家和地區的要求,而且計費方式的調整也應當很方便。
(2)由于個別地區對計費器有特殊要求,有時必須修改軟件;另外,計費器還面臨軟件的升級;因而,所設計的計費器應能很方便地重新編程。
(3)計費器必須要有防作弊功能,能有效防止司機作弊;同時要防止計費器在營運過程中死機。
為此,設計出一款好的計費器,解決了上述問題是非常必要的。該計費器內設置了多達64個選項,幾乎涵蓋了大多數國家和地區的出租車計費方式,因此,使用時無需更改計費器的硬件,而只需更改相應的選項資料,便可適用于不同的國家和地區,且計費資料的傳送可由電腦通過RS-232串口或專用的手持式資料傳輸器來完成,非常方便;由于采用了具有單片機AT58C51,因此,編程時無需將單片機從電路板上取下,就可以直接對單片機進行編程;另外,該設計還采用單、雙信號防作弊技術和看門狗電路,較好地解決了計費器的作弊現象及死機問題。目前,該計費器已在許多大中城市得到了廣泛的應用。
2 單片機89C51的簡介
2.1 主芯片89C51的硬件資源
2.1.1 單片機的概念
單片機(microcontroller,又稱微控制器)是在一塊硅片上集成了各種部件的微型計算機。這些部件包括中央處理器CPU、數據存儲器RAM、程序存儲器ROM、定時器/計數器和多種I/O接口電路。圖4-1是80C51單片機的基本結構圖
1.001.jpg (34.32 KB, 下載次數: 134)
下載附件
2017-6-14 17:25 上傳
a. 89C51單片機的結構特點有以下幾點:
- 8位CPU;
- 片內振蕩器及時鐘電路;
- 32根I/O線;
- 外部存儲器ROM和RAM,尋址范圍各64KB;
- 兩個16位的定時器/計數器;
- 5個中斷源,2個中斷優先級
- 全雙工串行口
- 布爾處理器
b. 定時器/計數器
89C51內部有兩個16位可編程定時器/計數器,記為T0和T1。16位是指它們都是由16個觸發器構成,故最大計數模值為2-1。可編程是指他們的工作方式由指令來設定,或者當計數器來用,或者當定時器來用,并且計數(定時)的范圍也可以由指令來設置。這種控制功能是通過定時器方式控制寄存器TMOD來完成的.
如果需要,定時器在計到規定的定時值時可以向CPU發出中斷申請,從而完成某種定時的控制功能。在計數狀態下同樣也可以申請中斷。定時器控制寄存器TCON用來負責定時器的啟動、停止以及中斷管理
在定時工作時,時鐘由單片機內部提供,即系統時鐘經過12分頻后作為定時器的時鐘。技術工作時,時鐘脈沖由TO和T1輸入。
c. 中斷系統
89C51的中斷系統允許接受五個獨立的中斷源,即兩個外部中斷申請,兩個定時器/計數器中斷以及一個串行口中斷。
外部中斷申請通過INTO和INT1(即P3.2和P3.3)輸入,輸入方式可以是電平觸發(低電平有效),也可以是邊沿觸發(下降沿有效)。兩個定時器中斷請求是當定時器溢出時向CPU提出的,即當定時器由狀態1轉為全零時提出的。第五個中斷請求是由串行口發出的,串行口每發送完一個數據或接收完一個數據,就可提出一次中斷請求。
2.1.2 89C51的芯片引腳圖
VCC:供電電壓。
GND:接地。
P0口:P0口為一個8位漏極開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
1.002.jpg (21.55 KB, 下載次數: 133)
下載附件
2017-6-14 17:25 上傳
P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。因此作為輸入時,P2口的管腳被外部拉低,將輸出電流,這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(定時器/計數器0外部輸入)
P3.5 T1(定時器/計數器1外部輸入)
P3.6 /WR(外部數據存儲器寫選通)
P3.7 /RD(外部數據存儲器讀選通)
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
2.1.3 使用I/O口的注意事項
(1)P1,P2,P3口的輸出緩沖器可驅動4個LSTTL電路。對于HCMOS芯片單片機的I/O口,在正常情況下,可任意由TTL或NMOS電路驅動。HMOS及CMOS性的單片機I/O口有集電極開路或漏極開路的輸出來驅動時,不必外加上拉電阻
(2)對于74LS系列,CD4000系列以及一些大規模集成電路芯片(如8155,8253,8279等),都可以和MCS-51系列單片機直接接口。具體使用時,可以查閱有關器件手冊或參考典型電路
(3)對一些線性組件,特別是應用鍵盤、碼盤、LED顯示器等輸入/輸出設備時,應當盡量增加驅動部分的容量,否則,單片機將提供不出足夠的驅動電流供給負載使用
2.2 89C51中斷系統
所謂中斷,是指當計算機執行正常程序時,系統中出現某些急需處理的異常情況和特殊情求,CPU暫停執行現行程序,轉去對隨機發生地更緊迫事件進行處理;處理完畢后,CPU自動返回原來的程序繼續執行。
中斷允許軟件設計不需要關心系統其他部分定時要求,算術程序不需要考慮隔幾個指令檢查I/O設備是否需要服務。相反,算術程序編寫時好像有無限的時間作算術運算而無其他工作在進行。若其它事件需要服務時,則通過中斷告訴系統。
89C51單片機有5個中斷源,有兩個中斷優先級,每個中斷源的優先級可以編程控制。中斷允許受到CPU開中斷和中斷源開中斷的兩級控制。
2.2.1 中斷源
中斷源是指任何引起計算機中斷的事件,一般一臺機器允許有許多個中斷源。89C51系列單片機至少有5個中斷源。增加很少的硬件就可把各種硬件中斷源“線或”成為一個外部中斷輸入,然后再順序檢索一起中斷的特定源。
89C51單片機的5個中斷源是:
① 外部中斷請求0,由(P3.2)輸入;
② 外部中斷請求1,由(P3.3)輸入;
③ 片內定時器/計數器0益處中斷請求;
④ 片內定時器/計數器1溢出中斷請求;
為了了解每個中斷源是否產生了中斷請求,中斷系統應設置許多個中斷請
求觸發器(標志位)實現記憶。這些中斷源請求標志位分別有特殊功能寄存器TCON和SCON的相應位鎖存
定時器/計數器控制寄存器TCON,它是一個八位的寄存器,各位如表4.1所示:
表4.1 定時器/計數器控制寄存器TCON
IT0,IT1:外部中斷0、1觸發方式選擇位,由軟件設置。1是下降沿觸發,0是電平觸發。
IE0,IE1:外部終端0、1請求標志位。
TF0,TF1:定時器/計數器0、1溢出中斷請求標志。
2.2.2 中斷的控制
中斷的控制主要實現中斷的開關管理和中斷優先級的管理。這個管理主要通過對特殊功能寄存器IE和IP的編程實現。
(1)中斷允許寄存器IE
表4.2 中斷允許寄存器IE
EX0,EX1:外部終端0,1的中斷允許位。1是中斷開,0是中斷關
ET0,ET1:定時器/計數器0、1溢出中斷允許位。1是開中斷,0是關中斷
ES:串行口中斷允許位。1是中斷開,0是中斷關
ET2:定時器/計數器2溢出中斷位
EA:CPU開/關中斷控制位。1是開中斷,0是關中斷
(2)中斷優先級寄存器IP
表4.3 中斷優先級寄存器IP
若系統中多個中斷源同時請求中斷,則CPU按中斷源的優先級別,由高到低分別響應。
89C51單片機有兩個中斷優先級:高優先級和低優先級。每個中斷源都可以編程為高優先級。這可以實現兩級中斷嵌套。嵌套的原則:一個正在執行的中斷服務程序可以被高級的中斷請求中斷,而不能被同級或較低級的中斷請求中斷。兩級中斷通過使用IP寄存器設置,相應的位置1,則優先級高,0則優先級低。
PX0、PX1:終端0、1中斷優先級控制;
PT0、PT1:定時器/計數器0、1中斷優先級控制。
PS:串行口中斷優先級控制。
89C51復位時,IP被清零,5個中斷源都在同一個優先級。這時若其中幾個中斷源同時產生中斷請求,則CPU按照片內硬件優先級鏈路的順序相應中斷,硬件優先級由高到低的順序是:外部終端0,定時器/計數器0,外部中斷1,定時器/計數器1串行口中斷。
2.2.3 中斷響應
89C51的CPU在每個機器周期采樣中斷源的中斷請求標志位,如果沒有上述阻止條件,則將在下一個機器周期響應被激活的最高級中斷請求。阻止條件如下:
- CPU正在處理同級或更高級的中斷;
- 現行機器周期不是所執行指令的最后一個機器周期;
- 正在執行的是RETI或者是訪問IE或IP的指令;
CPU在中斷響應之后完成如下操作:
- 硬件清除相應的中斷標志位;
- 執行一條硬件子程序,保護斷點,并轉向中斷服務程序入口。
- 結束中斷時執行RETI指令,恢復斷點,返回主程序。
89C51的CPU在相應中斷請求時,由硬件電路自動形成轉向與該中斷源對應的中斷的服務程序入口地址。這種方法為硬件向量中斷法。
各中斷源的中斷服務程序入口地址如下:
表4.4 中斷源的中斷服務程序入口地址
各中斷服務程序入口地址僅隔8個字節,編譯器在這些地址放入無條件轉移指令,跳到服務程序的實際地址。
向量中斷包括把先前的程序計數指針推入堆棧,中斷服務程序很像其他子程序。當向量中斷發生時,硬件禁止所有中斷。此時表明外部中斷或定時器溢出的標志位由硬件清除。中斷服務程序的不同分支取決于中斷源。在重新允許全局CPU中斷EA之前,必須仔細清除各種標志。標志會引起立即地重復中斷。89C51對終端實際上有特殊的返回指令----RETI。不是RET。RETI重新允許系統識別其他中斷。因而,沒必要在正常使用中斷時復位EA,只要在程序初始化時開中斷一次就可以了。
2.3 單片機定時器/計數器的使用
89C51系列單片機至少有兩個16位內部定時器/計數器。8952有三個定時器/計數器,其中連個基本定時器/計數器是定時器/計數器0和定時器/計數器1。他們既可以編程為定時器使用,也可以編程為計數器使用。若是計數內部晶振驅動時鐘,則它是定時器;若是計數89C51的輸入引腳的脈沖信號,則它是計數器。
89C51的T/C時加一計數的。定時器實際上也是工作在技術方式下的,只不過對固定頻率的脈沖計數;由于脈沖周期固定,由計數值可以計算出時間,有定時功能。
當T/C工作在定時器時,對振蕩源12分頻的脈沖計數,即每個機器周期計數值加一,頻率加=fosc/12。晶振為6MHz,計數頻率=500KHz,每2uS計數加一。
當T/C工作在計數器時,計數脈沖來自外部脈沖輸入引腳T0或T1。當T0或T1腳上負跳變需2個機器周期,即24個振蕩周期。所以T0或T1腳輸入的計數外部脈沖的最高頻率為fosc/12。當晶振為12MHz時,最高技術頻率為500KHz,高于此頻率將計數出錯。
2.3.1 與T/C有關的特殊功能寄存器
(1)計數寄存器TH和TL
T/C是16位的,計數寄存器有TH高8位TL低8位構成。在特殊功能寄存器中,對應T/C0為TH0和TL0;對應T/C1為TH1和TL1。定時器/計數器的初始值通過TH1/TL1和TH0/TL0設置
(2)定時器/計數器控制寄存器TCON
表4.5 定時器/計數器控制寄存器TCON
TR0、TR1:定時器/計數器0、1啟動控制位。1是啟動,0是停止
TCON復位后清零,T/C需要受到軟件控制才能啟動計數;當計數計滿時,產生向高位的進位TF,即溢出中斷請求標志
T/C的方式控制寄存器TMOD
表4.6 T/C的方式控制寄存器TMOD
C/T:計數器或定時器選擇位。1位計數器,0位定時器
GATE:門控信號。1時T/C的啟動控制受到雙重控制,即要求TR0/TR1和INT0/INT1同時為高;0時T/C的啟動僅受TR0/TR1控制。
表4.7 M1和M0工作方式選擇位
| | |
| | 為13位定時器/計數器,TL存低5位,TH存高8位 |
| | |
| | |
| | |
2.3.2 定時器/計數器的初始化
(1)初始化步驟
在使用89C51的定時器/計數器前,應對它進行編程初始化,主要是對TCON和TMOD編程,還需要計算和裝載T/C的計數初值。一般完成以下幾個步驟:
- 確定T/C的工作方式----編程TMOD寄存器。
- 計算T/C中的計數初值,并裝載到TH和TL。
- T/C在中斷方式工作時,須開CPU中斷和源中斷----編程IE寄存器。
- 啟動定時器/計數器----編程TCON中TR1和TR0位
(2)計數初值的計算
在定時器方式下,T/C是對機器周期脈沖計數的,如果fosc=6MHz,一個機器周期為2us,則
方式0 13位定時器最大時間間隔=(2-1)×2us=16.384ms;
方式1 16位定時器最大時間間隔=(2-1)×2us=131.072ms;
方式2 8 位定時器最大時間間隔=(2-1)×2us=512us
若使T/C工作在定時器方式1,要求定時1ms,求計數初值。如設計數初值為x,則有(2-1)×2us=1000us
x=2-500
因此,TH,TL可置65536-500。
3 計價器系統設計
3.1 硬件設計
3.1.1 整體硬件電路圖
1.003.jpg (88.01 KB, 下載次數: 167)
下載附件
2017-6-14 17:25 上傳
由上圖我們可以清楚地看到,本電路控制核心是AT89C51芯片。該方案我們采用動態顯示的方法。動態顯示的優點是,它占用CPU的時間少,每次只把一個數據送到外部接口,雖然我們仿真看到的是全部數碼管都亮著,那是因為動態顯示的時間比較快,超過我們人眼的辨別能力。若我們在仿真的時候暫停一下,就可以清楚地看到,時間單元和價格單元分別只顯示一位。靜態顯示,是每一個數碼管不論在什么時候都點亮,占用CPU的時間很多。按鍵主要控制系統的初始化、開始工作、數據鎖存三項工作。剛開始上電,則所有的數碼管同時顯示全0狀態,當第一次按下開關,價格從起步價005.0元開始計費,等待是否超過三公里以及計算,時間單元則從00.00.00開始計時,一秒一秒往上加。P0口作為數據總線口,分別把數據輸送到4個74LS273地址鎖存器中,而鎖存器的工作需要等待脈沖的到來。脈沖通過寫地址有些端口p3.6和端口p2.0-p2.3經過或非門來產生。只有當把數據送到外部接口時,p3.6口才為低電平,p2.0-p2.3用來控制到底是把數據送往哪一個鎖存器。
算法公式是:費用=起步價+(路程-3)×1.3
路程=速度×時間 (速度恒定,60Km/h,也就是1Km/min)
若路程小于等于3,則收起步價5元,否則按費用公式算。
由于速度恒定,所以計算的核心是時間,只要判斷時間超出2分鐘,則費用公式就開始計算,每多出一公里,費用就加上1.5元,一分鐘一公里來計算,因此本設計比較簡單。時間單元由單片機的定時器/計數器來計算,延時1ms時間的初值由程序來設定。
3.1.2 74LS273和74LS02簡介
1.004.jpg (13.87 KB, 下載次數: 131)
下載附件
2017-6-14 17:25 上傳
1.005.jpg (2.57 KB, 下載次數: 120)
下載附件
2017-6-14 17:25 上傳
引腳功能:74LS273是8位數據/地址鎖存器。74LS273是一種帶清除功能的8D觸發器,1D~8D為數據輸入端,1Q~8Q為數據輸出端,正脈沖觸發,低電平清除,常用作8位地址鎖存器。
1.006.jpg (16.09 KB, 下載次數: 142)
下載附件
2017-6-14 17:25 上傳
引腳功能:74LS02是四二輸入或非門。該芯片有四個或非門公選擇,如1A或1B后,經過非門再輸出,只有當輸入的兩個變量同時為0時,輸出才為1。具有緩沖倒相功能。
3.2 軟件設計
3.2.1 模塊介紹
該計費器系統的軟件設計分為一下幾個模塊:
(1)主程序模塊
在主程序模塊中,需要完成對個接口芯片的初始化、出租車起步價和單價、中斷向量的設計以及開中斷、循環等待等工作。另外,在主程序模塊中還需要設置啟動/清除標志寄存器、里程寄存器和價格寄存器,并對它們進行初始化。然后,主程序將根據各標志寄存器的內容,分別完成啟動、清除、計程和計價等不同的操作。流程圖如3-4所示。
當按下輕觸開關時,開始對系統初始化,價格和時間都顯示0、0,再次按下開關,時間單元開始計時,并計算時間是否超過2分鐘,超過2分鐘,則從第3分鐘開始計費。價格單元從起步價5.0元開始計費,每多一分鐘,價格單元多加1.5元。
(2)顯示子程序模塊
由于顯示是由顯示時間子程序DIS1和顯示價格子程序DIS組成的,時間由小時、分、秒三個單元組成,共六個數碼管。價格由元和角兩個單元組成,最大可以顯示999.9元。
3.2.2 程序流程圖
1.007.jpg (71.64 KB, 下載次數: 162)
下載附件
2017-6-14 17:25 上傳
3.2.3 匯編程序
- ORG 0000H ;初始化段地址
- LJMP MAIN ;長跳轉到主函數MAIN處
- ORG 000BH ;TT0開始地址
- LJMP TT0 ;長跳轉到TT0 處
- ORG 0030H ;主函數開始地址,避開00—30敏感段
- MAIN: MOV SP,#40H ;設堆棧底指針,下一個數據將放在41H單元
- MOV 70H,#60 ;價格單元的起步價
- MOV 71H,#00 ;價格單元的十位和百位
- MOV 72H,#00 ;秒單元清零
- MOV 74H,#00 ;時單元清零
- MOV 75H,#00 ;75H單元清零備用
- CLR 00H
- CLR 01H ;將00H,01H單元清零
- MOV 6BH,#0AH ;將0AH(既十進制10)放入6B單元
- MOV R1,#76H ;把76H放到R1中
- KKK: MOV @R1,#00H ;將76H單元的內容清零
- INC R1
- DJNZ 6BH,KKK ;76H—7FH單元全部清零,備用
- LCALL DIS ;調用價格顯示子程序
- LCALL DIS1 ;調用時間顯示子程序
- MOV TMOD,#11H ;定時器/計數器工作方式設置
- MOV TH0,#3CH
- MOV TL0,#0B0H ;這句和上一句設置延時50ms
- MOV 6EH,#20 ;將6EH單元設置20,達到1s的延時
- G2: LCALL DIS ;長調用價格顯示子程序
- LCALL DIS1 ;長調用時間顯示子程序
- JB P1.0,G2 ;開關沒按下,等待按下,顯示初始狀態,全部為零
- LCALL TIME1 ;調用TIME1延時子程序
- JB P1.0,G2 ; 開關沒按下,跳到G2,否則轉到下一步
- G1: LCALL DIS
- LCALL DIS1
- JNB P1.0,G1 ;開關按下,繼續顯示價格和時間,并轉到中斷
- SETB EA ;開中斷
- SETB ET0 ;定時器0中斷允許,向CPU申請中斷
- SETB TR0 ;定時器0工作允許
- SETB 01H ;01H單元置位
- LLL: LCALL CHAI ;調用現場保護子程序
- LCALL DIS
- LCALL JISUAN ;調用計算子程序
- LCALL DIS1
- JB P1.0,G3 ;開關沒按下,則返回
- LCALL TIME1
- JB P1.0,G3
- CPL 01H ;01H單元此時為零
- JNB 01H,G5;01H ;單元內容為0,跳到G5
- SETB ET0 ;定時器0中斷允許,向CPU申請中斷
- G6: LCALL DIS
- LCALL DIS1
- JNB P1.0,G6 ;開關按下,顯示所走的時間及費用
- LJMP MAIN ;重新等待下一個工作狀態
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
結束語
經過這一階段的學習,總于完成了設計。設計的每一步對我都是新的嘗試,對自己的設計總有一種期待。這段時間,學到了很多知識也有很多感受。通過這次設計我開始獨立學習和探索。查看相關的資料和書籍,使大腦由模糊到清晰,使自己的設計逐步完善起來,每一次改進都使我受益頗豐。
雖然我的設計不是很成熟,功能也很單一,付出了自己的努力,這是我引以自豪的。我相信只有經歷過的人才會明白真滋味。
做學問,是真正自己學習和研究的過程,希望這次的經歷能讓我在工作學習中激勵我繼續前進。
參考文獻[1]:周立功、夏宇聞.單片機與CPLD綜合應用技術[M].北京:北京航空航天大學出版,2006
[2]:丁元杰.單片微機原理及應用[M].北京:機械工業出版社,2005
[3]:靳達編.單片機應用系統開發實例導航[M].北京:人民郵電出版社,2007
[4]:李光飛.單片機課程設計實例指導[M].北京:北京航空航天大學出版社,2006
[5]:胡宴如.高頻電子線路[M].北京:高等教育出版社,2006
[6]:白駒珩、雷曉平.單片計算機及其應用[M].成都:電子科技大學出版社,2005
[7]:李廣弟.單片機基礎[M].北京:北京航空航天大學出版社,2006
[8]:沈美明、溫冬嬋.IBM匯編語言程序設計[M].北京:清華大學出版社,2004
[9]:彭傳正、林春景.凌陽單片機原理與實踐[M].北京:北京航空航天大學出版社,2006
[10]:李榮正、陳學軍.PIC單片機實踐教程[M].北京:北京航空航天大學出版社,2006
[11]:閻石.數字電子技術基礎[M].北京:高等教育出版社,2007