華中科技大學(xué) 單片機(jī)課設(shè)報(bào)告-頻率計(jì)_第1頁
華中科技大學(xué) 單片機(jī)課設(shè)報(bào)告-頻率計(jì)_第2頁
華中科技大學(xué) 單片機(jī)課設(shè)報(bào)告-頻率計(jì)_第3頁
華中科技大學(xué) 單片機(jī)課設(shè)報(bào)告-頻率計(jì)_第4頁
華中科技大學(xué) 單片機(jī)課設(shè)報(bào)告-頻率計(jì)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

單片機(jī)課程設(shè)計(jì)報(bào)告PAGEPAGE28檢測技術(shù)基本實(shí)驗(yàn)電氣學(xué)科大類電氣學(xué)科大類09級(jí)《51單片機(jī)》課程課程設(shè)計(jì)(周期性脈沖信號(hào)的測量裝置)姓名學(xué)號(hào)專業(yè)班號(hào)指導(dǎo)教師日期實(shí)驗(yàn)成績?cè)u(píng)閱人目錄摘要 3設(shè)計(jì)任務(wù) 4總體方案 4硬件設(shè)計(jì) 5軟件設(shè)計(jì) 6系統(tǒng)聯(lián)調(diào) 10設(shè)計(jì)總結(jié) 14附錄 15摘要單片機(jī)微型計(jì)算機(jī)是微型計(jì)算機(jī)的一個(gè)重要分支,也是頗具生命力的機(jī)種。單片機(jī)微型計(jì)算機(jī)簡稱單片機(jī),特別適用于控制領(lǐng)域,故又稱為微控制器。單片機(jī)是20世紀(jì)中期發(fā)展起來的一種面向控制的大規(guī)模集成電路模塊,具有功能強(qiáng)、體積小、可靠性高、價(jià)格低廉等特點(diǎn),在工業(yè)控制、數(shù)據(jù)采集、智能儀表、機(jī)電一體化、家用電器等領(lǐng)域得到了廣泛的應(yīng)用,極大的提高了這些領(lǐng)域的技術(shù)水平和自動(dòng)化程度。單片機(jī)應(yīng)用的意義絕不僅限于它的廣闊范圍以及帶來的經(jīng)濟(jì)效益,更重要的意義在于,單片機(jī)的應(yīng)用正從根本上改變著傳統(tǒng)的控制系統(tǒng)的設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分控制功能,現(xiàn)在使用單片機(jī)通過軟件就能實(shí)現(xiàn)了。隨著單片機(jī)應(yīng)用的推廣普及,單片機(jī)控制技術(shù)將不斷發(fā)展,日益完善。本文是設(shè)計(jì)頻率/脈沖寬度的測量與顯示的硬件電路與程序的編制。它可以測量脈沖信號(hào)的脈沖寬度,頻率,周期和占空比四個(gè)參數(shù)。利用定時(shí)器的門控信號(hào)GATE進(jìn)行控制可以實(shí)現(xiàn)脈沖寬度的測量,利用定時(shí)器T1計(jì)數(shù)來測量由P3.2口輸入的脈沖信號(hào)的頻率。一.設(shè)計(jì)任務(wù)功能及技術(shù)指標(biāo)要求設(shè)計(jì)一周期性脈沖信號(hào)的測量裝置,要求如下:(1)可以測量脈寬、占空比、周期和頻率;(2)循環(huán)采集計(jì)算上述各量,并用鍵盤選擇對(duì)象顯示;(3)制定可行的系統(tǒng)設(shè)計(jì)方案,完成硬件設(shè)計(jì)、軟件設(shè)計(jì)和軟件調(diào)試。2.設(shè)計(jì)內(nèi)容按照技術(shù)指標(biāo)要求進(jìn)行硬件與軟件設(shè)計(jì)。二.總體方案1.原始思路上升沿打開定時(shí)器上升沿打開定時(shí)器下降沿讀取定時(shí)器值并保存下一個(gè)上升沿關(guān)閉定時(shí)器,讀取定時(shí)器值并保存如上圖所示,當(dāng)脈沖的上升沿來臨時(shí),將定時(shí)器打開;緊接著的下降沿來臨時(shí),讀取定時(shí)器的值,假設(shè)定時(shí)時(shí)間為t1;下一個(gè)上升沿來臨時(shí)關(guān)閉定時(shí)器,讀取定時(shí)器的值,假設(shè)定時(shí)時(shí)間為t2。t1即為1個(gè)周期內(nèi)高電平的時(shí)間,t2即為脈沖的周期。t1/t2即為占空比,1/t2即為頻率。2.利用MCS-51實(shí)現(xiàn)(1).設(shè)定一個(gè)外部中斷,響應(yīng)1次外部中斷,在中斷程序中測量參數(shù)。(2).將脈沖信號(hào)從P3.2腳引入,將T1設(shè)為定時(shí)器方式工作,運(yùn)行控制位TR1啟動(dòng)定時(shí)器,采用方式1--16位定時(shí)器,初值TH1、TL1設(shè)為零。在待測脈沖高電平期間,T1對(duì)內(nèi)部周期脈沖進(jìn)行計(jì)數(shù)。在待測脈沖高電平結(jié)束時(shí),其下降沿向P3.2發(fā)中斷,在外中斷1的中斷服務(wù)程序中,讀取TH1、TL1的計(jì)數(shù)值,該值就是待測脈沖的高電平時(shí)間。隨后清零TH1和TL1,以便下一次的測量。(3).利用第二步測出的高電平時(shí)間,通過計(jì)算公式,分別計(jì)算出脈沖寬度,頻率,周期和占空比。(4).將上述四個(gè)參數(shù)結(jié)果用6位LED動(dòng)態(tài)顯示出來(用按鍵控制顯示)。三.硬件設(shè)計(jì)1.硬件配置以80C51單片機(jī)為核心構(gòu)成基本應(yīng)用系統(tǒng)。用到了模塊如下: 6位LED動(dòng)態(tài)顯示P3.2信號(hào)輸入口核心板上4位按鍵(P1.4到P1.7)TTL輸出方波的信號(hào)發(fā)生器80C51上的存儲(chǔ)器系統(tǒng)2.電路接線圖四.軟件設(shè)計(jì)1.設(shè)計(jì)思路 (1)測量被測信號(hào)高電平時(shí)間。 如果測量時(shí)記錄量如下圖 (每50ms測量一次)第一個(gè)上升沿時(shí),記下為m第一個(gè)上升沿時(shí),記下為m第一個(gè)下降沿時(shí),記下為n。第一個(gè)高電平內(nèi),溢出次數(shù)記為C1下一個(gè)上升沿時(shí),記下為h。這一個(gè)周期內(nèi)溢出次數(shù)記為C2 則高電平時(shí)間為 T=50000*C1+n-m(us) 周期為 P=50000*C2+h-m(us) (2)周期,脈寬,占空比,頻率之間的轉(zhuǎn)換。 記周期,脈寬,占空比,頻率四值分別為P、H、R、F,且高電平時(shí)間為T,則這五個(gè)量之間的關(guān)系為: R=H/P,F(xiàn)=1/P,H=T (3)解決可以連續(xù)測量的問題。 一次測量顯示后,跳轉(zhuǎn)到開始,不斷循環(huán)測量顯示。 (4)將測量的值轉(zhuǎn)化為可以直接顯示的十進(jìn)制數(shù)。 通過二進(jìn)制轉(zhuǎn)換十進(jìn)制子程序HTD完成這一目標(biāo)。 (5)周期,脈寬,占空比,頻率四個(gè)量的顯示切換問題。 只用四個(gè)按鍵中的一個(gè)(P1.4)來顯示依此四個(gè)量:默認(rèn)顯示為頻率,按一次按鍵顯示轉(zhuǎn)為脈寬,再按一次轉(zhuǎn)為占空比,再按一次轉(zhuǎn)為周期。(6)整體調(diào)用子程序順序。依次調(diào)用測量、計(jì)算、按鍵處理、數(shù)值轉(zhuǎn)換、顯示和延時(shí)子程序流程圖整體流程圖如下:開始開始定義過程初始化各量選擇中斷觸發(fā)方式調(diào)用測量子程序調(diào)用計(jì)算子程序調(diào)用按鍵處理子程序調(diào)用數(shù)值轉(zhuǎn)換子程序調(diào)用顯示子程序調(diào)用延時(shí)子程序R4=0?否是測量電路框圖:3.課程設(shè)計(jì)程序見附錄五.系統(tǒng)聯(lián)調(diào)通過對(duì)程序的匯編,連接,執(zhí)行來發(fā)現(xiàn)程序中存在的語法錯(cuò)誤和邏輯錯(cuò)誤,并加以糾正。1.按鍵處理問題一開始,我想用P1.4到P1.7四個(gè)按鍵分別控制顯示周期,脈寬,占空比,頻率四個(gè)量。用的按鍵處理子程序如下:KEY: JB P1.7,KEY1 MOV NUMBERL,FREL MOV NUMBERH,FREH RETIKEY1: JB P1.6,KEY2 MOV NUMBERL,PERIODL MOV NUMBERH,PERIODH RETIKEY2: JB P1.5,KEY3 MOV NUMBERL,LENL MOV NUMBERH,LENH RETIKEY3: JB P1.4,LOOP MOV NUMBERL,RATIOL MOV NUMBERH,RATIOH RETILOOP: LJMP MAIN然而,我發(fā)現(xiàn)了一個(gè)很嚴(yán)重的問題:用這種方法,必須將各個(gè)按鍵按住不放才能連續(xù)不斷顯示,一旦松開手,就停止顯示。進(jìn)過分析,這個(gè)問題的癥結(jié)在于,每個(gè)按鍵按下后缺少一個(gè)延時(shí)時(shí)間。按下這個(gè)鍵的時(shí)間必須超過延時(shí)時(shí)間,才算此鍵真正按下。經(jīng)改進(jìn)后,我僅用一個(gè)按鍵P1.4依次顯示周期,脈寬,占空比,頻率四個(gè)量。每按下一次鍵,即顯示一個(gè)量,功能號(hào)KBM自動(dòng)加1,當(dāng)檢測到功能號(hào)為3時(shí),則清零,返回到第一個(gè)量的顯示。改進(jìn)后子程序如下:KEY: JB P1.4,KEY1 ;查詢K0,若K0未按下則跳轉(zhuǎn) LCALL DELAY ;延時(shí)去抖動(dòng),順便刷新顯示 JB P1.4,KEY1 ;若K0未真正按下則跳轉(zhuǎn) INC KBM ;K0真正按下,功能號(hào)增1 MOV A,KBM CJNE A,#4,KEY0 MOV KBM,#0 ;若功能號(hào)為3,則清零 RETIKEY0: NOP AJMP KEY1 ;跳轉(zhuǎn)至按鍵結(jié)束處理程序 RETIKEY1: NOP ;以下程序根據(jù)功能號(hào)顯示不同內(nèi)容 MOV A,KBM CJNE A,#0,KEY2 MOV NUMBERL,FREL MOV NUMBERH,FREH LJMP KEY5KEY2: CJNE A,#1,KEY3 MOV NUMBERL,PERIODL MOV NUMBERH,PERIODH LJMP KEY5KEY3: CJNE A,#2,KEY4 MOV NUMBERL,LENL MOV NUMBERH,LENH LJMP KEY5KEY4: CJNE A,#3,KEY5 MOV NUMBERL,RATIOL MOV NUMBERH,RATIOHKEY5: LCALL HTD MOV R4,#30H LJMP MAIN2 2.最終測量頻率范圍 本設(shè)計(jì)方案采用6位LED動(dòng)態(tài)顯示,我采用其中低五位為頻率顯示位數(shù),故理想的頻率上限為65536Hz;頻率顯示下限則由硬件極限決定,大約在50Hz左右。 在我最終驗(yàn)收調(diào)試過程中,頻率顯示上限位62250Hz,與理想的65536Hz有些許差距,我想估計(jì)是與干擾,硬件誤差有關(guān)。而頻率顯示下限則為26Hz,達(dá)到了很高的標(biāo)準(zhǔn)。在逼近下限的過程中,當(dāng)頻率低到100Hz,LED屏幕有明顯的閃動(dòng),那是因?yàn)轭l率太低,由于人眼的暫留效應(yīng),已經(jīng)難以看到連續(xù)的顯示情況。 綜上,此次頻率計(jì)的設(shè)計(jì)測量頻率范圍為26Hz到62250Hz。 3.有關(guān)除法的問題 本實(shí)驗(yàn)涉及到雙字節(jié)二進(jìn)制乘除法運(yùn)算,我曾嘗試過用書本上的內(nèi)容,自己編寫除法程序,如下所示:入口條件:被除數(shù)在R2、R3、R4、R5中,除數(shù)在R6、R7中。

出口信息:OV=0時(shí),雙字節(jié)商在R2、R3中,OV=1時(shí)溢出。

影響資源:PSW、A、B、R1~R7堆棧需求:2字節(jié)

DIVD:CLRC;比較被除數(shù)和除數(shù)

MOVA,R3

SUBBA,R7

MOVA,R2

SUBBA,R6

JCDVD1

SETBOV;溢出

RET

DVD1:MOVB,#10H;計(jì)算雙字節(jié)商

DVD2:CLRC;部分商和余數(shù)同時(shí)左移一位

MOVA,R5

RLCA

MOVR5,A

MOVA,R4

RLCA

MOVR4,A

MOVA,R3

RLCA

MOVR3,A

XCHA,R2

RLCA

XCHA,R2

MOVF0,C;保存溢出位

CLRC

SUBBA,R7;計(jì)算(R2R3-R6R7)

MOVR1,A

MOVA,R2

SUBBA,R6

ANLC,/F0;結(jié)果判斷

JCDVD3

MOVR2,A;夠減,存放新的余數(shù)

MOVA,R1

MOVR3,A

INCR5;商的低位置一

DVD3:DJNZB,DVD2;計(jì)算完十六位商(R4R5)

MOVA,R4;將商移到R2R3中

MOVR2,A

MOVA,R5

MOVR3,A

CLROV;設(shè)立成功標(biāo)志

RET后來,孫開放老師給了我們雙字節(jié)二進(jìn)制無符號(hào)數(shù)除法,雙字節(jié)二進(jìn)制無符號(hào)數(shù)乘法,這兩個(gè)非常有用的工具子程序,經(jīng)過上機(jī)調(diào)試,我編寫的和老師提供的均能很好地運(yùn)作,本文附錄中的程序使用的是孫老師的乘除子程序。六.設(shè)計(jì)總結(jié)經(jīng)過前一個(gè)學(xué)期的單片機(jī)的學(xué)習(xí),我有機(jī)會(huì)又學(xué)到了一種新的機(jī)器語言。經(jīng)過孫老師詳細(xì)講解我已對(duì)單片機(jī)的各個(gè)指令功能,尋址方式,程序設(shè)計(jì)方法有了初步了解。但畢竟課本上的只是理論。這次課設(shè)我分到的任務(wù)是外部輸入正脈沖寬度的測量,科設(shè)的題目綜合性很強(qiáng),用到了外部中斷,定時(shí)器T1的方式1,數(shù)制轉(zhuǎn)換,數(shù)碼管顯示等等。平時(shí)學(xué)習(xí)時(shí)我們都學(xué)到了各子模塊的程序,到真正將它們綜合起來去控制實(shí)驗(yàn)箱還是第一次。首先在編寫程序時(shí)我就遇到了很大的困難,編寫程序需要有一個(gè)冷靜的頭腦,心浮氣躁是不行的。遇到困難時(shí)更是要心平氣和,細(xì)致思考。幸運(yùn)的是在和同學(xué)激烈討論,老師細(xì)心指導(dǎo)下我順利完成了課設(shè)。最終的程序由主程序,測量子程序,計(jì)算子程序,按鍵處理程序,顯示子程序五個(gè)主體模塊,和幾個(gè)工具子程序組成。在對(duì)程序的宏觀理解基礎(chǔ)上,細(xì)微處理決定成敗。課設(shè)讓我對(duì)單片機(jī)軟件與硬件結(jié)合有了一定的了解,也激發(fā)了我學(xué)習(xí)這門課的熱情,同時(shí)我也認(rèn)識(shí)到現(xiàn)在知道的單片機(jī)知識(shí)遠(yuǎn)遠(yuǎn)不夠,要想要將所學(xué)運(yùn)用到實(shí)際工作中還需刻苦努力鉆研,大量實(shí)踐。在以后的學(xué)習(xí)中我一定注意這方面的練習(xí)。七.附錄以下為整個(gè)程序:;顯示模塊所用寄存器D_DAT0 EQU 60HD_DAT1 EQU 61HD_DAT2 EQU 62HD_DAT3 EQU 63HD_DAT4 EQU 64HD_DAT5 EQU 65H;測量模塊所用寄存器COUNT EQU 40HAL AH EQU 42HC1 EQU 43HBL EQU 44HBH EQU 45HC2 EQU 46HCL EQU 47HCH EQU 48HC3 EQU 49HHTIMEL EQU 50H HTIMEH EQU 51H ;高電平時(shí)間PERIODL EQU 52HPERIODH EQU 53H ;周期LENL EQU 54HLENH EQU 55H ;脈沖寬度RATIOL EQU 56HRATIOH EQU 57H ;占空比FREL EQU 58HFREH EQU 59H ;頻率,以上5個(gè)參數(shù)均為雙字節(jié);計(jì)算中間量所用寄存器NUMBERL EQU 69HNUMBERH EQU 6AH OL EQU 6BHCL EQU 6CHKBM EQU 6DH;定義完畢ORG 0000HAJMP STARTORG 001BH ;采用定時(shí)器1LJMP TI_1ORG 0030HSTART: MOV SP,#30H CLR P1.1 ;初始化有關(guān)I/O口 CLR P1.2 MOV KBM,#0 MOV OL,#0 MOV CL,#0 MOV TMOD,#10H;運(yùn)行控制位TR1啟動(dòng)定時(shí)器,定時(shí)器工作方式,采用方式1--16位定時(shí)器 MOV TL1,#0 MOV TH1,#0 MOV D_DAT5,#01H;初始化中間量寄存器 MOV D_DAT4,#02H MOV D_DAT3,#03H MOV D_DAT2,#04H MOV D_DAT1,#05H MOV D_DAT0,#06H MOV COUNT,#0;初始化count寄存器為0 MOV R0,#D_DAT0 MOV R1,#01H SETB IT0 ;中斷觸發(fā)方式--脈沖觸發(fā) SETBET1 SETB EAMAIN: LCALL MEASURE ;這里在主程序中,依此調(diào)用測量、計(jì)算、 ;按鍵處理、數(shù)值轉(zhuǎn)換、顯示和延時(shí)子;程序MAIN1: LCALL CALCUL LCALL KEYMAIN2: LCALL HTD LCALL DISPLAY LCALL DELAY DJNZ R4,MAIN2 LJMP MAIN;*************************測量子程序**************************MEASURE: JB P3.2,MEASURE SETB TR1WAIT1: JNB P3.2,WAIT1 MOV AL,TL1 MOV AH,TH1 MOV C1,COUNTWAIT2: JB P3.2,WAIT2 MOV BL,TL1 MOV BH,TH1 MOV C2,COUNTWAIT3: JNB P3.2,WAIT3 MOV CL,TL1 MOV CH,TH1 MOV C3,COUNT CLR TR1 MOV COUNT,#0 MOV TL1,#0 MOV TH1,#0TIM_1: INC COUNT RETI;*************************計(jì)算子程序**************************CALCUL: MOV R2,C2 MOV R3,BH MOV R4,BL MOV R6,AH MOV R7,AL MOV R5,C1 LCALL JIAN ;對(duì)下降沿、上升沿采集點(diǎn)進(jìn)行減法運(yùn)算 MOV HTIMEL,R4 MOV HTIMEH,R3 ;計(jì)算高電平時(shí)間 MOV R3,CH MOV R4,CL MOV R6,AH MOV R7,AL LCALL JIAN MOV PERIODL,R4 MOV PERIODH,R3 ;計(jì)算脈沖信號(hào)的周期,單位微秒 MOV A,HTIMEL MOV LENL,A MOV A,HTIMEH MOV LENH,A ;由高電平時(shí)間得到脈寬,單位微秒 MOV R2,LENH MOV R3,LENL MOV R6,#0 MOV R7,#100 LCALL CHEN MOV R6,PERIODH MOV R7,PERIODL LCALL CHU MOV RATIOH,R4 MOV RATIOL,R5 ;脈寬x100/周期=占空比 MOV R2,#0 MOV R3,#0FH MOV R4,#42H MOV R5,#40H MOV R6,PERIODH MOV R7,PERIODL LCALL CHU MOV FREH,R4 MOV FREL,R5 ;10^6/周期=頻率,單位HZ RET;**********************按鍵處理程序**********************KEY: JB P1.4,KEY1 ;查詢K0,若K0未按下則跳轉(zhuǎn) LCALL DELAY ;延時(shí)去抖動(dòng),順便刷新顯示 JB P1.4,KEY1 ;若K0未真正按下則跳轉(zhuǎn) INC KBM ;K0真正按下,功能號(hào)增1 MOV A,KBM CJNE A,#4,KEY0 MOV KBM,#0 ;若功能號(hào)為3,則清零 RETIKEY0: NOP AJMP KEY1 ;跳轉(zhuǎn)至按鍵結(jié)束處理程序 RETIKEY1: NOP ;以下程序根據(jù)功能號(hào)顯示不同內(nèi)容 MOV A,KBM CJNE A,#0,KEY2 MOV NUMBERL,FREL MOV NUMBERH,FREH LJMP KEY5KEY2: CJNE A,#1,KEY3 MOV NUMBERL,PERIODL MOV NUMBERH,PERIODH LJMP KEY5KEY3: CJNE A,#2,KEY4 MOV NUMBERL,LENL MOV NUMBERH,LENH LJMP KEY5KEY4: CJNE A,#3,KEY5 MOV NUMBERL,RATIOL MOV NUMBERH,RATIOHKEY5: LCALL HTD MOV R4,#30H LJMP MAIN2;***********************二進(jìn)制轉(zhuǎn)換十進(jìn)制子程序*************************HTD: MOV D_DAT5,#00H MOV D_DAT4,#00H MOV D_DAT3,#00H MOV D_DAT2,#00H MOV D_DAT1,#00H MOV D_DAT0,#00HH10000: CLR C ;進(jìn)位位C清0 MOV A,NUMBERL ;源數(shù)據(jù)低位裝載到累加器A中 MOV R6,A ;備份源數(shù)值低位到寄存器R6中 SUBB A,#10H ;源數(shù)值低位減去10000的低位10H MOV NUMBERL,A ;余數(shù)存回到源數(shù)值低位存儲(chǔ)單元 MOV A,NUMBERH ;源數(shù)值高位裝載到累加器A中 MOV R7,A ;備份源數(shù)值高位到寄存器R7中 SUBB A,#27H ;源數(shù)值高位帶借位減10000的高位27H MOV NUMBERH,A ;余數(shù)存回到源數(shù)值低位存儲(chǔ)單元 INC D_DAT1 ;萬位增1 JNC H10000 ;如果沒有借位則利用余數(shù)循環(huán)再減 MOV NUMBERL,R6 MOV NUMBERH,R7 ;有借位表明為最后一次無效減 ;程序順序執(zhí)行,應(yīng)還原最后一次修改值 ;用備份值作為新的源數(shù)值(余數(shù)) DEC D_DAT1 ;萬位數(shù)減1,去掉最后一次無效減的影響H1000: MOV A,NUMBERL ;源數(shù)值低位裝載到累加器A中 MOV R6,A ;備份源數(shù)值低位到寄存器R6中 CLR C ;清0進(jìn)位位C SUBB A,#0E8H ;減去1000的低位0E8H MOV NUMBERL,A ;存回余數(shù)低位 MOV A,NUMBERH ;取源數(shù)值高位 MOV R7,A SUBB A,#03H ;減1000的高位03H MOV NUMBERH,A ;存回余數(shù)高位 ;有借位則跳到下一步繼續(xù)運(yùn)算 INC D_DAT2 ;沒有借位,百位增1 JNC H1000 MOV NUMBERL,R6 MOV NUMBERH,R7 ;沒有借位繼續(xù)減 ;注意本輪循環(huán)中最后一次減時(shí)百位未增1 DEC D_DAT2 ;所以不存在還原的問題 ;進(jìn)入下一輪時(shí),源數(shù)值(余數(shù))都在R6中H100: MOV A,NUMBERL ;源數(shù)值低位裝載到累加器A中 MOV R6,A ;備份源數(shù)值低位到寄存器R6中 CLR C ;清0進(jìn)位位C SUBB A,#100 ;減去100 MOV NUMBERL,A ;存回余數(shù)低位 MOV A,NUMBERH ;取源數(shù)值高位 SUBB A,#00H ;減100的高位0,實(shí)際上是減去借位位 MOV NUMBERH,A ;存回余數(shù)高位 JC H10 ;有借位則跳到下一步繼續(xù)運(yùn)算 INC D_DAT3 ;沒有借位,百位增1 AJMP H100 ;沒有借位繼續(xù)減 ;注意本輪循環(huán)中最后一次減時(shí)百位未增1 ;所以不存在還原的問題 ;進(jìn)入下一輪時(shí),源數(shù)值(余數(shù))都在R6中H10: CLR C MOV A,R6 ;源數(shù)值(低位)裝載到累加器A中 ;到此源數(shù)值高位已經(jīng)為0,不用再參加計(jì)算 MOV D_DAT5,A ;存回源數(shù)值低位 ;如果是最后一次減,則此值即為個(gè)位 SUBB A,#10 ;減去10 MOV R6,A ;保存余數(shù) JC H1 ;有借位,運(yùn)算結(jié)束 INC D_DAT4 ;沒有借位,十位增1 LJMP H10 ;沒有借位繼續(xù)減H1: RET ;子程序返回;****************************顯示子程序****************************DISPLAY: MOV A,R1 ;取位代碼 MOV P0,A ;位代碼送P0口 SETB P1.2 NOP CLR P1.2 ;產(chǎn)生一個(gè)鎖存脈沖,鎖存位代碼 MOV A,@R0 ;取需顯示的數(shù)字 MOV DPTR,#DISPD ;裝載筆畫編碼表首地址 MOVC A,@A+DPTR ;取需顯示數(shù)字筆畫代碼 MOV P0,A ;筆畫代碼送到P0口 SETB P1.1 NOP CLR P1.1 ;產(chǎn)生一個(gè)鎖存脈沖,鎖存筆畫代碼 INC R0 ;R0增1指向下一個(gè)需顯示數(shù)字 MOV A,R1 CLR C RLC A MOV R1,A ;R1中的值左移1位,指向下一位數(shù)碼管 CJNE R0,#066H,DISP1 ;R0中不為20H則繼續(xù) MOV R0,#D_DAT0 ;R0中為20H,循環(huán)完一輪 ;重新賦初值 MOV R1,#1 ;位置代碼初?DISP1: NOP RET;**************************雙字節(jié)減法*************************JIAN: CLR C MOV A,R4 ;R2,R3,R4,分別為被減數(shù)的溢出位,高8位和低8位,R5,R6,R7分別為減數(shù)的溢出位,高8位和低6位,結(jié)果存于R2,R3,R4 SUBB A,R7 MOV R4,A MOV A,R3 SUBB A,R6 MOV R3,A MOV A,R2 SUBB A,R5 MOV R2,A RET ;******************雙字節(jié)二進(jìn)制無符號(hào)數(shù)除法*******************;入口條件:被除數(shù)在R2、R3、R4、R5中,除數(shù)在R6、R7中;;出口信息:OV=0時(shí),商在R4、R5中,余數(shù)在R2、R3中,OV=1時(shí)溢出;;影響資源:PSW、A、B、R1~R7堆棧需求:2字節(jié)。;*************************************************************CHU:DIVD: CLRC ;比較被除數(shù)和除數(shù) MOV A,R3 SUBB A,R7 MOV A,R2 SUBB A,R6 JC DVD1 SETB OV ;溢出 RETDVD1: MOV B,#10H ;計(jì)算雙字節(jié)商DVD2: CLRC ;部分商和余數(shù)同時(shí)左移一位 MOV A,R5 RLC A ;R5循環(huán)左移 MOV R5,A MOV A,R4 RLC A ;R4循環(huán)左移 MOV R4,A MOV A,R3 RLC A ;R3循環(huán)左移 MOV R3,A XCH A,R2 ;取R2中的值至A,A的值(循環(huán)左移后的R3的值)保存到R2 RLC A ;R2循環(huán)左移 XCH A,R2 ;保存循環(huán)左移后的R2的值至R2,恢復(fù)循環(huán)左移后的R3的值至A MOV F0,C ;保存移出位 CLR C SUBB A,R7 ;計(jì)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論