共2条
1/1 1 跳转至页
完整的数控直流电源程序
PORT EQU 0FE00H
PORTA EQU 0FE01H
PORTB EQU 0FE02H
PORTC EQU 0FE03H
DISP0 EQU 30H
DISP1 EQU 31H
DISP2 EQU 32H
DISP3 EQU 33H
DISP4 EQU 34H
DISP5 EQU 35H
DISP6 EQU 36H
DISP7 EQU 37H
WEI EQU 38H ;位码
DATB1 EQU 27 ;乘 0.54
DATB EQU 50 ;除
PPPP EQU 85 ;想少数响要增大数值
ADADH EQU 0FB00H ;AD地址
DAADH EQU ffice:smarttags" />0F700H ;DA地址
DBUFH EQU 3CH ;DA高四位
DBUFL EQU 3DH ;DA低八位
LENG1 EQU 24 ;双字节二进制变BCD,40H~44H
LENG2 EQU 4
LENG3 EQU 3
NUMB1 EQU 40H
NUMB2 EQU 43H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP LED
ORG 0013H
AJMP KEYSCAN
MAIN: CLR P1.1
SETB P1.1
CLR P1.1
MOV R0,#00H
MOV R1,#00H
MOV SP,#50H
SETB PT0
MOV TMOD,#01H
MOV TH0,#0F8H ;2MS,显示扫描间隔
MOV TL0,#30H
SETB EA
SETB ET0
SETB TR0
SETB IT1
SETB EX1
CLR 00H ;电流千位合法位
CLR 01H ;显示闪烁
MOV 3EH,#00H ;显示数据
MOV 3FH,#00H
MOV 39H,#00H ;合字暂存
MOV 3CH,#00H
MOV 3DH,#00H
MOV 45H,#00H ;拆字暂存
SETB P1.0 ;过载
MOV DPTR,#PORT ;AB出C口入
MOV A,#03H
MOVX @DPTR,A
MOV DPTR,#PORTA ;列扫描输出低电平
MOV A,#0H
MOVX @DPTR,A
MOV 3AH,#00H
MOV 3BH,#00H
MOV 30H,#0
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
MOV 36H,#0
MOV 37H,#0
MOV WEI,#00H
SETB RS0
SETB RS1
MOV R0,#DISP0 ;显示指针 一定要用俩组
MOV R6,#8 ;显示位数
MOV R1,#DISP0 ;键盘指针
MOV R7,#4 ;键盘位数
CLR RS0
CLR RS1
LOOP: ACALL LOOPP
ACALL DTOA
ACALL ATOD
AJMP LOOP
;******************电流设置子程序***************
LOOPP: MOV A,3AH
CJNE A,#15,PASS1
ACALL SETONE
PASS1: CJNE A,#10,PASS2
ACALL JIA
PASS2: CJNE A,#11,PASS3
ACALL JIAN
PASS3:
RET
;******************DA转换子程序*****************
DTOA: PUSH PSW
SETB RS0
MOV R2,3CH
MOV R3,3DH
;MOV R2,#00H
;MOV R3,#00H
CLR P3.5
SETB P3.5
SETB P2.3
CLR C
CLR A
MOV A,R2
MOV R7,#4
LOOP11: RLC A
DJNZ R7,LOOP11
MOV R7,#4
LOOP22: LCALL PRD
DJNZ R7,LOOP22
CLR C
CLR A
MOV A,R3
MOV R7,#8
LOOP34: LCALL PRD
DJNZ R7,LOOP34
CPL P2.3
POP PSW
RET
PRD: RLC A
MOV P3.0,C
SETB P3.1
CPL P3.1
RET
;*****************************AD采样子程序******************************
ATOD:
HUMID: MOV DPTR,#0FB00H
CLR A
MOVX @DPTR,A
WAIT: JNB P3.4,READ ;转换结束信号
SJMP WAIT
READ: MOVX A,@DPTR
MOV B,#8
MUL AB
MOV 40H,A ;低位
MOV 41H,B ;高位
;MOV 40H,#0F8H
;MOV 41H,#07H
MOV 42H,#00H
;双字节二进制变BCD
;入口二进制42H,41H,40H高到低
;出口44H~43H,高到低
MUBTD: MOV R0,#NUMB2
MOV R7,#LENG2
CLR A
LOOP18: MOV @R0,A
INC R0
DJNZ R7,LOOP18
MOV R7,#LENG1
LOOP48: MOV R1,#NUMB1
MOV R6,#LENG3
CLR C
LOOP28: MOV A,@R1
RLC A
MOV @R1,A
INC R1
DJNZ R6,LOOP28
MOV R5,#LENG2
MOV R0,#NUMB2
LOOP38: MOV A,@R0
ADDC A,@R0
DA A
MOV @R0,A
INC R0
DJNZ R5,LOOP38
DJNZ R7,LOOP48
;拆字程序*************
MOV R0,#DISP4
MOV A,44H
ACALL SEPA1
MOV R0,#DISP6
MOV A,43H
ACALL SEPA1
RET
SEPA1: MOV 45H,A
ANL A,#0F0H
SWAP A
MOV @R0,A
INC R0
MOV A,45H
ANL A,#0FH
;SWAP A
MOV @R0,A
;RET
MOV DPTR,#0FB01H
CLR A
MOVX @DPTR,A
WAIT1: JNB P3.4,READ1 ;转换结束信号
SJMP WAIT1
READ1: MOVX A,@DPTR
CLR C
;MOV A,#68
CJNE A,#PPPP,LLI
LLI: JNC LL2 ;集电极电压大于5V则不报警
CLR P1.0 ;负载电压大于10V
RET
LL2: SETB P1.0
RET
;闭环*****************************
CLR C
MOV A,43H
SUBB A,3FH
MOV 46H,A ;低
MOV A,44H
SUBB A,3EH
MOV 47H,A ;高
;***********键盘显示中断程序*****************
;用定时中断0,显示扫描,30H~37H是段码存放地址,38H是位码地址
;8155 PB0~PB3段码输出,PB4~PB7位码输出
;用外部中断1键盘扫描,PA0~PA3列扫描输出,PC0~PC3;输入,P2.0接CS,P2.1接IO/M
;出口数值是0~15,存在3AH中,3BH用作放键暂存
;用寄存器第3组
;已用R0,R2,R3,R4,R5,R6,其中R0,R6为显示用,R1,R2,R3,R7为键盘用,R4,R5延时用
;*******************中断显示扫描子程序*****************
LED: PUSH PSW
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
SETB RS0
SETB RS1
MOV TH0,#0F8H ;2MS
MOV TL0,#30H
MOV A,@R0
ADD A,WEI
MOV DPTR,#PORTB
MOVX @DPTR,A
MOV A,WEI
ADD A,#10H
MOV WEI,A
INC R0
;ACALL DELAY
DJNZ R6,LED1
MOV WEI,#00H
MOV R0,#DISP0
MOV R6,#8
LED1: POP DPL
POP DPH
POP B
POP ACC
POP PSW
RETI
;**************中断键盘扫描子程序************
KEYSCAN: PUSH PSW
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
SETB RS0
SETB RS1
ACALL DELAY1 ;消抖延时
JNB P3.3,LIST
MOV DPTR,#PORTA ;恢复B口输出低电平
MOV A,#00H
MOVX @DPTR,A
POP DPL
POP DPH
POP B
POP ACC
POP PSW
RETI ;没有按
LIST: MOV DPTR,#PORTC
MOVX A,@DPTR
MOV 3BH,A
MOV R2,#0FEH
MOV R3,#00H
LINE0: MOV DPTR,#PORTA
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#PORTC
MOVX A,@DPTR
JB ACC.0,LINE1
MOV A,#0
AJMP TRYK
LINE1: JB ACC.1,LINE2
MOV A,#1
AJMP TRYK
LINE2: JB ACC.2,LINE3
MOV A,#2
AJMP TRYK
LINE3: JB ACC.3,NEXT
MOV A,#3
AJMP TRYK
NEXT: ;INC R3
MOV A,R3
ADD A,#4
MOV R3,A
MOV A,R2
JNB ACC.3,EXIT
RL A
MOV R2,A
AJMP LINE0
EXIT: MOV DPTR,#PORTA ;恢复B口输出低电平
MOV A,#00H
MOVX @DPTR,A
POP DPL
POP DPH
POP B
POP ACC
POP PSW
RETI ;没有按
TRYK: ADD A,R3
MOV 3AH,A
LETK: MOV DPTR,#PORTC
MOVX A,@DPTR
XRL A,3BH
JZ LETK
MOV DPTR,#PORTA ;恢复B口输出低电平
MOV A,#00H
MOVX @DPTR,A
POP DPL
POP DPH
POP B
POP ACC
POP PSW
RETI
;*******************电流设置****************
SETONE:
SETB RS0
SETB RS1
;SETB 01H ;置显示闪烁位
SETONE1: MOV A,3AH
CJNE A,#10,L1
L1: JNC SETONE1
JB 00H,L3
CJNE A,#2,L2 ;2000MA
MOV DISP0,#2
MOV DISP1,#0
MOV DISP2,#0
MOV DISP3,#0
;CLR 01H
CLR RS0
CLR RS1
PUSH PSW
SETB RS1
ACALL BCDHEX ;十六位BCD变十六进制
ACALL SUBBV ;*2再送DA
POP PSW
CLR A
RET
L2: MOV 3AH,#0FFH
JNC SETONE1
SETB 00H
L3: MOV @R1,A ;即时刷新显示缓冲区
INC R1
MOV 3AH,#0FFH
DJNZ R7,SETONE
MOV R7,#4
MOV R1,#30H
CLR 00H
;CLR 01H
CLR RS0
CLR RS1
PUSH PSW
SETB RS1
ACALL BCDHEX ;16字节BCD变二进制
ACALL SUBBV ;*5/8
POP PSW
CLR A
RET
;**********加电流
JIA: MOV 3AH,#0FFH
MOV A,DISP3
INC A
MOV DISP3,A
CJNE A,#10,OUT
MOV DISP3,#0
MOV A,DISP2
INC A
MOV DISP2,A
CJNE A,#10,OUT
MOV DISP2,#0
MOV A,DISP1
INC A
MOV DISP1,A
CJNE A,#10,OUT
MOV DISP1,#0
MOV A,DISP0
INC A
MOV DISP0,A
CJNE A,#2,OUT
MOV DISP0,#1
MOV DISP1,#9
MOV DISP2,#9
MOV DISP3,#9
OUT: PUSH PSW
SETB RS1
ACALL BCDHEX
ACALL SUBBV
POP PSW
CLR A
RET
;**********减电流
JIAN: MOV 3AH,#0FFH
MOV A,DISP3
DEC A
MOV DISP3,A
CJNE A,#0FFH,OUT1
MOV DISP3,#9
MOV A,DISP2
DEC A
MOV DISP2,A
CJNE A,#0FFH,OUT1
MOV DISP2,#9
MOV A,DISP1
DEC A
MOV DISP1,A
CJNE A,#0FFH,OUT1
MOV DISP1,#9
MOV A,DISP0
DEC A
MOV DISP0,A
CJNE A,#0FFH,OUT1
MOV DISP0,#0
MOV DISP1,#0
MOV DISP2,#0
MOV DISP3,#0
OUT1: PUSH PSW
SETB RS1
ACALL BCDHEX
ACALL SUBBV
POP PSW
CLR A
RET
BCDHEX:
MOV R7,#03H
MOV R0,#DISP0
CLR A
MOV R1,A
MOV R2,A
MOV R4,A
MOV R5,A
MOV R3,A
MOV A,@R0
MOV R1,A
CLR C
LOOP16: MOV A,R1
ADD A,R1
MOV R1,A
MOV A,R2
ADDC A,R2
MOV R2,A
MOV A,R1
MOV R3,A
MOV A,R2
MOV R4,A
MOV A,R1
ADD A,R1
MOV R1,A
MOV A,R2
ADDC A,R2
MOV R2,A
MOV A,R1
ADD A,R1
MOV R1,A
MOV A,R2
ADDC A,R2
MOV R2,A
MOV A,R1
ADD A,R3
MOV R1,A
MOV A,R2
ADDC A,R4
MOV R2,A
INC R0
MOV A,@R0
MOV R5,A
MOV A,R1
ADD A,R5
MOV R1,A
MOV A,R2
ADDC A,#00H
MOV R2,A
MOV R5,#00H
DJNZ R7,LOOP16
RET
SUBBV: MOV 3EH,R2
MOV 3FH,R1
MOV R4,3EH ;高位
MOV R3,3FH ;低位
MOV R2,#DATB1
;********************************乘5
MULI:
MOV A,R2 ;取乘数
MOV B,R3 ;取被乘数低位
MUL AB ;计算(R3)*(R2)
MOV R5,A ; 乘积的低位送R5
MOV R6,B ; 乘积的高位送R6
MOV A,R2 ;恢复乘数
MOV B,R4 ;取被乘数高位
MUL AB ;计算(R4)*(R2)
ADD A,R6 ;(R3)*(R2)积的高位加(R4)*(R2)积的低位
MOV R6,A ;存结果
MOV A,B ;取(R4)*(R2)
ADDC A,#00H ; (R4)*(R2)积的高位加低位进位
MOV R7,A ;存最高位
;RET
MOV A,R6
MOV R1,A
MOV A,R5
MOV R0,A
;*******************除8
MOV R2,#00H
MOV R3,#DATB
MOV R4,#00H
MOV R5,#00H
MOV R7,#10H
CHU5: MOV A,R0
ADD A,R0
MOV R0,A
MOV A,R1
ADDC A,R1
MOV R1,A
MOV A,R2
ADDC A,R2
MOV R2,A
MOV A,R4
ADD A,R4
MOV R4,A
MOV A,R5
ADDC A,R5
MOV R5,A
CJNE R2,#DATB,LOOP07
LOOP07: JC LOOP17
MOV A,R2
SUBB A,R3
MOV R2,A
MOV A,R4
ADD A,#01H
MOV R4,A
MOV A,R5
ADDC A,#00H
MOV R5,A
LOOP17: DJNZ R7,CHU5
MOV 3CH,R5 ;装入DA转换
MOV 3DH,R4
RET
DELAY1: MOV R4,#100 ;消抖延时20MS 70 10MS
DEL21: MOV R5,#100
DEL11: DJNZ R5,$
DJNZ R4,DEL21
RET
END
关键词: 完整 数控 直流电 源程序 DISP1 DISP3
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |