综合子程序.txt
来自「有用的单片机程序,包括8279和E2ROM的读写」· 文本 代码 · 共 1,053 行 · 第 1/2 页
TXT
1,053 行
MOVX @DPTR,A
MOV A,32H
ANL A,#0FH
DA A
MOV DPTR,#LEDSEG
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
MOV A,#LEDWR0 ;显示小数部分第三位
ADD A,#07H
MOV DPTR,#Z8279
MOVX @DPTR,A
MOV A,33H
ANL A,#0FH
DA A
MOV DPTR,#LEDSEG
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
RET
;///////////////////////////////////////////////////////////////////////////////////
双字节除法子程序:
入口参数:
R7R6——执行前存被除数,程序执行后存商数
R5R4——存除数
R3R2——存余数
DIV2: ;两字节相除子程序
PUSH PSW
PUSH ACC
push 0
push 1
CLR A
MOV R2,A
MOV R3,A
MOV R1,#10H
LOOP: CLR C
MOV A,R6
RLC A
MOV R6,A
MOV A,R7
RLC A
MOV R7,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
SUBB A,R4
JC NEXT
MOV R0,A
MOV A,R3
SUBB A,R5
JC NEXT
INC R6
MOV R3,A
MOV A,R0
MOV R2,A
NEXT:DJNZ R1,LOOP
pop 1
pop 0
POP ACC
POP PSW
RET
;//////////////////////////////////////////////////////////////////////////////////////////////
软件滤波子程序:
入口参数:50H——5AH存要滤波的十个数
出口参数:A(存滤波结果)
滤波方法:去最大值,去最小值,求平均
PROCESS: PUSH 0
PUSH 1
PUSH 2
PUSH PSW
;MOV R2,#0AH
MOV R0,#50H
MOV A,@R0
MOV 44H,#50H
MAX: CJNE R0,#5AH,M1
SJMP MAX_END
M1: INC R0
MOV B,@R0
CLR C
CJNE A,B ,XIA ;将最大数放在最后一个单元,A<B不交换
XIA: JNC MAX
MOV 44H,R0
MOV A,@R0
SJMP MAX
MAX_END: MOV R0,44H
MOV @R0,#00H
; MOV R2,#0AH
MOV R0,#50H
MOV A,@R0
MOV 44H,#50H
MIN: CJNE R0,#5AH,M2
SJMP MIN_END
M2: INC R0
MOV B,@R0
CLR C
CJNE A,B,XIA1
XIA1: JC MIN
MOV 44H,R0
MOV A,@R0
SJMP MIN
MIN_END: MOV R0,44H
MOV @R0,#00H
;MOV R2,#0AH
MOV R1,#00H
AVERAGE: MOV R0,#50H
MOV A,@R0
AVE: CLR C
CJNE R0,#5AH,AVE1
SJMP ADD_END
AVE1: INC R0
ADD A,@R0
JNC AVE
INC R1
SJMP AVE
ADD_END: MOV 46H,A
MOV 47H,R1
MOV R7,47H
MOV R6,46H
MOV R5,#00H
MOV R4,#09H
MOV R3,#00H
MOV R2,#00H
LCALL DIV2
MOV A,R6
POP PSW
POP 2
POP 1
POP 0
RET
;////////////////////////////////////////////////////////////////////////////////////////////////////////
;三字节乘法程序,R7R6R5*R4R3R2=R7R6R5R4R3R2
ORG 0040H
CLR C
MOV 55H,#00H
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV R2,#50H
MOV R3,#0DH
MOV R4,#03H
MOV R5,#40H
MOV R6,#42H
MOV R7,#0FH
MOV B,R5
MOV A,R2
MUL AB
MOV 50H,A ;R2存最低字节
MOV R0,B
MOV B,R6
MOV A,R2
MUL AB
ADDC A,R0
JNC XIA8
INC 52H
CLR C
XIA8: MOV 51H,A
MOV R0,B
MOV B,R7
MOV A,R2
MUL AB
ADDC A,R0
JNC XIA11
INC 53H
CLR C
XIA11: ADD A,52H
JNC XIA12
INC 53H
CLR C
XIA12: MOV 52H,A
MOV A,B
ADD A,53H
MOV 53H,A
;///////////////////////////////////
XIA: MOV A,R3
MOV B,R5
MUL AB
ADDC A,51H
JNC XIA10
INC 52H
CLR C
XIA10: MOV 51H,A
MOV R0,B
MOV B,R6
MOV A,R3
MUL AB
ADDC A,R0
JNC XIA1
INC 53H
CLR C
XIA1: ADDC A,52H
JNC XIA4
INC 53H
CLR C
XIA4: MOV 52H,A
MOV A,R3
MOV R0,B
MOV B,R7
MUL AB
ADDC A,R0
JNC XIA2
INC 54H
CLR C
XIA2: ADDC A,53H
MOV 53H,A
JNC XIA3
INC 54H
XIA3: CLR C
MOV A,B
ADD A,54H
MOV 54H,A
;////////////////////////////////
MOV A,R4
MOV B,R5
MUL AB
ADDC A,52H
MOV 52H,A
MOV R0,B
MOV B,R6
MOV A,R4
MUL AB
ADDC A,R0
JNC XIA7
INC 54H
CLR C
XIA7: ADDC A,53H
MOV 53H,A
JNC XIA9
INC 54H
CLR C
XIA9: MOV R0,B
MOV A,R4
MOV B,R7
MUL AB
ADDC A,R0
JNC XIA5
INC 55H
CLR C
XIA5: ADDC A,54H
MOV 54H,A
JNC XIA6
INC 55H
CLR C
XIA6: MOV A,B
ADDC A,55H
MOV 55H,A
END1:RET
END
;////////////////////////////////////////////////////////////////////////////////////////////////////////
;6字节除以3字节程序,被除数存于50H-55H,除数存于36H--3BH,
;余数存于56H——5BH,结果存于50H——52H
TDIV:
MOV 3BH,#00H
MOV 3AH,#00H
MOV 39H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV 58H,#00H
MOV 59H,#00H
MOV 5AH,#00H
MOV 5BH,#00H
MOV R4,#48
LOOP: CLR C
MOV A,50H
RLC A
MOV 50H,A
MOV A,51H
RLC A
MOV 51H,A
MOV A,52H
RLC A
MOV 52H,A
MOV A,53H
RLC A
MOV 53H,A
MOV A,54H
RLC A
MOV 54H,A
MOV A,55H
RLC A
MOV 55H,A
MOV A,56H
RLC A
MOV 56H,A
MOV A,57H
RLC A
MOV 57H,A
MOV A,58H
RLC A
MOV 58H,A
MOV A,59H
RLC A
MOV 59H,A
MOV A,5AH
RLC A
MOV 5AH,A
MOV A,5BH
RLC A
MOV 5BH,A
MOV A,56H
SUBB A,36H
MOV 20H,A
MOV A,57H
SUBB A,37H
MOV 21H,A
MOV A,58H
SUBB A,38H
MOV 22H,A
MOV A,59H
SUBB A,39H
MOV 23H,A
MOV A,5AH
SUBB A,3AH
MOV 24H,A
MOV A,5BH
SUBB A,3BH
JC NEXT
INC 50H
MOV 5BH,A
MOV 5AH,24H
MOV 59H,23H
MOV 58H,22H
MOV 57H,21H
MOV 56H,20H
NEXT:DJNZ R4,LOOP
RET
;/////////////////////////////////////////////////////////////////////////////////////////////
DELAY01: PUSH 0 ;延时子程序(0.1秒)
PUSH 1
PUSH 2
MOV R0,#02H
DELAY11: MOV R1,#4DH
DELAY22: MOV R2,#0A0H
DJNZ R2,$
DJNZ R1,DELAY22
DJNZ R0,DELAY11
POP 2
POP 1
POP 0
RET
;///////////////////////////////////////////////////////////////////////////////////////////
正弦表:
TAB:DB 80H,83H,86H,89H,8dH,90H,93H,96H
DB 99H,9cH,9fH,0a2H,0a5H,0a8H,0abH,0aeH
DB 0b1H,0b4H,0b7H,0baH,0bcH,0bfH,0c2H,0c5H
DB 0c7H,0caH,0ccH,0cfH,0d1H,0d4H,0d6H,0d8H
DB 0daH,0ddH,0dfH,0e1H,0e3H,0e5H,0e7H,0e9H
DB 0eaH,0ecH,0eeH,0efH,0f1H,0f2H,0f4H,0f5H
DB 0f6H,0f7H,0f8H,0f9H,0faH,0fbH,0fcH,0fdH
DB 0fdH,0feH,0ffH,0ffH,0ffH,0ffH,0ffH,0ffH
DB 0ffH,0ffH,0ffH,0ffH,0ffH,0ffH,0feH,0fdH
DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB 0f5h,0f4h,0f2h,0f1h,0efh,0eeh,0ech,0eah
db 0e9h,0e7h,0e5h,0e3h,0e1h,0dfh,0ddh,0dah
db 0d8h,0d6h,0d4h,0d1h,0cfh,0cch,0cah,0c7h
db 0c5h,0c2h,0bfh,0bch,0bah,0b7h,0b4h,0b1h
db 0aeh,0abh,0a8h,0a5h,0a2h,9fh,9ch,99h
db 96h,93h,90h,8dh,89h,86h,83h,80h
db 80h,7ch,79h,76h,72h,6fh,6ch,69h
db 66h,63h,60h,5dh,5ah,57h,55h,51h
db 4eh,4ch,48h,45h,43h,40h,3dh,3ah
db 38h,35h,33h,30h,2eh,2bh,29h,27h
db 25h,22h,20h,1eh,1ch,1ah,18h,16h
db 15h,13h,11h,10h,0eh,0dh,0bh,0ah
db 09h,08h,07h,06h,05h,04h,03h,02h
db 02h,01h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,01h,02h
db 02h,03h,04h,05h,06h,07h,08h,09h
db 0ah,0bh,0dh,0eh,10h,11h,13h,15h
db 16h,18h,1ah,1ch,1eh,20h,22h,25h
db 27h,29h,2bh,2eh,30h,33h,35h,38h
db 3ah,3dh,40h,43h,45h,48h,40h,4eh
db 51h,55h,57h,5ah,5dh,60h,63h,66h
db 69h,6ch,6fh,72h,76h,79h,7ch,80h
;/////////////////////////////////////////////////////////////////////////////////////////
查询方式取键值:
GETKEY:PUSH DPH
PUSH DPL
PUSH PSW
MOV DPTR,#Z8279
MOVX A,@DPTR
ANL A,#07H
JNZ GETVAL
MOV A,#00H
MOV R6,#0
SJMP NKBHIT
GETVAL:MOV A,#READKB
MOVX @DPTR,A
MOV DPTR,#D8279
MOVX A,@DPTR
ANL A,#3FH
MOV DPTR,#KEYCODE
MOVC A,@A+DPTR
MOV B,A
MOV R6,#0FFH
NKBHIT:POP PSW
POP DPL
POP DPH
RET
;///////////////////////////////////////////////////////////////////////////////////////////
单片机与PC机通讯,发送,波特率1200
START:
MOV SP,#60H
MOV TMOD,#20H
MOV TL1,#0F3H
MOV TH1,#0F3H
MOV PCON,#00H
SETB TR1
MOV SCON,#40H
LOOP:MOV P1,#83H
MOV A,#83H
MOV SBUF,A
JNB TI,$
CLR TI
LCALL DELAY
SJMP LOOP
RET
;/////////////////////////////////////////////////////////////////////////////////////////////////
单片机与PC机通讯,接收,波特率1200
START:
MOV SP,#60H
MOV TMOD,#20H
MOV TL1,#0F3H
MOV TH1,#0F3H
MOV PCON,#00H
SETB TR1
MOV SCON,#50H
MOV P1,#00H
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LOOP:
JNB RI,$
CLR RI
MOV A,SBUF
CPL A
MOV P1,A
LCALL DELAY
SJMP LOOP
;//////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?