📄 try_tot_3.asm
字号:
ORG 0000H
LJMP 0100H ;jump to main
ORG 0100H ;main()============================================================
MOV TMOD, #22H ;============================================================
MOV TH1, #0F3H ;4800bps
MOV TL1, #0F3H
MOV TH0, #38H ;用做计数器产生0.2ms定时
MOV TL0, #38H
SETB TR1
MOV SCON, #50H
MOV PCON, #80H
MOV DPTR,#7FF8H
MOV 6FH,#00H
YEAR:MOV 40H, #02
MOV 41H, #00
MOV 42H, #00
MOV 43H, #09
LCALL DISPLAY
MONTH:MOV 40H, #00
MOV 41H, #01
MOV 42H, #00
MOV 43H, #09
LCALL DISPLAY
SELECT:MOV A, SBUF
JBC RI , NEW_COMMAND
MOV A, 6FH
CJNE A, #01H, OTHERS
LCALL TIME_CONTINUE
SJMP SELECT
NEW_COMMAND:MOV 6FH, A
CJNE A, #01H, OTHERS
LCALL SHOW_TIME
SJMP SELECT
OTHERS:CJNE A, #02H, MEAN_LESS
MOV R4, #00H
MOV R5, #00H
LCALL TEST
SJMP SELECT
MEAN_LESS:SJMP YEAR
;TEST_SUB_PROGRAM=======================================================================
TEST:MOV R0,#00H ;中间寄存器高八位
MOV R1,#00H ;中间寄存器低8位
MOV R2,#08H ;计数,采样8次
MOV DPTR,#7FF8H
AVER2:MOVX @DPTR ,A ;start A-D
LCALL DELAY ;延时0.2ms等待采样结束
MOVX A,@DPTR ;读取采样值
ADD A, R1 ;加入中间寄存器低八位
JNC AVER1 ;无进位则暂存结果
INC R0 ;有进位则中间寄存器高八位加一
AVER1:MOV R1, A ;暂存低八位结果
DJNZ R2, AVER2
MOV R2,#03H ;计数,右移三次
AVER3:MOV A, R0 ;高八位结果送入A
RRC A ;A中最低位右移入C
MOV R0 ,A
MOV A ,R1
RRC A ;低八位结果带进位右移,则高八位的低位进入低八位的最高位
MOV R1, A
DJNZ R2,AVER3
MOV 30H, R1 ;8次平均采样数据放在30H单元--------缓存单元
LCALL CONVERT
LCALL DISPLAY
LCALL WR_RX
LCALL RD_RX
LCALL SEND
RET
;SHOW_TIME_SUB_PROGRAM==================================================================
SHOW_TIME:
MOV 40H, #00
MOV 41H, #00
MOV 42H, #00
MOV 43H, #00
MOV 44H, #00 ;SECOND REGISTER
MOV 45H, #00 ;MINUTE REGISTER
AJMP TIME_LOOP
TIME_CONTINUE:
MOV A, 44H
INC A
MOV 44H, A
MOV B, #60
DIV AB
JNZ MINUTE
MOV A, 44H
MOV B, #10
DIV AB
MOV 43H, B
MOV 42H, A
SJMP TIME_LOOP
MINUTE:CLR A
MOV 44H, A
MOV 43H, #00
MOV 42H, #00
MOV A, 45H
INC A
MOV 45H, A
MOV B, #10
DIV AB
MOV 40H, A
MOV 41H, B
TIME_LOOP:
LCALL DISPLAY
RET
;CONVERT binary to decimal========================================================
CONVERT:MOV A,30H
MOV B,#05H
MUL AB
MOV 40H,B
MOV B,#0AH
MUL AB
MOV 41H,B
MOV B,#0AH
MUL AB
MOV 42H,B
MOV B,#0AH
MUL AB
MOV 43H,B
RET
;display the BCD code====================================================================
DISPLAY:MOV R0 ,#50H
MOV R1 ,#40H
MOV R2 ,#0EEH
MOV R3 ,#04H
LP1:MOV A ,R2
ANL A ,#0F0H
ORL A ,@R1
MOV @R0 ,A
INC R0
MOV A ,R2
RL A
MOV R2 ,A
INC R1
DJNZ R3 ,LP1
MOV R0 ,#50H
MOV R1 ,#30 ;循环50次
MOV R2 ,#04H ;COUNTER----------4-BITS
MOV R3 ,#40;COUNTER-------SHOW---1S
S1:MOV P1 ,@R0
Lcall DELAY
DJNZ R1,S1
MOV R1,#30
INC R0
DJNZ R2,S1
MOV R2,#04
MOV R0,#50H
DJNZ R3,S1
RET
;DELAY Sub_program------0.2ms=================================================================
DELAY:SETB TR0
CHECK:JBC TF0, FULL
SJMP CHECK
FULL:CLR TR0
RET ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;write6264=====================================================================================
WR_RX:MOV DPH ,#80H
MOV DPL ,R4
MOV A, 30H
MOVX @DPTR,A
INC R4
RET
;read6264======================================================================================
RD_RX:MOV DPH ,#80H
MOV DPL ,R5
MOVX A,@DPTR
MOV 3FH,A
INC R5
RET
;send data to pc===============================================================================
SEND:MOV A , 3FH
MOV SBUF, A
JNB TI , $ ;waiting the end of sending
CLR TI
RET
END ;\\\\\\\\\\\\\\\\\\\\\\\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -