论坛» 综合技术» 物联网技术

完整的数控直流电源程序

高工
2008-07-08 16:58 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
菜鸟
2008-10-13 08:10 2楼
不错!
共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]