ORG 1000H AJUMP MAIN ;轉(zhuǎn)跳到主程序 ORG 00BH ;中斷地址 AJUMP SERVER ;中斷調(diào)用 MAIN: MOV TMOD , 40H ;初始值 MOV TH0 , #5BH ;設(shè)置計(jì)時(shí)值 MOV TL0 , #20H MOV TH1 , #00H ;設(shè)置計(jì)數(shù)值 MOV TL1 , #00H MOV R0 , #10 ;設(shè)置1s時(shí)間 MOV A , #00H ;清空累加器 MOV 4000H , #05H ;存放最大值5米 MOV 4001H , #01H ;存放最小值1米 MOV 3000H , #00H ;清空顯示數(shù)據(jù) DATE1 ACALL DATE2 ;調(diào)用顯示程序 MOV A , 3000H ;取位數(shù)據(jù) SUBB A , 4000H ;與最大值比較 JC MIN ;當(dāng)小于最大值,在于最小值比較 SET P1.1 ;發(fā)送高電平控制水泵 CLR P1.0 ;開啟發(fā)射裝置 ACALL D1MS CLR P1.1 ;停止發(fā)送 SET P1.0 ;關(guān)閉發(fā)射裝置 AJUMP HEAR ;等待1s中斷 MIN: SUB A 4001H ;與最小值比較 JC HEAR ;等待采集數(shù)據(jù) SET P1.1 ;關(guān)閉水泵 CLR P1.0 ;開啟發(fā)射裝置 ACALL D1MS CLR P1.1 ;停止發(fā)送 SET P1.0 ;關(guān)閉發(fā)射裝置 HEAR: AJMP HEAR ;等待1s中斷 AJMP DATE1 ;重新取數(shù)據(jù) ********TO中斷程序(T0計(jì)時(shí)器,T1計(jì)數(shù)器)****** SERVER: PUSH A PUSH B PUSH DPL PUSH DPH ;保護(hù)現(xiàn)場(chǎng) CLR TR0 CLR ET0 ;關(guān)中斷 DEC R0 JNZ R0 T2 ;是否到了1S,否則跳到T2 CLR TR1 CLR ET1 ;停止計(jì)數(shù) MOV A , TH1 ;將高八位的計(jì)數(shù)值存放A中 MOV B , TL1 ;將低八位的計(jì)數(shù)值存放B中 MOV 5001H ,B CZ A , F0 ;判斷是否大于256 MOV 5000H , #25 F0: MOV B , #10 MOV A , 5001H DIV AB ADDC A, 5000H MOV 3000H , A ;存放水位值 MOV TL1 , #00H MOV TH1 , #00H ;計(jì)數(shù)值清零 SETB TR1 SETB ET1 ;啟動(dòng)計(jì)數(shù) T2: MOV TH0, #5BH ;設(shè)置計(jì)時(shí)值 MOV TL0 #20H SETB TR0 SETB ET0 ;開計(jì)時(shí)中斷 POP A POP B POP DPL POP DPH ;恢復(fù)現(xiàn)場(chǎng) RETI ;轉(zhuǎn)到顯示程序 ********顯示程序********* DATE2: MOV A , 3000H ;取水位數(shù)據(jù) MOV B , #10 ;分離整數(shù)和最小值 DIV AB ;整數(shù)放A,小數(shù)放B ACALL CHAIAO ;調(diào)用查表 ADD A , #80H ;加小數(shù)點(diǎn)代碼 MOV P2 , A ;顯示整數(shù)的數(shù)值 MOV A , B ;取小數(shù)值 ACALL CHABIAO ;調(diào)用查表 MOV P0 , A ;顯示小數(shù)的數(shù)值 RET ;返回 TABLE: DB 3FH, 06H, 5BH, 4FH, 66H ;0,1,2,3,4, DB 6DH, 7DH, 07H, 7FH, 6FH ;5.6.7.8.9 CHABIAO: PUSH DPH ;保護(hù)現(xiàn)場(chǎng) PUSH DPL MOV DPTR , #TABLE MOVC A, @A+DPTR POP DPL POP DPH ;恢復(fù)現(xiàn)場(chǎng) RET D1MS: MOV R7, #80 ;延時(shí)1MS子程序 DJNZ R7, $ RET END
|