;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;三個電機同時復(fù)位程序;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;送料電機先復(fù)位 SDFW:JB KA,$ ;復(fù)位開關(guān)按下后,3臺電機同時復(fù)位 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;左右電機M1開始復(fù)位 (M1、M2、M3同時復(fù)位) 2013.3.17更新 SDGFW:LCALL SONGLIAO LCALL ZUOYOU LCALL XUANZHUAN ;;;;;;;;;;;;;;;;;;;;;;;;;各電機各自復(fù)位檢測程序 KKM1: JB TT1,KKM2 ;檢測送料電機M1探頭 MOV CPA0,#00H ;設(shè)定脈沖數(shù) MOV CPA1,#00H ;設(shè)定脈沖數(shù) MOV CPA2,#00H ;設(shè)定脈沖數(shù)
KKM2: JB TT2,KKM3 ;檢測左右電機M2探頭 MOV CPB0,#00H ;設(shè)定脈沖數(shù) MOV CPB1,#00H ;設(shè)定脈沖數(shù) MOV CPB2,#00H ;設(shè)定脈沖數(shù)
KKM3: JB TT3,FWWC ;檢測旋轉(zhuǎn)電機M3探頭 MOV CPC0,#00H ;設(shè)定脈沖數(shù) MOV CPC1,#00H ;設(shè)定脈沖數(shù) MOV CPC2,#00H ;設(shè)定脈沖數(shù)
FWWC:JB TT1,KKM1;手動復(fù)位完成 JB TT2,KKM2 JB TT3,KKM3 ;**************************************************手動復(fù)位完成
;*********************************************************** ; M1電機運行程序 ;************************************************************* MC:PUSH ACC PUSH PSW MOV TL0,TLAA ;時鐘定時器低位 A8 042H MOV TH0,THAA ;時鐘定時器高位 0FFH ;;;;;;;;;;;;;;;M1電機運行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MOV A,CPA2 ;判斷是否結(jié)束運轉(zhuǎn) CJNE A,#00H,NEXTA ;不相等則轉(zhuǎn)移 MOV A,CPA1 CJNE A,#00H,NEXTA MOV A,CPA0 CJNE A,#00H,NEXTA SETB JSBZA MOV TLAA,#30H ;恢復(fù)啟動速度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的中斷響應(yīng)程序 MOV TH1,THBB ;;;;;;;;;;;;;;;M2電機運行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MOV A,CPB2 ;判斷是否結(jié)束運轉(zhuǎn) CJNE A,#00H,NEXTB MOV A,CPB1 CJNE A,#00H,NEXTB MOV A,CPB0 CJNE A,#00H,NEXTB SETB JSBZB MOV TLBB,#00H ;恢復(fù)啟動速度,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模塊中斷服務(wù)程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 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 ;判斷是否結(jié)束運轉(zhuǎn) CJNE A,#00H,NEXTC MOV A,CPC1 CJNE A,#00H,NEXTC MOV A,CPC0 CJNE A,#00H,NEXTC SETB JSBZC MOV TLCC,#0D0H ;恢復(fù)啟動速度,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
請高手幫我看看這個程序執(zhí)行三個電機復(fù)位的時候有時候檢測不到第一個接近開關(guān)第一個電機到達原點停不下來,有時候檢測不到第二個接近開關(guān),第二個電機到達原點停不下來。程序也不好怎么改了。但是單獨一個一個復(fù)位時是正常的。我用的是stc12c5a60s2的,誰能解釋一下,謝謝了,弄了很久了,還是不清楚問題在哪里。
[此貼子已經(jīng)被作者于2013-4-21 17:42:57編輯過]
|