;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;三个电机同时复位程序;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;送料电机先复位
SDFW:JB KA,$ ;复位开关按下后,3台电机同时复位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;左右电机M1开始复位 (M1、M2、M3同时复位) 2013.3.17更新
SDGFW:LCALL SONGLIAO
LCALL ZUOYOU
LCALL XUANZHUAN
;;;;;;;;;;;;;;;;;;;;;;;;;各电机各自复位检测程序
KKM1:
JB TT1,KKM2 ;检测送料电机M1探头
MOV CPA0,#00H ;设定脉冲数
MOV CPA1,#00H ;设定脉冲数
MOV CPA2,#00H ;设定脉冲数
KKM2:
JB TT2,KKM3 ;检测左右电机M2探头
MOV CPB0,#00H ;设定脉冲数
MOV CPB1,#00H ;设定脉冲数
MOV CPB2,#00H ;设定脉冲数
KKM3:
JB TT3,FWWC ;检测旋转电机M3探头
MOV CPC0,#00H ;设定脉冲数
MOV CPC1,#00H ;设定脉冲数
MOV CPC2,#00H ;设定脉冲数
FWWC:JB TT1,KKM1;手动复位完成
JB TT2,KKM2
JB TT3,KKM3
;**************************************************手动复位完成
;***********************************************************
; M1电机运行程序
;*************************************************************
MC:PUSH ACC
PUSH PSW
MOV TL0,TLAA ;时钟定时器低位 A8 042H
MOV TH0,THAA ;时钟定时器高位 0FFH
;;;;;;;;;;;;;;;M1电机运行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,CPA2 ;判断是否结束运转
CJNE A,#00H,NEXTA ;不相等则转移
MOV A,CPA1
CJNE A,#00H,NEXTA
MOV A,CPA0
CJNE A,#00H,NEXTA
SETB JSBZA
MOV TLAA,#30H ;恢复启动速度500HZ
MOV THAA,#0F8H
LJMP NEXT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NEXTA:JNB JSBZA,KKJIANSA ;判断是否加速
;***************************************
;步进电机加速程序 ;
;***************************************
MOV A,THAA ;
CJNE A,THA,PDA ;判断是否需要加速 ;
MOV A,TLAA ;
CJNE A,TLA,PDA ;判断是否需要加速 ;
CLR JSBZA ;
LJMP DJAYX ;
PDA:JNC DJAYX ;电机A运行 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJAJS: ;加速斜率 ;
MOV A,TLAA ; ;
CLR C ;
ADDC A,XL1 ; ;
MOV TLAA,A ; ;
JNC DJAYX ;; ;
INC THAA ; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KKJIANSA:JB JSBZA,DJAYX;判断是否减速
;***************************************
;步进电机减速程序 ;
;***************************************
MOV A,CPA2 ;
CJNE A,#00H,PDAA ;判断是否到达减速时刻; ;
MOV A,CPA1 ;
CJNE A,#00H,PDAA ;判断是否到达减速时刻; ;
MOV A,CPA0 ;判断是否到达减速时刻;
CJNE A,#0FFH,PDAA ; ;
LJMP DJAJIANS ; ;
PDAA:JNC DJAYX ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJAJIANS: ;减速斜率 ; ;
CLR C ;
MOV A,TLAA ;
SUBB A,XL1 ;
MOV TLAA,A ;
JNC DJAYX ;;
DEC THAA ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJAYX:CPL BJA ;输出步进电机M1的脉冲
NEXT:POP PSW
POP ACC
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;M2电机运行程序
;*************************************************************
NT0:
PUSH ACC
PUSH PSW
MOV TL1,TLBB ;定时器T0的中断响应程序
MOV TH1,THBB
;;;;;;;;;;;;;;;M2电机运行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,CPB2 ;判断是否结束运转
CJNE A,#00H,NEXTB
MOV A,CPB1
CJNE A,#00H,NEXTB
MOV A,CPB0
CJNE A,#00H,NEXTB
SETB JSBZB
MOV TLBB,#00H ;恢复启动速度,1000HZ
MOV THBB,#0FDH
LJMP NEXT2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NEXTB:JNB JSBZB,KKJIANSB ;判断是否加速
;***************************************
;步进电机加速程序 ;
;***************************************
MOV A,THBB ;
CJNE A,THB,PDB ;判断是否需要加速 ;
MOV A,TLBB ;
CJNE A,TLB,PDB ;判断是否需要加速 ;
CLR JSBZB ;
LJMP DJBYX ;
;
PDB:JNC DJBYX ;电机A运行 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJBJS: ;加速斜率 ;
MOV A,TLBB ; ;
CLR C ;
ADDC A,XL2 ; ;
MOV TLBB,A ; ;
JNC DJBYX ;; ;
INC THBB ; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KKJIANSB:JB JSBZB,DJBYX;判断是否减速
;***************************************
;步进电机减速程序 ;
;***************************************
MOV A,CPB2 ;
CJNE A,#00H,PDBB ;判断是否到达减速时刻;
MOV A,CPB1 ;
CJNE A,#00H,PDBB ;判断是否到达减速时刻;
MOV A,CPB0 ;判断是否到达减速时刻;
CJNE A,#0FFH,PDBB; ;
LJMP DJBJIANS ;
PDBB:JNC DJBYX ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJBJIANS: ;减速斜率 ; ;
CLR C ;
MOV A,TLBB ;
SUBB A,XL2 ;
MOV TLBB,A ;
JNC DJBYX ;;
DEC THBB ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJBYX: ;电机B运行程序
CLR C
MOV A,CPB0 ;
SUBB A,#01H ; 脉冲低位减一
MOV CPB0,A
JNC BJWB ; 检测是否有借位,借位向下
CLR C
MOV A,CPB1 ;;
SUBB A,#01H; 脉冲高位减一
MOV CPB1,A
JNC BJWB ; 检测是否有借位,借位向下。
CLR C
MOV A,CPB2 ;;
SUBB A,#01H; 脉冲高位减一
MOV CPB2,A
JNC BJWB ; 检测是否有借位,借位向下。
BJWB:CPL BJB ;输出步进电机M2的脉冲
NEXT2:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JIES:
POP PSW
POP ACC
RETI ;中断返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;PCA模块中断服务程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PCA:
PUSH ACC
PUSH PSW
JNB CCF1,PCA0
CLR CCF1
MOV A,CCAP1L
ADD A,#20H
MOV CCAP1L,A
MOV A,CCAP1H
ADDC A,#10H
MOV CCAP1H,A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;M3电机运行程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PCA0:CLR CCF0;模块0中断标志位清零
MOV A,CCAP0L;重新赋值
ADD A,TLCC
MOV CCAP0L,A
MOV A,CCAP0H
ADDC A,THCC
MOV CCAP0H,A
;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;M3电机运行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,CPC2 ;判断是否结束运转
CJNE A,#00H,NEXTC
MOV A,CPC1
CJNE A,#00H,NEXTC
MOV A,CPC0
CJNE A,#00H,NEXTC
SETB JSBZC
MOV TLCC,#0D0H ;恢复启动速度,500HZ
MOV THCC,#07H
LJMP NEXT3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NEXTC:JNB JSBZC,KKJIANSC ;判断是否加速
;***************************************
;步进电机加速程序 ;
;***************************************
MOV A,THC ;
CJNE A,THCC,PDC ;判断是否需要加速 ; ;
MOV A,TLC ;
CJNE A,TLCC,PDC ;判断是否需要加速 ;
PDCX:CLR JSBZC ;
LJMP DJCYX ; ;
PDC:JNC PDCX ;电机A运行 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJCJS: ;加速斜率 ;
CLR C ;
MOV A,TLCC ;
SUBB A,XL3 ;
MOV TLCC,A ;
JNC DJCYX ;
DEC THCC ;
LJMP DJCYX ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KKJIANSC:JB JSBZC,DJCYX;判断是否减速
;***************************************
;步进电机减速程序 ;
;***************************************
MOV A,CPC2 ;
CJNE A,#00H,PDCC ;判断是否到达减速时刻; ;
MOV A,CPC1 ;
CJNE A,#00H,PDCC ;判断是否到达减速时刻; ;
MOV A,CPC0 ;判断是否到达减速时刻;
CJNE A,#0FFH,PDCC; ;
LJMP DJCJIANS ; ;
PDCC:JNC DJCYX ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJCJIANS: ;减速斜率 ; ;
MOV A,TLCC ; ;
CLR C ;
ADDC A,XL3 ; ;
MOV TLCC,A ; ;
JNC DJCYX ;; ;
INC THCC ; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJCYX: ;电机3运行程序
CLR C
MOV A,CPC0 ;
SUBB A,#01H ; 脉冲低位减一
MOV CPC0,A
JNC BJWBC ; 检测是否有借位,借位向下
CLR C
MOV A,CPC1 ;;
SUBB A,#01H; 脉冲高位减一
MOV CPC1,A
JNC BJWBC ; 检测是否有借位,借位向下。
CLR C
MOV A,CPC2 ;;
SUBB A,#01H; 脉冲高位减一
MOV CPC2,A
JNC BJWBC ; 检测是否有借位,借位向下。
BJWBC:CPL BJC ;输出步进电机M2的脉冲
PCAW:
POP PSW
POP ACC
RETI
请高手帮我看看这个程序执行三个电机复位的时候有时候检测不到第一个接近开关第一个电机到达原点停不下来,有时候检测不到第二个接近开关,第二个电机到达原点停不下来。程序也不好怎么改了。但是单独一个一个复位时是正常的。我用的是stc12c5a60s2的,谁能解释一下,谢谢了,弄了很久了,还是不清楚问题在哪里。
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |