黄志平的回答:给你发个产品的真实程序,控制交流滑差电机,既检测控制速度,又检测实际速度,还根据检测值控制电机在控制速度值下平稳运行。 ORG 0000H ;主轴控制程序 START: AJMP MAIN ; REALSPDL EQU 30H REALSPDH EQU 31H CMPSPDL EQU 32H CMPSPDH EQU 33H ADJSPD EQU 34H BKCNT EQU 35H T0COUNT EQU 36H T1COUNT EQU 37H IOSPDL EQU 38H IOSPDH EQU 39H T_TMP EQU 3AH T_MS EQU 3BH T_250MS EQU 3CH CH1 EQU 3AH CH2 EQU 3BH UPSPD EQU 2 DNSPD EQU 2 STOPB EQU P1.4 RUNB EQU P1.3 LAMPB EQU P3.7 PZB EQU P3.4 PAB EQU P3.3 SPDB EQU P3.2 BREAKB EQU P1.1 ENABLE EQU P1.0 ;----------------------------------- ORG 0003H SJMP IE0DEAL ORG 000BH SJMP TF0DEAL ORG 0013H SJMP IE1DEAL ORG 001BH SJMP TF1DEAL ORG 0023H SJMP RITIDEAL ;------------------------------------ ORG 0030H IE0DEAL: CLR TR0 MOV IOSPDL,TL0 MOV IOSPDH,TH0 MOV TL0,#0 MOV TH0,#0 SETB TR0 PUSH ACC CLR 02H MOV A,REALSPDH CLR C SUBB A,#2 JC IE0D2 SETB 02H IE0D2: POP ACC IE0D3: RETI ;------------------------------------ TF0DEAL: SETB 01H RETI ;------------------------------------ IE1DEAL: CLR TR1 MOV REALSPDL,TL1 MOV REALSPDH,TH1 MOV TL1,#0 MOV TH1,#0 SETB TR1 JB 03H,IE1D1 INC T1COUNT MOV A,T1COUNT CLR C SUBB A,#250 JC IE1D1 MOV T1COUNT,#0 INC T0COUNT MOV A,T0COUNT CLR C SUBB A,#4 JC IE1D1 MOV T0COUNT,#0 SETB 03H IE1D1: CLR 01H RETI ;------------------------------------ TF1DEAL: SETB 01H MOV REALSPDL,#0FFH MOV REALSPDH,#0FFH RETI ;------------------------------------ RITIDEAL: RETI ;****************************************************************************** DELAY2: MOV T_TMP,#0F9H ;0FAH=1ms DJNZ T_TMP,$ DJNZ T_MS,DELAY2 ;3EH=?ms RET ;------------------------------------------------------------------------------ DELAY3: MOV T_MS,#0FAH ;0FAH=250ms LCALL DELAY2 DJNZ T_250MS,DELAY3 ;3FH=?*250ms RET ;------------------------------------ MAIN: CLR EA CLR ET0 CLR ET1 CLR EX0 CLR EX1 CLR TR0 CLR TR1 SETB RUNB SETB STOPB MOV SP,#60H MOV TMOD,#11H MOV TCON,#05H MOV TL0,#0 MOV TH0,#0 MOV TL1,#0 MOV TH1,#0 MOV T_250MS,#20 LCALL DELAY3 SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EX0 SETB EX1 SETB EA MOV T1COUNT,#0 MOV T0COUNT,#0 SETB BREAKB SETB ENABLE SETB 01H CLR 03H CLR 04H SETB RUNB SETB STOPB MOV T_MS,#100 LCALL DELAY2 INIT: JB RUNB,LOOP MOV T_MS,#200 LCALL DELAY2 CPL P3.7 SJMP INIT LOOP: JNB RUNB,CONTINUE LOOP0: JNB STOPB,STOPP RESUME: SETB BREAKB SETB ENABLE SETB 01H CLR P3.7 MOV TL0,#0 MOV TH0,#0 MOV TL1,#0 MOV TH1,#0 MOV T1COUNT,#0 MOV T0COUNT,#0 MOV BKCNT,#0 CLR 03H CLR 04H SJMP LOOP CONTINUE: JB 01H,CNT1 LCALL COMPARE JZ CNT3 CJNE A,#0FFH,CNT2 CNT1: SETB BREAKB CLR ENABLE SJMP LOOP CNT2: SETB BREAKB SETB ENABLE SJMP LOOP CNT3: JB 02H,CNT2 JNB 03H,CNT2 CLR BREAKB SETB ENABLE CNT4: SJMP LOOP ;------------------------------------ STOPP: CLR BREAKB SETB ENABLE STOPP1: JNB STOPB,STOPP1 SETB BREAKB SETB ENABLE SJMP LOOP ;------------------------------------ COMPARE: MOV A,REALSPDL ADD A,#1 MOV CMPSPDL,A MOV A,REALSPDH ADDC A,#0 MOV CMPSPDH,A CLR C MOV A,CMPSPDL SUBB A,IOSPDL MOV CMPSPDL,A MOV A,CMPSPDH SUBB A,IOSPDH MOV CMPSPDH,A JC COM11 ;MORE JZ COM12 COM10: MOV A,#0FFH RET COM11: MOV A,#00H RET COM12: LCALL GETADJ CLR C MOV A,CMPSPDL SUBB A,ADJSPD JNC COM10 MOV A,#0A0H RET ;------------------------------------ GETADJ: MOV A,IOSPDH JNZ GETADJ0 MOV A,IOSPDL SUBB A,#79 JNC GETADJ01 MOV ADJSPD,#3 ;>700 RET GETADJ01: SUBB A,#32 JNC GETADJ03 MOV ADJSPD,#6 ;500~700 RET GETADJ03: SUBB A,#73 JNC GETADJ04 MOV ADJSPD,#10 ;300~500 RET GETADJ04: MOV ADJSPD,#16 ;216~300 RET GETADJ0: MOV A,REALSPDH SUBB A,#2 JC GETADJ1 MOV ADJSPD,#3 ;<108 RET GETADJ1: MOV A,REALSPDL SETB C RRC A SUBB A,#150 JNC GETADJ2 MOV ADJSPD,#24 ;>200 RET GETADJ2: SUBB A,#50 JNC GETADJ3 MOV ADJSPD,#48 ;150~200 RET GETADJ3: MOV ADJSPD,#96 ;<150 RET ;------------------------------------ END 吉世光的回答:好多 ,留个联系方式,我给你发一个 ╰︶如果、阳光雨。的回答:#include 郑娅琳的回答:建议 去 我的领地 5d6d 的 proteus 论坛看看 那里有很多 单片机仿真实例,包括仿真图 和 源码 搜 5d6d 和 proteus 2个关键词 |