《單片機(jī)技術(shù)及應(yīng)用項(xiàng)目化教程》課件第6章_第1頁(yè)
《單片機(jī)技術(shù)及應(yīng)用項(xiàng)目化教程》課件第6章_第2頁(yè)
《單片機(jī)技術(shù)及應(yīng)用項(xiàng)目化教程》課件第6章_第3頁(yè)
《單片機(jī)技術(shù)及應(yīng)用項(xiàng)目化教程》課件第6章_第4頁(yè)
《單片機(jī)技術(shù)及應(yīng)用項(xiàng)目化教程》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

項(xiàng)目六綜合應(yīng)用項(xiàng)目

任務(wù)1遠(yuǎn)程報(bào)警裝置的設(shè)計(jì)任務(wù)2出租車計(jì)費(fèi)器的設(shè)計(jì)任務(wù)1遠(yuǎn)程報(bào)警裝置的設(shè)計(jì)

知識(shí)目標(biāo):了解和掌握單片機(jī)的外圍基本芯片的搭接方法,掌握DS18B20溫度模塊、數(shù)據(jù)處理模塊及顯示模塊的設(shè)計(jì)方法。

能力目標(biāo):掌握DS18B20的搭建方式、通信過(guò)程和LCD顯示模塊的設(shè)計(jì)方法。

1.任務(wù)要求

(1)以MCS-51系列單片機(jī)為核心器件,組成一個(gè)遠(yuǎn)程報(bào)警裝置。

(2)本裝置的溫度范圍為?-20℃~70℃。

(3)溫度用LCD顯示,至少能夠顯示一位小數(shù)。

(4)能設(shè)定報(bào)警溫度。

2.硬件設(shè)計(jì)

本設(shè)計(jì)主要有DS18B20芯片、LCD顯示模塊及報(bào)警用的蜂鳴器,其硬件總體設(shè)計(jì)如圖6-1所示。

3.主程序流程圖

主程序流程圖如圖6-2所示。圖6-1硬件總體設(shè)計(jì)圖6-2主程序流程圖

4.主程序設(shè)計(jì)

程序清單如下:

LED_0 EQU 30H

LED_1 EQU 31H

LED_2 EQU 32H

ADC EQU 35H

TCNTA EQU 36H

TCNTB EQU 37H

H_TEMP EQU 46H ;溫度上限

L_TEMP EQU -14H ;溫度下限

FLAG BIT 00H

H_ALM BIT P3.0

L_ALM BIT P3.1

SOUND BIT P3.7

CLOCK BIT P2.4

ST BIT P2.5

EOC BIT P2.6

OE BIT P2.7

ORG 00H

SJMP START

ORG 0BH

LJMP INT_T0

ORG 1BH

LJMP INT_T1

START: MOV LED_0, #00H

MOV LED_1, #00H

MOV LED_2, #00H

MOV DPTR, #TABLE

MOV H_TEMP, #60

MOV L_TEMP, #30

MOV TMOD, #12H

MOV TH0, #245

MOV TL0, #0

MOV TH1, #(65536-1000)/256

MOV TL1, #(65536-1000)%256

MOV IE, #8aH

CLR C

SETB TR0 ;為ADC0808提供時(shí)鐘

WAIT: SETB H_ALM

SETB L_ALM

CLR ST

SETB ST

CLR ST ;啟動(dòng)轉(zhuǎn)換

JNB EOC,$

SETB OE

MOV ADC,P1 ;讀取A/D轉(zhuǎn)換結(jié)果

CLR OE

MOV A,ADC

SUBB A,#30 ;判斷是否低于下限

JC LALM

MOV A,H_TEMP

MOV R0,ADC

SUBB A,R0 ;判斷是否高于上限

JC HALM

CLR TR1

LJMP PTOC

LALM: ;低溫報(bào)警

CLR L_ALM

SETB TR1

CLR FLAG

LJMP PTOC

HALM: ;高溫報(bào)警

CLR H_ALM

SETB TR1

SETB FLAG

LJMP PtOC

PTOC: MOV A,ADC ;數(shù)值轉(zhuǎn)換

MOV B,#100

DIV AB

MOV LED_2,A

MOV A,B

MOV B,#10

DIV AB

MOV LED_1,A

MOV LED_0,B

LCALL DISP

SJMP WAIT

INT_T0: CPL CLOCK ;提供89C51時(shí)鐘

RETI

INT_T1: MOV TH1,#(65536-1000)/256

MOV TL1,#(65536-1000)%256

CPL SOUND

INC TCNTA

MOV A,TCNTA

JB FLAG,I1 ;判斷是高溫警報(bào)還是低溫警報(bào)

CJNE A,#30,RETUNE ;低溫警報(bào)聲

SJMP I2

I1: CJNE A,#20,RETUNE ;高溫警報(bào)聲

I2: MOV TCNTA,#0

INC TCNTB

MOV A,TCNTB

CJNE A,#25,RETUNE

MOV TCNTA,#0

MOV TCNTB,#0

LCALL DELAY2

RETUNE: RETI

DISP: MOV A,LED_0 ;數(shù)碼顯示子程序

MOVC A,@A+DPTR

CLR P2.3

MOV P0,A

LCALL DELAY

SETB P2.3

MOV A,LED_1

MOVC A,@A+DPTR

CLR P2.2

MOV P0,A

LCALL DELAY

SETB P2.2

MOV A,LED_2

MOVC A,@A+DPTR

CLR P2.1

MOV P0,A

LCALL DELAY

SETB P2.1

RET

DELAY: MOV R6,#10

D1: MOV R7,#250

DJNZ R7,$

DJNZ R6,D1

RET

DELAY2: MOV R5,#20

D2: MOV R6,#20

D3: MOV R7,#250

DJNZ R7,$

DJNZ R6,D3

DJNZ R5,D2

RET

TABLE: DB3FH,06H,5BH,4FH,66H

DB6DH,7DH,07H,7FH,FH

END

5.知識(shí)鏈接

1)

DS18B20原理及引腳介紹

DS18B20數(shù)字溫度計(jì)是DALLAS公司生產(chǎn)的1-Wire(即單總線器件),具有線路簡(jiǎn)單、體積小的特點(diǎn)。因此,用它來(lái)組成一個(gè)測(cè)溫系統(tǒng),線路簡(jiǎn)單,并且在一根通信線上,可以掛很多這樣的數(shù)字溫度計(jì),十分方便。DS18B20產(chǎn)品的特點(diǎn)如下:

(1)只要求一個(gè)端口即可實(shí)現(xiàn)通信。

(2)在DS18B20中的每個(gè)器件上都有獨(dú)一無(wú)二的序列號(hào)。

(3)實(shí)際應(yīng)用中不需要外部任何元器件即可實(shí)現(xiàn)測(cè)溫。

(4)測(cè)量溫度范圍為-55℃~+125℃。

(5)數(shù)字溫度計(jì)的分辨率用戶可以從9位到12位選擇。

(6)內(nèi)部有溫度上、下限告警設(shè)置。

DS18B20的引腳功能描述如下:

(1)?GND—地信號(hào)。

(2)?DQ—數(shù)據(jù)輸入/輸出引腳。開(kāi)漏極單總線接口引腳。當(dāng)工作于寄生電源時(shí),也可以向器件提供電源。

(3)?VDD—電源引腳。當(dāng)工作于寄生電源時(shí),此引腳必須接地。

2)?DS18B20控制命令

DS18B20的ROM命令如表6-1所示。

DS18B20存儲(chǔ)控制命令如表6-2所示。

表6-1DS18B20的ROM命令

表6-2DS18B20存儲(chǔ)控制命令

DS18B20程序如下:

WENDU_L EQU29H ;用于保存讀出溫度的低字節(jié)

WENDU_H EQU28H ;用于保存讀出溫度的高字節(jié)

XIAOSHU EQU27H ;用于保存溫度的小數(shù)部分

ZHENGSHU EQU26H ;用于保存整數(shù)部分

BIAOZHI BIT50H ;DS18B20檢查位:1為存在,0為不存在

ORG

0000H

AJMP MAIN

ORG 0030H

MAIN: MOV SCON,#00H

ACALL DUWEN

ACALL ZHENGHE

ACALL BCD

ACALL DISP

ACALL TIME1

AJMP MAIN

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;讀溫度子程序

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

DUWEN: SETBP2.0

ACALLFUWEI

;讀溫度之前必須先復(fù)位

JBBIAOZHI,CUNZAI ;查看標(biāo)志位看DS18B20是否存在,1為存在,0為不存在

RET

;不存在則返回

CUNZAI:

;存在則開(kāi)始讀溫度

MOV A,#0CCH

;跳過(guò)ROM匹配

ACALL XIE

;調(diào)寫(xiě)子程序

MOV A,#44H

;發(fā)出溫度轉(zhuǎn)換命令

ACALL XIE

;調(diào)寫(xiě)子程序

ACALL TIME1

;調(diào)1秒延時(shí),等A/D轉(zhuǎn)換完成,現(xiàn)在分辨率為12位,

;溫度最大轉(zhuǎn)換時(shí)間為750ms

ACALL FUWEI

;讀溫前需要復(fù)位

MOV A,#0CCH

;跳過(guò)ROM匹配

ACALL XIE

MOV A,#0BEH

;發(fā)讀溫度命令

ACALL XIE

ACALL DUSHU

;將輸出數(shù)據(jù)讀回

CLR P1.2

RET

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;復(fù)位子程序

;DS18B20復(fù)位需要將數(shù)據(jù)位拉低500μs

;DS18B20收到信號(hào)后要等待16~60μs,然后發(fā)出60~240μs的低脈沖

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

FUWEI: SETB P2.0

NOP

CLR P2.0

MOV R0,#3

INTE: MOV R1,#107

;設(shè)一個(gè)537μs延時(shí)

KK1: DJNZ R1,KK1

DJNZ R0,INTE

SETB P2.0

;拉高數(shù)據(jù)線,等待回應(yīng)

NOP

NOP

NOP

MOV R0,#25

INTE1: JNB P2.0,INTE2 ;延時(shí)50μs等待DS18B20回應(yīng),若返回低脈沖則

;說(shuō)明DS18B20存在

DJNZ R0,INTE1

AJMP INTE3

;經(jīng)過(guò)反應(yīng)時(shí)間而未檢測(cè)到DS18B20的存在,

;則跳轉(zhuǎn)去清零標(biāo)志位

INTE2: SETB BIAOZHI

;檢測(cè)到DS18B20存在,標(biāo)志位置1

CLR P1.0

AJMP INTE4

INTE3: CLR BIAOZHI

;未檢測(cè)到DS18B20,標(biāo)志位清零

AJMP INTE5

INTE4: MOV R0,#120

;延時(shí)240μs,確定回應(yīng)信號(hào)已發(fā)完

KK:

DJNZ R0,KK

INTE5: SETB P2.0

RET

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;寫(xiě)DS18B20子程序

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

XIE: MOV R2,#8

;寫(xiě)計(jì)數(shù)寄存器,一共有8位數(shù)據(jù)

CLR C

LP: CLR P2.0

MOV R3,#6

;設(shè)一個(gè)延時(shí)

LL1: DJNZ R3,LL1

RRC A

;右循環(huán),先輸出低位

MOV P2.0,C

MOV R3,#23

;設(shè)延時(shí)

LL: DJNZ R3,LL

SETB P2.0

NOP

NOP

DJNZ R2,LP

;判斷是否完成數(shù)據(jù)傳送

SETB P2.0

;完成傳送,拉高數(shù)據(jù)位

RET

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;從DS18B20中讀出溫度數(shù)據(jù)子程序

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

DUSHU: MOV R4,#2

;設(shè)讀回?cái)?shù)據(jù)個(gè)數(shù)指針

MOV R1,#WENDU_L

;把溫度數(shù)據(jù)低位存入29H

RE: MOV R2,#8

;設(shè)數(shù)據(jù)長(zhǎng)度指針

RE1:

CLR

C

SETB P2.0

NOP

NOP

CLR P2.0

NOP

NOP

NOP

SETB P2.0

MOV R3,#9

DJNZ R3,$

MOV C,P2.0

MOV R3,#23

NN:

DJNZ R3,NN

RRC

A

DJNZ R2,RE1

MOV @R1,A

DEC R1

;高位存入28H

DJNZ R4,RE

RET

;-----------------------------------------------------------------------

------------------------------------------------------------------------

;數(shù)據(jù)整合子程序

;溫度源數(shù)據(jù)的整合,讀出數(shù)據(jù)的高字節(jié)的低四位決定溫度的整數(shù)部分

;低字節(jié)的低四位決定小數(shù)部分

;------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

ZHENGHE:

MOV A,#0FH

ANL A,WENDU_L

;低字節(jié)的低四位就是小數(shù)部分

MOV XIAOSHU,A

;獲得小數(shù)部分

MOV A,WENDU_L

;將高字節(jié)的低四位移入低字節(jié)的高四位

MOV C,40H

;獲得的新字節(jié)就是整數(shù)部分的數(shù)據(jù)

RRC A

MOV C,41H

RRC A

MOV C,42H

RRC A

MOV C,43H

RRC A

MOV ZHENGSHU,A

RET

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;顯示數(shù)據(jù)拆解程序、顯示程序、延時(shí)程序

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;數(shù)據(jù)拆解程序

BCD:

MOV A,ZHENGSHU

MOV B,#10

DIV AB

MOV 50H,A

MOV 51H,B

MOV A,XIAOSHU

MOV R0,#52H

MOV R2,#4

D0: MOV B,#10

MUL AB

MOV B,#16

DIV AB

MOV @R0,A

INC R0

MOV A,B

DJNZ R2,D0

RET

;-----------------------------------

;顯示程序

;----------------------------------

DISP:

ACALL TIME

MOV R7,#6

MOV DPTR,#TAB

MOV R0,#55H

LP1: MOV A,@R0;

MOVC A,@A+DPTR

CJNE R7,#2,NE1

ANL A,#07FH

NE1: MOV SBUF,A

JNB TI,$

CLR TI

DEC R0

DJNZ R7,LP1

RET

;----------------------------------------

;延時(shí)程序

;----------------------------------------

TIME1: MOV R6,#4

LOOP2: MOV R5,#250

LOOP1: ACALL D1MS

DJNZ R5,LOOP1

DJNZ R6,LOOP2

RET

TIME: MOV R6,#200

LOOP3: ACALL D1MS

DJNZ R6,LOOP3

RET

D1MS: MOV R7,#250

LOOP0: NOP

NOP

NOP

DJNZR7,LOOP0

RET

TAB: DB0C0H,0F9H,0A4H,0B0H

DB99H,92H,82H,0F8H

DB80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH

DB0FFH

END任務(wù)2出租車計(jì)費(fèi)器的設(shè)計(jì)

知識(shí)目標(biāo):了解應(yīng)用單片機(jī)的定時(shí)/計(jì)數(shù)器以及中斷。

能力目標(biāo):會(huì)使用定時(shí)/計(jì)數(shù)器和中斷系統(tǒng)。

1.任務(wù)要求

本系統(tǒng)假設(shè)速度恒定60km/h(1km/min),單價(jià)一定1.2元/km,起步價(jià)6.0元,超過(guò)三公里開(kāi)始計(jì)費(fèi),每公里加1.2元。由于速度恒定,所以計(jì)算的核心是時(shí)間。時(shí)間單元由單片機(jī)的定時(shí)/計(jì)數(shù)器來(lái)計(jì)算,延時(shí)1ms時(shí)間的初值由程序來(lái)設(shè)定。算法公式是:

費(fèi)用?=?起步價(jià)?+?(路程-3)?×?1.2

路程?=?速度?×?時(shí)間(速度恒定,60km/h,也就是1km/min)

若路程小于等于3,則收起步價(jià)6元,否則按費(fèi)用公式計(jì)算。

2.硬件電路的設(shè)計(jì)與制作(應(yīng)用Proteus畫(huà)電路原理圖)

1)整體硬件電路圖

整體硬件電路圖如圖6-3所示。圖6-3硬件電路圖由圖6-3我們可以清楚地看到,本電路控制核心是AT89C51芯片。該方案采用動(dòng)態(tài)顯示的方法。P0口作為數(shù)據(jù)總線口,分別把數(shù)據(jù)輸送到4個(gè)74LS273地址鎖存器中,而鎖存器的工作需要等待脈沖的到來(lái)。脈沖通過(guò)寫(xiě)地址端口P3.6和端口P2.0~P2.3并經(jīng)過(guò)或非門(mén)來(lái)產(chǎn)生。只有把數(shù)據(jù)送到外部接口時(shí),P3.6口才為低電平,P2.0~P2.3用來(lái)控制到底是把數(shù)據(jù)送往哪一個(gè)鎖存器。

3.應(yīng)用程序設(shè)計(jì)

1)程序流程圖的設(shè)計(jì)

該計(jì)費(fèi)器系統(tǒng)的軟件設(shè)計(jì)分為主程序模塊和顯示子程序模塊。

(1)主程序模塊。在主程序模塊中,需要完成對(duì)各接口芯片的初始化、出租車起步價(jià)和單價(jià)、中斷向量的設(shè)計(jì)以及開(kāi)中斷、循環(huán)等待等工作。另外,在主程序模塊中,還需要設(shè)置啟動(dòng)/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動(dòng)、清除、計(jì)程和計(jì)價(jià)等不同的操作。其流程圖如圖6-4所示。圖6-4軟件設(shè)計(jì)流程圖當(dāng)按下輕觸開(kāi)關(guān)時(shí),開(kāi)始對(duì)系統(tǒng)初始化,價(jià)格和時(shí)間都顯示0,再次按下開(kāi)關(guān)后,時(shí)間單元開(kāi)始計(jì)時(shí),并計(jì)算時(shí)間是否超過(guò)3分鐘,超過(guò)3分鐘,則從第4分鐘開(kāi)始計(jì)費(fèi)。價(jià)格單元從起步價(jià)6.0元開(kāi)始計(jì)費(fèi),每多一分鐘,價(jià)格單元多加1.2元。

(2)顯示子程序模塊。顯示子程序由顯示時(shí)間子程序DIS1和顯示價(jià)格子程序DIS組成。時(shí)間由小時(shí)、分、秒三個(gè)單元組成,共六個(gè)數(shù)碼管。價(jià)格由元和角兩個(gè)單元組成,最大可顯示999.9元。

2)程序清單及分析

ORG 0000H ;初始化段地址

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

ORG 000BH ;TT0開(kāi)始地址

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

ORG 0030H ;主函數(shù)開(kāi)始地址,避開(kāi)00~30敏感段

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

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

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

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

MOV 73H,#00 ;分單元清零

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

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

CLR 00H

CLR 01H ;將00H、01H單元清零

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

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

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

INC R1

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

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

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

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

MOV TH0,#3CH

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

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

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

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

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

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

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

G1: LCALL DIS

LCALL DIS1

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

SETB EA ;開(kāi)中斷

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

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

SETB 01H ;01H單元置位

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

LCALL DIS

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

LCALL DIS1

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

LCALL TIME1

JB P1.0,G3

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

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

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

G6: LCALL DIS

LCALL DIS1

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

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

G5: CLR ET0

G4: LCALL DIS

LCALL DIS1

JNB P1.0,G4

G3: LJMP LLL

TT0: CLR ET0 ;定時(shí)一秒

CLR TR0

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

SETB ET0

DJNZ 6EH,JJJ

LCALL ADD1

MOV 6EH,#20

JJJ: RETI

DIS: MOV 6DH,#06H ;價(jià)格顯示子程序

MOV R0,#7AH

MOV 6CH,#0FEH

HHH: MOV DPTR,#0FDFFH;數(shù)據(jù)指針出口地址,低8位給P0口,高8給位P2口

MOV A,6CH

MOVX @DPTR,A

MOV A,@R0

MOV DPTR,#TAB ;查表首地址

MOVC A,@A+DPTR ;查表值送A

MOV DPTR,#0FEFFH

MOVX @DPTR,A

LCALL TIME1

MOV A,6CH

RLA

MOV 6CH,A

INC R0

DJNZ 6DH,HHH

RET

DIS1: MOV 6DH,#04H ;時(shí)間顯示子程序

MOV R0,#72H

MOV 6CH,#0FEH

HHH1: MOV DPTR,#0F7FFH ;FF給P0口,F7給P1.0~P1.3口

MOV A,6CH

MOVX @DPTR,A ;將6CH的內(nèi)容放到0F7FFH中

MOV A,@R0

MOV DPTR,#TAB ;查表首地址

MOVC A,@A+DPTR ;查表值送A

MOV DPTR,#0FBFFH

MOV R1,6DH

CJNE R1,#03H,K1

ORL A,#80H

K1: MOVX @DPTR,A

LCALL TIME1

MOV A,6CH

RL A

MOV 6CH,A

INC R0

DJNZ 6DH,HHH1

RET

TIME1: MOV 6AH,#0AH /*延時(shí)子程序*/

FFF: MOV 69H,#0AH

GGG: DJNZ 69H,GGG

DJNZ 6AH,FFF

RET

JISUAN:

JB 00H,K2 /*判斷是否超過(guò)3公里及計(jì)算價(jià)格子程序*/

MOV A,78H

CLR C

SUBB A,#03H

MOV 73H,#06H

JC K3

SETB 00H

LJMP K3

K2: MOV R3,71H

MOV R4,70H

MOV R2,#00H

MOV R5,#00H

MOV R6,#03H

MOV R7,#0E8H

LCALL NDIV42

MOV 75H,R4

MOV A,R6

MOV R3,A

MOV A,R7

MOV R4,A

MOV R2,#00H

MOV R7,#100

LCALL NDIV31

MOV 74H,R4

MOV A,R7

MOV B,#10

DIV AB

MOV 73H,A

MOV 72H,B

K3: RET

CHAI: MOV 6FH,#03H /*保護(hù)現(xiàn)場(chǎng)子程序*/

MOV R0,#77H

MOV R1,#7AH

ZZZ: MOV A,@R0

ANL A,#0FH ;保存77H單元中的低4位

MOV @R1,A

MOV A,@R0

SWAP A

ANL A,#0FH

INC R1

MOV @R1,A

INC R0

INC R1

DJNZ 6FH,ZZZ ;循環(huán)三次

RET

ADD1: MOV A,77H /*加一子程序*/

CJNE A,#59H,L18

LJMP L19

L18: ADD A,#01H

DA A

MOV 77H,A

LJMP L24

L19: MOV 77H,#00H

JNB 00H,S1

CLR C

MOV A,70H

ADD A,#12

MOV 70H,A

MOV A,71H

ADDC A,#00H

MOV 71H,A

S1: MOV A,78H

CJNE A,#59H,L20

LJMP L21

L20: ADD A,#01H

DA A

MOV 78H,A

LJMP L24

L21: MOV 78H,#00H

MOV A,79H

CJNE A,#23H,L22

LJMP L23

L22: ADD A,#01H

DA A

MOV 79H,A

L23: MOV 79H,#00H

L24: RET

NDIV42: MOV A,R1 /*四除二子程序*/

PUSH ACC

MOV B,#00H

NDV421: MOV A,R2

CLR C

SUBB A,R7

MOV R1,A

MOV A,R5

SUBB A,R6

JC NDV422

MOV R5,A

MOV A,R1

MOV R2,A

INC B

SJMP NDV421

NDV422: PUSH B

MOV B,#10H

NDV423: CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

XCH A,R5

RLC A

XCH A,R5

MOV F0,C

CLR C

SUBB A,R7

MOV R1,A

MOV A,R5

SUBB A,R6

JB F0,NCV424

JC NDV425

NCV424: MOV R5,A

MOV A,R1

MOV R2,A

INC R4

NDV425: DJNZ B,NDV423

POP ACC

CLR OV

JNZ NDV426

SETB OV

NDV426: XCH A,R2

MOV R7,A

MOV A,R5

MOV R6,A

POP ACC

MOV R1,A

RET

NDIV31: MOV A,R2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論