|
ORG 0000H
ljmp setup
org 000bh
ljmp timer0
org 0001bh
ljmp timer1
org 0030h
setup:
MOV TMOD,#27H;定时器0方式三,两个8位定时器
MOV TH1,#0FdH
MOV TL1,#0FdH
mov th0,#0;定时器0的第二个8位定时器,用于定时约500mS
mov tl0,#0;定时器0的第一个8位定时器,用于统计T0脚来的脉冲,即LM331的AD转换
MOV PCON ,#00H
MOV SCON,#40H
setb pt1
setb et0
setb et1
setb ea
setb tr0
setb tr1
clr ti
mov r4,#1
mov r5,#241
mov dptr,#1000
clr a
mov 50h,a
mov 51h,a
mov 52h,a
mov 53h,a
mov 54h,a
mov 55h,a
mov 56h,a
mov 57h,a
ljmp $
timere1t:
ljmp timeret
timer1:
inc dptr
mov a,dph
cjne a,#4,timere1t
clr tr0 ;定时时间到
clr tr1
mov 70h,tl0 ;有用的值
mov 71h,50h
mov 50h,#0
mov tl0,#0
mov th0,#0
mov dptr,#0
clr ti
mov sbuf,#'$'
jnb ti,$
clr ti
LCALL DELAY
mov sbuf,#' '
jnb ti,$
clr ti
LCALL DELAY
mov sbuf,#' '
jnb ti,$
clr ti
LCALL DELAY
mov sbuf,#' '
jnb ti,$
clr ti
LCALL DELAY
lcall divm_n
mov 60h,#10h
mov 61h,#27h
call divm_n
mov a,72h
orl a,#30h
mov sbuf,a
jnb ti,$
clr ti
mov 60h,#0e8h
mov 61h,#03h
call divm_n
mov a,72h
orl a,#30h
mov sbuf,a
jnb ti,$
clr ti
LCALL DELAY
mov 60h,#100
mov 61h,#0
call divm_n
mov a,72h
orl a,#30h
mov sbuf,a
jnb ti,$
clr ti
LCALL DELAY
mov 60h,#10
mov 61h,#0
call divm_n
mov a,72h
orl a,#30h
mov sbuf,a
jnb ti,$
clr ti
LCALL DELAY
mov a,70h
orl a,#30h
mov sbuf,a
jnb ti,$
clr ti
setb tr0
setb tr1
timeret:
reti
timer0:
inc 50h
reti
DELAY:
MOV 61H,#00H
MOV 60H,#00H
DJNZ 60H,$
DJNZ 61H,$-4
RET
DIVm_n:;可多字节除,仅需修改CHANG(字节)
;m字节除n字节快速运算
;入口参数:被除数_BCS以上N字节,BCS是最低字节
; 除数_CS以上N字节,CS最低字节
;出口参数:商_沿着被除数的最高字节往上继续存
;放其最低字节,共n字节,余数_则覆盖被除数n字节
;使用寄存器:A,C,R0,R1,R2,R3,R6,R7,位F0
BCS EQU 70H;被除数首地址
CS EQU 60H; 除数首地址
CHANG EQU 2;除数或被除数字节数长度
WEISH EQU CHANG*8;除数或被除数位数
MOV R0,#CS;
MOV R7,#CHANG-1;4-1次相或操作
LOP1: MOV A,@R0
INC R0
ORL A,@R0
JNZ LOP0
DJNZ R7,LOP1
LJMP DIVRET
LOP0: CLR A
MOV R0,#BCS+CHANG
MOV R7,#CHANG
LOP3:
MOV @R0,A
INC R0
DJNZ R7,LOP3
MOV R6,#WEISH;4Byte共32bit
LOP8:
MOV R0,#BCS
MOV R7,#CHANG*2;被除数连商共8Bbyte
LOP4:
MOV A,@R0
RLC A
MOV @R0,A
INC R0
DJNZ R7,LOP4
CLR C
MOV R0,#BCS+CHANG
MOV R1,#CS
MOV R7,#CHANG
LOP5:
MOV A,@R0
SUBB A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R7,LOP5
JNC LOP6
MOV F0,C
MOV R0,#BCS+CHANG
MOV R1,#CS
MOV R7,#CHANG
CLR C
LOP7:
MOV A,@R0
ADDC A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R7,LOP7
MOV C,F0
LOP6:
CPL C
DJNZ R6,LOP8
MOV R0,#BCS
MOV R1,#BCS+CHANG
MOV R7,#CHANG
LOP9:
MOV A,@R0
RLC A
MOV R3,A
MOV A,@R1
MOV @R0,A
MOV A,R3
MOV @R1,A
INC R0
INC R1
DJNZ R7,LOP9
DIVRET:
RET
END