標題: 求大神幫忙調試下這個程序 [打印本頁]
作者: 卡卡11 時間: 2015-5-15 18:21
標題: 求大神幫忙調試下這個程序
ORG 1000H
AJUMP MAIN ;轉跳到主程序
ORG 00BH ;中斷地址
AJUMP SERVER ;中斷調用
MAIN: MOV TMOD , 40H ;初始值
MOV TH0 , #5BH ;設置計時值
MOV TL0 , #20H
MOV TH1 , #00H ;設置計數值
MOV TL1 , #00H
MOV R0 , #10 ;設置1s時間
MOV A , #00H ;清空累加器
MOV 4000H , #05H ;存放最大值5米
MOV 4001H , #01H ;存放最小值1米
MOV 3000H , #00H ;清空顯示數據
DATE1 ACALL DATE2 ;調用顯示程序
MOV A , 3000H ;取位數據
SUBB A , 4000H ;與最大值比較
JC MIN ;當小于最大值,在于最小值比較
SET P1.1 ;發送高電平控制水泵
CLR P1.0 ;開啟發射裝置
ACALL D1MS
CLR P1.1 ;停止發送
SET P1.0 ;關閉發射裝置
AJUMP HEAR ;等待1s中斷
MIN: SUB A 4001H ;與最小值比較
JC HEAR ;等待采集數據
SET P1.1 ;關閉水泵
CLR P1.0 ;開啟發射裝置
ACALL D1MS
CLR P1.1 ;停止發送
SET P1.0 ;關閉發射裝置
HEAR: AJMP HEAR ;等待1s中斷
AJMP DATE1 ;重新取數據
********TO中斷程序(T0計時器,T1計數器)******
SERVER: PUSH A
PUSH B
PUSH DPL
PUSH DPH ;保護現場
CLR TR0
CLR ET0 ;關中斷
DEC R0
JNZ R0 T2 ;是否到了1S,否則跳到T2
CLR TR1
CLR ET1 ;停止計數
MOV A , TH1 ;將高八位的計數值存放A中
MOV B , TL1 ;將低八位的計數值存放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 ;計數值清零
SETB TR1
SETB ET1 ;啟動計數
T2: MOV TH0, #5BH ;設置計時值
MOV TL0 #20H
SETB TR0
SETB ET0 ;開計時中斷
POP A
POP B
POP DPL
POP DPH ;恢復現場
RETI ;轉到顯示程序
********顯示程序*********
DATE2: MOV A , 3000H ;取水位數據
MOV B , #10 ;分離整數和最小值
DIV AB ;整數放A,小數放B
ACALL CHAIAO ;調用查表
ADD A , #80H ;加小數點代碼
MOV P2 , A ;顯示整數的數值
MOV A , B ;取小數值
ACALL CHABIAO ;調用查表
MOV P0 , A ;顯示小數的數值
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 ;保護現場
PUSH DPL
MOV DPTR , #TABLE
MOVC A, @A+DPTR
POP DPL
POP DPH ;恢復現場
RET
D1MS: MOV R7, #80 ;延時1MS子程序
DJNZ R7, $
RET
END
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |