📄 speed.asm
字号:
;**************************************************
; 平凡单片机工作室
; http://www.mcustudio.com
; Copyright 2003 pingfan's McuStudio
; All rights Reserved
;作者:周坚
;测速实验,在DSB-1A上实现
;**************************************************
; $INCLUDE (REG52.INC)
DISPBUF EQU 59H ;显示缓冲区从5AH开始
SecCoun EQU 58H
SpCoun EQU 56H ;速度计时器单元57H和58H,高位在前(57H单元中)
Count EQU 55H; 显示时的计数器
SpCalc bit 00h ;要求计算速度的标志,该位为1则主程序进行速度计算,然后清该位
Hidden EQU 16 ;消隐码
ORG 0000H
AJMP START
ORG 1BH
JMP TIMER1 ;定时中断1入口
ORG 30H
START: MOV SP,#5FH ;设置堆栈
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所有显示器、LED灭
MOV TMOD,#00010101B ;定时器T1工作于方式1,定时器0工作方式1,计数器
MOV TH1,#HIGH(65536-3686)
MOV TL1,#LOW(65536-3686)
SETB TR1
SETB ET1 ;开定时器1中断
SETB EA
LOOP: JNB SpCalc,LOOP ;如果未要求计算,转本身循环
;标号: MULD 功能:双字节二进制无符号数乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MOV R2,SpCoun
MOV R3,SpCoun+1
MOV R6,#0
MOV R7,#5 ;测得的数值是每秒计数值,转为分(每一转测12次,故乘5而非60)
CALL MULD
SEND: MOV SBUF,R2
SLP1: JBC TI,SN1 ;是否送完?
AJMP SLP1
SN1: MOV SBUF,R3
SLP2: JBC TI,SN2
AJMP SLP2
SN2: MOV SBUF,R4
SLP3: JBC TI,SN3
AJMP SLP3
SN3: MOV SBUF,R5
SLP4: JBC TI,SN4
AJMP SLP4
SN4:
;标号: HB2 功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A ;将乘得的结果送R6R7准备转换,这里结果不可能超过2字节
CALL HB2
MOV DISPBUF,R3 ;最高位
MOV A,R4 ;
ANL A,#0F0H ;去掉低4位
SWAP A ;将高4位切换到低4位
MOV DISPBUF+1,A
MOV A,R4
ANL A,#0FH
MOV DISPBUF+2,A
MOV A,R5
ANL A,#0F0H
SWAP A
MOV DISPBUF+3,A
MOV A,R5
ANL A,#0FH
MOV DISPBUF+4,A
CLR SpCalc ;清计算标志
JMP LOOP
;主程序到此结束
TIMER1: PUSH ACC ;ACC入栈
PUSH PSW ;PSW入栈
SETB RS0 ;工作区1
JNB TR0,SETTR0 ;如果T0未运行,则开启T0
JMP GO1
SETTR0:
SETB TR0
GO1:
INC SecCoun ;秒计数器加1
MOV A,SecCoun
CJNE A,#251,Go2 ;如果未到1s则转(每到1S停1次,故数值为251)
CLR TR0 ;1s到了,则停止T0的运行
MOV SpCoun,TH0
MOV SpCoun+1,TL0 ;读取计数值
CLR A
MOV TH0,A
MOV TL0,A ;清计数器
SETB SpCalc ;要求主程序计算速度
MOV SecCoun,#0 ;清秒计数器
Go2:
INC COUNT ;用于显示的计数器
MOV A,COUNT
CLR C
SUBB A,#6
JZ N1
JMP N2
N1: MOV COUNT,#0
N2: MOV A,#DISPBUF
ADD A,COUNT
MOV R0,A ;指向当前要显示的显示缓冲区
MOV A,@R0 ;取第一个待显示数
MOV DPTR,#DISPTAB ;字形表首地址
MOVC A,@A+DPTR ;取字形码
MOV P0,A ;将字形码送P0位(段口)
MOV A,COUNT
MOV DPTR,#BitTab ;字位表首地址
MOVC A,@A+DPTR
ORL P2,#11111100B
ANL P2,A
MOV TH1,#HIGH(65536-3686)
MOV TL1,#LOW(65536-3686)
POP PSW
POP ACC
RETI
BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
;以下数学运算程序
BCDA: MOV A,R7
MOV R2,A
ADD A,R0
MOV R0,A
MOV A,R2
ADD A,R1
MOV R1,A
CLR C
BCD1: DEC R0
DEC R1
MOV A,@R0
ADDC A,@R1
DA A
MOV @R0,A
DJNZ R2,BCD1
RET
BCDB: LCALL NEG1
LCALL BCDA
CPL C
MOV F0,C
LCALL NEG1
MOV C,F0
RET
NEG1: MOV A,R0
XCH A,R1
XCH A,R0
LCALL NEG
MOV A,R0
XCH A,R1
XCH A,R0
RET
NEG: MOV A,R7
DEC A
MOV R2,A
MOV A,R0
MOV R3,A
NEG0: CLR C
MOV A,#99H
SUBB A,@R0
MOV @R0,A
INC R0
DJNZ R2,NEG0
MOV A,#9AH
SUBB A,@R0
MOV @R0,A
MOV A,R3
MOV R0,A
RET
BRLN: MOV A,R7
MOV R2,A
ADD A,R0
MOV R0,A
MOV R3,#0
BRL1: DEC R0
MOV A,@R0
SWAP A
MOV @R0,A
MOV A,R3
XCHD A,@R0
MOV R3,A
DJNZ R2,BRL1
RET
MULD: MOV A,R3
MOV B,R7
MUL AB
MOV R4,B
MOV R5,A
MOV A,R3
MOV B,R6
MUL AB
ADD A,R4
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2
MOV B,R7
MUL AB
ADD A,R4
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2
MOV B,R6
MUL AB
ADD A,R3
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
MUL2: MOV A,R3
MOV B,A
MUL AB
MOV R4,B
MOV R5,A
MOV A,R2
MOV B,A
MUL AB
XCH A,R3
XCH A,B
XCH A,R2
MUL AB
CLR C
RLC A
XCH A,B
RLC A
JNC MU20
INC R2
MU20: XCH A,B
ADD A,R4
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
ADDC A,R2
MOV R2,A
RET
DIVD: CLR C
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV
RET
DVD1: MOV B,#10H
DVD2: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C
CLR C
SUBB A,R7
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0
JC DVD3
MOV R2,A
MOV A,R1
MOV R3,A
INC R5
DVD3: DJNZ B,DVD2
MOV A,R4
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV
RET
D457: CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV
RET
DV50: MOV R6,#8
DV51: MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52: CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53: INC R3
DV54: CLR OV
RET
DV31: CLR C
MOV A,R3
SUBB A,R7
JC DV30
SETB OV
RET
DV30: MOV R2,#10H
DM23: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24: DJNZ R2,DM23
MOV A,R3
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25: INC R5
MOV A,R5
JNZ DM26
INC R4
DM26: CLR OV
RET
MULS: MOV R4,#0
MOV R5,#0
LCALL MDS
LCALL MULD
SJMP MDSE
DIVS: LCALL MDS
PUSH PSW
LCALL DIVD
JNB OV,DVS1
POP ACC
RET
DVS1: POP PSW
MOV R4,#0
MOV R5,#0
MDSE: JB F0,MDS2
CLR OV
RET
MDS: CLR F0
MOV A,R6
JNB ACC.7,MDS1
CPL F0
XCH A,R7
CPL A
ADD A,#1
XCH A,R7
CPL A
ADDC A,#0
MOV R6,A
MDS1: MOV A,R2
JNB ACC.7,MDS3
CPL F0
MDS2: MOV A,R5
CPL A
ADD A,#1
MOV R5,A
MOV A,R4
CPL A
ADDC A,#0
MOV R4,A
MOV A,R3
CPL A
ADDC A,#0
MOV R3,A
MOV A,R2
CPL A
ADDC A,#0
MOV R2,A
MDS3: CLR OV
RET
SH2: MOV A,R2
ORL A,R3
JNZ SH20
RET
SH20: MOV R7,#0
MOV A,R2
SH22: ANL A,#0C0H
JNZ SQRH
CLR C
MOV A,R3
RLC A
MOV F0,C
CLR C
RLC A
MOV R3,A
MOV A,R2
MOV ACC.7,C
MOV C,F0
RLC A
RLC A
MOV R2,A
INC R7
SJMP SH22
SH4: MOV A,R2
ORL A,R3
ORL A,R4
ORL A,R5
JNZ SH40
RET
SH40: MOV R7,#0
MOV A,R2
SH41: ANL A,#0C0H
JNZ SQRH
MOV R6,#2
SH42: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
DJNZ R6,SH42
INC R7
SJMP SH41
SQRH: MOV A,R2
ADD A,#57H
JC SQR2
ADD A,#45H
JC SQR1
ADD A,#24H
MOV B,#0E3H
MOV R4,#80H
SJMP SQR3
SQR1: MOV B,#0B2H
MOV R4,#0A0H
SJMP SQR3
SQR2: MOV B,#8DH
MOV R4,#0D0H
SQR3: MUL AB
MOV A,B
ADD A,R4
MOV R4,A
MOV B,A
MUL AB
XCH A,R3
CLR C
SUBB A,R3
MOV R3,A
MOV A,R2
SUBB A,B
MOV R2,A
SQR4: SETB C
MOV A,R4
RLC A
MOV R6,A
CLR A
RLC A
MOV R5,A
MOV A,R3
SUBB A,R6
MOV B,A
MOV A,R2
SUBB A,R5
JC SQR5
INC R4
MOV R2,A
MOV R3,B
SJMP SQR4
SQR5: MOV A,R4
XCH A,R2
RRC A
MOV F0,C
MOV A,R3
MOV R5,A
MOV R4,#8
SQR6: CLR C
MOV A,R3
RLC A
MOV R3,A
CLR C
MOV A,R5
SUBB A,R2
JB F0,SQR7
JC SQR8
SQR7: MOV R5,A
INC R3
SQR8: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV F0,C
DJNZ R4,SQR6
MOV A,R7
JZ SQRE
SQR9: CLR C
MOV A,R2
RRC A
MOV R2,A
MOV A,R3
RRC A
MOV R3,A
DJNZ R7,SQR9
SQRE: RET
HASC: MOV B,A
LCALL HAS1
XCH A,B
SWAP A
HAS1: ANL A,#0FH
ADD A,#90H
DA A
ADDC A,#40H
DA A
RET
ASCH: CLR C
SUBB A,#30H
JNB ACC.4,ASH1
SUBB A,#7
ASH1: RET
HBCD: MOV B,#100
DIV AB
MOV R3,A
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
HB2: 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
HBD: MOV B,#100
MUL AB
RLC A
CLR A
ADDC A,B
MOV B,#10
DIV AB
SWAP A
ADD A,B
DA A
RET
HBD2: MOV R4,#4
HBD3: MOV A,R3
MOV B,#10
MUL AB
MOV R3,A
MOV R5,B
MOV A,R2
MOV B,#10
MUL AB
ADD A,R5
MOV R2,A
CLR A
ADDC A,B
PUSH ACC
DJNZ R4,HBD3
POP ACC
MOV R3,A
POP ACC
SWAP A
ORL A,R3
MOV R3,A
POP ACC
MOV R2,A
POP ACC
SWAP A
ORL A,R2
MOV R2,A
RET
BCDH: MOV B,#10H
DIV AB
MOV R4,B
MOV B,#10
MUL AB
ADD A,R4
RET
BH2: MOV A,R3
LCALL BCDH
MOV R3,A
MOV A,R2
LCALL BCDH
MOV B,#100
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
BHD: MOV R2,#8
BHD0: ADD A,ACC
DA A
XCH A,R3
RLC A
XCH A,R3
DJNZ R2,BHD0
ADD A,#0B0H
JNC BHD1
INC R3
BHD1: MOV A,R3
RET
BHD2: MOV R6,#10H
BHD3: MOV A,R5
ADD A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
DJNZ R6,BHD3
MOV A,R4
ADD A,#0B0H
JNC BHD4
INC R3
MOV A,R3
JNZ BHD4
INC R2
BHD4: RET
MM: MOV B,R7
MOVX A,@DPTR
MOV R6,A
MOV R7,A
MOV A,DPL
MOV R3,A
MOV R5,A
MOV A,DPH
MOV R2,A
MOV R4,A
MOV A,B
DEC A
JZ MME
MOV R1,A
PUSH DPL
PUSH DPH
MM1: INC DPTR
MOVX A,@DPTR
MOV B,A
SETB C
SUBB A,R6
JC MM2
MOV R6,B
MOV R2,DPH
MOV R3,DPL
SJMP MM3
MM2: MOV A,B
CLR C
SUBB A,R7
JNC MM3
MOV R7,B
MOV R4,DPH
MOV R5,DPL
MM3: DJNZ R1,MM1
POP DPH
POP DPL
MME: RET
MMS: MOV B,R7
MOVX A,@DPTR
MOV R6,A
MOV R7,A
MOV A,DPL
MOV R3,A
MOV R5,A
MOV A,DPH
MOV R2,A
MOV R4,A
MOV A,B
DEC A
JZ MMSE
MOV R1,A
PUSH DPL
PUSH DPH
MMS1: INC DPTR
MOVX A,@DPTR
MOV B,A
SETB C
SUBB A,R6
JZ MMS4
JNB OV,MMS2
CPL ACC.7
MMS2: JB ACC.7,MMS4
MOV R6,B
MOV R2,DPH
MOV R3,DPL
SJMP MMS7
MMS4: MOV A,B
CLR C
SUBB A,R7
JNB OV,MMS6
CPL ACC.7
MMS6: JNB ACC.7,MMS7
MOV R7,B
MOV R4,DPH
MOV R5,DPL
MMS7: DJNZ R1,MMS1
POP DPH
POP DPL
MMSE: RET
FDS1: MOV B,A
MOV R2,#0
MOV A,R7
MOV R6,A
FD11: MOV A,R2
MOVC A,@A+DPTR
CJNE A,B,FD12
CLR OV
MOV A,R2
RET
FD12: INC R2
DJNZ R6,FD11
SETB OV
RET
FDS2: MOV A,R7
MOV R6,A
MOV R2,#0
FD21: CLR A
MOVC A,@A+DPTR
XRL A,R4
JNZ FD22
MOV A,#1
MOVC A,@A+DPTR
XRL A,R5
JNZ FD22
CLR OV
MOV A,R2
RET
FD22: INC DPTR
INC DPTR
INC R2
DJNZ R6,FD21
SETB OV
RET
FDD1: MOV B,A
MOV R2,#0
MOV A,R7
DEC A
MOV R3,A
FD61: CLR C
MOV A,R3
SUBB A,R2
JC FD69
RRC A
ADD A,R2
MOV R4,A
MOVC A,@A+DPTR
CJNE A,B,FD65
CLR OV
MOV A,R4
RET
FD65: JC FD68
MOV A,R4
DEC A
MOV R3,A
SJMP FD61
FD68: MOV A,R4
INC A
MOV R2,A
SJMP FD61
FD69: SETB OV
RET
FDD2: MOV R2,#0
MOV A,R7
DEC A
MOV R3,A
MOV R6,DPH
MOV R7,DPL
FD81: CLR C
MOV A,R3
SUBB A,R2
JC FD89
RRC A
ADD A,R2
MOV R1,A
MOV DPH,R6
CLR C
RLC A
JNC FD82
INC DPH
FD82: ADD A,R7
MOV DPL,A
JNC FD83
INC DPH
FD83: CLR A
MOVC A,@A+DPTR
MOV B,R4
CJNE A,B,FD84
MOV A,#1
MOVC A,@A+DPTR
MOV B,R5
CJNE A,B,FD84
MOV A,R1
CLR OV
RET
FD84: JC FD86
MOV A,R1
DEC A
MOV R3,A
SJMP FD81
FD86: MOV A,R1
INC A
MOV R2,A
SJMP FD81
FD89: MOV DPH,R6
MOV DPL,R7
SETB OV
RET
DDM1: MOV A,R7
MOV R2,A
PUSH DPH
PUSH DPL
CLR A
MOV R4,A
MOV R5,A
DM11: MOVX A,@DPTR
ADD A,R5
MOV R5,A
JNC DM12
INC R4
DM12: INC DPTR
DJNZ R2,DM11
LCALL D457
MOV A,R3
POP DPL
POP DPH
RET
DDM2: MOV A,R7
MOV R2,A
PUSH DPL
PUSH DPH
CLR A
MOV R3,A
MOV R4,A
MOV R5,A
DM20: MOVX A,@DPTR
MOV B,A
INC DPTR
MOVX A,@DPTR
INC DPTR
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R4
MOV R4,A
JNC DM21
INC R3
DM21: DJNZ R2,DM20
POP DPH
POP DPL
LJMP DV31
XR1: MOV R4,DPH
MOV R5,DPL
MOV A,R7
JZ XR10
INC R6
XR10: MOV B,#0
XR11: MOVX A,@DPTR
XRL B,A
INC DPTR
DJNZ R7,XR11
DJNZ R6,XR11
MOV DPH,R4
MOV DPL,R5
MOV A,B
RET
XR2: MOV R4,DPH
MOV R5,DPL
MOV A,R7
JZ XR20
INC R6
XR20: CLR A
MOV R2,A
MOV R3,A
XR21: MOVX A,@DPTR
XRL A,R2
MOV R2,A
INC DPTR
MOVX A,@DPTR
XRL A,R3
MOV R3,A
INC DPTR
DJNZ R7,XR21
DJNZ R6,XR21
MOV DPH,R4
MOV DPL,R5
RET
SORT: MOV A,R7
MOV R5,A
SRT1: CLR F0
MOV A,R5
DEC A
MOV R5,A
MOV R2,A
JZ SRT5
MOV A,R0
MOV R6,A
SRT2: MOV A,@R0
MOV R3,A
INC R0
MOV A,@R0
MOV R4,A
CLR C
SUBB A,R3
JNC SRT4
SETB F0
MOV A,R3
MOV @R0,A
DEC R0
MOV A,R4
MOV @R0,A
INC R0
SRT4: DJNZ R2,SRT2
MOV A,R6
MOV R0,A
JB F0,SRT1
SRT5: RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -