📄 数控电源程序清单.asm
字号:
ZHENGSHU EQU 30H
XIAOSHU EQU 31H
JINWEI EQU 32H
JIEWEI EQU 33H
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP IP0
ORG 0013H
AJMP IP1
MAIN: MOV XIAOSHU,#00H ;小数值存储
MOV JINWEI,#00H ;‘+’操作存储
MOV JIEWEI,#00H ;'-'操作存储
SETB EA
SETB EX0
SETB EX1
SETB IT1
SETB IT0
SETB P3.0
AGAIN: SETB P3.1
MOV A,P1 ;读P1口状态
ANL A,#0FH ;屏蔽高四位
ADD A,JINWEI ;加'+'操作的进位
CLR C
SUBB A,JIEWEI;减'-'操作的借位
JC LC3;有借位,产生溢出,转‘指示灯闪烁示警
CJNE A,#0AH,LC1;判断整数部分是否小于10
LC1: JC LC2;小于10,有借位,转LC2正常运行
LC3: LCALL ERR;非规则状态,指示灯闪烁示警
AJMP AGAIN
LC2: MOV ZHENGSHU,A
SWAP A
ORL A,XIAOSHU
MOV 20H,A;组合整数小数,为D/A转换作准备
LCALL LEDXP;调LED显示子程序
MOV A,P1;读P1口状态
SWAP A ;高低四位交换
ANL A,#0FH;高四位屏蔽
CJNE A,#00H,LC4
LCALL LCZB ;状态0000转直波发生子程序
AJMP AGAIN
LC4: CJNE A,#01H,LC5
LCALL LCFB ;状态0001转方波发生子程序
AJMP AGAIN
LC5: CJNE A,#02H,LC6
LCALL LCSJB ;状态0010转三角波发生子程序
AJMP AGAIN
LC6: CJNE A,#03H,LC7
LCALL LCTXB ;状态0011转梯形波发生子程序
AJMP AGAIN
LC7: CJNE A,#04H,LC8
LCALL LCZXB ;状态0100转正弦波发生子程序
AJMP AGAIN
LC8: CJNE A,#05H,LC9
LCALL ZJCB ; 状态0101转左锯齿波发生子程序
AJMP AGAIN
LC9: CJNE A,#06H,LC10
LCALL YJCB ;状态0110转右锯齿波发生子程序
AJMP AGAIN
LC10:CJNE A,#07H,LC11 ;状态0111转直流正扫描
LCALL ZLZSM
AJMP AGAIN
LC11:CJNE A,#08H,LC12 ;状态1000转直流负扫描
LCALL ZLFSM
AJMP AGAIN
LC12: AJMP LC3 ;非标准状态,转灯闪烁
;************************************************************
;外部中断处理程序
IP0: PUSH PSW
PUSH A ;外部中断1,小数位加1
MOV A,XIAOSHU
CLR C
SUBB A,#09H
JZ TP1
INC XIAOSHU ; 判断小数部分是否小于10
AJMP TP2;小于10,转TP2,直接中断返回
TP1: ;MOV A,ZHENGSHU
;CLR C
;SUBB A,#09H
;JZ TP7
;INC ZHENGSHU
INC JINWEI
MOV XIAOSHU,#00H;无借位,即XIAOSHU=10时清零
AJMP TP2
;TP7: CALL ERR
TP2: POP A
POP PSW
PUSH DPH
PUSH DPL
MOV DPTR,#AGAIN
POP DPL
POP DPH
CALL DIMS
RETI;中断返回
IP1: PUSH PSW
PUSH A
MOV A,XIAOSHU
CLR C
SUBB A,#00H ;产生外部中断2,先判断小数部位是否为0
JZ TP3
DEC XIAOSHU
AJMP TP4
TP3: MOV XIAOSHU,#09H;有借位,R0等于0,整数位借1使R0=10
INC JIEWEI ;借位存储器JIEWEI加1
TP4: POP A
POP PSW
PUSH DPH
PUSH DPL
MOV DPTR,#AGAIN
POP DPL
POP DPH
RETI;中断返回
POP A
;JNB P3.3,$
CALL DIMS
RETI;中断返回
;************************************************************
;闪烁子程序:
ERR:
CPL P3.0
CLR P3.1
MOV R6,#0FFH
MOV R3,#0FFH
SS1: DJNZ R6,SS1
DJNZ R3,SS1
SETB P3.0
MOV R6,#0FFH
MOV R3,#0FFH
SS3: DJNZ R6,SS3
DJNZ R3,SS3
RET
;************************************************************
;LED显示子程序:
LEDXP:;ORL ZHENGSHU,#50H;位选通整数显示器
; MOV P2,ZHENGSHU
; MOV R6,#0FH
;DP1: DJNZ R6,DP1
; ORL XIAOSHU,#60H;位选通小数显示器
; MOV P2,XIAOSHU
; MOV R6,#0FH
;DP2:DJNZ R6,DP2
; RET
MOV A,20H
SWAP A
MOV P2,A
RET
;************************************************************
;直波发生子程序:
LCZB:MOV A,20H
MOV DPTR,#BCD_SJZ
MOVC A,@A+DPTR
RL A
MOV DPTR,#7FFFH
MOVX @DPTR,A
;MOV R6,#0FFH
;ZB1:CALL LEDXP
; DJNZ R6,ZB1
CALL DELAYS
CALL DELAYS
CALL DELAYS
;MOV A,#00H
;MOVX @DPTR,A
;CALL DELAYSS
RET
;************************************************************
;方波发生子程序:
LCFB:MOV A,20H ;
MOV DPTR,#BCD_SJZ
MOVC A,@A+DPTR
RL A
MOV DPTR,#7FFFH
MOVX @DPTR,A
CALL DELAYS
CALL DELAYS
CALL DELAYS
MOV A,#00H
MOVX @DPTR,A ;送低电平
CALL DELAYS
CALL DELAYS
CALL DELAYS
RET
;************************************************************
;三角波发生子程序:
LCSJB:MOV A,20H
MOV DPTR,#BCD_SJZ
MOVC A,@A+DPTR
RL A
MOV 21H,A
MOV A,#00H
UP: MOV DPTR,#7FFFH
MOVX @DPTR,A
;CALL DELAYSS
INC A ;电压随时间上升
CJNE A,21H,UP;小于峰值电压,继续上升
DOWN: DEC A ;电压随时间下降
MOVX @DPTR,A
;CALL DELAYSS
JNZ DOWN;电压下降到0结束
RET
;************************************************************
;梯形波发生子程序:
LCTXB:MOV A,20H
MOV DPTR,#BCD_SJZ
MOVC A,@A+DPTR
RL A
MOV 21H,A
MOV A,#00H
UP1: MOV DPTR,#7FFFH;送入数值电压
MOVX @DPTR,A
;CALL DELAYSS
INC A ;电压随时间上升
CJNE A,21H,UP1;小于峰值电压,继续上升
MOV R5,#02H
TXB1:CALL DELAYS
DJNZ R5,TXB1
DOWN1: DEC A ;电压随时间下降至0
MOVX @DPTR,A
;CALL DELAYS
JNZ DOWN1
RET
;************************************************************
;正弦波发生子程序:
LCZXB:MOV A,ZHENGSHU
CJNE A,#00H,ZXB0
AJMP ZXB00
ZXB0: CJNE A,#01H,ZXB1
AJMP ZXB10
ZXB1: CJNE A,#02H,ZXB2
AJMP ZXB20
ZXB2: CJNE A,#03H,ZXB3
AJMP ZXB30
ZXB3: CJNE A,#04H,ZXB4
AJMP ZXB40
ZXB4: CJNE A,#05H,ZXB5
AJMP ZXB50
ZXB5: CJNE A,#06H,ZXB6
AJMP ZXB60
ZXB6: CJNE A,#07H,ZXB7
AJMP ZXB70
ZXB7: CJNE A,#08H,ZXB80
AJMP ZXB80
ZXB8: AJMP ZXB90
;MOV DPTR,#ZXBTAB
;JMP @A+DPTR
;ZXBTAB:AJMP ZXB00
;AJMP ZXB10
;AJMP ZXB20
;AJMP ZXB30
;AJMP ZXB40
;AJMP ZXB50
;AJMP ZXB60
;AJMP ZXB70
;AJMP ZXB80
;AJMP ZXB90
ZXB00: MOV R7,#0FFH
MOV R6,#00H
ZXB9: MOV A,R6
MOV DPTR,#ZXBTAB01
MOVC A,@A+DPTR
MOV R5,A
MOV A,XIAOSHU
MOV B,R5
MUL AB
PUSH DPL
PUSH DPH
MOV DPTR,#7FFFH
MOVX @DPTR,A
POP DPH
POP DPL
INC R6
DJNZ R7,ZXB9
JMP ZXBTX
ZXB10: MOV DPTR,#ZXBTAB10
JMP ZXBTX
ZXB20: MOV DPTR,#ZXBTAB20
JMP ZXBTX
ZXB30: MOV DPTR,#ZXBTAB30
JMP ZXBTX
ZXB40: MOV DPTR,#ZXBTAB40
JMP ZXBTX
ZXB50: MOV DPTR,#ZXBTAB50
JMP ZXBTX
ZXB60: MOV DPTR,#ZXBTAB60
JMP ZXBTX
ZXB70: MOV DPTR,#ZXBTAB70
JMP ZXBTX
ZXB80: MOV DPTR,#ZXBTAB80
JMP ZXBTX
ZXB90: MOV DPTR,#ZXBTAB90
JMP ZXBTX
ZXBTX: MOV A,R6
MOVC A,@A+DPTR
CALL HUANSUAN
ADD A,R5
PUSH DPL
PUSH DPH
MOV DPTR,#7FFFH
MOVX @DPTR,A
POP DPH
POP DPL
INC R6
CJNE R6,#00H,ZXBTX
RET
;************************************************************
;正弦函数小数位换算子程序:
HUANSUAN: PUSH DPL
PUSH DPH
PUSH A
MOV A,R6
MOV DPTR,#ZXBTAB01
MOVC A,@A+DPTR
MOV R5,A
MOV A,XIAOSHU
MOV B,R5
MUL AB
MOV R5,A
POP A
POP DPH
POP DPL
RET
;************************************************************
;左锯齿波发生子程序
ZJCB: MOV A,20H
MOV DPTR,#BCD_SJZ
MOVC A,@A+DPTR
RL A
ZJCB1: MOV DPTR,#7FFFH
MOVX @DPTR,A
;CALL DELAYSS
DEC A
JNZ ZJCB1
MOVX @DPTR,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -