找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 17428|回復(fù): 4
收起左側(cè)

基于單片機(jī)的出租車計(jì)價(jià)器系統(tǒng)課程設(shè)計(jì)報(bào)告

[復(fù)制鏈接]
ID:211071 發(fā)表于 2017-6-14 10:45 | 顯示全部樓層 |閱讀模式
四川師范大學(xué)成都學(xué)院電子工程系課程設(shè)計(jì)報(bào)告

要:隨著出租車行業(yè)的發(fā)展,對(duì)出租車計(jì)費(fèi)器的要求也越來越高。二十世紀(jì)后半期,隨著集成電路和計(jì)算機(jī)技術(shù)的飛速發(fā)展,單片機(jī)技術(shù)也得到了飛速發(fā)展,基于單片機(jī)的出租車計(jì)費(fèi)器不僅可以解決電子系統(tǒng)小型化、低功耗、高可靠性等問題,而且其開發(fā)周期短、開發(fā)軟件投入少、芯片價(jià)格不斷降低,特別是對(duì)小批量、多品種的產(chǎn)品需求,單片機(jī)具有體積小、功能強(qiáng)可靠性高、價(jià)格低廉等一系列優(yōu)點(diǎn),不僅已成為工業(yè)測(cè)控領(lǐng)域普遍采用的智能化控制工具,而且已滲入到人們工作和和生活的各個(gè)角落,有力地推動(dòng)了各行業(yè)的技術(shù)改造和產(chǎn)品的更新?lián)Q代,應(yīng)用前景廣闊。(使用單片機(jī)的外圍電路比較簡(jiǎn)單),在時(shí)間計(jì)數(shù)和速度的計(jì)算上便于擴(kuò)展功能很,系統(tǒng)能夠?qū)崿F(xiàn)升級(jí)。很多數(shù)值可以預(yù)先寫到芯片中。本設(shè)計(jì)假設(shè)速度恒定為60Km/h,即1Km/min。

本設(shè)計(jì)主要了解應(yīng)用單片機(jī)的定時(shí)器/計(jì)數(shù)器,以及中斷。這是一個(gè)比較小的系統(tǒng),故采用匯編語言來編輯。匯編語言是一種編譯型程序設(shè)計(jì)語言,它具有編譯速度快,占用系統(tǒng)空間小,具有一定的助記可讀性等特點(diǎn)。

本系統(tǒng)假設(shè)速度恒定60Km/h(1Km/min),單價(jià)一定1.3元/Km,起步價(jià)5.0元,超過三公里開始計(jì)費(fèi),每公里加1.3元。


目錄
1 前言
1.1 我國(guó)出租車的發(fā)展
1.2 現(xiàn)階段出租車計(jì)價(jià)器的要求
2 單片機(jī)89C51的簡(jiǎn)介              4
2.1 主芯片89C51的硬件資源              4
2.1.1 單片機(jī)的概念              4
2.1.2 89C51的芯片引腳圖            
2.1.3 使用I/O口的注意事項(xiàng)
2.2 89C51中斷系統(tǒng)
2.2.1 中斷源
2.2.2 中斷的控制            
2.2.3 中斷響應(yīng)
2.3 單片機(jī)定時(shí)器/計(jì)數(shù)器的使用
2.3.1 與T/C有關(guān)的特殊功能寄存器
2.3.2 定時(shí)器/計(jì)數(shù)器的初始化
3 計(jì)價(jià)器系統(tǒng)設(shè)計(jì)            
3.1 硬件設(shè)計(jì)
3.1.1 整體硬件電路圖            
3.1.2 74LS273和74LS02簡(jiǎn)介
3.2 軟件設(shè)計(jì)
3.2.1 模塊介紹            
3.2.2 程序流程圖
結(jié)束語
參考文獻(xiàn)


1 前   言
1.1 我國(guó)出租車的發(fā)展
20世紀(jì)20-30年代是我國(guó)城市出租汽車行業(yè)的大發(fā)展時(shí)期。20年代初,北京自用及營(yíng)運(yùn)汽車有1231輛,出租汽車行達(dá)51家.據(jù)統(tǒng)計(jì),上海市于2933-1934年間,有出租汽車行達(dá)91家,營(yíng)業(yè)站153處,營(yíng)運(yùn)汽車達(dá)1151輛。20年代末,哈爾濱由于外國(guó)僑民劇增,使得出租汽車增多,在500輛。
1934年,河南出現(xiàn)了最早的出租汽車。開封有了首家私人出租車戶,經(jīng)營(yíng)5輛小客車。1935年,河南長(zhǎng)途汽車營(yíng)業(yè)部購(gòu)進(jìn)3輛福特牌小客車,也在市區(qū)經(jīng)營(yíng)出租業(yè)務(wù)。當(dāng)時(shí),因出租車很時(shí)髦,用戶多是豪紳富商,他們走官場(chǎng),講闊氣,不惜高價(jià)租用,所以,出租車的營(yíng)業(yè)狀況較好。
抗日戰(zhàn)爭(zhēng)爆發(fā)后,國(guó)土的淪陷,戰(zhàn)爭(zhēng)的紛擾,出租汽車發(fā)展受到?jīng)_擊,數(shù)量急劇減少。至1942年,北京出租汽車行減少到48家,營(yíng)運(yùn)汽車約446輛,以后逐漸萎縮,至1946年,僅剩出租汽車303輛。上海在此期間,出租汽車行僅存30家,至1948年,出租汽車行僅有51家,車數(shù)減少到705輛。
中華人民共和國(guó)成立初期,出租汽車主要由兩種成分組成。一種為私有制的出租汽車,這種成分由于服務(wù)對(duì)象發(fā)生變化,客流量下降,加上車輛難以更新,營(yíng)運(yùn)車輛日趨減少,到1956年前,北京市出租一汽車行僅剩30家。另一種成分為公有制事業(yè)單位,主要是為了滿足接待外賓來訪和重要會(huì)議需要,由各省市人民政府組建成的汽車公司和汽車隊(duì)。50年代末至60年代初,國(guó)家旅游主管部門為適應(yīng)旅游事業(yè)發(fā)展的需要,先后在各地組建了旅游汽車隊(duì)!拔母铩睍r(shí)期,乘出租車被稱為“四舊”,受到批判,車輛大量停駛,出租汽車行業(yè)處于奄奄一息狀態(tài)。當(dāng)時(shí),北京市僅有出租汽車200多輛。其他城市出租汽車也為數(shù)不多。
1978年12月,黨的十一屆三中全會(huì)召開以后,國(guó)家實(shí)行了改革開放政策,城市經(jīng)濟(jì)日益繁榮,對(duì)外經(jīng)濟(jì)文化交流日益頻繁,人民生活有了很大的改善和提高,出租汽車不再是北京、上海、天津及廣州、哈爾濱等大城市的專利,全國(guó)很多中小城市在1980年以后也出現(xiàn)了出租汽車,且連續(xù)出現(xiàn)幾次高速發(fā)展浪潮。國(guó)家為解決群眾“乘車難”問題,滿足不同層次乘客出行的需要,對(duì)出租汽車行實(shí)行國(guó)營(yíng)、集體、個(gè)人一起上,各行各業(yè)均可參與經(jīng)營(yíng)出租汽車的政策,為出租汽車行業(yè)的發(fā)展帶來了契機(jī),80年代后期至90年代,形成了快速發(fā)展的態(tài)勢(shì)。根據(jù)市場(chǎng)發(fā)展的需要,國(guó)家有關(guān)部委相繼頒布了出租汽車行業(yè)的管理規(guī)定,各地政府也根據(jù)本地實(shí)際制定了不少出租汽車管理辦法,使出租汽車行業(yè)逐步走上了規(guī)范化、正規(guī)化的法制管理軌道。



1.2 現(xiàn)階段出租車計(jì)價(jià)器的要求
隨著出租車行業(yè)的發(fā)展,對(duì)出租車計(jì)費(fèi)器的要求也越來越高,用戶不僅要求計(jì)費(fèi)器性能穩(wěn)定,計(jì)費(fèi)準(zhǔn)確,有防作弊功能;同時(shí)還要求其具有車票資料打印 、IC卡付費(fèi)、語音報(bào)話、和電腦串行通信等功能。通常,設(shè)計(jì)出租車計(jì)費(fèi)器面臨以下三方面的問題:
(1)不同國(guó)家和地區(qū)的計(jì)費(fèi)方式存在差異。有些地區(qū)有夜間收費(fèi)及郊區(qū)收費(fèi)等,而有些地區(qū)則無夜間收費(fèi)和郊區(qū)收費(fèi);即使同一地區(qū),不同車型的出租車,其計(jì)費(fèi)方式也有差別;另一方面,出租車還面臨幾年一次的調(diào)價(jià)或調(diào)整計(jì)費(fèi)方式等問題。因此,所設(shè)計(jì)的計(jì)費(fèi)器不僅要能滿足不同國(guó)家和地區(qū)的要求,而且計(jì)費(fèi)方式的調(diào)整也應(yīng)當(dāng)很方便。
(2)由于個(gè)別地區(qū)對(duì)計(jì)費(fèi)器有特殊要求,有時(shí)必須修改軟件;另外,計(jì)費(fèi)器還面臨軟件的升級(jí);因而,所設(shè)計(jì)的計(jì)費(fèi)器應(yīng)能很方便地重新編程。
(3)計(jì)費(fèi)器必須要有防作弊功能,能有效防止司機(jī)作弊;同時(shí)要防止計(jì)費(fèi)器在營(yíng)運(yùn)過程中死機(jī)。
為此,設(shè)計(jì)出一款好的計(jì)費(fèi)器,解決了上述問題是非常必要的。該計(jì)費(fèi)器內(nèi)設(shè)置了多達(dá)64個(gè)選項(xiàng),幾乎涵蓋了大多數(shù)國(guó)家和地區(qū)的出租車計(jì)費(fèi)方式,因此,使用時(shí)無需更改計(jì)費(fèi)器的硬件,而只需更改相應(yīng)的選項(xiàng)資料,便可適用于不同的國(guó)家和地區(qū),且計(jì)費(fèi)資料的傳送可由電腦通過RS-232串口或?qū)S玫氖殖质劫Y料傳輸器來完成,非常方便;由于采用了具有單片機(jī)AT58C51,因此,編程時(shí)無需將單片機(jī)從電路板上取下,就可以直接對(duì)單片機(jī)進(jìn)行編程;另外,該設(shè)計(jì)還采用單、雙信號(hào)防作弊技術(shù)和看門狗電路,較好地解決了計(jì)費(fèi)器的作弊現(xiàn)象及死機(jī)問題。目前,該計(jì)費(fèi)器已在許多大中城市得到了廣泛的應(yīng)用。

2 單片機(jī)89C51的簡(jiǎn)介
2.1 主芯片89C51的硬件資源
2.1.1 單片機(jī)的概念
單片機(jī)(microcontroller,又稱微控制器)是在一塊硅片上集成了各種部件的微型計(jì)算機(jī)。這些部件包括中央處理器CPU、數(shù)據(jù)存儲(chǔ)器RAM、程序存儲(chǔ)器ROM、定時(shí)器/計(jì)數(shù)器和多種I/O接口電路。圖4-1是80C51單片機(jī)的基本結(jié)構(gòu)圖
1.001.jpg
a. 89C51單片機(jī)的結(jié)構(gòu)特點(diǎn)有以下幾點(diǎn):




      •                    8位CPU;
      •                    片內(nèi)振蕩器及時(shí)鐘電路;
      •                    32根I/O線;
      •                    外部存儲(chǔ)器ROM和RAM,尋址范圍各64KB;
      •                    兩個(gè)16位的定時(shí)器/計(jì)數(shù)器;
      •                    5個(gè)中斷源,2個(gè)中斷優(yōu)先級(jí)
      •                    全雙工串行口
      •                    布爾處理器
b. 定時(shí)器/計(jì)數(shù)器
89C51內(nèi)部有兩個(gè)16位可編程定時(shí)器/計(jì)數(shù)器,記為T0和T1。16位是指它們都是由16個(gè)觸發(fā)器構(gòu)成,故最大計(jì)數(shù)模值為2-1?删幊淌侵杆麄兊墓ぷ鞣绞接芍噶顏碓O(shè)定,或者當(dāng)計(jì)數(shù)器來用,或者當(dāng)定時(shí)器來用,并且計(jì)數(shù)(定時(shí))的范圍也可以由指令來設(shè)置。這種控制功能是通過定時(shí)器方式控制寄存器TMOD來完成的.
如果需要,定時(shí)器在計(jì)到規(guī)定的定時(shí)值時(shí)可以向CPU發(fā)出中斷申請(qǐng),從而完成某種定時(shí)的控制功能。在計(jì)數(shù)狀態(tài)下同樣也可以申請(qǐng)中斷。定時(shí)器控制寄存器TCON用來負(fù)責(zé)定時(shí)器的啟動(dòng)、停止以及中斷管理
在定時(shí)工作時(shí),時(shí)鐘由單片機(jī)內(nèi)部提供,即系統(tǒng)時(shí)鐘經(jīng)過12分頻后作為定時(shí)器的時(shí)鐘。技術(shù)工作時(shí),時(shí)鐘脈沖由TO和T1輸入。
c. 中斷系統(tǒng)
89C51的中斷系統(tǒng)允許接受五個(gè)獨(dú)立的中斷源,即兩個(gè)外部中斷申請(qǐng),兩個(gè)定時(shí)器/計(jì)數(shù)器中斷以及一個(gè)串行口中斷。
外部中斷申請(qǐng)通過INTO和INT1(即P3.2和P3.3)輸入,輸入方式可以是電平觸發(fā)(低電平有效),也可以是邊沿觸發(fā)(下降沿有效)。兩個(gè)定時(shí)器中斷請(qǐng)求是當(dāng)定時(shí)器溢出時(shí)向CPU提出的,即當(dāng)定時(shí)器由狀態(tài)1轉(zhuǎn)為全零時(shí)提出的。第五個(gè)中斷請(qǐng)求是由串行口發(fā)出的,串行口每發(fā)送完一個(gè)數(shù)據(jù)或接收完一個(gè)數(shù)據(jù),就可提出一次中斷請(qǐng)求。
2.1.2 89C51的芯片引腳圖
VCC:供電電壓。
GND:接地。
P0口:P0口為一個(gè)8位漏極開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。
1.002.jpg


P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。
P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流,這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。
P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(定時(shí)器/計(jì)數(shù)器0外部輸入)
P3.5 T1(定時(shí)器/計(jì)數(shù)器1外部輸入)
P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)
P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)
P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。
ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。
EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
2.1.3 使用I/O口的注意事項(xiàng)
(1)P1,P2,P3口的輸出緩沖器可驅(qū)動(dòng)4個(gè)LSTTL電路。對(duì)于HCMOS芯片單片機(jī)的I/O口,在正常情況下,可任意由TTL或NMOS電路驅(qū)動(dòng)。HMOS及CMOS性的單片機(jī)I/O口有集電極開路或漏極開路的輸出來驅(qū)動(dòng)時(shí),不必外加上拉電阻
(2)對(duì)于74LS系列,CD4000系列以及一些大規(guī)模集成電路芯片(如8155,8253,8279等),都可以和MCS-51系列單片機(jī)直接接口。具體使用時(shí),可以查閱有關(guān)器件手冊(cè)或參考典型電路
(3)對(duì)一些線性組件,特別是應(yīng)用鍵盤、碼盤、LED顯示器等輸入/輸出設(shè)備時(shí),應(yīng)當(dāng)盡量增加驅(qū)動(dòng)部分的容量,否則,單片機(jī)將提供不出足夠的驅(qū)動(dòng)電流供給負(fù)載使用
2.2 89C51中斷系統(tǒng)
所謂中斷,是指當(dāng)計(jì)算機(jī)執(zhí)行正常程序時(shí),系統(tǒng)中出現(xiàn)某些急需處理的異常情況和特殊情求,CPU暫停執(zhí)行現(xiàn)行程序,轉(zhuǎn)去對(duì)隨機(jī)發(fā)生地更緊迫事件進(jìn)行處理;處理完畢后,CPU自動(dòng)返回原來的程序繼續(xù)執(zhí)行。
中斷允許軟件設(shè)計(jì)不需要關(guān)心系統(tǒng)其他部分定時(shí)要求,算術(shù)程序不需要考慮隔幾個(gè)指令檢查I/O設(shè)備是否需要服務(wù)。相反,算術(shù)程序編寫時(shí)好像有無限的時(shí)間作算術(shù)運(yùn)算而無其他工作在進(jìn)行。若其它事件需要服務(wù)時(shí),則通過中斷告訴系統(tǒng)。
89C51單片機(jī)有5個(gè)中斷源,有兩個(gè)中斷優(yōu)先級(jí),每個(gè)中斷源的優(yōu)先級(jí)可以編程控制。中斷允許受到CPU開中斷和中斷源開中斷的兩級(jí)控制。
2.2.1 中斷源
中斷源是指任何引起計(jì)算機(jī)中斷的事件,一般一臺(tái)機(jī)器允許有許多個(gè)中斷源。89C51系列單片機(jī)至少有5個(gè)中斷源。增加很少的硬件就可把各種硬件中斷源“線或”成為一個(gè)外部中斷輸入,然后再順序檢索一起中斷的特定源。
89C51單片機(jī)的5個(gè)中斷源是:
①              外部中斷請(qǐng)求0,由(P3.2)輸入;
②              外部中斷請(qǐng)求1,由(P3.3)輸入;
③              片內(nèi)定時(shí)器/計(jì)數(shù)器0益處中斷請(qǐng)求;
④              片內(nèi)定時(shí)器/計(jì)數(shù)器1溢出中斷請(qǐng)求;
  •    片內(nèi)串行口發(fā)送/接收中斷請(qǐng)求;
為了了解每個(gè)中斷源是否產(chǎn)生了中斷請(qǐng)求,中斷系統(tǒng)應(yīng)設(shè)置許多個(gè)中斷請(qǐng)
求觸發(fā)器(標(biāo)志位)實(shí)現(xiàn)記憶。這些中斷源請(qǐng)求標(biāo)志位分別有特殊功能寄存器TCON和SCON的相應(yīng)位鎖存
定時(shí)器/計(jì)數(shù)器控制寄存器TCON,它是一個(gè)八位的寄存器,各位如表4.1所示:
表4.1 定時(shí)器/計(jì)數(shù)器控制寄存器TCON
TF1

TF0

IE1
IT1
IE0
IT0

IT0,IT1:外部中斷0、1觸發(fā)方式選擇位,由軟件設(shè)置。1是下降沿觸發(fā),0是電平觸發(fā)。
IE0,IE1:外部終端0、1請(qǐng)求標(biāo)志位。
TF0,TF1:定時(shí)器/計(jì)數(shù)器0、1溢出中斷請(qǐng)求標(biāo)志。
2.2.2 中斷的控制
中斷的控制主要實(shí)現(xiàn)中斷的開關(guān)管理和中斷優(yōu)先級(jí)的管理。這個(gè)管理主要通過對(duì)特殊功能寄存器IE和IP的編程實(shí)現(xiàn)。
(1)中斷允許寄存器IE
表4.2 中斷允許寄存器IE
EA
   -
ET2
ES
ET1
EX1
ET0
EX0

EX0,EX1:外部終端0,1的中斷允許位。1是中斷開,0是中斷關(guān)
ET0,ET1:定時(shí)器/計(jì)數(shù)器0、1溢出中斷允許位。1是開中斷,0是關(guān)中斷
ES:串行口中斷允許位。1是中斷開,0是中斷關(guān)
ET2:定時(shí)器/計(jì)數(shù)器2溢出中斷位
EA:CPU開/關(guān)中斷控制位。1是開中斷,0是關(guān)中斷
(2)中斷優(yōu)先級(jí)寄存器IP
表4.3 中斷優(yōu)先級(jí)寄存器IP



PS
PT1
PX1
PT0
PX0

若系統(tǒng)中多個(gè)中斷源同時(shí)請(qǐng)求中斷,則CPU按中斷源的優(yōu)先級(jí)別,由高到低分別響應(yīng)。
89C51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí):高優(yōu)先級(jí)和低優(yōu)先級(jí)。每個(gè)中斷源都可以編程為高優(yōu)先級(jí)。這可以實(shí)現(xiàn)兩級(jí)中斷嵌套。嵌套的原則:一個(gè)正在執(zhí)行的中斷服務(wù)程序可以被高級(jí)的中斷請(qǐng)求中斷,而不能被同級(jí)或較低級(jí)的中斷請(qǐng)求中斷。兩級(jí)中斷通過使用IP寄存器設(shè)置,相應(yīng)的位置1,則優(yōu)先級(jí)高,0則優(yōu)先級(jí)低。
PX0、PX1:終端0、1中斷優(yōu)先級(jí)控制;
PT0、PT1:定時(shí)器/計(jì)數(shù)器0、1中斷優(yōu)先級(jí)控制。
PS:串行口中斷優(yōu)先級(jí)控制。
89C51復(fù)位時(shí),IP被清零,5個(gè)中斷源都在同一個(gè)優(yōu)先級(jí)。這時(shí)若其中幾個(gè)中斷源同時(shí)產(chǎn)生中斷請(qǐng)求,則CPU按照片內(nèi)硬件優(yōu)先級(jí)鏈路的順序相應(yīng)中斷,硬件優(yōu)先級(jí)由高到低的順序是:外部終端0,定時(shí)器/計(jì)數(shù)器0,外部中斷1,定時(shí)器/計(jì)數(shù)器1串行口中斷。
2.2.3 中斷響應(yīng)
89C51的CPU在每個(gè)機(jī)器周期采樣中斷源的中斷請(qǐng)求標(biāo)志位,如果沒有上述阻止條件,則將在下一個(gè)機(jī)器周期響應(yīng)被激活的最高級(jí)中斷請(qǐng)求。阻止條件如下:
  •        CPU正在處理同級(jí)或更高級(jí)的中斷;
  •        現(xiàn)行機(jī)器周期不是所執(zhí)行指令的最后一個(gè)機(jī)器周期;
  •        正在執(zhí)行的是RETI或者是訪問IE或IP的指令;
CPU在中斷響應(yīng)之后完成如下操作:
  •        硬件清除相應(yīng)的中斷標(biāo)志位;
  •        執(zhí)行一條硬件子程序,保護(hù)斷點(diǎn),并轉(zhuǎn)向中斷服務(wù)程序入口。
  •        結(jié)束中斷時(shí)執(zhí)行RETI指令,恢復(fù)斷點(diǎn),返回主程序。
89C51的CPU在相應(yīng)中斷請(qǐng)求時(shí),由硬件電路自動(dòng)形成轉(zhuǎn)向與該中斷源對(duì)應(yīng)的中斷的服務(wù)程序入口地址。這種方法為硬件向量中斷法。
各中斷源的中斷服務(wù)程序入口地址如下:
表4.4 中斷源的中斷服務(wù)程序入口地址
編號(hào)
中斷源
入口地址
0
外部終端0
0003H
1
定時(shí)器/計(jì)數(shù)器0
000BH
2
外部終端1
0013H
3
定時(shí)器/計(jì)數(shù)器1
001BH
4
串行口中斷
0023H

各中斷服務(wù)程序入口地址僅隔8個(gè)字節(jié),編譯器在這些地址放入無條件轉(zhuǎn)移指令,跳到服務(wù)程序的實(shí)際地址。
向量中斷包括把先前的程序計(jì)數(shù)指針推入堆棧,中斷服務(wù)程序很像其他子程序。當(dāng)向量中斷發(fā)生時(shí),硬件禁止所有中斷。此時(shí)表明外部中斷或定時(shí)器溢出的標(biāo)志位由硬件清除。中斷服務(wù)程序的不同分支取決于中斷源。在重新允許全局CPU中斷EA之前,必須仔細(xì)清除各種標(biāo)志。標(biāo)志會(huì)引起立即地重復(fù)中斷。89C51對(duì)終端實(shí)際上有特殊的返回指令----RETI。不是RET。RETI重新允許系統(tǒng)識(shí)別其他中斷。因而,沒必要在正常使用中斷時(shí)復(fù)位EA,只要在程序初始化時(shí)開中斷一次就可以了。
2.3 單片機(jī)定時(shí)器/計(jì)數(shù)器的使用
89C51系列單片機(jī)至少有兩個(gè)16位內(nèi)部定時(shí)器/計(jì)數(shù)器。8952有三個(gè)定時(shí)器/計(jì)數(shù)器,其中連個(gè)基本定時(shí)器/計(jì)數(shù)器是定時(shí)器/計(jì)數(shù)器0和定時(shí)器/計(jì)數(shù)器1。他們既可以編程為定時(shí)器使用,也可以編程為計(jì)數(shù)器使用。若是計(jì)數(shù)內(nèi)部晶振驅(qū)動(dòng)時(shí)鐘,則它是定時(shí)器;若是計(jì)數(shù)89C51的輸入引腳的脈沖信號(hào),則它是計(jì)數(shù)器。
89C51的T/C時(shí)加一計(jì)數(shù)的。定時(shí)器實(shí)際上也是工作在技術(shù)方式下的,只不過對(duì)固定頻率的脈沖計(jì)數(shù);由于脈沖周期固定,由計(jì)數(shù)值可以計(jì)算出時(shí)間,有定時(shí)功能。
當(dāng)T/C工作在定時(shí)器時(shí),對(duì)振蕩源12分頻的脈沖計(jì)數(shù),即每個(gè)機(jī)器周期計(jì)數(shù)值加一,頻率加=fosc/12。晶振為6MHz,計(jì)數(shù)頻率=500KHz,每2uS計(jì)數(shù)加一。
當(dāng)T/C工作在計(jì)數(shù)器時(shí),計(jì)數(shù)脈沖來自外部脈沖輸入引腳T0或T1。當(dāng)T0或T1腳上負(fù)跳變需2個(gè)機(jī)器周期,即24個(gè)振蕩周期。所以T0或T1腳輸入的計(jì)數(shù)外部脈沖的最高頻率為fosc/12。當(dāng)晶振為12MHz時(shí),最高技術(shù)頻率為500KHz,高于此頻率將計(jì)數(shù)出錯(cuò)。
2.3.1 與T/C有關(guān)的特殊功能寄存器
(1)計(jì)數(shù)寄存器TH和TL
T/C是16位的,計(jì)數(shù)寄存器有TH高8位TL低8位構(gòu)成。在特殊功能寄存器中,對(duì)應(yīng)T/C0為TH0和TL0;對(duì)應(yīng)T/C1為TH1和TL1。定時(shí)器/計(jì)數(shù)器的初始值通過TH1/TL1和TH0/TL0設(shè)置
(2)定時(shí)器/計(jì)數(shù)器控制寄存器TCON
表4.5 定時(shí)器/計(jì)數(shù)器控制寄存器TCON

TR1

TR0





TR0、TR1:定時(shí)器/計(jì)數(shù)器0、1啟動(dòng)控制位。1是啟動(dòng),0是停止
TCON復(fù)位后清零,T/C需要受到軟件控制才能啟動(dòng)計(jì)數(shù);當(dāng)計(jì)數(shù)計(jì)滿時(shí),產(chǎn)生向高位的進(jìn)位TF,即溢出中斷請(qǐng)求標(biāo)志
T/C的方式控制寄存器TMOD
表4.6 T/C的方式控制寄存器TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0

C/T:計(jì)數(shù)器或定時(shí)器選擇位。1位計(jì)數(shù)器,0位定時(shí)器
GATE:門控信號(hào)。1時(shí)T/C的啟動(dòng)控制受到雙重控制,即要求TR0/TR1和INT0/INT1同時(shí)為高;0時(shí)T/C的啟動(dòng)僅受TR0/TR1控制。
表4.7 M1和M0工作方式選擇位
M1    M0
方式
功能
0      0
0
為13位定時(shí)器/計(jì)數(shù)器,TL存低5位,TH存高8位
0      1
1
為16定時(shí)器/計(jì)數(shù)器,TL存低8,TH存高8位
1      0
2
常數(shù)自動(dòng)裝入的8位定時(shí)器/計(jì)數(shù)器
1      1
3
僅適用于T/C0,兩個(gè)8為定時(shí)器/計(jì)數(shù)器

2.3.2 定時(shí)器/計(jì)數(shù)器的初始化
(1)初始化步驟
在使用89C51的定時(shí)器/計(jì)數(shù)器前,應(yīng)對(duì)它進(jìn)行編程初始化,主要是對(duì)TCON和TMOD編程,還需要計(jì)算和裝載T/C的計(jì)數(shù)初值。一般完成以下幾個(gè)步驟:
  •      確定T/C的工作方式----編程TMOD寄存器。
  •      計(jì)算T/C中的計(jì)數(shù)初值,并裝載到TH和TL。
  •      T/C在中斷方式工作時(shí),須開CPU中斷和源中斷----編程IE寄存器。
  •      啟動(dòng)定時(shí)器/計(jì)數(shù)器----編程TCON中TR1和TR0位
(2)計(jì)數(shù)初值的計(jì)算
在定時(shí)器方式下,T/C是對(duì)機(jī)器周期脈沖計(jì)數(shù)的,如果fosc=6MHz,一個(gè)機(jī)器周期為2us,則
方式0  13位定時(shí)器最大時(shí)間間隔=(2-1)×2us=16.384ms;
方式1  16位定時(shí)器最大時(shí)間間隔=(2-1)×2us=131.072ms;
方式2  8 位定時(shí)器最大時(shí)間間隔=(2-1)×2us=512us
若使T/C工作在定時(shí)器方式1,要求定時(shí)1ms,求計(jì)數(shù)初值。如設(shè)計(jì)數(shù)初值為x,則有(2-1)×2us=1000us
x=2-500
因此,TH,TL可置65536-500。

3 計(jì)價(jià)器系統(tǒng)設(shè)計(jì)
3.1 硬件設(shè)計(jì)
3.1.1 整體硬件電路圖
1.003.jpg


由上圖我們可以清楚地看到,本電路控制核心是AT89C51芯片。該方案我們采用動(dòng)態(tài)顯示的方法。動(dòng)態(tài)顯示的優(yōu)點(diǎn)是,它占用CPU的時(shí)間少,每次只把一個(gè)數(shù)據(jù)送到外部接口,雖然我們仿真看到的是全部數(shù)碼管都亮著,那是因?yàn)閯?dòng)態(tài)顯示的時(shí)間比較快,超過我們?nèi)搜鄣谋鎰e能力。若我們?cè)诜抡娴臅r(shí)候暫停一下,就可以清楚地看到,時(shí)間單元和價(jià)格單元分別只顯示一位。靜態(tài)顯示,是每一個(gè)數(shù)碼管不論在什么時(shí)候都點(diǎn)亮,占用CPU的時(shí)間很多。按鍵主要控制系統(tǒng)的初始化、開始工作、數(shù)據(jù)鎖存三項(xiàng)工作。剛開始上電,則所有的數(shù)碼管同時(shí)顯示全0狀態(tài),當(dāng)?shù)谝淮伟聪麻_關(guān),價(jià)格從起步價(jià)005.0元開始計(jì)費(fèi),等待是否超過三公里以及計(jì)算,時(shí)間單元?jiǎng)t從00.00.00開始計(jì)時(shí),一秒一秒往上加。P0口作為數(shù)據(jù)總線口,分別把數(shù)據(jù)輸送到4個(gè)74LS273地址鎖存器中,而鎖存器的工作需要等待脈沖的到來。脈沖通過寫地址有些端口p3.6和端口p2.0-p2.3經(jīng)過或非門來產(chǎn)生。只有當(dāng)把數(shù)據(jù)送到外部接口時(shí),p3.6口才為低電平,p2.0-p2.3用來控制到底是把數(shù)據(jù)送往哪一個(gè)鎖存器。
算法公式是:費(fèi)用=起步價(jià)+(路程-3)×1.3
路程=速度×?xí)r間 (速度恒定,60Km/h,也就是1Km/min)
若路程小于等于3,則收起步價(jià)5元,否則按費(fèi)用公式算。               
由于速度恒定,所以計(jì)算的核心是時(shí)間,只要判斷時(shí)間超出2分鐘,則費(fèi)用公式就開始計(jì)算,每多出一公里,費(fèi)用就加上1.5元,一分鐘一公里來計(jì)算,因此本設(shè)計(jì)比較簡(jiǎn)單。時(shí)間單元由單片機(jī)的定時(shí)器/計(jì)數(shù)器來計(jì)算,延時(shí)1ms時(shí)間的初值由程序來設(shè)定。
3.1.2 74LS273和74LS02簡(jiǎn)介
1.004.jpg


1.005.jpg
引腳功能:74LS273是8位數(shù)據(jù)/地址鎖存器。74LS273是一種帶清除功能的8D觸發(fā)器,1D~8D為數(shù)據(jù)輸入端,1Q~8Q為數(shù)據(jù)輸出端,正脈沖觸發(fā),低電平清除,常用作8位地址鎖存器。
1.006.jpg


引腳功能:74LS02是四二輸入或非門。該芯片有四個(gè)或非門公選擇,如1A或1B后,經(jīng)過非門再輸出,只有當(dāng)輸入的兩個(gè)變量同時(shí)為0時(shí),輸出才為1。具有緩沖倒相功能。

3.2 軟件設(shè)計(jì)
3.2.1 模塊介紹
該計(jì)費(fèi)器系統(tǒng)的軟件設(shè)計(jì)分為一下幾個(gè)模塊:
(1)主程序模塊
在主程序模塊中,需要完成對(duì)個(gè)接口芯片的初始化、出租車起步價(jià)和單價(jià)、中斷向量的設(shè)計(jì)以及開中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設(shè)置啟動(dòng)/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動(dòng)、清除、計(jì)程和計(jì)價(jià)等不同的操作。流程圖如3-4所示。
當(dāng)按下輕觸開關(guān)時(shí),開始對(duì)系統(tǒng)初始化,價(jià)格和時(shí)間都顯示0、0,再次按下開關(guān),時(shí)間單元開始計(jì)時(shí),并計(jì)算時(shí)間是否超過2分鐘,超過2分鐘,則從第3分鐘開始計(jì)費(fèi)。價(jià)格單元從起步價(jià)5.0元開始計(jì)費(fèi),每多一分鐘,價(jià)格單元多加1.5元。
(2)顯示子程序模塊
由于顯示是由顯示時(shí)間子程序DIS1和顯示價(jià)格子程序DIS組成的,時(shí)間由小時(shí)、分、秒三個(gè)單元組成,共六個(gè)數(shù)碼管。價(jià)格由元和角兩個(gè)單元組成,最大可以顯示999.9元。


3.2.2 程序流程圖


1.007.jpg


3.2.3 匯編程序
  1. ORG    0000H               ;初始化段地址

  2.       LJMP  MAIN        ;長(zhǎng)跳轉(zhuǎn)到主函數(shù)MAIN處

  3.       ORG     000BH       ;TT0開始地址

  4.       LJMP    TT0         ;長(zhǎng)跳轉(zhuǎn)到TT0 處

  5.        ORG     0030H       ;主函數(shù)開始地址,避開00—30敏感段

  6. MAIN: MOV     SP,#40H     ;設(shè)堆棧底指針,下一個(gè)數(shù)據(jù)將放在41H單元

  7.        MOV     70H,#60     ;價(jià)格單元的起步價(jià)

  8.        MOV     71H,#00     ;價(jià)格單元的十位和百位

  9.     MOV     72H,#00     ;秒單元清零

  10.        MOV     74H,#00     ;時(shí)單元清零

  11.      MOV    75H,#00     ;75H單元清零備用

  12.     CLR    00H

  13.     CLR    01H         ;將00H,01H單元清零

  14.     MOV     6BH,#0AH    ;將0AH(既十進(jìn)制10)放入6B單元

  15.        MOV     R1,#76H     ;把76H放到R1中

  16. KKK:  MOV    @R1,#00H    ;將76H單元的內(nèi)容清零

  17.        INC    R1

  18.        DJNZ   6BH,KKK     ;76H—7FH單元全部清零,備用

  19.        LCALL DIS         ;調(diào)用價(jià)格顯示子程序

  20.        LCALL   DIS1        ;調(diào)用時(shí)間顯示子程序

  21.        MOV    TMOD,#11H   ;定時(shí)器/計(jì)數(shù)器工作方式設(shè)置

  22.        MOV     TH0,#3CH

  23.        MOV     TL0,#0B0H   ;這句和上一句設(shè)置延時(shí)50ms

  24.        MOV     6EH,#20     ;將6EH單元設(shè)置20,達(dá)到1s的延時(shí)

  25. G2:    LCALL   DIS         ;長(zhǎng)調(diào)用價(jià)格顯示子程序

  26.        LCALL   DIS1        ;長(zhǎng)調(diào)用時(shí)間顯示子程序

  27.        JB      P1.0,G2     ;開關(guān)沒按下,等待按下,顯示初始狀態(tài),全部為零

  28.        LCALL   TIME1       ;調(diào)用TIME1延時(shí)子程序

  29.        JB      P1.0,G2     ; 開關(guān)沒按下,跳到G2,否則轉(zhuǎn)到下一步

  30. G1:    LCALL   DIS

  31.        LCALL   DIS1

  32.        JNB     P1.0,G1     ;開關(guān)按下,繼續(xù)顯示價(jià)格和時(shí)間,并轉(zhuǎn)到中斷

  33.        SETB    EA          ;開中斷

  34.        SETB    ET0         ;定時(shí)器0中斷允許,向CPU申請(qǐng)中斷

  35.        SETB    TR0         ;定時(shí)器0工作允許

  36.        SETB    01H         ;01H單元置位

  37. LLL:   LCALL   CHAI        ;調(diào)用現(xiàn)場(chǎng)保護(hù)子程序

  38.        LCALL   DIS

  39.        LCALL   JISUAN      ;調(diào)用計(jì)算子程序

  40.        LCALL   DIS1

  41.        JB      P1.0,G3     ;開關(guān)沒按下,則返回

  42.        LCALL   TIME1

  43.        JB      P1.0,G3

  44.        CPL     01H         ;01H單元此時(shí)為零

  45.        JNB     01H,G5;01H  ;單元內(nèi)容為0,跳到G5

  46.        SETB    ET0         ;定時(shí)器0中斷允許,向CPU申請(qǐng)中斷

  47. G6:    LCALL   DIS

  48.        LCALL   DIS1

  49.        JNB    P1.0,G6     ;開關(guān)按下,顯示所走的時(shí)間及費(fèi)用

  50.        LJMP    MAIN        ;重新等待下一個(gè)工作狀態(tài)

  51. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼




結(jié)束語
經(jīng)過這一階段的學(xué)習(xí),總于完成了設(shè)計(jì)。設(shè)計(jì)的每一步對(duì)我都是新的嘗試,對(duì)自己的設(shè)計(jì)總有一種期待。這段時(shí)間,學(xué)到了很多知識(shí)也有很多感受。通過這次設(shè)計(jì)我開始獨(dú)立學(xué)習(xí)和探索。查看相關(guān)的資料和書籍,使大腦由模糊到清晰,使自己的設(shè)計(jì)逐步完善起來,每一次改進(jìn)都使我受益頗豐。
雖然我的設(shè)計(jì)不是很成熟,功能也很單一,付出了自己的努力,這是我引以自豪的。我相信只有經(jīng)歷過的人才會(huì)明白真滋味。
做學(xué)問,是真正自己學(xué)習(xí)和研究的過程,希望這次的經(jīng)歷能讓我在工作學(xué)習(xí)中激勵(lì)我繼續(xù)前進(jìn)。


參考文獻(xiàn)

[1]:周立功、夏宇聞.單片機(jī)與CPLD綜合應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版,2006

[2]:丁元杰.單片微機(jī)原理及應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2005

[3]:靳達(dá)編.單片機(jī)應(yīng)用系統(tǒng)開發(fā)實(shí)例導(dǎo)航[M].北京:人民郵電出版社,2007

[4]:李光飛.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2006

[5]:胡宴如.高頻電子線路[M].北京:高等教育出版社,2006

[6]:白駒珩、雷曉平.單片計(jì)算機(jī)及其應(yīng)用[M].成都:電子科技大學(xué)出版社,2005

[7]:李廣弟.單片機(jī)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2006

[8]:沈美明、溫冬嬋.IBM匯編語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004

[9]:彭傳正、林春景.凌陽單片機(jī)原理與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2006

[10]:李榮正、陳學(xué)軍.PIC單片機(jī)實(shí)踐教程[M].北京:北京航空航天大學(xué)出版社,2006

[11]:閻石.數(shù)字電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2007



完整論文下載(word格式 可編輯):
基于AT89C51單片機(jī)的出租車計(jì)價(jià)器系統(tǒng)設(shè)計(jì).doc (365.5 KB, 下載次數(shù): 168)



評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
aa521314 + 5 贊一個(gè)!

查看全部評(píng)分

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:284631 發(fā)表于 2018-2-28 00:29 | 顯示全部樓層
大佬,能把電路圖發(fā)出來么?
回復(fù)

使用道具 舉報(bào)

ID:284631 發(fā)表于 2018-2-28 00:30 | 顯示全部樓層
大佬,能把電路圖發(fā)出來么?
回復(fù)

使用道具 舉報(bào)

ID:280467 發(fā)表于 2018-3-2 14:33 | 顯示全部樓層
感謝親的分享,只可惜是匯編的,不過還是非常感謝的
回復(fù)

使用道具 舉報(bào)

ID:433287 發(fā)表于 2018-11-27 16:10 | 顯示全部樓層
有元器件的目錄么?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表