?? 完好自適應轉速的檢測128_32hz—鍵盤——微調.asm
字號:
;電機驅動
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
POINT EQU 20H.0 ;用到20H位尋址位的20.0H作為控制正轉和反轉的標志位
SIGN EQU 20H.1 ;周期CHANGE
SIGN_1 EQU 20H.2 ;用來指示TIME-0結束
SIGN_2 EQU 20H.3 ;指示1S過了
SIGN_3 EQU 20H.4 ;指示5S過了
SIGN_4 EQU 20H.5 ;指示10S過了
SIGN_5 EQU 20H.6 ;指示機器處在自動控制中
SIGN_6 EQU 20H.7 ;指示35S過了
ASESS_1 EQU 21H ;用來放置T時間內的轉速
ASESS_2 EQU 22H ;存放差植
CASE_1 EQU 23H
CASE_2 EQU 24H
CASE_3 EQU 25H
CASE_4 EQU 26H
ASESS_3 EQU 27H ;用來存放CLOCK
SIGN_7 EQU 28H.0 ;指示T0過了
SIGN_8 EQU 28H.1 ;周期切換
SIGN_9 EQU 28H.2
SIGN_10 EQU 28H.3
ASESS_4 EQU 44H ;設定的轉速
CHANGE_X1 EQU 34H
CHANGE_X2 EQU 35H
OUT_PUT_1 EQU P1.5
OUT_PUT_2 EQU P1.6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H
LJMP MAIN_1
ORG 03H
LJMP INT_0
;;;;;;;;;;
ORG 00BH
LJMP TIME_0
ORG 0013H
LJMP LOOP1
ORG 01BH
LJMP TIME_T1
ORG 50H
MAIN_1: ;CLR POINT ;測試用的
MOV SP,#48H ;測試用的
MOV IE,#0FFH
;SETB PT0
SETB IT1
SETB IT0
;;;;;;;;;;;;;;;;;;;
MOV R0,#7FH
CLEAR: MOV @R0,#0
DJNZ R0,CLEAR
CLR REST ;復位
LCALL LDELAY
SETB REST
LCALL LDELAY
LCALL RESET ;初始化
LCALL CLEARALL ;清屏
LCALL JIEMIAN
;;;;;;;;;;;;;;;;;;;;
;AJMP $ ;測試用的
;;;;;;;;;;;;;;;;;;;;;
MAIN_2: CLR RS1 ;采用的工作寄存器組1
SETB RS0
;;;;;;;;;;;;;;;;;;;;;;;;;
MOV TMOD,#51H ;;;;
MOV TL1,#00H
MOV TH1,#00H
MOV R7,#00H
MOV R3,#046H
MOV R4,#0A3H
MOV ASESS_3,#00H
MOV ASESS_2,#00H
MOV ASESS_1,#00H
SETB SIGN
SETB SIGN_1
SETB SIGN_2
SETB SIGN_3
SETB SIGN_4
SETB SIGN_5
SETB SIGN_6
SETB SIGN_7
SETB SIGN_8
SETB SIGN_9
SETB SIGN_10
SETB OUT_PUT_1 ;初始化
SETB OUT_PUT_2 ;初始化
MOV ASESS_4,#10 ;測試用的 ;;;;;;;;;;;;MOV TL0,#DCH;;;;;;;;;;;;
;;;;;;;;;MOV TH0,#0BH;;;;;;;;;;
SETB TR0
SETB TR1
;;;;;;;;;;;;;;;;;周期自動轉換程序 :周期1
LOGO:JB SIGN_10,LOGO2
MOV ASESS_4,#10
LOGO2:JB SIGN_6,LOGO_1
MOV R3,#02BH
MOV R4,#1EH
AJMP $
LOGO_1:JNB SIGN,STEUP
ACALL CHANGE_1
ACALL TIME_1
;;;;;;;;;;;;;;;;;;周期自動轉換程序:周期2
STEUP: ACALL CHANGE_2
;;;;;;;;
JB SIGN_2,SETUP_61
JNB SIGN_4,SETUP_61 ;;;;;;;;;;;待電機啟動1S過后自動進行數(shù)據(jù)比較,添裝
CLR C
MOV A,ASESS_4
CJNE A,ASESS_1,SETUP_4
AJMP SETUP_6
;;;;;;;;;;;數(shù)據(jù)比較添裝區(qū)
SETUP_61:LJMP SETUP_6
SETUP_4:
SUBB A,ASESS_1
JC SETUP_5
MOV ASESS_2,A ;要加速
CLR C
CJNE A,#20H,FAST_0
FAST_0: JC FAST_1 ;<32
MOV CASE_2,#00H ;>32 ;一級調速
MOV CASE_1,#7CH
LJMP CPU_2
FAST_1: CLR C
MOV A,ASESS_2
CJNE A,#10H,FAST_2
FAST_2: JC FAST_3 ;<16
MOV CASE_2,#00H ;>16/////;二級調速
MOV CASE_1,#3EH
LJMP CPU_2
FAST_3: CLR C
MOV A,ASESS_2
CJNE A,#08H,FAST_4
FAST_4: JC FAST_5 ;<8 ;三級調速
MOV CASE_2,#00H ;>8 ;要加速
MOV CASE_1,#5DH
LJMP CPU_2
FAST_5: CLR C
MOV A,ASESS_2
CJNE A,#03H,FAST_6
FAST_6: JC FAST_7 ;<2
MOV CASE_2,#00H ;>=3 ;四級調速
MOV CASE_1,#7cH
LJMP CPU_2
FAST_7: MOV CASE_2,#00H ;>3
MOV CASE_1,#3eH ;要加速
LJMP CPU_2
CPU_2: LCALL CPU_1
CLR C
MOV A,R3
ADD A,CASE_3
MOV R3,A
MOV A,R4
ADDC A,CASE_4
MOV R4,A
AJMP SETUP_6
SETUP_5: CLR C
MOV A,ASESS_1 ;要減速
SUBB A,ASESS_4
MOV ASESS_2,A ;電機步進參數(shù)
CLR C
CJNE A,#20H,FASTX_0
FASTX_0: JC FASTX_1 ;<32
MOV CASE_2,#00H ;>32
MOV CASE_1,#7CH
LJMP CPU_3
FASTX_1: CLR C
MOV A,ASESS_2
CJNE A,#10H,FASTX_2
FASTX_2: JC FASTX_3 ;<16
MOV CASE_2,#00H ;>16
MOV CASE_1,#3EH
LJMP CPU_3
FASTX_3: CLR C
MOV A,ASESS_2
CJNE A,#08H,FASTX_4
FASTX_4: JC FASTX_5 ;<8
MOV CASE_2,#00H ;>8 ;要減速
MOV CASE_1,#5DH
LJMP CPU_3
FASTX_5: CLR C
MOV A,ASESS_2
CJNE A,#03H,FASTX_6
FASTX_6: JC FASTX_7 ;<2
MOV CASE_2,#00H ;>=2
MOV CASE_1,#7cH
LJMP CPU_3
FASTX_7: MOV CASE_2,#00H ;>2
MOV CASE_1,#3eH ;要減速
LJMP CPU_3
CPU_3: LCALL CPU_1
CLR C
MOV A,R3
SUBB A,CASE_3
MOV R3,A
MOV A,R4
SUBB A,CASE_4
MOV R4,A
AJMP SETUP_6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SETUP_6:CJNE R7,#10H,SETUP_D ;轉到時鐘程序(要記得加返回指令噢!)
LCALL CLOCK
SETUP_D: JNB SIGN_8,SETUP_E
;;LCALL ?? ;調用鍵盤掃描 /////////////
AJMP SETUP_F
SETUP_E: LCALL LCM
SETUP_F: JB SIGN_1,SETUP_1 ;用來識別TIME-0結束
AJMP SETUP_F ;;;;;;;;;;;;;
SETUP_1:AJMP LOGO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;基準時鐘 ;;;;左轉為正轉,右轉為反轉,
TIME_0: JB SIGN,TIME_3
CLR TR0 ; ??????
JB POINT,OUT_1
CPL OUT_PUT_1
RETI
OUT_1: CPL OUT_PUT_2
RETI
TIME_3: JNB SIGN_7,T_3
MOV TL1,R3
MOV TH1,R4
MOV TL0,#0EEH ;定時器0初始化
MOV TH0,#85H ;定時器0初始化
CPL SIGN_7
SETB TR1 ;????
JB POINT,OUT
CPL OUT_PUT_1 ;PWM脈寬輸出32HZ ;;;正轉是POINT為0,反轉是POIN為1
RETI
OUT: CPL OUT_PUT_2
RETI
T_3: JB POINT,OUT_E
CPL OUT_PUT_1
AJMP T_R
OUT_E: CPL OUT_PUT_2
T_R: CPL SIGN_7
CLR SIGN_9 ;;????
INC R7
;CJNE R7,#10H,T_4 ;轉到時鐘程序(要記得加返回指令噢!)
;LCALL CLOCK
T_4: CPL SIGN_1
MOV TMOD,#51H
CLR SIGN_2 ;指示1S過了
SETB TR1 ;????????
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;驅動程序 ;;;;左轉為正轉,右轉為反轉,
;;;正轉是POINT為0,反轉是POIN為1
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;轉速的檢測程序
IN_PUT:MOV A,TL1
MOV ASESS_1,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;軟件定時31.25ms
TIME_1:MOV R5,#125
DEL: MOV R6,#123
NOP
DEL_1:DJNZ R6,DEL_1
DJNZ R5,DEL
;===================
JB POINT,OUT_X
CPL OUT_PUT_1
MOV TL0,R3
MOV TH0,R4
SETB TR0 ;???????
AJMP TIME_X
OUT_X:CPL OUT_PUT_2
MOV TL0,R3
MOV TH0,R4
SETB TR0 ;???????
;======================軟件定時31.25ms
TIME_X:MOV R5,#125
DEL_X:MOV R6,#123
NOP
DEL_X1:DJNZ R6,DEL_X1
DJNZ R5,DEL_X
;===================
MOV TL0,#00H ;;防止T0定時器益出
MOV TH0,#00H
SETB TR0 ;???????
JB SIGN_9,DEL_Y
CPL SIGN_8
INC R7
DEL_Y: CPL SIGN_1
ACALL IN_PUT ;M法測速TC=62.5ms
MOV TMOD,#11H
JB POINT,OUT_3
CPL OUT_PUT_1
RET
OUT_3:CPL OUT_PUT_2
RET
;;;;;;;;;;;;;;;;;;;;周期自動轉換子程序
CHANGE_1: CPL SIGN
MOV TL0,R3
MOV TH0,R4
MOV TL1,#00H
MOV TH1,#00H
RET
CHANGE_2:CPL SIGN
MOV TL1,R3
MOV TH1,R4
MOV TL0,#0EEH ;定時器0初始化
MOV TH0,#85H ;定時器0初始化
RET
;;;;;;;;;;;;;;;;;;;;;;;;定時器1中斷
TIME_T1:CLR TR1 ;?????
JB POINT,OUT_2
CPL OUT_PUT_1
RETI
OUT_2: CPL OUT_PUT_2
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;; 時鐘顯示1S調用
CLOCK: MOV R7,#00H
INC ASESS_3
JB SIGN_5,CLOCK_1
MOV A,ASESS_3
CJNE A,#5H,CLOCK_2
CLR SIGN_3
MOV ASESS_4,#03H
AJMP CLOCK_1
CLOCK_2:MOV A,ASESS_3
CJNE A,#0AH,CLOCK_3
CLR SIGN_4
MOV R3,#0DEH
MOV R4,#0FFH
AJMP CLOCK_1
CLOCK_3:MOV A,ASESS_3
CJNE A,#23H,CLOCK_1
CLR SIGN_6
LCALL LCM ;調用LCD
SETB SIGN_5
AJMP $
;LCALL LCM ;調用LCD
;CLR TR0 ;測試用的
;CLR TR1 ;測試用的
; AJMP $ ;測試用的
CLOCK_1:MOV A,ASESS_3
CJNE A,#64H,LCD_1
MOV ASESS_3,#00H
RET
LCD_1: LCALL LCM ;調用LCD
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -