




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)硬件技術(shù)基礎(chǔ)課程設(shè)計(jì)計(jì)程車計(jì)價(jià)器設(shè)計(jì)(用計(jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備完成)姓 名: 劉亞 學(xué) 號(hào): 姓 名: 周桂鋒 學(xué) 號(hào): 姓 名: 袁云軍 學(xué) 號(hào): 姓 名: 郭洋成 學(xué) 號(hào): 重慶大學(xué)自動(dòng)化學(xué)院二O一一年九月目錄引言11.設(shè)計(jì)的重要內(nèi)容和方案11.1 設(shè)計(jì)的主要內(nèi)容11.2 設(shè)計(jì)方案12.任務(wù)分工13.實(shí)驗(yàn)中運(yùn)用的一些實(shí)驗(yàn)原理22.1 鍵盤按鍵中斷22.2 取系統(tǒng)時(shí)間22.3 揚(yáng)聲器驅(qū)動(dòng)系統(tǒng)原理23.操作說明24.主程序及子模塊流程圖35.每個(gè)人的心得體會(huì)116.參考文獻(xiàn)157.附錄16引言 現(xiàn)今,不管是在那些大城市,還是小縣城。出租車早已經(jīng)成為了一種重要的交通工具。不但解決了公交車
2、較慢的煩惱,也解決了自己開車沒停車位的弊端??傊?,出租車早已融入了這個(gè)城市的生活。既然如此,我們不得不考慮下出租車收費(fèi)的問題。擁有良好性能的計(jì)價(jià)器無論是對(duì)廣大出租車司機(jī)朋友還是乘客來說都是很必要的。所以我們下面就用匯編語言來設(shè)計(jì)出租車計(jì)價(jià)系統(tǒng)。1. 設(shè)計(jì)的重要內(nèi)容和方案1.1 設(shè)計(jì)的主要內(nèi)容設(shè)計(jì)一個(gè)計(jì)程車計(jì)價(jià)器,能用計(jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備完成計(jì)程車計(jì)價(jià)器的基本功能,并在此基礎(chǔ)上自行完善和優(yōu)化系統(tǒng)功能。基本功能具體要求如下:1. 以計(jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備為基礎(chǔ),一鍵盤作為輸入設(shè)備,顯示器作為輸出設(shè)備,完成設(shè)計(jì);(允許使用PC機(jī)的揚(yáng)聲器作為發(fā)生設(shè)備)2. 按鍵啟動(dòng)計(jì)程車和停車,可以在行進(jìn)過程中
3、按鍵調(diào)整車速。3. 按鍵開始計(jì)價(jià)和停止計(jì)價(jià)。開始計(jì)價(jià)后,3公里內(nèi)幾家結(jié)果為起步價(jià),3公里后,根據(jù)車速和行進(jìn)時(shí)間計(jì)算所行距離,所行距離每達(dá)到1公里時(shí),計(jì)價(jià)結(jié)果增加1次單價(jià),要求精確到角。若在計(jì)價(jià)過程中停車,則每隔一段時(shí)間(具體時(shí)間間隔自行設(shè)置),計(jì)價(jià)結(jié)果增加1次單價(jià)。晚上10點(diǎn)到次日早上7點(diǎn),按晚間起步價(jià)和晚間每公里單價(jià)計(jì)算。4. 屏幕上要求顯示當(dāng)前車速,當(dāng)前計(jì)價(jià)結(jié)果,本次計(jì)價(jià)時(shí)間。停止計(jì)價(jià)后,本次計(jì)價(jià)結(jié)果保持一段時(shí)間后清為0.5. 顯示當(dāng)前燃料量,車輛行進(jìn)過程中反映燃料的消耗,當(dāng)燃料量低于警戒值時(shí)報(bào)警。1.2 設(shè)計(jì)方案我們經(jīng)過組內(nèi)激烈的討論,將基本功能分為了幾個(gè)小模塊。如下:1. 速度、時(shí)間差
4、、油量模塊,計(jì)算里程計(jì)價(jià)模塊。2. 等待計(jì)價(jià)模塊,總油量、每公里耗油模塊。3. 顯示車速、計(jì)價(jià)結(jié)果、時(shí)間模塊。4. 設(shè)置起步價(jià)、單價(jià),并判斷是否白天晚上,并將輸入的元,轉(zhuǎn)化為角模塊。我們小組四人分別將這四個(gè)子模塊分別編輯。然后共同構(gòu)想了主程序模塊,以上各個(gè)模塊的思路請(qǐng)看流程圖。2. 任務(wù)分工袁云軍:設(shè)置起步價(jià)、單價(jià),并判斷是否白天晚上模塊;輸入的起步價(jià)和單價(jià)的單位元,化為角模塊,并共同完成論文。周桂鋒:編寫取第一次系統(tǒng)時(shí)間程序,取系統(tǒng)時(shí)間通用程序,計(jì)算相鄰時(shí)間差子程序,計(jì)算總里程及總價(jià)格子程序,共同完成論文。劉 亞:編寫子程序每次計(jì)程車運(yùn)行的總時(shí)間的提取,換算稱實(shí)際的時(shí)分秒格式并顯示;每次運(yùn)行
5、的總價(jià)格的計(jì)算,及顯示;聲音模塊的寫入及調(diào)用;及有關(guān)論文的撰寫。3. 實(shí)驗(yàn)中運(yùn)用的一些實(shí)驗(yàn)原理2.1 鍵盤按鍵中斷程序中用到的中斷:引發(fā)9號(hào)中斷,鍵盤的輸入到達(dá)60h端口時(shí),相關(guān)的芯片就會(huì)向CPU發(fā)出中斷類型碼為9的可屏蔽終端信息。CPU檢測到該中斷信息后,如果IF=1,則響應(yīng)中斷,引發(fā)中斷過程,轉(zhuǎn)去執(zhí)行int 9中斷例程。編寫int 9中斷例程:鍵盤產(chǎn)生掃描碼;掃描碼送入60h端口;引發(fā)9號(hào)中斷;CPU執(zhí)行int 9中斷例程處理鍵盤輸入。2.2 取系統(tǒng)時(shí)間取當(dāng)前系統(tǒng)時(shí)間采用int 21h中斷的2ch號(hào)功能,分別將當(dāng)前時(shí)刻的時(shí)、分、秒和百分之一秒存入對(duì)應(yīng)的寄存器:ch、cl、dh、dl。2.3
6、 揚(yáng)聲器驅(qū)動(dòng)系統(tǒng)原理在PC中,8254的通道2與計(jì)算機(jī)的揚(yáng)聲器相連,由通道2工作于方式3產(chǎn)生一定頻率的方波信號(hào)去驅(qū)動(dòng)揚(yáng)聲器按一定頻率發(fā)聲。其原理如圖1所示。從圖中可見,系統(tǒng)使用并行I/O接口8255A中PB端口的最低兩位來控制該發(fā)聲驅(qū)動(dòng)系統(tǒng):PB0作為8254通道2的門控信號(hào)GATE2,控制通道2定時(shí)計(jì)數(shù)啟停;PB1與通道2的OUT2信號(hào)相與后去控制揚(yáng)聲器的接通和斷開。PC中8255A的端口地址為60H63H,8254的端口地址為40H43H。可見,要使揚(yáng)聲器發(fā)聲,PB0置1,通道2才能工作;PB1置1,OUT2上產(chǎn)生的一定頻率的方波信號(hào)才能通過與門送到驅(qū)動(dòng)器,從而使揚(yáng)聲器發(fā)聲。圖1 揚(yáng)聲器驅(qū)
7、動(dòng)電路原理圖3.操作說明在程序開始運(yùn)行后,系統(tǒng)的初始狀態(tài)是出租車停止,具體操作方式如下:1、按任意“s”鍵啟動(dòng)系統(tǒng);2、設(shè)置白天的起步價(jià)和單價(jià);3、設(shè)置晚上的起步價(jià)和單價(jià);4、按鍵選擇白天或晚上;5、按加速鍵“+”調(diào)速啟動(dòng)出租車,即速度由0變?yōu)檎?,?jì)價(jià)器開始里程計(jì)價(jià);6、在計(jì)價(jià)過程中通過“+”,“-”鍵實(shí)現(xiàn)車速的調(diào)節(jié);7、按減速鍵“-”使車速重新回到0,進(jìn)入等待計(jì)價(jià);8、等待計(jì)價(jià)時(shí),如果按加速鍵“+”使速度變?yōu)檎瑒t重新進(jìn)入里程計(jì)價(jià)9、等待計(jì)價(jià)時(shí) 按“q”鍵,出租車停車,停止計(jì)價(jià)。4.主程序及子模塊流程圖主程序流程圖按鍵中斷服務(wù)程序計(jì)算當(dāng)前油量子模塊等待計(jì)價(jià)子模塊判斷是有鍵按下提示輸入白天起步
8、價(jià)開始輸入白天起步價(jià)調(diào)用erjzzh模塊調(diào)用erjzzh模塊輸入白天和晚上的起步價(jià)和單價(jià)模塊將轉(zhuǎn)化的值存入pricing2提示輸入晚上單價(jià)將轉(zhuǎn)化的值存入內(nèi)存pricing1將轉(zhuǎn)化的值存入ppm2提示輸入白天單價(jià)輸入白天單價(jià)NN調(diào)用erjzzh模塊Y將轉(zhuǎn)化的值存入ppm1判斷按下的鍵是否是d將pricing1和ppm1的值分別存入pricing和ppmY提示輸入晚上的起步價(jià)N輸入晚上的起步價(jià)Y將pricing2和ppm2的值分別存入pricing和ppm判斷按下的鍵是否是n調(diào)用erjzzh模塊N結(jié)束元轉(zhuǎn)化成角模塊開始送輸入字符串的第一位給al轉(zhuǎn)換成十進(jìn)制數(shù),再乘以10,送給寄存器bl再送字符串的
9、第二位給寄存器al判斷是否的小數(shù)點(diǎn) N Y再送字符串的第三位給寄存器al轉(zhuǎn)換成十進(jìn)制數(shù),再乘以10,與寄存器bl相加,最終結(jié)果存于bl結(jié)束計(jì)算時(shí)間差子程序流程圖開始是否與系統(tǒng)初始時(shí)間比較Y差值是否相等計(jì)算小時(shí)數(shù)之差算法賦值2算法賦值1NYN小時(shí)差化為分,加上最近一次時(shí)間的分鐘數(shù)分鐘之差化為秒,存入內(nèi)存計(jì)算百分之一秒之差借位更新秒數(shù)是否借位YN計(jì)算百分之一秒之差,然后計(jì)算秒數(shù)之差,化為1/100s單位結(jié)束將求得的時(shí)間之差存入表示1/100s的內(nèi)存空間,即為時(shí)間差里程計(jì)價(jià)子程序流程圖開始結(jié)束總價(jià)累加每公里單價(jià),miletest加1000里程是否大于miletest內(nèi)存gongli加一,標(biāo)志位mil
10、etest1加1000里程是否大于標(biāo)志位miletest1設(shè)起步價(jià)是否需要設(shè)起步價(jià)計(jì)算總里程累加入內(nèi)存取當(dāng)前車速和時(shí)間差N YYNNY5.每個(gè)人的心得體會(huì)小組成員:劉亞1、課程設(shè)計(jì)的目的 本次設(shè)計(jì)的題目分為兩大類,5個(gè)題目,只是一種是涉及硬件的題目,一種是純軟件寫出的題目。我們小組有4個(gè)同學(xué),分別是郭洋成,袁云軍,周桂峰,我一起商量以后選擇了:計(jì)程車計(jì)價(jià)器設(shè)計(jì)(用計(jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備完成),這個(gè)題目。 選取這個(gè)題目大家有這樣幾點(diǎn)考慮: 第一,怎樣設(shè)計(jì)總體方案(思路清晰) 第二,分成幾個(gè)子模塊且每個(gè)模塊怎么融合(連接簡單) 第三,總程序的調(diào)試及功能的實(shí)現(xiàn)(顯示清晰)2、課程設(shè)計(jì)的任務(wù) 拿到題
11、目后,4個(gè)同學(xué)集思廣益,都紛紛開動(dòng)腦筋,思想的火花一下子全都迸發(fā)出來了,最后經(jīng)過綜合后,留下了大家覺得比較合適的、好的、容易實(shí)現(xiàn)的思想后,完成了總體方案的設(shè)計(jì)和定稿。 我們的任務(wù)是實(shí)現(xiàn)計(jì)價(jià)器的一些基本功能,設(shè)置不同時(shí)段(白天、黑夜)的起步價(jià)、單價(jià);用按鍵的方式實(shí)現(xiàn)計(jì)程車的起動(dòng)和停止以及行進(jìn)過程中調(diào)整車速;用按鍵實(shí)現(xiàn)起動(dòng)車時(shí)計(jì)價(jià),停車時(shí)結(jié)束計(jì)價(jià);3公里內(nèi)記為起步價(jià),超過3公里距離每超過1公里計(jì)價(jià)一次,要求精確到角;若在計(jì)價(jià)過程中有停車等待,超過某一個(gè)時(shí)間設(shè)定值單價(jià)增加1次;整個(gè)過程分時(shí)段計(jì)價(jià)(晚上10點(diǎn)到次日早上7點(diǎn))。 設(shè)計(jì)的顯示效果分為兩部分,一是實(shí)時(shí)的車速,計(jì)價(jià)結(jié)果,油量(油量低于某個(gè)設(shè)定
12、值報(bào)警提示);二是本次總里程,計(jì)價(jià)總時(shí)間,總價(jià)格,且在停止計(jì)價(jià)后一段時(shí)間所有計(jì)數(shù)清零。3、課程設(shè)計(jì)的內(nèi)容 在明確設(shè)計(jì)任務(wù)后,大家按照設(shè)計(jì)要求明確地分了工。我的部分是顯示計(jì)價(jià)總時(shí)間,總價(jià)格,并在其他同學(xué)需要的時(shí)候做一些輔助工作。 我的設(shè)計(jì)程序段比較簡單,因此比較容易實(shí)現(xiàn),基本思想是,取出起動(dòng)計(jì)程車時(shí)的時(shí)間后停止計(jì)程車時(shí)的時(shí)間,然后按照時(shí)間顯示的格式,時(shí):分:秒,分段計(jì)算時(shí)差,加到后一時(shí)間的分作差,計(jì)算出分差,再加到秒上作差,最后計(jì)算出總秒數(shù),再分別按時(shí),分,秒,除以3600,60,得出時(shí)分秒的具體值。注意的是時(shí)分秒的數(shù)學(xué)格式為 “ 0:00: 00 ,而匯編語言是基礎(chǔ)語言,只能是一位一位的顯示,
13、并且只有19才有ASC|碼,所以在計(jì)算分和秒的時(shí)候有可能除出來的數(shù)是大于9的數(shù),這時(shí)需要將分?jǐn)?shù)在除以10,并將商數(shù)加上30h輸出ASC|碼放到第一個(gè)分位,余數(shù)加上30h輸出ASC|碼放到第二位,類似秒位也如此。具體的程序段 見程序附錄。4、課程設(shè)計(jì)的總結(jié) 這次設(shè)計(jì)基本上實(shí)現(xiàn)了任務(wù)書上的要求,可以設(shè)置不同時(shí)段的起步價(jià)、單價(jià);按鍵可以起停車并變速;滿足在相應(yīng)的公里數(shù)下計(jì)價(jià)加價(jià),如是停車等待也可以按設(shè)定值來加價(jià);可以在行進(jìn)途中實(shí)現(xiàn)實(shí)時(shí)顯示價(jià)錢,油量,車速。 本次設(shè)計(jì)總共歷時(shí)9天(含中秋放假),我的程序差不多總時(shí)間累計(jì)起來有3天左右??偨Y(jié)起來,自己的匯編語言基本上沒怎么學(xué)懂,同學(xué)們?cè)谟懻摰囊恍〇|西基本
14、上算不知道,嘆息自己的學(xué)習(xí)能力了,很多東西沒學(xué)過干,對(duì)自己說聲仍需努力,加油吧”。不過值得高興的是,和同學(xué)們相處的這一周多時(shí)間里面還是了解了很多東西,像我的程序段的顯示,原來我是每個(gè)字位用一個(gè) mov ah,09h;int 21h,而郭洋成同學(xué)的指導(dǎo)僅用了一個(gè) 定義數(shù)據(jù)段中的格式“ 0: 00 :00 ”,然后地址每加1位,很簡潔的就解決了(詳細(xì)的程序見程序附錄)。并且也體會(huì)到了團(tuán)隊(duì)工作的相互配合,相互協(xié)作重要性,明確自己什么時(shí)候去配合他人,也要知道什么時(shí)候讓他人幫助自己,有時(shí)候單靠自己是費(fèi)力不討好的事,凝聚產(chǎn)生力量,所以集體的力量是無窮的的。 期待,下一次的團(tuán)隊(duì)合作! 非常感謝有這樣一個(gè)機(jī)會(huì)
15、讓我獲益匪淺!小組成員:周桂鋒子程序功能描述 我需要編寫的子程序有里程計(jì)價(jià)子程序、取系統(tǒng)時(shí)間子程序、取系統(tǒng)第一次時(shí)間子程序、計(jì)算時(shí)間差子程序。其中取系統(tǒng)第一次時(shí)間子程序和取系統(tǒng)時(shí)間子程序有較多的相同之處,之所以不合并在一起,一方面是主程序框架的需要,另一方面也是為了子程序更見簡潔,不容易出向錯(cuò)誤。里程計(jì)價(jià)子程序和計(jì)算時(shí)間差子程序較前面的程序要復(fù)雜一些,程序引入了其需要的算法,這就要求程序調(diào)用其它子程序中的變量幫助計(jì)算。在這種情況下,幾個(gè)組員之間的協(xié)調(diào)工作就顯得尤為重要,編寫程序之前各種變量和主程序思想的統(tǒng)一能夠?yàn)楹竺娴某绦蛘{(diào)試工作帶來極大的方便,使得各個(gè)子程序的兼容性滿足要求。子程序功能的編程
16、思想和實(shí)現(xiàn) 前兩個(gè)關(guān)于系統(tǒng)時(shí)間的的程序需要調(diào)用dos的2c號(hào)功能,這里需要及時(shí)的將存有系統(tǒng)時(shí)間數(shù)據(jù)的寄存器中的數(shù)據(jù)轉(zhuǎn)存至內(nèi)存變量中一遍調(diào)用,在存儲(chǔ)過程中時(shí)分和秒、百分之一秒的位置不要搞混,否則時(shí)間差子程序?qū)o法調(diào)用到正確的系統(tǒng)時(shí)間??傊?,這兩個(gè)程序只需要明確內(nèi)存空間所存時(shí)間的具體意義即可。 編寫計(jì)算時(shí)間差子程序需要用到前面的取值結(jié)果,所以在保證前面程序調(diào)試正確后我才開始編寫此程序,以保證思路清晰。此段程序需要計(jì)算兩次系統(tǒng)時(shí)間的差值,為后面計(jì)算里程和計(jì)價(jià)提供參數(shù)。主要思想其實(shí)很直接,就是一次比較時(shí)、分、秒和百分之一秒的大小,求得差值。值得注意的是,時(shí)間相減過程中設(shè)計(jì)借位問題,需要做相應(yīng)調(diào)整。 里
17、程計(jì)價(jià)子程序涉及兩個(gè)量的計(jì)算,即里程和總價(jià),這兩個(gè)量都是要直接顯示在最終的用戶界面上的,所以要為后面的屏幕顯示程序提供供調(diào)用的內(nèi)存空間,同樣要注意數(shù)據(jù)兼容性的問題。程序編寫中遇到的困難以及解決方法 程序編寫中問題大大小小的不少,但是我遇到的最大問題是在時(shí)間差程序中遇到的。由于開始沒有意識(shí)到單步調(diào)試的重要性,程序的問題很難找出來。程序中內(nèi)存second中的值在每一次計(jì)算中開始都應(yīng)該賦值給零,但是由于程序編寫原因,開始編寫的程序中second一直是做的累加計(jì)算,再加上一個(gè)邏輯跳轉(zhuǎn)的錯(cuò)誤,使得程序異?;靵y。在使用單步調(diào)試之前,我瀏覽量程序很多遍,由于程序是按照自己思路編寫的,即使是錯(cuò)誤的邏輯在自己看
18、來都是正確的,所以一直無法找到錯(cuò)誤。后來才想到應(yīng)該使用單步調(diào)試,雖然其他組員也在使用單步調(diào)試,但是我自己卻沒有這個(gè)意識(shí),這也算是一個(gè)教訓(xùn)吧。在使用單步調(diào)試后,錯(cuò)誤則變得一目了然,因?yàn)閮?nèi)存量的變化在TD界面下是很容易查詢到的。這個(gè)問題找到后,主程序的調(diào)試也就稍顯輕松一點(diǎn)了,畢竟各個(gè)子程序能保證不出錯(cuò),只需理清楚主程序邏輯就可以了。程序編寫感想以前上實(shí)驗(yàn)課編寫的程序都較小,子程序的調(diào)用也相對(duì)單一,而這次則不同。此次課程設(shè)計(jì)相當(dāng)于一個(gè)簡單軟件系統(tǒng)的開發(fā),我們需要根據(jù)客戶的需求(即課程設(shè)計(jì)要求)完成相應(yīng)功能,并交付使用。通過這次事件,整個(gè)軟件的設(shè)計(jì)和編寫流程是有據(jù)可尋的,在設(shè)計(jì)軟件之前我們先了解了其要
19、實(shí)現(xiàn)的所有功能,然后我們搭建實(shí)現(xiàn)功能的主程序框架,分出程序模塊,并明確其功能。緊接著我們?yōu)槊總€(gè)組員分配模塊編寫任務(wù),落實(shí)下來就是編寫子程序,并且在此之前我們?yōu)橄到y(tǒng)的變量兼容性做了充足的準(zhǔn)備,避免了不必要的麻煩。每個(gè)組員保證自己的子程序編寫正確,調(diào)試通過。最后我們將子程序嵌入主程序框架,主程序搭建完畢后進(jìn)行聯(lián)調(diào),排除錯(cuò)誤,最終完成軟件編寫。整個(gè)編寫過程中,團(tuán)隊(duì)合作精神盡顯無余,只有各組員通力合作,軟件的編寫過程才能如此高效和順利。小組成員:袁云軍因?yàn)槔蠋熞笪覀冊(cè)谶@次課程設(shè)計(jì)中要分工合作,所以我們小組經(jīng)過討論后將這個(gè)問題分為了以下四個(gè)模塊:1、 速度、時(shí)間差、油量模塊,計(jì)算里程計(jì)價(jià)模塊。2、 等
20、待計(jì)價(jià)模塊,總油量、每公里耗油模塊。3、 顯示車速、計(jì)價(jià)結(jié)果、時(shí)間模塊。4、設(shè)置起步價(jià)、單價(jià),并判斷是否白天晚上,并將輸入的元,轉(zhuǎn)化為角模塊。大概有自知自明吧,我選擇了最簡單的第四個(gè)模塊。下面說說我在編輯的過程中遇到的問題吧!最開始拿到任務(wù)時(shí),真的是無從下手,畢竟硬件語言都學(xué)過一年了,之后也沒怎么去復(fù)習(xí)它。所以遇到的問題如下:1、怎么輸入提示語和換行問題,也就是在dos里該怎么顯示出來輸入的白天夜晚的起步價(jià)和單價(jià)。2、也就是怎樣將輸入單位為元的價(jià)格轉(zhuǎn)化為角存入自己定義的內(nèi)存。以上兩個(gè)問題里遇到的小問題將在下面的解決方案中提到。首先看了硬件書,知道第一個(gè)問題還是很簡單的。因?yàn)樵谧鲇布?shí)驗(yàn)時(shí),我們
21、要經(jīng)常用到。不過開始的時(shí)候我還是沒有考慮全題目給我的要求,在輸入白天和晚上起步價(jià)和單價(jià)的時(shí)候,只在判斷后輸入白天或者晚上的起步價(jià)和單價(jià)。但是題目要求我們要把白天和晚上的起步價(jià)和單價(jià)都顯示在dos里,所以經(jīng)過小小的變化就在內(nèi)存空間多定義四個(gè)變量就解決了。第二個(gè)問題就需要有自己的邏輯了。開始的時(shí)候總是還沒習(xí)慣用自己的思維去寫程序,總想在書上能找到類似的程序段,結(jié)果還真找到了,就因?yàn)檫@個(gè)程序段,害我編了一天。結(jié)果到后面還一句沒有用上。我定義了一個(gè)數(shù)組去先存輸入的價(jià)格字符串。然后一位一位的轉(zhuǎn)換。因?yàn)槲野褑蝺r(jià)和起步價(jià)規(guī)定在0.19.9之間二最開始的時(shí)候總是轉(zhuǎn)換的值要比需要的值大32,結(jié)果經(jīng)過了仔細(xì)推敲,
22、都是這句(and al,0fh)害的,本來我們?nèi)〉氖堑谝晃坏腁SCII碼,結(jié)果就因?yàn)槟蔷渑c,讓我的第一位變小了。后面減去30就變成了負(fù)值。所以出了問題。后來,檢查自己編的程序只能輸入固定模式0.19.9,當(dāng)遇到輸入19的整數(shù)時(shí)就不能轉(zhuǎn)換正確了。然后我再運(yùn)用了一句判斷小數(shù)點(diǎn)那位跳轉(zhuǎn),結(jié)果順利的實(shí)現(xiàn)了整數(shù)的轉(zhuǎn)換。其實(shí)后面在大家整合到一個(gè)程序里時(shí)。還是遇到很多寄存器和定義變量的長度不同。不過經(jīng)過簡單的調(diào)試,很快就能調(diào)通了。自己的感想:經(jīng)過這次設(shè)計(jì),我學(xué)到了很多。理解了團(tuán)隊(duì)合作的重要性和依賴性。雖然途中遇到過很多問題,而且還就幾個(gè)問題爭得面紅耳赤,但是解決問題后的的那份開心是沒法磨滅的。還有我們的每個(gè)
23、子程序都用單獨(dú)的子程序調(diào)通后才整合的,這樣僅僅是為了整個(gè)程序調(diào)試的方便??傊覀冞@次設(shè)計(jì)的完成得還是比較順利和開心的。小組成員:郭洋成這次計(jì)算機(jī)硬件課程設(shè)計(jì)我們組選擇了計(jì)程車計(jì)價(jià)器的設(shè)計(jì)(用計(jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備完成)這個(gè)題目進(jìn)行課程設(shè)計(jì)。我們拿到題目后便開始進(jìn)行總體思路和設(shè)計(jì)方案的討論。一開始我們只是簡單的理了下整個(gè)過程的思路以及程序的大致流程,感覺這個(gè)題目還是挺好做的,沒有特別困難的地方,大體實(shí)施的思路很快就出來。但隨著整個(gè)工作的深入,細(xì)節(jié)問題一個(gè)個(gè)的突出顯出來,比如說整個(gè)流程在中間過程的思路和跳轉(zhuǎn)出現(xiàn)了一些問題,計(jì)算里程時(shí)的數(shù)據(jù)處理問題,程序運(yùn)行過程中按鍵調(diào)速的問題,光標(biāo)顯示位置的控
24、制,等待計(jì)價(jià)模塊的編寫問題等等,但這些問題經(jīng)過我們組四個(gè)人的討論和查閱相關(guān)資料,全部都得以解決。最終我們克服困難,編寫好完整的程序,實(shí)現(xiàn)了題目要求的各種功能。本次課程設(shè)計(jì)我負(fù)責(zé)調(diào)節(jié)車速子模塊,計(jì)算當(dāng)前油量子模塊,等待計(jì)價(jià)子模塊等模塊的編寫。1、調(diào)節(jié)車速子模塊的設(shè)計(jì),由于車速度的調(diào)節(jié)需要在程序運(yùn)行過程中的任意時(shí)刻通過加減速鍵(“+”、“”)來調(diào)節(jié),所以只能選擇按鍵中斷來實(shí)現(xiàn)此功能,如果采用按鍵查詢來實(shí)現(xiàn)的話,加減速鍵會(huì)變得不靈敏。PC鍵盤按鍵引發(fā)int 09h中斷,鍵盤的輸入達(dá)到60h端口時(shí),相關(guān)的芯片就會(huì)向CPU發(fā)出中斷類型碼為9的可屏蔽中斷信息。CPU檢測到該中斷信息后,如果IF=1,則響應(yīng)
25、中斷,引發(fā)中斷過程,轉(zhuǎn)去執(zhí)行int 9中斷服務(wù)程序。通過中斷向量的設(shè)置修改中斷服務(wù)程序?yàn)檎{(diào)速中斷服務(wù)程序。2、計(jì)算當(dāng)前油量模塊的設(shè)計(jì),此模塊通過我的簡化后程序較為簡單。我主要簡化了計(jì)算油量的相關(guān)數(shù)據(jù)處理,采用計(jì)程車每走一公里油量變化一次的思路來編寫程序,而沒有采用實(shí)時(shí)更新油量的計(jì)算方法,因此大大簡化此模塊的長度。當(dāng)油量第一次小于油量警戒值時(shí)播放報(bào)警聲音,油量繼續(xù)減小時(shí)不在報(bào)警。當(dāng)油量為0時(shí),強(qiáng)制停車,顯示本次計(jì)價(jià)結(jié)果一段時(shí),清零并返回DOS。3、等待計(jì)價(jià)模塊的設(shè)計(jì),當(dāng)速度為0時(shí),程序進(jìn)入等待計(jì)價(jià)子模塊,進(jìn)入時(shí)去一次系統(tǒng)時(shí)間作為等待計(jì)價(jià)的開始時(shí)間,并顯示提示語言,中間通過按鍵中斷可以加速跳出等待
26、計(jì)價(jià)模塊到計(jì)算里程計(jì)價(jià)模塊,或者按停止鍵“q”停止計(jì)價(jià),顯示一段時(shí)間清零并返回DOS。速度為0期間,不斷循環(huán)取當(dāng)前系統(tǒng)時(shí)間與開始時(shí)間作差,比較并判斷是否調(diào)價(jià),調(diào)價(jià)時(shí)間間隔自行設(shè)定。所有子模塊編寫完成后,我們組四個(gè)人開始綜合子模塊到主程序中,并進(jìn)行調(diào)試。調(diào)試過程遇到了多個(gè)問題:當(dāng)速度為0時(shí)跳入等待計(jì)價(jià)模塊后,如果采用按鍵查詢“q”退出,不起作用,最后改成按鍵中斷就能很好的跳出來,分析原因可能是加減速鍵是采用的按鍵中斷,整個(gè)過程中斷都處于打開的狀態(tài),若采用按鍵查詢的int 16功能會(huì)被屏蔽。在等待計(jì)價(jià)期間第一次按加速鍵“+”會(huì)很不靈敏,有時(shí)按多次都沒反應(yīng),抱著嘗試的心態(tài)在取當(dāng)前時(shí)間并計(jì)算等待時(shí)長后
27、面加一個(gè)延時(shí)語句,再跳轉(zhuǎn)回去做下一次取時(shí)計(jì)算等待時(shí)間,最后竟然很好的解決了按鍵不靈敏的問題,從中可分析出原因是取系統(tǒng)時(shí)間的中斷會(huì)影響按鍵中斷。還有在開始運(yùn)行程序的時(shí)候計(jì)價(jià)總價(jià)和油量變化相當(dāng)快,不符合我們的設(shè)計(jì)要求和理論結(jié)果,最后在計(jì)算里程計(jì)價(jià)模塊中發(fā)現(xiàn)了一小點(diǎn)邏輯錯(cuò)誤,修改后程序正確無誤的運(yùn)行了起來。本次為期兩周的課程設(shè)計(jì)就像一個(gè)小項(xiàng)目一樣,小組成員需要分工合作編寫各自的子模塊,并綜合起來調(diào)試,很好的體現(xiàn)了我們的團(tuán)隊(duì)合作能力,既提高了我與組員之間的協(xié)調(diào)溝通能力和團(tuán)隊(duì)合作意識(shí),也很好的鍛煉了我的編程能力和邏輯思維能力,不管以后是為繼續(xù)深造還是工作,都打下了堅(jiān)實(shí)的基礎(chǔ)。6.參考文獻(xiàn)1.楊天怡主編.
28、計(jì)算機(jī)硬件基礎(chǔ)(A).重慶大學(xué)出版社2.黃勤主編.計(jì)算機(jī)硬件技術(shù)基礎(chǔ)實(shí)驗(yàn)教程.重慶大學(xué)出版社3.王爽主編.匯編語言(第二版).清華大學(xué)出版社 4.匯編語言指令大全(詳解版)7.附錄.486data segmentdisp_start db please press the s key to start the taxi!,0ah,0dh,$ ;開、停車提示語xwtz0 db ,0ah,0dh,$ xwtz db pleas press on the key q to stop the car ?,0ah,0dh,$pricing db ? ;定義兩個(gè)內(nèi)存空間,存入需要用的起步價(jià)和單價(jià)ppm d
29、b ?pricing1 db ? ;定義兩個(gè)內(nèi)存空間,臨時(shí)存入白天的起步價(jià)和單價(jià)ppm1 db ?pricing2 db ? ;定義兩個(gè)內(nèi)存空間,臨時(shí)存入晚上的起步價(jià)和單價(jià)ppm2 db ?keybuf db 10 ;定義一個(gè)存字符串的數(shù)組count db ?keynum db 10 dup(?)mess0 db please set the prices (0.0-9.9 yuan),0ah,0dh,$mes1 db the start price of day: ,$mes2 db 0ah,0dh,the pice per kilometer of day: ,$mes3 db 0ah,0
30、dh,the the start price of night: ,$mes4 db 0ah,0dh,he pice per kilometer of night: ,$mes5 db 0ah,0dh,press d or n to judge the day or night,0ah,0dh,$tt db totaltime:,0ah,0dh,$ ;實(shí)時(shí)顯示字符串緩沖區(qū)tt1 db wait time:,0ah,0dh,$ tp db totalprice:,0ah,0dh,$ttd db 0:00:00,0ah,0dh,$ttd1 db 0:00:00,0ah,0dh,$tpd db 00
31、0.0 yuan,0ah,0dh,$disp1 db speed: 000 km/h,0dh,0ah,$disp2 db current oil: 000 L,0ah,0dh,$disp3 db total distance: 000 km,0ah,0dh,$ttd0 db 0:00:00,0ah,0dh,$ ;初始化顯示字符串,清零ttd10 db 0:00:00,0ah,0dh,$tpd0 db 000.0 yuan,0ah,0dh,$disp10 db speed: 000 km/h,0dh,0ah,$disp20 db current oil: 000 L,0ah,0dh,$disp3
32、0 db total distance: 000 km,0ah,0dh,$minite db ?second db ?msecond dw ?daytime db ?mile dd 0p dw 0 ;計(jì)價(jià)的總價(jià)格miletest dd 3000miletest1 dd 1000priceflag db 0timea dw ? ;開始計(jì)價(jià)時(shí)刻的時(shí)和分timeb dw ? ;停止計(jì)價(jià)時(shí)刻的秒timec dw ? ;停止計(jì)價(jià)時(shí)刻的時(shí)和分timed db ? ;停止計(jì)價(jià)時(shí)刻的秒time1 dw ?time2 dw ?time3 dw ?time4 dw ?t1 dw ?t2 dw ?t3 dw ?t4
33、 dw ?flagtime db 0 ;為0表示與初始時(shí)間做時(shí)間差chesu db ?time_lag dw 10 ;設(shè)置等待計(jì)價(jià)的時(shí)間間隔totallag dw 10 ;定義總時(shí)間間隔標(biāo)志位,等待計(jì)價(jià)time5_1 dw ? ;時(shí)time5_2 dw ? ;分time6_1 dw ? ;時(shí)time6_2 dw ? ;分time_flag db 0time_wait dw 0msecond1 dw 0msecond0 dw 0wait1 dw 100freq dw 261 ;設(shè)置警報(bào)聲的頻率和時(shí)間長度slong dw 01ffhspeed db 00h ;出租車車速0255kmchesu db
34、 00h ;折算速度,一小時(shí)按以分鐘計(jì)算,模擬運(yùn)行keep_es dw ?keep_bx dw ?disp dw ?oil_total dw 100 ;設(shè)置本次運(yùn)行的總油量oil_current dw ? ;當(dāng)前油量oil_pm db 1 ;每公里耗油量oil_warn dw 20 ;設(shè)置油量警戒值oil_flag db 0 ;油量報(bào)警標(biāo)志位gongli db 0 ;總里程整數(shù)公里數(shù)hang db ? ;光標(biāo)顯示初始行位置lie db ? ;光標(biāo)顯示初始列位置data endscode segmentmain proc far assume cs:code,ds:datastart:mov a
35、x,data mov ds,ax lea dx,disp_start ;啟動(dòng)車提示語 mov ah,09h int 21h jxx1:mov ah,01h ;繼續(xù)等待時(shí)間,檢測按鍵和車速 int 16h jz jxx1 ;無鍵按下,跳轉(zhuǎn)jxx1,繼續(xù)等待按鍵 mov ah,0 int 16h cmp al,s ;有開始鍵按下,跳轉(zhuǎn) jz kaishi jmp jxx1 ;無開始鍵按下,跳轉(zhuǎn),繼續(xù)等待 kaishi:lea dx,mess0 ;設(shè)置起步價(jià),單價(jià)提示語 mov ah,09h int 21h call srdq ;設(shè)置白天,晚上的起步價(jià)和單價(jià)子程序 ;設(shè)置按鍵中斷,并開中斷 cli
36、;清中斷標(biāo)志位 mov ah,35h ;讀取原中斷向量 mov al,09h int 21h mov keep_es,es mov keep_bx,bx push ds mov dx,offset jsd ;裝入自編鍵盤中斷程序的中斷矢量 mov ax,seg jsd mov ds,ax mov ah,25h mov al,09h int 21h pop ds in al,21h ;允許鍵盤中斷 and al,0fdh out 21h,al sti ;開中斷 mov bh,00h ;記錄須顯示的初始光標(biāo)的位置 mov ah,03h int 10h mov hang,dh mov lie,dl
37、call xscsh ;顯示初始化 again:cmp speed,0 ;檢測速度是否為零 jz again call getsystime1 ;調(diào)用取開始時(shí)間子程序 jmp lllp1qushi:mov dh,hang ;等待計(jì)時(shí)結(jié)束后,即速度重新由零變?yōu)檎D(zhuǎn)到的位置 mov dl,lie add dh,9 mov bh,00h mov ah,02h int 10h ;置光標(biāo)位置 lea dx,xwtz0 mov ah,09h int 21h ;清楚屏幕停車提示語 mov dh,hang ;置光標(biāo)回到初始位置 mov dl,lie mov bh,00h mov ah,02h int 10
38、h call systime ;調(diào)用取當(dāng)前時(shí)刻時(shí)間子程序lllp1:mov ecx,00ffffffh ;延時(shí),可調(diào)時(shí)長 xh0:loopd xh0 lllp0:call systime ;再次調(diào)用取當(dāng)前時(shí)刻時(shí)間子程序 call duration ;計(jì)算相鄰兩次調(diào)用時(shí)間的時(shí)間差 mov cl,speed cmp cl, 240 jbe lllp mov speed,240lllp:call jichesu ;折算車速 call price ;計(jì)算總里程和總價(jià)格 call youhao ;計(jì)算當(dāng)前油量 call show_zcx ;時(shí)間,總價(jià),車速,油量,總里程顯示子程序 cmp speed,0
39、 ;判斷速度是否為零 jz jjdd ;速度為零跳轉(zhuǎn)到等待計(jì)價(jià)模塊 mov ecx,00ffffffh ;延時(shí),可調(diào)xh1:loopd xh1 jmp lllp0jjdd:call ddjj ;跳到等待計(jì)價(jià)子程序模塊 tuichu:call show_zcx ;顯示子程序 mov ecx,0bfffffffhyanshi10:loopd yanshi10 ;顯示一段時(shí)間 清零 call xscsh ;顯示初始化,清零 mov dh,hang mov dl,lie add dh,10 ;光標(biāo)跳到新的一行顯示結(jié)束,返回dos mov bh,00h mov ah,02h int 10h mov ah
40、,4ch ;按任意鍵返回Dos int 21h main endp;屏幕時(shí)間,總價(jià),速度,油量和總里程顯示子程序 ;show_zcx proc near pusha call getsystime2 call totaltime call totalprice call ddjs call speed_disp call oil_disp call distance_disp mov dh,hang mov dl,lie mov bh,00h mov ah,02h int 10h popa retshow_zcx endp;設(shè)置白天或者晚上起步價(jià)和單價(jià)子程序;通過鍵盤輸入判斷白天黑夜,分別設(shè)置
41、不同的起步價(jià)和單價(jià); srdq proc near pusha;分別輸入白天晚上的起步價(jià)和單價(jià) lea dx,mes1 mov ah,09h int 21h lea dx,keybuf mov ah,0ah int 21h call erjzzh mov pricing1,bl lea dx,mes2 mov ah,09h int 21h lea dx,keybuf mov ah,0ah int 21h call erjzzh mov ppm1,bl lea dx,mes3 mov ah,09h int 21h lea dx,keybuf mov ah,0ah int 21h call erj
42、zzh mov pricing2,bl lea dx,mes4 mov ah,09h int 21h lea dx,keybuf mov ah,0ah int 21h call erjzzh mov ppm2,bl lea dx,mes5 mov ah,09h int 21hl: mov ah,01h ;檢測是否有鍵按下。 int 16h jz l mov ah,0 ;有,就讀入這個(gè)鍵,分別和d和n的ascii比較, int 16h ;讀入是d就講轉(zhuǎn)換的白天值存入內(nèi)存,反之則存入晚上的內(nèi)存 cmp al,d jz day cmp al,n jz night jmp lday: mov dl,p
43、ricing1 mov pricing,dl mov dl,ppm1 mov ppm,dl jmp l1night: mov dl,pricing2 mov pricing,dl mov dl,ppm2 mov ppm,dl l1: popa retsrdq endp ;將白天和晚上的單價(jià)和起步價(jià)分別轉(zhuǎn)換為整數(shù)角;輸入的單價(jià)和起步價(jià)在0.19.9之間;erjzzh proc near push ax push cx push di lp: mov bl,0mov di,0 mov al,keynumdisub al,30h ;轉(zhuǎn)換輸入的第一位mov cl,10mul clmov bl,alin
44、c di mov al,keynumdi cmp al,2eh ;判斷是整數(shù)還是小數(shù),是整數(shù)就直接跳出,是小數(shù)就繼續(xù)運(yùn)算十分位。jnz llp0inc di ;跳過小數(shù)點(diǎn)mov al,keynumdisub al,30hadd bl,al ;將得到的結(jié)果存入寄存器blllp0:pop dipop cx pop ax reterjzzh endp;等待計(jì)價(jià)子程序;ddjj proc neat pusha mov dh,hang ;置光標(biāo)位置 mov dl,lie add dh,9 mov bh,00h mov ah,02h int 10h lea dx,xwtz mov ah,09h int 21h ;顯示提示語 是否按鍵停止計(jì)價(jià)停車,q鍵 mov dh,hang ;置光標(biāo)初始位置 mov dl,lie mov bh,00h mov ah,02h int 10h jxdd: mov ah,2ch ;dos 2c號(hào)功能調(diào)用,獲取系統(tǒng)時(shí)間,ch,cl,dh分別存放小時(shí),分鐘,秒. int 21h mov time5_1,cx mov time5_2,dx in al,60h ;開按鍵中斷int 21h的09h號(hào)功能,讀鍵的掃描碼push ax ;不能使用int 16h的01h和00h號(hào)功能in al,61hor al,80hout 6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 超強(qiáng)脫氧劑項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 中國太陽能蓄電池行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略咨詢報(bào)告
- 安平行業(yè)報(bào)告
- 蕭山區(qū)公共場所管理辦法
- 蕉城市公益捐贈(zèng)管理辦法
- 蛋糕廠生產(chǎn)管理辦法制度
- 衡東縣加裝電梯管理辦法
- 衢江區(qū)水庫流轉(zhuǎn)管理辦法
- 西安市應(yīng)急物資管理辦法
- 規(guī)劃局項(xiàng)目落位管理辦法
- 浙江杭州市2024-2025學(xué)年高一下學(xué)期6月期末考試物理試題及答案
- 員工勸退方案文案(3篇)
- 2025年高考全國一卷數(shù)學(xué)真題-答案
- 生產(chǎn)車間菌種管理制度
- 臨床用血安全管理制度
- 企業(yè)異地作業(yè)管理制度
- 蛇咬傷的急救處理措施
- 2025年內(nèi)蒙古呼倫貝爾農(nóng)墾集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025至2030年中國間規(guī)聚苯乙烯(SPS)行業(yè)市場全景調(diào)查及競爭戰(zhàn)略分析報(bào)告
- 醫(yī)藥研發(fā)體系管理制度
- 八素八少考試試題及答案
評(píng)論
0/150
提交評(píng)論