📄 气象站信息采集汇编程序.asm
字号:
RS EQU P1.0
RW EQU P1.1
E EQU P1.2
PSB EQU P1.3
RST EQU P1.4
COUNT EQU 7FH
COUNT1 DATA 5CH
SUM DATA 5DH
BLOCK DATA 70H
ADDR DATA 3FH
ORG 0000H
STAR: AJMP MAIN
ORG 0023H
AJMP SBU ;串行中断断入口
MAIN:
MOV SP,#08H
MOV TH2,00H
MOV TL2,00H
MOV RCAP2H,#0FFH
MOV RCAP2L,#0D9H
MOV T2CON,#34H
MOV SCON,#01010000B;串口初始化
MOV IE ,#10010000B;中断初始化
SETB RST
SETB PSB
MOV A,#34H
LCALL SEND_I
MOV A,#30H
LCALL SEND_I
MOV A,#01H ;液晶屏初始化
LCALL SEND_I
MOV A,#06H
LCALL SEND_I
MOV A,#0CH
LCALL SEND_I
;*************************************************************************************
TIME2: LCALL WATCHDOG ;-------------------------------
LCALL DELAY
LCALL DELAY
LCALL WATCHDOG
LCALL ADCJ
LCALL WATCHDOG
LCALL DISPLAY
LCALL DELAY
LCALL WATCHDOG
LJMP TIME2
;*******************************************************************************
DELAY: MOV R3,#0FAH
DL3: LCALL WATCHDOG
ACALL DELAY1
LCALL WATCHDOG
DJNZ R3,DL3
RET
DELAY1: MOV R1,#0AH
DL2: MOV R2,#18H
DL1: NOP
NOP
DJNZ R2,DL1
DJNZ R1,DL2
RET
;*****************************************************************************
ADCJ:
CLR P3.5
MOV A,#41H
MOV R0,#30H
MOV R1,#31H
LCALL AD_DO;---------------通道0进行AD转换
MOV R6,31H
MOV R7,30H
LCALL BCD;-------------结果转化为BCD码
MOV 36H,R3
MOV 37H,R4
MOV 38H,R5
MOV R7,37H
MOV R6,38H
MOV R5,#04H
MOV R4,#0C5H
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV R1,#50H
LCALL WATCHDOG
LCALL CACULATE;-----------------与系数相乘并存结果
;///////////////////////////////////////////////////////////////////////
CLR P3.5
MOV R0,#32H
MOV R1,#33H
MOV A,#42H
LCALL AD_DO;---------------通道1进行AD转换
MOV R6,33H
MOV R7,32H
LCALL BCD;---------------结果转化为BCD码
MOV 39H,R3
MOV 40H,R4
MOV 41H,R5
MOV R7,40H
MOV R6,41H
MOV R5,#09H
MOV R4,#8AH
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV R1,#54H
LCALL WATCHDOG
LCALL CACULATE;-----------------与系数相乘并存结果
;////////////////////////////////////////////////////////////
CLR P3.5
MOV R0,#34H
MOV R1,#35H
MOV A, #50H
LCALL AD_DO;--------- --------通道2进行AD转换
MOV R6,35H
MOV R7,34H
LCALL BCD;----------------结果转化为BCD码
MOV 42H,R3
MOV 43H,R4
MOV 44H,R5
MOV R7,43H
MOV R6,44H
MOV R5,#05H
MOV R4,#0B9H
MOV 58H,#00H
MOV 59H,#00H
MOV 5AH,#00H
MOV 5BH,#00H
MOV R1,#58H
LCALL WATCHDOG
LCALL CACULATE ;-----------------与系数相乘并存结果
RET
;**********************************************************************************
AD_DO:
MOV DPTR,#0FFFFH
MOVX @DPTR,A
NOP
NOP
JB P3.2,$
CLR P3.7
CLR P3.4
MOVX A,@DPTR
MOV @R0, A
SETB P3.4
DEC DPL
MOVX A,@DPTR
MOV @R1,A
SETB P3.6
SETB P3.7
RET
;**************************************************************************************
BCD:
CLR A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H
HB3:MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A
DJNZ R2,HB3
RET
;***********************************************************************************************
CACULATE:MOV A,R1
MOV R0,A
MOV A,@R0
ADDC A,R6
DA A
MOV @R0,A
;----------------------------
INC R0
MOV A,@R0
ADDC A,R7
DA A
MOV @R0,A
;-------------------------------------
INC R0
MOV A,@R0
ADDC A,#0
DA A
MOV @R0,A
INC R0
MOV A,@R0
ADDC A,#0
DA A
MOV @R0,A
;------------------------------------
CLR C
CJNE R5,#0,BB
MOV A,R4
SUBB A,#1
MOV R4,A
JNZ CACULATE
SJMP CC
BB: MOV A,R4
SUBB A,#1
MOV R4,A
MOV A,R5
SUBB A,#0
MOV R5,A
JNC CACULATE
CC: RET
;***************************************************************************
DISPLAY:
LGS1:
MOV DPTR,#TAB1
MOV COUNT,#40H ;全部显示
MOV A,#80H
LCALL SEND_I
LGS11: CLR A
MOVC A,@A+DPTR
LCALL SEND_D
INC DPTR
DJNZ COUNT,LGS11 ;
;--------------------------------------显示数值开始
MOV R0,#52H
MOV R1,#53H
MOV A,51H
ANL A,#0F0H
SWAP A
SUBB A,#05H
JC SMALL
MOV A,@R0
ANL A,#0FH
SWAP A
ADD A,#10H
DA A
SWAP A
ANL A,#0FH
SJMP STORE
SMALL:
CLR C
MOV A,@R0
ANL A,#0FH
STORE:
MOV 70H,A
MOV A,@R0
ANL A,#0F0H
JNC TO
CLR C
ADD A,#10H
DA A
TO: SWAP A
MOV 71H,A
MOV A,@R1
ANL A,#0FH
ADDC A,#00H
MOV 72H,A
;------------------------------
MOV A,#93H;显示位置设定在93H处
LCALL SEND_I
MOV A,72H
JZ L1
LCALL CHABIAO
L1: MOV A,71H
JNZ AA
MOV A,72H
JZ SS
MOV A,71H
AA: LCALL CHABIAO
CLR A
MOV DPTR,#PSET ;送出“.”
MOVC A,@A+DPTR
LCALL SEND_D
SS: MOV A,70H
LCALL CHABIAO
;//////////////////////////////////////////////
MOV R0,#56H
MOV R1,#57H
MOV A,@R0
ANL A,#00001111B
SUBB A,#05H
JC SMALL2
MOV A,@R0
ANL A,#0F0H
ADD A,#10H
DA A
SWAP A
ANL A,#0FH
SJMP STORE2
SMALL2:
CLR C
MOV A,@R0
ANL A,#0F0H
SWAP A
STORE2:
MOV 73H,A
MOV A,@R1
ANL A,#0FH
SWAP A
JNC T02
ADD A,#10H
DA A
T02: SWAP A
MOV 74H,A
MOV A,@R1
ANL A,#0F0H
ADDC A,#00H
MOV 75H,A
MOV A,#8BH ; 显示位置设定在8bH处
LCALL SEND_I
MOV A,75H
JZ L2 ; A为零则直接显示下一位
LCALL CHABIAO
L2: MOV A,74H
JNZ AA1
MOV A,75H
JZ SS1
MOV A,74H
AA1: LCALL CHABIAO
SS1: MOV A,73H
LCALL CHABIAO
;////////////////////////////////////////////
MOV R0,#59H
MOV 6AH,#00H
MOV 6BH,#94H
MOV 6CH,#07H
CLR C
BCDJIA:
MOV A,@R0
ADD A,6AH
DA A
MOV @R0,A
INC R0
MOV A,@R0
ADD A,6BH
DA A
MOV @R0,A
INC R0
MOV A,@R0
ADDC A,6CH
DA A
MOV @R0,A
MOV A,59H
ANL A,#0FH
SUBB A,#05H
JC SMALL3
MOV A,59H
ANL A,#0F0H
ADD A,#10H
DA A
SWAP A
ANL A,#0FH
SJMP STORE3
SMALL3:
CLR C
MOV A,59H
ANL A,#0F0H
SWAP A
STORE3: MOV 76H,A;///////////
MOV A,5AH
ANL A,#0FH
SWAP A
JNC L31
ADD A,#10H
DA A
L31:
SWAP A
MOV 77H,A
MOV A,5AH
ANL A,#0F0H
JNC L32
ADD A,#10H
DA A
L32:
SWAP A
MOV 78H,A
MOV A,5BH
ANL A,#0FH
SWAP A
JNC L33
ADD A,#10H
DA A
L33:
SWAP A
MOV 79H,A
MOV A,5BH
ANL A,#0F0H
SWAP A
ADDC A,#00H
MOV 7AH,A
MOV A,#9BH;显示位置设定在9BH处
LCALL SEND_I
MOV A,7AH ;
JZ L13
LCALL CHABIAO
L13: MOV A,79H
JNZ AA3
MOV A,7AH
JZ SS3
MOV A,79H
AA3: LCALL CHABIAO
SS3: MOV A,78H
LCALL CHABIAO
CLR A
MOV DPTR,#PSET ;送出“.”
MOVC A,@A+DPTR
LCALL SEND_D
MOV A,77H
LCALL CHABIAO
MOV A,76H
LCALL CHABIAO
RET
;*************************************************************************
CHABIAO:
CLR DPH
CLR DPL
MOV DPTR,#NOMBER
MOVC A,@A+DPTR
LCALL SEND_D
RET
;***********************************************************************
WATCHDOG: SETB P3.3
NOP
NOP
NOP
NOP
CLR P3.3
NOP
NOP
NOP
NOP
SETB P3.3
NOP
NOP
NOP
NOP
CLR P3.3
RET
;*****************************************************************************
;********************************************************************************
CHEAK:
SEND_I: LCALL CHK_BUSY ;写指令子程序
CLR RS
CLR RW
MOV P2,A
SETB E
NOP
NOP
CLR E
RET
CHK_BUSY:MOV P2,#0FFH ;测忙碌子程序
CLR RS
SETB RW
SETB E
;JB P2.7,$
CLR E
RET
SEND_D: LCALL CHK_BUSY ;写数据子程序
SETB RS
CLR RW
MOV P2,A
SETB E
NOP
NOP
CLR E
RET
;---------------------------------------
NOMBER:DB '0123456789'
PSET: DB '.'
TAB1: DB' 当前大气状态 '
DB'湿度: %'
DB'温度: ℃'
DB'气压: kPa'
SBU:
PUSH ACC
PUSH PSW
CLR RI
LCALL WATCHDOG
MOV 7BH,SBUF
JNB RI,$
CLR RI
MOV 7CH,SBUF
JNB RI,$
CLR RI
MOV 7DH,SBUF
JNB RI,$
CLR RI
MOV 7EH,SBUF
MOV A,7BH
XRL A,#0AAH
LCALL WATCHDOG
JNZ OVER
LCALL WATCHDOG
MOV A,7CH
XRL A,#0BBH
JNZ OVER
MOV A,7DH
XRL A,#0CCH
JNZ OVER
MOV A,7EH
XRL A,#0DDH
JNZ OVER
LCALL WATCHDOG
AJMP XX
OVER:
LCALL WATCHDOG
LJMP OVER1
LCALL WATCHDOG
XX:LCALL WATCHDOG
MOV COUNT1,#0BH
MOV SUM,#00H
CLR SBUF
FA1:
MOV SBUF,#0FFH
JNB TI,$
CLR TI
FA2:
MOV SBUF,#0FFH
JNB TI,$
CLR TI
FA3:
MOV SBUF,#0AAH
JNB TI,$
CLR TI
FA4:
LCALL WATCHDOG
MOV SBUF,70H
MOV A,SUM
ADD A,70H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,71H
MOV A,SUM
ADD A,71H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,72H
MOV A,SUM
ADD A,72H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,73H
MOV A,SUM
ADD A,73H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,74H
MOV A,SUM
ADD A,74H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,75H
MOV A,SUM
ADD A,75H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,76H
MOV A,SUM
ADD A,76H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,77H
MOV A,SUM
ADD A,77H
MOV SUM,A
JNB TI,$
CLR TI
LCALL WATCHDOG
MOV SBUF,78H
MOV A,SUM
ADD A,78H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,79H
MOV A,SUM
ADD A,79H
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,7AH
MOV A,SUM
ADD A,7AH
MOV SUM,A
JNB TI,$
CLR TI
MOV SBUF,SUM
JNB TI,$
CLR TI
FA5:
LCALL WATCHDOG
MOV SBUF,#0EEH
JNB TI,$
CLR TI
FA6:
MOV SBUF,#0EEH
JNB TI,$
CLR TI
OVER1:
POP PSW
POP ACC
CLR SBUF
LCALL WATCHDOG
SETB ES
SETB EA
CLR RI
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -