📄 motors.lst
字号:
MPASM 03.70.01 Released MOTORS.ASM 2-16-2006 19:50:42 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00002 ;
00003 ; Project: Interfacing PICs
00004 ; Source File Name: MOTORS.ASM
00005 ; Devised by: MPB
00006 ; Date: 19-8-05
00007 ; Status: Working
00008 ;
00009 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00010 ;
00011 ; Demonstrates DC, SERVO & STEPPER MOTOR control
00012 ; Select motor and direction using push button inputs
00013 ; DC Motor PWM speed control - working
00014 ; DC Servo position control - rollover not fixed
00015 ; Stepper direction control - working
00016 ;
00017 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00018
00019 PROCESSOR 16F877A
00020 ; Clock = XT 4MHz, standard fuse settings
2007 3731 00021 __CONFIG 0x3731
00022
00023 ; LABEL EQUATES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00024
00025 INCLUDE "P16F877A.INC"
00001 LIST
00002 ; P16F877A.INC Standard Header File, Version 1.00 Microchip Technology, Inc.
00398 LIST
00026 ; standard register labels
00027
00028 ;----------------------------------------------------------
00029 ; User register labels
00030 ;----------------------------------------------------------
00031
00000020 00032 Count1 EQU 20 ; delay counter
00000021 00033 Count2 EQU 21 ; delay counter
00000022 00034 Target EQU 22 ; servo target position
00035
00036 ;----------------------------------------------------------
00037 ; PROGRAM BEGINS
00038 ;----------------------------------------------------------
00039
0000 00040 ORG 0 ; Default start address
0000 0000 00041 NOP ; required for ICD mode
00042
00043 ;----------------------------------------------------------
00044 ; Port & PWM setup
00045
0001 0000 00046 init NOP
0002 1683 1303 00047 BANKSEL TRISB ; Select control registers
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0004 0187 00048 CLRF TRISC ; Output for dc motors
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
MPASM 03.70.01 Released MOTORS.ASM 2-16-2006 19:50:42 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0005 0188 00049 CLRF TRISD ; Output for stepper
0006 3002 00050 MOVLW B'00000010' ; Analogue input setup code
00051 ; PortA = analogue inputs
00052 ; Vref = Vdd
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0007 009F 00053 MOVWF ADCON1 ; Port E = digital inputs
0008 30F9 00054 MOVLW D'249' ; PWM = 4kHz
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0009 0092 00055 MOVWF PR2 ; TMR2 preload value
00056
000A 1283 1303 00057 BANKSEL PORTB ; Select output registers
000C 0187 00058 CLRF PORTC ; Outputs off
000D 0188 00059 CLRF PORTD ; Outputs off
000E 3041 00060 MOVLW B'01000001' ; Analogue input setup code
000F 009F 00061 MOVWF ADCON0 ; f/8, RA0, done, enable
0010 3080 00062 MOVLW D'128' ; intial servo position
0011 00A2 00063 MOVWF Target
00064
00065 ;----------------------------------------------------------
00066 ; MAIN LOOP
00067 ;----------------------------------------------------------
00068
0012 1809 00069 but0 BTFSC PORTE,0 ; wait for select button
0013 2812 00070 GOTO but0
00071
0014 300C 00072 MOVLW B'00001100' ; Select PWM mode
0015 0097 00073 MOVWF CCP1CON ;
0016 3080 00074 MOVLW D'128' ; PWM = 50%
0017 0095 00075 MOVWF CCPR1L ;
00076
0018 1C09 00077 but1 BTFSS PORTE,0 ; wait for button release
0019 2818 00078 GOTO but1
001A 202D 00079 CALL motor ; check for speed change
001B 1809 00080 BTFSC PORTE,0 ; wait for select button
001C 2818 00081 GOTO but1
001D 3000 00082 MOVLW B'00000000' ; deselect PWM mode
001E 0097 00083 MOVWF CCP1CON ;
001F 0187 00084 CLRF PORTC ; switch off outputs
00085
0020 1C09 00086 but2 BTFSS PORTE,0 ; wait for button release
0021 2820 00087 GOTO but2
0022 203B 00088 CALL servo ; move servo cw or ccw
0023 1809 00089 BTFSC PORTE,0 ; wait for select button
0024 2820 00090 GOTO but2
0025 0187 00091 CLRF PORTC ; switch off servo
00092
0026 1C09 00093 but3 BTFSS PORTE,0 ; wait for button release
0027 2826 00094 GOTO but3
0028 2060 00095 CALL step ; output one step cycle
0029 1809 00096 BTFSC PORTE,0 ; wait for select button
002A 2826 00097 GOTO but3
002B 0188 00098 CLRF PORTD ; disable stepper outputs
002C 2812 00099 GOTO but0 ; start again
MPASM 03.70.01 Released MOTORS.ASM 2-16-2006 19:50:42 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00100
00101 ;-----------------------------------------------------------
00102 ; SUBROUTINES
00103 ;-----------------------------------------------------------
00104
00105 ; Change dc motor speed by one step and wait 1ms
00106 ; to debounce and control rate of change....................
00107
002D 1487 00108 motor BSF PORTC,1 ; switch on motor LED
00109
002E 1C89 00110 BTFSS PORTE,1 ; inc speed?
Message[305]: Using default destination of 1 (file).
002F 0A95 00111 INCF CCPR1L ; yes
0030 30F8 00112 MOVLW D'248' ; max speed?
0031 0215 00113 SUBWF CCPR1L,W
0032 1D03 00114 BTFSS STATUS,Z
0033 2835 00115 GOTO lower ; no
Message[305]: Using default destination of 1 (file).
0034 0395 00116 DECF CCPR1L ; yes - dec speed
00117
00118
0035 1D09 00119 lower BTFSS PORTE,2 ; dec speed?
Message[305]: Using default destination of 1 (file).
0036 0B95 00120 DECFSZ CCPR1L ; yes - min speed?
0037 2839 00121 GOTO done ; no
Message[305]: Using default destination of 1 (file).
0038 0A95 00122 INCF CCPR1L ; yes - inc speed
00123
0039 2072 00124 done CALL onems ; 1ms debounce
003A 0008 00125 RETURN
00126
00127 ; Move servo 10 bits cw or ccw................................
00128
003B 1607 00129 servo BSF PORTC,4 ; switch on servo LED
003C 1787 00130 BSF PORTC,7 ; enable drive chip
003D 1889 00131 BTFSC PORTE,1 ; move forward?
003E 284E 00132 GOTO rev ; no
00133
003F 1C89 00134 wait1 BTFSS PORTE,1 ; yes- wait for button..
0040 283F 00135 GOTO wait1 ; ..release
0041 300A 00136 MOVLW D'10' ; add 10...
Message[305]: Using default destination of 1 (file).
0042 07A2 00137 ADDWF Target ; ..to servo target position
0043 1687 00138 BSF PORTC,5 ; move..
0044 1307 00139 BCF PORTC,6 ; .. forward
00140
0045 2078 00141 getfor CALL getADC ; get position
0046 1403 00142 BSF STATUS,C ; set carry flag
0047 0822 00143 MOVF Target,W ; load position
Message[305]: Using default destination of 1 (file).
0048 029E 00144 SUBWF ADRESH ; compare with target
0049 1C03 00145 BTFSS STATUS,C ; far enough?
004A 2845 00146 GOTO getfor ; no - repeat
MPASM 03.70.01 Released MOTORS.ASM 2-16-2006 19:50:42 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00147
004B 1287 00148 BCF PORTC,5 ; yes - stop
004C 30FA 00149 MOVLW D'250' ; wait 250ms ..
004D 206D 00150 CALL xms ; .. before next step
004E 1909 00151 rev BTFSC PORTE,2 ; move reverse?
004F 0008 00152 RETURN ; no
00153
0050 1D09 00154 wait2 BTFSS PORTE,2 ; yes- wait for button..
0051 2850 00155 GOTO wait2 ; ..release
0052 300A 00156 MOVLW D'10' ; yes - sub 10 from...
Message[305]: Using default destination of 1 (file).
0053 02A2 00157 SUBWF Target ; .. servo target position
0054 1287 00158 BCF PORTC,5 ; move ..
0055 1707 00159 BSF PORTC,6 ; ..reverse
00160
0056 2078 00161 getrev CALL getADC ; get position
0057 1403 00162 BSF STATUS,C ; set carry flag
0058 0822 00163 MOVF Target,W ; load position
Message[305]: Using default destination of 1 (file).
0059 029E 00164 SUBWF ADRESH ; compare with target
005A 1803 00165 BTFSC STATUS,C ; far enough?
005B 2856 00166 GOTO getrev ; no - repeat
00167
005C 1307 00168 BCF PORTC,6 ; yes - stop
005D 30FA 00169 MOVLW D'250' ; wait 250ms ..
005E 206D 00170 CALL xms ; .. before next step
005F 0008 00171 RETURN
00172
00173 ; Output one cycle of stepper clock.........................
00174
0060 1408 00175 step BSF PORTD,0 ; switch on stepper LED
0061 1488 00176 BSF PORTD,1 ; enable stepper drive
00177
0062 1C89 00178 BTFSS PORTE,1 ; test cw button
0063 1508 00179 BSF PORTD,2 ; select clockwise
0064 1D09 00180 BTFSS PORTE,2 ; test ccw button
0065 1108 00181 BCF PORTD,2 ; select counter-clockwise
00182
0066 1588 00183 BSF PORTD,3 ; clock high
0067 3019 00184 MOVLW D'25' ; load delay time
0068 206D 00185 CALL xms
0069 1188 00186 BCF PORTD,3 ; clock low
006A 3019 00187 MOVLW D'25' ; load delay time
006B 206D 00188 CALL xms
00189
006C 0008 00190 RETURN
00191
00192 ; Stepper software delay ...................................
00193
006D 00A1 00194 xms MOVWF Count2 ; receive x ms in W
006E 2072 00195 down2 CALL onems
Message[305]: Using default destination of 1 (file).
006F 0BA1 00196 DECFSZ Count2
MPASM 03.70.01 Released MOTORS.ASM 2-16-2006 19:50:42 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0070 286E 00197 GOTO down2
0071 0008 00198 RETURN
00199
0072 30F9 00200 onems MOVLW D'249' ; delay one millisec
0073 00A0 00201 MOVWF Count1
0074 0000 00202 down1 NOP
Message[305]: Using default destination of 1 (file).
0075 0BA0 00203 DECFSZ Count1
0076 2874 00204 GOTO down1
0077 0008 00205 RETURN
00206
00207 ; Read ADC input and store .................................
00208
0078 151F 00209 getADC BSF ADCON0,GO ; start ADC..
0079 191F 00210 wait BTFSC ADCON0,GO ; ..and wait for finish
007A 2879 00211 GOTO wait
00212
007B 081E 00213 MOVF ADRESH,W ; store result, high 8 bits
007C 0008 00214 RETURN
00215
00216 ;----------------------------------------------------------
00217 END ; of source code
MPASM 03.70.01 Released MOTORS.ASM 2-16-2006 19:50:42 PAGE 6
SYMBOL TABLE
LABEL VALUE
ACKDT 00000005
ACKEN 00000004
ACKSTAT 00000006
ADCON0 0000001F
ADCON1 0000009F
ADCS0 00000006
ADCS1 00000007
ADDEN 00000003
ADFM 00000007
ADIE 00000006
ADIF 00000006
ADON 00000000
ADRESH 0000001E
ADRESL 0000009E
BCLIE 00000003
BCLIF 00000003
BF 00000000
BRGH 00000002
C 00000000
C1INV 00000004
C1OUT 00000006
C2INV 00000005
C2OUT 00000007
CCP1CON 00000017
CCP1IE 00000002
CCP1IF 00000002
CCP1M0 00000000
CCP1M1 00000001
CCP1M2 00000002
CCP1M3 00000003
CCP1X 00000005
CCP1Y 00000004
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -