MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ;======================================================================================================= === 00002 ; 00003 ; Wingman MainMotorDriver copyright 2005 v1.0 (2005-04-22) 00004 ; 00005 ; Name: Christoffer Martinsson 00006 ; E-mail: cm@wsm.se 00007 ; 00008 ; 00009 ;======================================================================================================= === 00010 Warning[205]: Found directive in column 1. (include) 00011 include P16F684.INC 00001 LIST 00002 ; P16F684.INC Standard Header File, Version 1.03 Microchip Technology, Inc. 00379 LIST 00012 00013 ; Temp-registers 00000020 00014 W_TEMP EQU 0x20 ; TempRegister for interrupt-routine 00000021 00015 STATUS_TEMP EQU 0x21 ; TempRegister for interrupt-routine 00000022 00016 DivRegH EQU 0x22 ; TempRegister for div-routine 00000023 00017 DivRegL EQU 0x23 ; TempRegister for div-routine 00000024 00018 SetPWM_Temp EQU 0x24 00019 00020 ; Time-definitions 00004E20 00021 minPulseValue =.20000 00009C40 00022 maxPulseValue =.40000 00004E20 00023 ms1Value =.20000 00002710 00024 ms05Value =.10000 00025 00026 ;======================================================================================================= === 00027 ; Reset- and Interrupt-vectors 00028 ;======================================================================================================= === 0000 00029 ORG 0x0000 0000 282C 00030 GOTO Main ;Reset-vector 0004 00031 ORG 0x0004 0004 2805 00032 GOTO Interrupt ;Interrupt-vector 00033 ;======================================================================================================= === 00034 ; Macro 00035 ;======================================================================================================= === 00036 ;------------------------------------------------------------------------------------------------------- --- 00037 ; StoreWregInTemp 00038 ; 00039 ; Description: Store Status and working-register in temp-registers 00040 ; 00041 ; Input: - MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00042 ; ChangedReg: W_TEMP,STATUS_TEMP 00043 ; UsedReg: W,STATUS,W_TEMP,STATUS_TEMP 00044 ;------------------------------------------------------------------------------------------------------- --- 00045 StoreWregInTemp MACRO 00046 MOVWF W_TEMP ;Copy W to TEMP register 00047 SWAPF STATUS,W ;Swap status to be saved into W 00048 CLRF STATUS ;bank 0, regardless of current bank, Cle ars IRP,RP1,RP0 00049 MOVWF STATUS_TEMP ;Save status to bank zero STATUS_TEMP register 00050 ENDM 00051 ;------------------------------------------------------------------------------------------------------- --- 00052 ; RestoreWregFromTemp 00053 ; 00054 ; Description: Restore Status and working-register from temp-registers 00055 ; 00056 ; Input: - 00057 ; ChangedReg: W,STATUS 00058 ; UsedReg: W,STATUS,W_TEMP,STATUS_TEMP 00059 ;------------------------------------------------------------------------------------------------------- --- 00060 RestoreWregFromTemp MACRO 00061 SWAPF STATUS_TEMP,W ;Swap STATUS_TEMP register into W (sets bank to original state) 00062 MOVWF STATUS ;Move W into Status register 00063 SWAPF W_TEMP,F ;Swap W_TEMP 00064 SWAPF W_TEMP,W ;Swap W_TEMP into W 00065 ENDM 00066 ;------------------------------------------------------------------------------------------------------- --- 00067 ; Sub16L 00068 ; 00069 ; Description: Subtract literal from 16bit-register. Reg = Reg - Number, WITH VALID CARRY 00070 ; 00071 ; Input: RegH, RegL, Number 00072 ; ChangedReg: C 00073 ; UsedReg: W 00074 ;------------------------------------------------------------------------------------------------------- --- 00075 Sub16L MACRO RegH, RegL, Number 00076 MOVLW low Number 00077 SUBWF RegL 00078 MOVLW high Number 00079 ;BTFSS STATUS,C 00080 ;INCFSZ high Number,W 00081 SUBWF RegH 00082 ENDM 00083 ;------------------------------------------------------------------------------------------------------- --- 00084 ; Set16L 00085 ; 00086 ; Description: Sets 16bit-register to literal. Reg = Number MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00087 ; 00088 ; Input: RegH, RegL, Number 00089 ; ChangedReg: C 00090 ; UsedReg: W 00091 ;------------------------------------------------------------------------------------------------------- --- 00092 Set16L MACRO RegH, RegL, Number 00093 MOVLW low Number 00094 MOVWF RegL 00095 MOVLW high Number 00096 MOVWF RegH 00097 ENDM 00098 ;------------------------------------------------------------------------------------------------------- --- 00099 ; Clear16 00100 ; 00101 ; Description: Clear 16bit-register. 00102 ; 00103 ; Input: RegH, RegL 00104 ; ChangedReg: 00105 ; UsedReg: 00106 ;------------------------------------------------------------------------------------------------------- --- 00107 Clear16 MACRO RegH, RegL 00108 CLRF RegH 00109 CLRF RegL 00110 ENDM 00111 ;------------------------------------------------------------------------------------------------------- --- 00112 ; Comp16L 00113 ; 00114 ; Description: Compare one 16bit-registers to literal if Reg1=Number then Z=1. 00115 ; if Reg1 maxPulseValue (~2ms) 00271 ; GOTO Mainloop ; then g oto Mainloop 00272 Sub16L TMR1H,TMR1L,ms1Value ; else counter-value - 1 ms 0051 3020 M MOVLW low ms1Value Message[305]: Using default destination of 1 (file). 0052 028E M SUBWF TMR1L 0053 304E M MOVLW high ms1Value M ;BTFSS STATUS,C M ;INCFSZ high Number,W Message[305]: Using default destination of 1 (file). 0054 028F M SUBWF TMR1H 00273 Comp16L TMR1H,TMR1L,ms05Value 0055 080F M MOVF TMR1H,W 0056 3C27 M SUBLW high ms05Value 0057 1D03 M BTFSS STATUS,Z M EXITM 0058 1C03 00274 BTFSS STATUS,C ; If cou nter > 0,5ms 0059 285B 00275 GOTO PWM_Fwr ; then g oto PWM_forward 005A 2861 00276 GOTO PWM_Rev ; else g oto PWN_reverse 00277 005B 1395 00278 PWM_Fwr: BCF CCP1CON,P1M1 ; Set H-bridge i n forward-mode 00279 Sub16L TMR1H,TMR1L,ms05Value ; counter-value - 0,5ms 005C 3010 M MOVLW low ms05Value Message[305]: Using default destination of 1 (file). 005D 028E M SUBWF TMR1L 005E 3027 M MOVLW high ms05Value M ;BTFSS STATUS,C M ;INCFSZ high Number,W Message[305]: Using default destination of 1 (file). 005F 028F M SUBWF TMR1H 0060 2869 00280 GOTO PWM_SetVal ; goto P WM_SetValue 0061 1795 00281 PWM_Rev: BSF CCP1CON,P1M1 ; Set H-bridge i n reverse-mode 0062 30FF 00282 MOVLW 0xFF 0063 068F 00283 XORWF TMR1H,F ; Invert counterH 0064 068E 00284 XORWF TMR1L,F ; Invert counterL 00285 Sub16L TMR1H,TMR1L,(0xFFFF-ms05Value) ; Inverted counter-value - (6553 5-0,5ms) 0065 30EF M MOVLW low (0xFFFF-ms05Value) Message[305]: Using default destination of 1 (file). 0066 028E M SUBWF TMR1L MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0067 30D8 M MOVLW high (0xFFFF-ms05Value) M ;BTFSS STATUS,C M ;INCFSZ high Number,W Message[305]: Using default destination of 1 (file). 0068 028F M SUBWF TMR1H 00286 0069 080F 00287 PWM_SetVal: MOVF TMR1H,W ; Divide by 79.. . 006A 00A2 00288 MOVWF DivRegH ; Load d iv-routine with countervalue 006B 080E 00289 MOVF TMR1L,W 006C 00A3 00290 MOVWF DivRegL ; Load d iv-routine with countervalue 006D 3028 00291 MOVLW ((ms05Value/0xFF)+1) ; Load div-routine with divide-value 006E 2013 00292 CALL Div16byL ; Divide ! 00293 00294 SetPWM DivRegL 006F 1003 M BCF STATUS,C 0070 0823 M MOVF DivRegL,W 0071 3903 M ANDLW b'00000011' 0072 00A4 M MOVWF SetPWM_Temp 0073 0DA4 M RLF SetPWM_Temp,F 0074 0DA4 M RLF SetPWM_Temp,F 0075 0DA4 M RLF SetPWM_Temp,F 0076 0DA4 M RLF SetPWM_Temp,F 0077 0815 M MOVF CCP1CON,W 0078 39CF M ANDLW b'11001111' 0079 0424 M IORWF SetPWM_Temp,W 007A 0095 M MOVWF CCP1CON 007B 0823 M MOVF DivRegL,W 007C 39FC M ANDLW b'11111100' 007D 00A4 M MOVWF SetPWM_Temp 007E 0CA4 M RRF SetPWM_Temp,F 007F 0CA4 M RRF SetPWM_Temp,F 0080 0824 M MOVF SetPWM_Temp,W 0081 0093 M MOVWF CCPR1L 00295 0082 2845 00296 GOTO Mainloop 00297 END MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 10 SYMBOL TABLE LABEL VALUE ADCON0 0000001F ADCON1 0000009F ADCS0 00000004 ADCS1 00000005 ADCS2 00000006 ADFM 00000007 ADIE 00000006 ADIF 00000006 ADON 00000000 ADRESH 0000001E ADRESL 0000009E ANS0 00000000 ANS1 00000001 ANS2 00000002 ANS3 00000003 ANS4 00000004 ANS5 00000005 ANS6 00000006 ANS7 00000007 ANSEL 00000091 C 00000000 C1IE 00000003 C1IF 00000003 C1INV 00000004 C1OUT 00000006 C2IE 00000004 C2IF 00000004 C2INV 00000005 C2OUT 00000007 C2SYNC 00000000 CCP1CON 00000015 CCP1IE 00000005 CCP1IF 00000005 CCP1M0 00000000 CCP1M1 00000001 CCP1M2 00000002 CCP1M3 00000003 CCPR1H 00000014 CCPR1L 00000013 CHS0 00000002 CHS1 00000003 CHS2 00000004 CIS 00000003 CM0 00000000 CM1 00000001 CM2 00000002 CMCON0 00000019 CMCON1 0000001A Clear16 Comp16L DC 00000001 DC1B0 00000004 DC1B1 00000005 MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 11 SYMBOL TABLE LABEL VALUE Div16byL 00000013 DivCode 0000001F DivRegH 00000022 DivRegL 00000023 DivSkipHiShift 00000026 ECCPAS 00000017 ECCPAS0 00000004 ECCPAS1 00000005 ECCPAS2 00000006 ECCPASE 00000007 EEADR 0000009B EECON1 0000009C EECON2 0000009D EEDAT 0000009A EEDATA 0000009A EEIE 00000007 EEIF 00000007 F 00000001 FSR 00000004 GIE 00000007 GO 00000001 GO_DONE 00000001 HTS 00000002 INDF 00000000 INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 IOC 00000096 IOC0 00000000 IOC1 00000001 IOC2 00000002 IOC3 00000003 IOC4 00000004 IOC5 00000005 IOCA 00000096 IOCA0 00000000 IOCA1 00000001 IOCA2 00000002 IOCA3 00000003 IOCA4 00000004 IOCA5 00000005 IRCF0 00000004 IRCF1 00000005 IRCF2 00000006 IRP 00000007 Int_Return 0000000E Interrupt 00000005 LTS 00000001 Main 0000002C Mainloop 00000045 NOT_BOD 00000000 NOT_DONE 00000001 MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 12 SYMBOL TABLE LABEL VALUE NOT_PD 00000003 NOT_POR 00000001 NOT_RAPU 00000007 NOT_T1SYNC 00000002 NOT_TO 00000004 OPTION_REG 00000081 OSCCON 0000008F OSCTUNE 00000090 OSFIE 00000002 OSFIF 00000002 OSTS 00000003 P1M0 00000006 P1M1 00000007 PCL 00000002 PCLATH 0000000A PCON 0000008E PDC0 00000000 PDC1 00000001 PDC2 00000002 PDC3 00000003 PDC4 00000004 PDC5 00000005 PDC6 00000006 PEIE 00000006 PIE1 0000008C PIR1 0000000C PORTA 00000005 PORTC 00000007 PPM_Hi 00000049 PPM_Lo 00000047 PPM_Loop 0000004E PR2 00000092 PRSEN 00000007 PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 PSSAC0 00000002 PSSAC1 00000003 PSSBD0 00000000 PSSBD1 00000001 PWM1CON 00000016 PWM_Fwr 0000005B PWM_Rev 00000061 PWM_SetVal 00000069 RAIE 00000003 RAIF 00000000 RD 00000000 RP0 00000005 RP1 00000006 RestoreWregFromTemp SBODEN 00000004 SCS 00000000 MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 13 SYMBOL TABLE LABEL VALUE STATUS 00000003 STATUS_TEMP 00000021 SWDTEN 00000000 Set16L SetPWM SetPWM_Temp 00000024 StoreWregInTemp Sub16L T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 T1CKPS0 00000004 T1CKPS1 00000005 T1CON 00000010 T1GINV 00000007 T1GSS 00000001 T1IE 00000000 T1IF 00000000 T1OSCEN 00000003 T2CKPS0 00000000 T2CKPS1 00000001 T2CON 00000012 T2IE 00000001 T2IF 00000001 TMR0 00000001 TMR1CS 00000001 TMR1GE 00000006 TMR1H 0000000F TMR1IE 00000000 TMR1IF 00000000 TMR1L 0000000E TMR1ON 00000000 TMR2 00000011 TMR2IE 00000001 TMR2IF 00000001 TMR2ON 00000002 TOUTPS0 00000003 TOUTPS1 00000004 TOUTPS2 00000005 TOUTPS3 00000006 TRISA 00000085 TRISC 00000087 TUN0 00000000 TUN1 00000001 TUN2 00000002 TUN3 00000003 TUN4 00000004 Timer1_Int 00000009 ULPWUE 00000005 VCFG 00000006 VR0 00000000 VR1 00000001 MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 14 SYMBOL TABLE LABEL VALUE VR2 00000002 VR3 00000003 VRCON 00000099 VREN 00000007 VRR 00000005 W 00000000 WDTCON 00000018 WDTPS0 00000001 WDTPS1 00000002 WDTPS2 00000003 WDTPS3 00000004 WPU 00000095 WPUA 00000095 WR 00000001 WREN 00000002 WRERR 00000003 W_TEMP 00000020 Z 00000002 _BOD_NSLEEP 00003EFF _BOD_OFF 00003CFF _BOD_ON 00003FFF _BOD_SBODEN 00003DFF _CPD_OFF 00003FFF _CPD_ON 00003F7F _CP_OFF 00003FFF _CP_ON 00003FBF _EC_OSC 00003FFB _EXTRC 00003FFF _EXTRCIO 00003FFE _EXTRC_OSC_CLKOUT 00003FFF _EXTRC_OSC_NOCLKOUT 00003FFE _FCMEN_OFF 000037FF _FCMEN_ON 00003FFF _HS_OSC 00003FFA _IESO_OFF 00003BFF _IESO_ON 00003FFF _INTOSC 00003FFD _INTOSCIO 00003FFC _INTRC_OSC_CLKOUT 00003FFD _INTRC_OSC_NOCLKOUT 00003FFC _LP_OSC 00003FF8 _MCLRE_OFF 00003FDF _MCLRE_ON 00003FFF _PWRTE_OFF 00003FFF _PWRTE_ON 00003FEF _WDT_OFF 00003FF7 _WDT_ON 00003FFF _XT_OSC 00003FF9 __16F684 00000001 iDivRepeat 00000000 maxPulseValue 00009C40 minPulseValue 00004E20 ms05Value 00002710 MPASM 5.02 MAINMOTORDRIVER.ASM 3-29-2006 0:37:12 PAGE 15 SYMBOL TABLE LABEL VALUE ms1Value 00004E20 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXX------------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 128 Program Memory Words Free: 1920 Errors : 0 Warnings : 10 reported, 0 suppressed Messages : 12 reported, 0 suppressed