MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ;********************************************************************* 00002 ; File: LiIon_1s_Lader.ASM 00003 ; Author: Ottmar 00004 ; Date: 21.05.2022 00005 ;********************************************************************* 00038 LIST 00039 ;--SUPPRESSED WARNINGS 00040 ERRORLEVEL -207 ;"Found label after column 1." 00041 ERRORLEVEL -302 ;"Register in operand not in bank 0.." 00042 ERRORLEVEL -303 ;Program word too large. Truncated to core size. 00043 ERRORLEVEL -306 ;"Cross. page boundary- ensure page bits are set" 00044 ; 00045 ;--MCU-CONFIGURATION 00046 LIST P=16F1827 ;list directive to define processor 00047 #INCLUDE ;processor specific var. definitions 00001 LIST 00002 00003 ;========================================================================== 00004 ; MPASM PIC16F1827 processor include 00005 ; 00006 ; (c) Copyright 1999-2013 Microchip Technology, All rights reserved 00007 ;========================================================================== 00008 01305 LIST 00048 ; 00049 ;--CONFIGURATION WORD SetUP 00050 ; Der PIC 16F1827 verfügt über 2 Configurations-Register. 00051 ; Falls hier eine Fehlermeldung auftritt (..illegal charakter) 00052 ; ist vmtl. im Menü "Configure" der falsche Prozessor gewählt. 00053 ; 00054 ; Internal Oscillator, PLL is OFF 8007 09E4 00055 __CONFIG _CONFIG1, _FOSC_INTOSC & _CLKOUTEN_OFF & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD _OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF 8008 1CFF 00056 __CONFIG _CONFIG2, _LVP_OFF & _WRT_OFF & _STVREN_OFF & _BORV_19 &_PLLEN_OFF 00060 LIST 00061 CBLOCK 0x20 00000020 00062 LcdData ;LcdInit HD44780_2Wire.INC 00000021 00063 LcdBit ;Bitzähler 00000022 00064 LcdFlags ;Ablaufsteuerung Daten/Instruktionen 00000023 00065 d1,d2,d3,d4,d5,d6 ;counters (vgl. delay routines) 00000029 00066 tmpLines ;Zeile im LCD 00067 ; 00068 ;--SONSTIGE 0000002A 00069 pntr1,pntr0 ;Adresszeiger 0000002C 00070 ACb3,ACb2,ACb1,ACb0 00000030 00071 BCb3,BCb2,BCb1,BCb0 00000034 00072 BCD4,BCD3,BCD2,BCD1,BCD0 00000039 00073 cntDig,cntBit 0000003B 00074 cntB2D 0000003C 00075 cnTemp 00076 ;--CHARGE 0000003D 00077 Vdd1,Vdd0 ;Versorgungsspannung 5V 0000003F 00078 Vdrain1,Vdrain0 ;Verlust über Drain-Source MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 2 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000041 00079 Vakku1,Vakku0 ;Vakku1:0 = Vdd1:0 - Vdrain1:0 00000043 00080 Vshunt1, Vshunt0 ;zugleich Ladestrom in mA 00081 ;--SPI 00000045 00082 Data1,Data0 00000047 00083 WiperValue 00000048 00084 WiperMax,WiperMin ;WiperValue Max-/Minimalwert 00085 ;-Flags 0000004A 00086 Flags 00087 ;-ISR 0000004B 00088 KeyState 0000004C 00089 KeyPress 0000004D 00090 cnt1,cnt0 0000004F 00091 cnt10ms 00000050 00092 Estd,Zstd ;ISR-Clock Stunden 00000052 00093 Emin,Zmin ; Minuten 00000054 00094 Esec,Zsec ; Sekunden 00095 ;--Allgemein 00000056 00096 tmpVar ;ADC 00097 ENDC 00098 ;********************************************************************* 00099 ; LABELS & CONSTANTS 00100 ;********************************************************************* 00101 ; Xtal frequency, used to calculate multiplier in delays 00000004 00102 XTAL EQU .4 ;MHz (set to actual Fosc) 00000001 00103 FOSC_MULT EQU XTAL/.4 ;used in delays an LCD_Init 00104 ;--------------------------------------------------------------------- 00105 ; PORT-REGISTER-LABELS 00106 ;--------------------------------------------------------------------- 00107 ; Zahl in Klammern () -> Pinbelegung 16F1827 00108 ; vgl. Pinzuodnung S.11ff Table 1-2ff 00109 ;--ADC_PORT (PORTA) Analog Voltage Measurement 0000000C 00110 ADC_PORT EQU PORTA 0000010C 00111 ADC_LAT EQU LATA 0000008C 00112 ADC_TRIS EQU TRISA 0000018C 00113 ADC_ANSEL EQU ANSELA 00114 ; Pinbelegung 00000005 00115 MCLRE EQU RA5 ;(04) MCLRE Reset Button 00000004 00116 DRAIN EQU RA4 ;(02) AN3 Udrain zugleich -Akku 00000003 00117 SHUNT EQU RA3 ;(03) AN4 Ushunt Strommessung 00000002 00118 VDD5V EQU RA2 ;(01) AN2 Vdd 5V zugleich +Akku 00119 ; VREF EQU RB3 ;(09) AN9 vgl.ADC_PORT 00120 ; SS2 EQU RA1 ;(18) SPI_PORT,SS2 RA1 00121 ; SDO2 EQU RA0 ;(17) SPI_PORT,SDO2 RA0 00122 ; 00123 ;--LCD-PORT (PORTB) 2 Wire Interface 0000000D 00124 LCD_PORT EQU PORTB 0000010D 00125 LCD_LAT EQU LATB 0000008D 00126 LCD_TRIS EQU TRISB 0000018D 00127 LCD_ANSEL EQU ANSELB 00128 ; 00000007 00129 LCDDAT EQU RB7 ;(13)LCD_DATA (blue) ->LCD-PORT 00000006 00130 LCDCLK EQU RB6 ;(12)LCD_CLOCK (grey) ->LCD-PORT 00131 ; MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 3 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00132 ;--KEY_PORT (PORTB) KEY Start/Stop, Icharge Up/Down 0000000D 00133 KEY_PORT EQU PORTB 0000010D 00134 KEY_LAT EQU LATB 0000008D 00135 KEY_TRIS EQU TRISB 0000018D 00136 KEY_ANSEL EQU ANSELB 00137 ; 00138 ; LCDDAT EQU RB7 ;(13)LCD_DATA ->LCD-PORT 00139 ; LCDCLK EQU RB6 ;(12)LCD_CLOCK ->LCD-PORT 00140 ; SCK2 EQU RB5 ;(11) ->SPI_PORT 00000004 00141 SW_VREF EQU RB4 ;(10) OPA,Vref ON/OFF 00000003 00142 VREF EQU RB3 ;(09) AN9 vgl.ADC_PORT 00000002 00143 KEY_START EQU RB2 ;(08) active LOW 00000001 00144 KEY_STOP EQU RB1 ;(07) " " 00000000 00145 LED_GRN EQU RB0 ;(06) ->"#define LED_ON/_OFF 00000006 00146 KEY_MASK EQU 0x06 ;RB2:1=11 pushbuttons 00147 ; 00148 ;--SPI_PORT (PORTB) SPI-Dialog with MCP4151 0000000D 00149 SPI_PORT EQU PORTB 0000010D 00150 SPI_LAT EQU LATB 0000008D 00151 SPI_TRIS EQU TRISB 0000018D 00152 SPI_ANSEL EQU ANSELB 00153 ; 00000005 00154 SCK2 EQU RB5 ;(11) SPI:PORT,SCK2 00000001 00155 SS2 EQU RA1 ;(18)SPI_PORT,SS2 RA1(18) 00000000 00156 SDO2 EQU RA0 ;(17) SPI_PORT,SDO2 RA0(17) 00157 ; 00158 ;--------------------------------------------------------------------- 00159 ; OTHER LABELS ADC-channels, Flags etc. 00160 ;--------------------------------------------------------------------- 00161 ;--ADC Analog channels S.145 00000008 00162 ADC_VDD EQU b'00001000' ;RA2(01) AN2 Vdd 0000000C 00163 ADC_SHUNT EQU b'00001100' ;RA3(02) AN3 Strommess-Shunt 00000010 00164 ADC_DRAIN EQU b'00010000' ;RA4(03) AN4 -Referenz für Uakku 00000024 00165 ADC_VREF EQU b'00100100' ;RB3(09) AN9 Vref für OPA LM358 00166 ; 00167 ;--ADC-FLAGS (Ablaufsteuerung ADC-/Berechnungs/LCD-Ausgabe) 00168 ; Flags 00169 ; V_VDD5V EQU .0 ;Batt+ zugl. 5V-Versorgung 00170 ; V_SHUNT EQU .1 ;Spannung über Strommess.Shunt 00171 ; V_DRAIN EQU .2 ;Batt- Spannung an Drain 00172 ; V_VREF EQU .3 ;Vref OPA,Vref 00173 ; I_BATT EQU .4 ;Ladestraom 00174 ; V_AKKU EQU .5 00175 00176 ;--Flags 00000004 00177 ISR_ACTIVE EQU .4 ;Flags,4 00000005 00178 CHRG_END EQU .5 ;Flags,5 00000006 00179 NEW_SEC EQU .6 ;Flags,6 1/0 New second has/not occured 00000007 00180 ERR EQU .7 ;Flags,7 000000E0 00181 FLAGMASK EQU b'11100000' 00182 ; 00183 ;--MCP4151 00000096 00184 WIPER_MAX EQU .150 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 4 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000001 00185 WIPER_MIN EQU .1 00186 ; SPI 16-Bit Command 00000000 00187 WIPER0_WRITE EQU 0x00 ;Hinweise zur Bittfolge: 00188 ; b15:12="0000" address of wiper0 ;b11:10="00" Write Data 00189 ; b 9:8 ="00" b9:8 Databits ;b 7:0 =WiperValue 0000000C 00190 WIPER0_READ EQU 0x0C ;b3:2="11" Read Data 00191 ; 8-Bit Commands 00000004 00192 WIPER0_INCR EQU 0x04 ;b2:0="100" increment 00000008 00193 WIPER0_DECR EQU 0x08 ;b3:0="1000" decrement 00194 ; 00195 ;--CHARGE AKKU 00000010 00196 V_MAX1 EQU 0x10 ;Max. Ladespannung 1 Zelle Li-Ion 00000054 00197 V_MAX0 EQU 0x68-.20 ;0x1068 = 4200mV 00198 ; V_MAX1 EQU 0x0F ;3900mV = 0x0F3C 00199 ; V_MAX0 EQU 0x3C 00200 ; 00201 ; 00202 #DEFINE CTRL_LEDON bcf SPI_PORT,LED_GRN ;RB0 Kontroll-LED EIN 00203 #DEFINE CTRL_LEDOFF bsf SPI_PORT,LED_GRN ;RB0 Kontroll-LED AUS 00204 #DEFINE VREF_ON bsf SPI_PORT,SW_VREF ;RB4(10) OPA-Vref (MCP4151,P0W) 00205 #DEFINE VREF_OFF bcf SPI_PORT,SW_VREF ;RB4 00206 ;********************************************************************* 00207 ; LCD-PROPERTIES (Eigenschaften an aktuellen LCD-Typ anpassen) 00208 ;********************************************************************* 00209 ; LCD_TYPE EQU 1 ;=1 LCD 2x8 und 2x16 00210 ; LCD_TYPE EQU 2 ;=2=LCD 4x16 00000003 00211 LCD_TYPE EQU 3 ;=3=LCD 4x20 00212 ; 00213 IF LCD_TYPE == 1 ;Uncomment LCD_DIGITS 2x8 OR 2x16 !!! 00214 LCD_LINES EQU .2 ;LCD 2x8 * 2x16 00215 ; LCD_DIGITS EQU .8 ;LCD 2x8 00216 ; LCD_DIGITS EQU .16 ;LCD 2x16 00217 ENDIF 00218 ;------------------------------------- 00219 ; NO CHANGES AFTER THIS LINE ALLOWED! 00220 ;------------------------------------- 00000000 00221 LINE1 EQU 0x00 ;all LCDs 00000040 00222 LINE2 EQU 0x40 ;" " 00223 ; 00224 IF LCD_TYPE==2 00225 LINE3 EQU 0x10 ;LCDs 4x16 only 00226 LINE4 EQU 0x50 ;" " " 00227 LCD_LINES EQU .4 ;Lines 00228 LCD_DIGITS EQU .16 ;digits/line 00229 ENDIF 00230 ; 00231 IF LCD_TYPE==3 00000014 00232 LINE3 EQU 0x14 ;LCDs 4x20 only 00000054 00233 LINE4 EQU 0x54 ;" " " 00000004 00234 LCD_LINES EQU .4 00000014 00235 LCD_DIGITS EQU .20 ;digits/line 00236 ENDIF 00237 ; MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 5 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00238 #DEFINE LCD_DATA LCD_LAT,LCDDAT ;Strobe Data (H->L -> Enable) 00239 #DEFINE LCD_CLK LCD_LAT,LCDCLK ;Strobe Clock (H->L) 00240 #DEFINE LCD_RS LcdFlags,7 ;0/1 Data-Mode/Instruction-Mode 00241 #DEFINE NIBBLE LcdFlags,6 ;1/0 send Upper/Lower Nibble to LCD 00242 ; 00000080 00243 SET_DDRAM_ADDR EQU 0x80 ;Function "SET DDRAM-ADDRESS" 00000040 00244 SET_CGRAM_ADDR EQU 0x40 ;"Set CGRAM Address" b'01000000 00245 ; 00000008 00246 DISPLAY_OFF EQU 0x08 ;Function "Display Disabled" 0000000C 00247 DISPLAY_ON EQU 0x0C ;Function "Display enabled, Crsr On, Blink Off 00248 ;********************************************************************* 0000 00249 ORG 0x0000 ;PROCESSOR RESET VECTOR 0000 2844 00250 GOTO init 00251 ;********************************************************************* 00077 ;********************************************************************* 0004 00078 ORG 0x0004 ;INTERRUPT-VECTOR 00079 #INCLUDE <01_ISR_LiIon.INC> 00001 ;********************************************************************* 00002 ; File: 00_ISR_LiIon.INC 00003 ; Author: Ottmar 00004 ; Date: 21.05.2022 00005 ;********************************************************************* 0004 00006 isr_tmr0: 0004 140D 00007 CTRL_LEDOFF 00008 ;ISR-Widerholrate = 10ms 00009 ;INTCON,GIE is automatically cleared 00010 ;WREG, STATUS, PCLATH are automatically saved 00011 ; 0005 110B 00012 bcf INTCON,TMR0IF ;b2=0 overflow flag is cleared 0006 3064 00013 movlw .100 0007 0095 00014 movwf TMR0 ;Preset TMR0 after 100 overflow cycles 00015 ; 0008 00016 isr_debounce: ;needs 15 cycles 00017 ; Take over current button state into the debounce routine 0008 080D 00018 movf KEY_PORT,w ;select only input-Port-pins (push buttons) 0009 3906 00019 andlw KEY_MASK 000A 00CB 00020 movwf KeyState ;the actual state of inputs 00021 ; comf KeyState,w 00022 ; Increment the vertical counter 000B 084D 00023 movf cnt1,W 000C 06CE 00024 xorwf cnt0,F 000D 09CD 00025 comf cnt1,F 00026 ; See if any changes occurred 000E 084B 00027 movf KeyState,W 000F 064C 00028 xorwf KeyPress,W 00029 ; Reset the counter if no change has occurred 0010 05CD 00030 andwf cnt1,F 0011 05CE 00031 andwf cnt0,F 00032 ; Determine the counter's state 0012 084D 00033 movf cnt1,W 0013 044E 00034 iorwf cnt0,W 00035 ; Clear all bits that are filtered-or more accurately, save 00036 ; the state of those that are being filtered MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 6 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0014 05CC 00037 andwf KeyPress,F 0015 3AFF 00038 xorlw 0xff 00039 ; Re-write the bits that haven't changed. 0016 054B 00040 andwf KeyState,W 0017 04CC 00041 iorwf KeyPress,F ;the debounced keybits are LOW as long as 00042 ; ;the button is down. 0018 00043 isr_cnt: 0018 03CF 00044 decf cnt10ms,f ;Instruction Descriptions S.329 0019 1D03 00045 btfss STATUS,Z ;Z=1? cnt10ms=0? 1 sec finished? 001A 2843 00046 GOTO isr_end ;NO jump over set counter & new sec 001B 3064 00047 movlw .100 ; preset counter 001C 00CF 00048 movwf cnt10ms 00049 ;---------------------------- 00050 ;Bit Flags,NEW_SEC wechselt von 0->1->0 time 1-1 = 2xISR-Interval 001D 0103 00051 clrw 001E 1709 00052 bsf WREG,NEW_SEC ;universeller als movlw b'01000000' 001F 06CA 00053 xorwf Flags,f; 00054 ; 0020 1F4A 00055 btfss Flags,NEW_SEC ;Flag is used to refresh LCD-Data 0021 2843 00056 GOTO isr_end ;each second 0022 174A 00057 bsf Flags,NEW_SEC 0023 100D 00058 CTRL_LEDON 00059 ; 0024 00060 isr_sec: 00061 ; 0024 0AD4 00062 incf Esec,f ;Increase time each new second 0025 300A 00063 movlw .10 0026 0254 00064 subwf Esec,w 0027 1D03 00065 btfss STATUS,Z 0028 2843 00066 GOTO isr_end 00067 ; 0029 01D4 00068 clrf Esec 002A 0AD5 00069 incf Zsec,f ;10 Sekunden erhöhen 002B 3006 00070 movlw D'6' 002C 0255 00071 subwf Zsec,w 002D 1D03 00072 btfss STATUS,Z 002E 2843 00073 GOTO isr_end ;10 Sekunden <> 6 00074 ; 002F 01D5 00075 clrf Zsec 0030 0AD2 00076 incf Emin, f ;1 Minuten erhöhen 0031 300A 00077 movlw D'10' 0032 0252 00078 subwf Emin, w 0033 1D03 00079 btfss STATUS, Z 0034 2843 00080 goto isr_end ;1 Minuten <> 10 00081 ; 0035 01D2 00082 clrf Emin 0036 0AD3 00083 incf Zmin, f ;10 Minuten erhöhen 0037 3006 00084 movlw D'6' 0038 0253 00085 subwf Zmin, w 0039 1D03 00086 btfss STATUS, Z 003A 2843 00087 goto isr_end ;10 Minuten <> 6 00088 ; 003B 01D3 00089 clrf Zmin MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 7 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 003C 0AD0 00090 incf Estd, f ;1 Stunden erhöhen 003D 300A 00091 movlw D'10' 003E 0250 00092 subwf Estd, w 003F 1D03 00093 btfss STATUS, Z 0040 2843 00094 goto isr_end 00095 ; 0041 01D0 00096 clrf Estd 0042 0AD1 00097 incf Zstd,f ;10 Stunden erhöhen 0043 00098 isr_end: 0043 0009 00099 RETFIE 00100 ;********************************************************************* 00080 ;********************************************************************* 00081 #INCLUDE <02_INIT_LiIon.INC> 00001 ;********************************************************************* 00002 ; File: 02_INIT_LiIon.INC 00003 ; Author: Ottmar 00004 ; Date: 21.05.2022 00005 ;********************************************************************* 0044 00006 init: 00007 ;--OSCCON 4MHz Internal Oscillator Frequency adjustment 00008 ; Internal Osc. block fosc=4MHz, 4xPLL disabled 00009 ; b7 =0/1 4xPLL off/on 00010 ; b6:3 =1101 fosc=4MHz 00011 ; b2 =0 unimplemented 00012 ; b1:0 =10 System Clock is Int.Osc 00013 0044 0021 00014 BANKSEL OSCCON ;bank1 S.65, S.53ff 0045 306A 00015 movlw b'01101010' ;4xPLL OFF, 4MHz 00016 ; movlw b'01111010' ;4xPLL OFF, 16MHz 00017 ; movlw b'11110010' ;4xPLL ON, 4x8=32MHz 0046 0099 00018 movwf OSCCON 0047 0198 00019 clrf OSCTUNE ; bank1 adjust fosc = factory calibrated 00020 ; 0048 0024 00021 BANKSEL WPUB ;S.128 00022 ;Beachten: WeakPull ups an den ADC-Pins müssen abgeschaltet sein 00023 ;entweder pauschal mit "bsf OPTION_REG,NOT_WPUEN" (b7=1) 00024 ;oder mit dem Register WPUA,RA5- nur MCLRE-pin S.123 00025 ;und/oder WPUB,WPUB7:0 S.128 0049 118D 00026 bcf WPUB,VREF ;RB3/AN9 (09) All weak pullups are DISABLED 00027 ; 004A 0020 00028 BANKSEL PORTA ;ADC_PORT, SPI_PORT,KEY_PORT 004B 018C 00029 clrf PORTA 004C 0022 00030 BANKSEL LATA 004D 018C 00031 clrf LATA 004E 0021 00032 BANKSEL TRISA 004F 138C 00033 bcf TRISA,RA7 ;RA7(16) n.c OUT 0050 130C 00034 bcf TRISA,RA6 ;RA6(15) n.c OUT 0051 168C 00035 bsf TRISA,RA5 ;RA5(04) INP MCLRE, Reset-Button 0052 160C 00036 bsf ADC_TRIS,DRAIN ;RA4(03) AN3 INP Udrain zugleich -Akku 0053 158C 00037 bsf ADC_TRIS,SHUNT ;RA3(02) AN4 INP Ushunt Strommessung 0054 150C 00038 bsf ADC_TRIS,VDD5V ;RA2(01) AN2 INP Vdd 5V zugleich +Akku 0055 108C 00039 bcf TRISA,SS2 ;RA1(18 SPI OUT 0056 100C 00040 bcf TRISA,SDO2 ;RA0(17) SPI OUT MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 8 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0057 0023 00041 BANKSEL ANSELA 0058 018C 00042 clrf ANSELA ;RA7:6 n.c. RA7:5,RA1:0 dig.I/O 0059 158C 00043 bsf ADC_ANSEL,SHUNT ;RA4(03) AN4 Ushunt Strommessung 005A 160C 00044 bsf ADC_ANSEL,DRAIN ;RA3(02) AN3 Udrain zugleich -Akku 005B 150C 00045 bsf ADC_ANSEL,VDD5V ;RA2(01) AN2 Vdd 5V zugleich +Akku 00046 ; 00047 ;--PORTB 005C 0020 00048 BANKSEL PORTB ;ADC, SPI_PORT->PORTA 005D 018D 00049 clrf PORTB 005E 0022 00050 BANKSEL LATB 005F 018D 00051 clrf LATB 0060 0021 00052 BANKSEL TRISB 0061 138D 00053 bcf LCD_TRIS,LCDDAT ;RB7(13) OUT (blue) 0062 130D 00054 bcf LCD_TRIS,LCDCLK ;RB6(12) OUT (grey) 0063 128D 00055 bcf SPI_TRIS,SCK2 ;RB5(11) OUT SPI Clock 0064 120D 00056 bcf TRISB,SW_VREF ;RB4(10) OUT Vref INP ON/OFF 0065 158D 00057 bsf TRISB,VREF ;RB3(09) AN9 INP Vref an MCP4151,P0W 0066 150D 00058 bsf TRISB,KEY_START ;RB2(08) INP 0067 148D 00059 bsf TRISB,KEY_STOP ;RB1(07) INP 0068 100D 00060 bcf TRISB,LED_GRN ;RB0(06) OUT to Control programm flow 0069 0023 00061 BANKSEL ANSELB 006A 018D 00062 clrf ANSELB 006B 158D 00063 bsf ANSELB,VREF ;RB3(09) AN9 MCP4151,P0W 00064 ; ; 00065 ;--------------------------------------------------------------------- 00066 ; MSSP2-MODULE FOR SPI INITIALIZE S.278-279 00067 ;--------------------------------------------------------------------- 00068 ;--APFCON0: ALTERNATE PIN FUNCTION S.119 00069 ; FOR MSSP1-MODULE ONLY! change SDO/SS1-Pin Function 00070 ; APFCON0,SDO1SEL 0 = SDO1 function is on RB2 00071 ; 1 = SDO1 function is on RA6 00072 ; APFCON0,SS1SEL: 0 = SS1 function is on RB5 00073 ; 1 = SS1 function is on RA5 00074 ; 00075 ; MMSP2-MODULE the SPI-Pins are: 00076 ; SS2 =RA1(18) 00077 ; SD02=RA0(17 00078 ; SCK2=RB5(11) 00079 ; SDI2=RB2(08) 00080 ; 006C 0024 00081 BANKSEL SSP2STAT 00082 ; b7= 0 MASTER: INPUT DATA SAMPLED AT MIDDLE/END OF DATA OUTPUT TIME 00083 ; b6= 1 TRANSMIT OCCURS ON TRANSITION FROM IDLE TO ACTIVE CLOCK STATE 00084 ; b5= 0 last byte received or transmitted was DATA/ADDRESS 00085 ; b4:1= 0000 I2C mode only 00086 ; b0= 0 0/1 Flag Receive complete/not complete 006D 3040 00087 movlw b'01000000' 006E 009C 00088 movwf SSP2STAT 00089 ; 006F 0024 00090 BANKSEL SSP2CON1 ;(SPI-Mode) ;S.280 00091 ; b7 =0 unused I2C mode only 00092 ; b6 =0 Flag Receive Overflow Indicator 0=No overflow 00093 ; b5 =1 SSPxEN Enables SPI-Port and config SCKx, SDOx, SDIx and SSx as the source of the serial p MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 9 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE ort pins (2) 00094 ; b4 =0 CKP 1/0 IDLE STATE FOR CLOCK is a HIGH/LOW LEVEL 00095 ; b3:0=0010 SSPxM Synchronous Serial Port Mode Select bits 00096 ; 0000 = SPI Master mode, clock = F OSC /4 00097 ; 0001 = SPI Master mode, clock = F OSC /16 00098 ; 0010 = SPI Master mode, clock = F OSC /64 00099 ; 1010 = SPI Master mode, clock = F OSC /(4 * (SSPxADD+1)) (5) 0070 3031 00100 movlw b'00110001' 0071 009D 00101 movwf SSP2CON1 0072 0020 00102 BANKSEL 0 00103 ; 00104 ;--------------------------------------------------------------------- 00105 ; AD-CONVERSION INITIALIZE (procedure-excample S.144) 00106 ;--------------------------------------------------------------------- 00107 ;--ADC-CHANNEL SELECTION 0073 0021 00108 BANKSEL ADCON0 ;bank1 S. 145 00109 ; b7= unimplemented 00110 ; b6:2= AD-Channel S.145 00111 ; ADC_VDD EQU b'00001000' RA2(01) AN2 Vdd 00112 ; ADC_SHUNT EQU b'00001100' RA3(02) AN3 Strommess-Shunt 00113 ; ADC_DRAIN EQU b'00010000' RA4(03) AN4 -Referenz für Uakku 00114 ; ADC_P0W EQU b'00100000' ;RB4(10) AN8 Vref für OPA LM358 00115 ; ADC_P0W EQU b'00101100' ;RB1(07) AN11 Vref für OPA LM358 00116 00117 ; b1= ADCON0,G0 Setting this bit starts an A/D conversion cycle. 00118 ; Bit is automatically cleared when the A/D conversion has completed. 00119 ; b0= ADCON0,ADON ;Bit0 ADC enabled 00120 ; 00121 ;--ADC VREF, CONVERSION CLOCK, RESULT FORMAT 0074 0021 00122 BANKSEL ADCON1 ;bank1 S. 146 0075 019E 00123 clrf ADCON1 0076 179E 00124 bsf ADCON1,ADFM ;b7=1 Result Format right justified 0077 171E 00125 bsf ADCON1,ADCS2 ;b6:4=001 Conversion Clock=Fosc/8 0078 169E 00126 bsf ADCON1,ADCS1 ; 110 " /64 0079 121E 00127 bcf ADCON1,ADCS0 00128 ;0 b3 unimlemented 007A 111E 00129 bcf ADCON1,ADNREF ;b2 Vref- connected to Vss (GND) 007B 149E 00130 bsf ADCON1,ADPREF1 ;b1:0=11 Vref+ intern connected 007C 141E 00131 bsf ADCON1,ADPREF0 00132 ; movlw b'10010011' 00133 ; movwf ADCON1 00134 ; 00135 ;--ADC VOLTAGE REFERENCE S1erLECTION 007D 0022 00136 BANKSEL FVRCON ;S.135 007E 0197 00137 clrf FVRCON 007F 1797 00138 bsf FVRCON,FVREN ;b7= 1 FVR enabled 00139 ; FVRCON,FVRRD1 ;b6= 0/1 FVR not enalbled/ready 00140 ; Reserved ;b5 0 00141 ; Reserved ;b4 0 00142 ; FVRCON,CDAFVR ;Bit3:2=00 Comp+DAC FVR off 0080 1097 00143 bcf FVRCON,ADFVR1 ;Bit1:0=11 Vref+ intern=4096mV 0081 1417 00144 bsf FVRCON,ADFVR0 ;Bit1:0=01 Vref+ intern 1,024V 0082 0020 00145 BANKSEL 0 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 10 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00146 ; 00147 ;--------------------------------------------------------------------- 00148 ; LCD INITIALIZATION & TEST & OUTPUT-LCD_MASK 00149 ;--------------------------------------------------------------------- 00150 #IFNDEF __DEBUG ;LCD-Init nicht im DEBUG-Modus durchlaufen 00151 CALL Lcd_Init ;initialize the LCD 00152 CALL Lcd_Ready ;LCD-Test: "LCD 2Wire ready! 00153 movlw .10 ;value to delay 10x100ms 00154 CALL Delay100ms ;show LCD-Test for estimated delaytime 00155 CALL Lcd_Clear ;clear display 00156 ;--CREATE LCD-MASK 00157 movlw DISPLAY_OFF ;LCD Anzeige von Zeichen ausschalten 00158 CALL OutLcd_Ctrl ;verhindert wirrre Zeichen 00159 movlw HIGH tbl_lcd_mask4x20 00160 movwf pntr1 00161 movlw LOW tbl_lcd_mask4x20 00162 movwf pntr0 00163 movlw LCD_LINES ;Zeilen 1-4 im LCD ausgeben 00164 CALL LcdOut_Table_1 00165 movlw DISPLAY_ON ;LCD-Zeichen wieder sichtbar 00166 CALL OutLcd_Ctrl 00167 #ENDIF 00168 ;--------------------------------------------------------------------- 00169 ;--PRESET/CLEAR VARIABLES 00170 ;--------------------------------------------------------------------- 0083 01CA 00171 clrf Flags ;Allgemeine Programmablaufsteuerung 00172 ; 00173 ;clear all digits of ISR-clock 0084 01CF 00174 clrf cnt10ms 0085 01D4 00175 clrf Esec ;ISR-Clock ISR-SS.MM.HH 0086 01D5 00176 clrf Zsec 0087 01D2 00177 clrf Emin 0088 01D3 00178 clrf Zmin 0089 01D0 00179 clrf Estd 008A 01D1 00180 clrf Zstd 00181 ; 00182 ;Set Icharge = 0 00183 #IFNDEF __DEBUG 00184 clrf WiperValue 00185 CALL WiperValue_Set ;MCP4151,P0W = 0 00186 #ENDIF 008B 120D 00187 VREF_OFF ;RB4=0 OPAVref = 0 008C 140D 00188 CTRL_LEDOFF ;Aus, später aktiv im Ladezyklus 00189 ;--------------------------------------------------------------------- 00190 ;--INTERRUPT TMR0-OVERFLOW-INTERRUPT 00191 ;--------------------------------------------------------------------- 00192 ; ISR Interval Soll = 4000us (fosc/4) = 1.000.000us 00193 ; 1.000.000 / 4000us = 250 00194 ; 1.000.000 / 250 = 4.000 Prescalerrate=4000/256 = 15,6 00195 ; next highest rate = 16:1 00196 ; Preset TMR0 = 1.000.000 /16/250=250 (vgl. ISR) 008D 0021 00197 BANKSEL OPTION_REG ;S.176 00198 ;b7 =0 (=1 weak pull ups disabled) MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 11 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00199 ;b6 =0 unused 00200 ;b5 =0 Timer0 Clock Source is fosc/4 00201 ;b4 =0 TMR0 increment on LOW/HIGH edge 00202 ;b3 =0 Prescaler is assigned to the Timer0 module 00203 ;b2:0=011 Prescaler Rate=1:16; TMR0 Preset .7 4ms 00204 ;b2:0=100 " " 1:32 " " .100 5ms 00205 ;b2:0=101 Prescaler Rate=1:64, TMR0 Preset .100 10ms 008E 3004 00206 movlw b'00000100' 008F 0095 00207 movwf OPTION_REG 00208 ; 0090 0020 00209 BANKSEL 0 0091 0195 00210 clrf TMR0 0092 110B 00211 bcf INTCON,TMR0IF ;TMR0 register did not overflow 0093 168B 00212 bsf INTCON,TMR0IE ;b5 0/1 Disable/enable TMR0 overfl. S.86 0094 178B 00213 bsf INTCON,GIE ;b7=1/0 Interrupts global enabled/disabled 00214 ; 0095 290C 00215 GOTO main 00216 ;--------------------------------------------------------------------- 00217 ;--LCD-MASK TABLE 00218 ;tbl_lcd_mask4x16: ;0123456789012345 00219 ; dt LINE1+.0,"Vdd : V",80h ;.,..V Ub+Akku 00220 ; dt LINE2+.0,"Shunt: mV",80h ;...mV Ladestrom 00221 ; dt LINE3+.0,"Drain: mV",80h ;...mV" -Akku 00222 ; dt LINE4+.0,"P0W : mV",80h ;...mV" Wiper 00223 ; ; DDRAM-Addr, Text,Endmark 00224 ; 0096 00225 tbl_lcd_mask4x20: 00226 ;01234567890123456789 0096 3400 3456 3464 00227 dt LINE1+.0,"Vdd 0mV Ud 0mV",80h ;Versorgung, Vdrain IRFZ34N 3464 3420 3420 3420 3420 3430 346D 3456 3420 3455 3464 3420 3420 3420 3420 3430 346D 3456 3480 00AC 3440 3442 3461 00228 dt LINE2+.0,"Bat 0mV Vrf 0mV",80h ;LiIon-Ladespannung, Vref 3474 3420 3420 3420 3420 3430 346D 3456 3420 3456 3472 3466 3420 3420 3420 3430 346D 3456 3480 00C2 3414 3453 3468 00229 dt LINE3+.0,"Shnt 0mA P0W 0 ",80h ;Ladestrom, Wiperpositio 346E 3474 3420 3420 3420 3430 346D 3441 3420 3450 3430 3457 3420 3420 3420 3430 3420 3420 3480 00D8 3454 3420 3420 00230 dt LINE4+.0," Push [START] ",80h ;Ausgabe Ladezeit MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 12 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 3420 3420 3450 3475 3473 3468 3420 345B 3453 3454 3441 3452 3454 345D 3420 3420 3420 3420 3480 00231 ; 01234567890123456789 00232 ; START 00:00:00 00233 ; START 00:00:00 00234 ; "FERTIG",80h ;Ausgabe Ladezeit 00235 ; DDRAM-Addr, Text,Endmark 00236 ; 00EE 00237 tbl_no_batt: 00238 ;01234567890123456789 00EE 3454 3420 344E 00239 dt LINE4+.0," No Accu to charge! ",80h ;Ausgabe Ladezeit 346F 3420 3441 3463 3463 3475 3420 3474 346F 3420 3463 3468 3461 3472 3467 3465 3421 3420 3480 00240 ; 0104 00241 tbl_charge_end: 00242 ;01234567890123456789 0104 3454 3446 3445 00243 dt LINE4+.0,"FERTIG",80h ;Ausgabe Ladezeit 3452 3454 3449 3447 3480 00082 ;********************************************************************* 010C 00083 main: 00084 ; #IFDEF __DEBUG 00085 ; GOTO main_charge_start ; gleich mit Charge_Ctrl starten 00086 ; #ENDIF 00087 ; 00088 ;1.Bei Ladeende hier auf Tastendruck zum erneuten Start warten 010C 1ECA 00089 btfss Flags,CHRG_END ;b5=0 charge accu enabled? 010D 2911 00090 GOTO main_start ;YES 010E 2288 00091 CALL Out_ChargeEnd 00092 010F 194C 00093 btfsc KeyPress, KEY_START ;NO wartet auf Tastendruck 0110 290C 00094 GOTO main 00095 ; 0111 00096 main_start: 00097 ;2.Vdd, Vdrain,Vbat,Vref,Ishunt,P0W ausgeben 00098 ; und auf Tastendruck für Ladebeginn warten 0111 12CA 00099 bcf Flags,CHRG_END ;b5=0 charge accu enabled 0112 300A 00100 movlw .10 ;guter Startwert, auch bei restart 0113 00C7 00101 movwf WiperValue 0114 2161 00102 CALL Meas_Vdd ;supply voltage to LCD 0115 2169 00103 CALL Meas_Vdd_Out ;Ausgabe Vakku im LCD 0116 2177 00104 CALL Meas_Vdrain 0117 2185 00105 CALL Meas_Vdrain_Out MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 13 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0118 216E 00106 CALL Meas_Vakku ;Vdd-Vdrain=Vakku 0119 2172 00107 CALL Meas_Vakku_Out 011A 2196 00108 CALL Meas_Vref 011B 2199 00109 CALL Meas_Vref_Out 011C 218A 00110 CALL Meas_Vshunt 011D 2191 00111 CALL Meas_Vshunt_Out 011E 219E 00112 CALL WiperValue_Out ;Actual Wipervalue (MCP4151.P0W) 00113 ; 011F 194C 00114 btfsc KeyPress,KEY_START ;wartet auf Tastendruck 0120 291F 00115 GOTO $-1 00116 ;3. Startbeginn, Ladezeit ausgeben "00:00:00" 0121 00117 main_charge_start: 0121 2246 00118 CALL Out_ChargeTime_Start ;Ladezeit läuft 0122 160D 00119 VREF_ON ;RB4(10) high Vref ON 0123 0847 00120 movf WiperValue,w ;Startwert 0124 21A7 00121 CALL WiperValue_Set ;Ladevorgang beginnt. 00122 ; 0125 00123 main_charge_loop: 0125 1ECA 00124 btfss Flags,CHRG_END ;b5=1 Laden beendet? 0126 292A 00125 GOTO main_charge_sec ;NO 0127 120D 00126 VREF_OFF 0128 2288 00127 CALL Out_ChargeEnd ;YES 0129 2933 00128 GOTO main_end ;Laden ist beendet, letzte Messwert- 00129 ; 00130 ;4.1 Je Sekunde erfolgt 1x Zustandsmessung und Ladestromanpassung 012A 00131 main_charge_sec: 012A 1F4A 00132 btfss Flags,NEW_SEC ;Messung jede Sekunde freigeben 012B 292A 00133 GOTO $-1 ;zugleichauch Arbeitstakt Ladevorgang 012C 1B4A 00134 btfsc Flags,NEW_SEC 012D 292C 00135 GOTO $-1 00136 ; 012E 2263 00137 CALL Out_ChargeTime 012F 21CC 00138 CALL Out_All_Measurments ;Vdd, Vdrain,Vbat,Vref,Ishunt,P0W 0130 2134 00139 CALL Charge_Ctrl 0131 1ECA 00140 btfss Flags,CHRG_END ;b5=1 Ladeende! (WiperValue=0) 0132 2925 00141 GOTO main_charge_loop 0133 00142 main_end: 0133 290C 00143 GOTO main 00144 ;********************************************************************* 00145 ; SUBROUTINES 00146 ;********************************************************************* 0134 00147 Charge_Ctrl: 00148 #IFDEF __DEBUG ;Vmax= 0x1068 = 4200mV 00149 ; ;1. Vakku1 > V_MAX1, Vakku0 = V_MAX0 00150 ; movlw 0x11 ;Vist =0x0F3C = 3900mV 00151 ; movwf Vakku1 00152 ; movlw 0x68 ;Vist KLEINER als VMAX! 00153 ; movwf Vakku0 00154 ; ;2. Vakku1 > V_MAX1, Vakku0 > V_MAX0 00155 ; movlw 0x11 ;Vist =0x0F3C = 3900mV 00156 ; movwf Vakku1 00157 ; movlw 0x70 ;Vist KLEINER als VMAX! 00158 ; movwf Vakku0 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 14 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00159 ; ;-------------------------------------------- 00160 ; ;3. Vakku1 = V_MAX1, Vakku0 > V_MAX0 00161 ; movlw 0x10 00162 ; movwf Vakku1 00163 ; movlw 0x70 00164 ; movwf Vakku0 00165 ; ;-------------------------------------------- 00166 ;4. Vakku1 = V_MAX1, Vakku0 = V_MAX0 0134 3010 00167 movlw 0x10 0135 00C1 00168 movwf Vakku1 0136 3068 00169 movlw 0x68 0137 00C2 00170 movwf Vakku0 00171 ; ;-------------------------------------------- 00172 ; ;5. Vakku1 < V_MAX1, Vakku0 = V_MAX0 00173 ; movlw 0x09 00174 ; movwf Vakku1 00175 ; movlw 0x68 00176 ; movwf Vakku0 00177 ; ;-------------------------------------------- 00178 ;6. Vakku1 = V_MAX1, Vakku0 < V_MAX0 0138 3010 00179 movlw 0x10 0139 00C1 00180 movwf Vakku1 013A 3068 00181 movlw 0x68 013B 00C2 00182 movwf Vakku0 00183 ; ;-------------------------------------------- 00184 ; ;7. Vakku1 < V_MAX1, Vakku0 < V_MAX0 00185 ; movlw 0x9 00186 ; movwf Vakku1 00187 ; movlw 0x67 00188 ; movwf Vakku0 00189 ; ; 00190 ; ;1.WiperValue>WIPER_MAX (WIPER_MAX=150) 00191 ; movlw .255 00192 ;2.WiperValue=IPER_MAX 00193 ; movlw .150 00194 ; ;3.WiperValue=1 013C 3096 00195 movlw .150 013D 00C7 00196 movwf WiperValue 00197 00198 ; GOTO chrg_wpr_ctrl 00199 #ENDIF 00200 ; Vakku - VMAX -> C=1 Wenn Vakku > VMAX 00201 ; -> C=0 Wenn Vakku <= VMAX 00202 ; -> Z=1 Wenn Vakku = VMAX 00203 ; -> Z=0 Wenn Vakku <> VMAX 00204 00205 ; IF 1.0 Vakku1 < V_MAX1 then INCREMENT Wipervalue 00206 ; GOTO charge_wiper_ctrl -> test wiper in allowed range 00207 ; IF 2. Vakku1 = V_MAX1 00208 ; THEN 2.1.Vakku0 = V_MAX0 -> JA -> DECREMENT Wipervalue 00209 ; GOTO charge_wiper_ctrl -> test wiper in allowed range 013E 00210 chrg_vakku1_ctrl: 013E 3010 00211 movlw V_MAX1 ;maxwert ins Wreg MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 15 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 013F 0241 00212 subwf Vakku1,w ;subtract istwert-maxwert 0140 1903 00213 btfsc STATUS,Z ;test Vakku1 = V_MAX1? 0141 2946 00214 GOTO chrg_vakku0_ctrl ;Z=1 -> Vakku1 = V_MAX1 test Vakku0 00215 ; ;Z=0 -> Vakku1 <> VMAX1 0142 1C03 00216 btfss STATUS,C ;Test C-Flag 0143 294F 00217 GOTO chrg_wiper_incr ;Z=0 Vakku1 <> V_MAX1 0144 3010 00218 movlw V_MAX1 ;C=1 Vakku1>_MAX1, Vakku0>V_MAX0 0145 00C1 00219 movwf Vakku1 00220 ;GOTO chrg_wiper_decr 00221 ; 00222 ; 2.2 Vakku1=V_MAX1, TEST Vakku0<=>V_MAX0 0146 00223 chrg_vakku0_ctrl: 0146 3054 00224 movlw V_MAX0 0147 0242 00225 subwf Vakku0,w 0148 1903 00226 btfsc STATUS,Z ;test Vakku0 = V_MAX0? 0149 2951 00227 GOTO chrg_wiper_decr ;Z=1 -> Vakku1/0 = V_MAX01/0 00228 ; 014A 1C03 00229 btfss STATUS,C ;Test C-Flag 014B 294F 00230 GOTO chrg_wiper_incr ;C=0 Vakku0 < V_MAX0 014C 3054 00231 movlw V_MAX0 ;C=1 Vakku0>_MAX0 014D 00C2 00232 movwf Vakku0 014E 2951 00233 GOTO chrg_wiper_decr 00234 ; 014F 00235 chrg_wiper_incr: 014F 0AC7 00236 incf WiperValue,f 0150 2958 00237 GOTO chrg_wiper_ctrl 0151 00238 chrg_wiper_decr: 0151 03C7 00239 decf WiperValue,f ;WiperValue <5 LadeEnde 0152 3005 00240 movlw .5 0153 0247 00241 subwf WiperValue,w 0154 1803 00242 btfsc STATUS,C 0155 295E 00243 GOTO chrg_wpr_set 0156 16CA 00244 bsf Flags,CHRG_END ;b5=1 Ladeende! (WiperValue=0) 0157 295E 00245 GOTO chrg_wpr_set ;LADEENDE 00246 00247 ; decfsz WiperValue,f 00248 ; GOTO chrg_wiper_ctrl ;P0W-Position setzen, weiter Laden 00249 ; bsf Flags,CHRG_END ;b5=1 Ladeende! (WiperValue=0) 00250 ; GOTO chrg_wpr_set ;LADEENDE 00251 ; 0158 00252 chrg_wiper_ctrl: ;WiperValue im Bereich =< WIPER_MAX? 0158 3096 00253 movlw WIPER_MAX ;Prüfen: WiperValue <> WIPER-MAX 0159 0247 00254 subwf WiperValue,w 015A 1C03 00255 btfss STATUS,C 015B 295E 00256 GOTO chrg_wpr_set ;C=0 WiperValue < WIPER_MAX-prüfen 015C 3095 00257 movlw WIPER_MAX-.1 ;C=1 WiperValue => WIPER_MAX 015D 00C7 00258 movwf WiperValue 00259 ; 015E 00260 chrg_wpr_set: 015E 0847 00261 movf WiperValue,w ;adjust WiperValue MCP4151,P0W 015F 21A7 00262 CALL WiperValue_Set 00263 ; 0160 00264 charge_ctrl_end: MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 16 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00265 0160 0008 00266 RETURN 00267 ;********************************************************************* 0161 00268 Meas_Vdd 00269 ; Returns Vdd1:0, the actual supply voltage 0161 3008 00270 movlw ADC_VDD ;AN2/RA2 für +Spannung Akku 0162 22A5 00271 CALL ADC ;200us Convertierungszeit 0163 22CB 00272 CALL Mult10Bit_8 ;mutiply 8 x (ACb1:0) with RLF 0164 082E 00273 movfw ACb1 0165 00BD 00274 movwf Vdd1 ;globale Variable 0166 082F 00275 movfw ACb0 0167 00BE 00276 movwf Vdd0 ;Vakku1:0 = Vdd1:0 - Vdrain1:0 0168 0008 00277 RETURN 00278 ;----------------------------------- 0169 00279 Meas_Vdd_Out: ;send Vdd1:0 to LCD 0169 21E1 00280 CALL B2D ;convert binär to decimal 016A 2218 00281 CALL Leading_Zero ;Führende Nullen unterdrücken 016B 3004 00282 movlw LINE1+.4 ;Ausgabezeile+Digit im LCD 016C 21D7 00283 CALL Out_ADC ;Ergebnis im LCD ausgeben 016D 0008 00284 RETURN 00285 ;********************************************************************* 016E 00286 Meas_Vakku: 00287 ; Returns Vakku1:0 actual LiIon-cell voltage 00288 ; Difference of Vdd-Vdrain 016E 2161 00289 CALL Meas_Vdd 016F 2177 00290 CALL Meas_Vdrain 0170 21BE 00291 CALL Math_Vakku ;Resul ACb1:0=Vakku1:0 0171 0008 00292 RETURN 00293 ;----------------------------------- 0172 00294 Meas_Vakku_Out: 0172 21E1 00295 CALL B2D 0173 2218 00296 CALL Leading_Zero 0174 3044 00297 movlw LINE2+.4 0175 21D7 00298 CALL Out_ADC ;Ergebnis im LCD ausgeben 0176 0008 00299 RETURN 00300 ;********************************************************************* 0177 00301 Meas_Vdrain: 0177 22C4 00302 CALL Vref_4096 ;Umschalte zu Vref=4096mV 0178 3010 00303 movlw ADC_DRAIN ;AN4/RA4 0179 22A5 00304 CALL ADC 017A 22BD 00305 CALL Vref_1024 ;switch back to ADC-Vref=1024mV 00306 ; 017B 1003 00307 bcf STATUS,C ;Multiply ADC-reslut 017C 0DAF 00308 RLF ACb0,f ;ACb1:0 x 4 = mV 017D 0DAE 00309 RLF ACb1,f 017E 0DAF 00310 RLF ACb0,f 017F 0DAE 00311 RLF ACb1,f 0180 082E 00312 movf ACb1,w 0181 00BF 00313 movwf Vdrain1 ;Vdrain1:0 globale Variable 0182 082F 00314 movf ACb0,w 0183 00C0 00315 movwf Vdrain0 0184 0008 00316 RETURN 00317 ;----------------------------------- MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 17 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0185 00318 Meas_Vdrain_Out: ;send Vdd1:0 to LCD 0185 21E1 00319 CALL B2D ;convert binär to decimal 0186 2218 00320 CALL Leading_Zero ;Führende Nullen unterdrücken 0187 300E 00321 movlw LINE1+.14 0188 21D7 00322 CALL Out_ADC ;Ergebnis im LCD ausgeben 0189 0008 00323 RETURN 00324 ;********************************************************************* 018A 00325 Meas_Vshunt: 00326 ; Returns Vshunt1:0, as actual voltage(mV) over shunt resistor (1Ohm) 00327 ; Value ist also equivalent to the charging current mA) 018A 300C 00328 movlw ADC_SHUNT ;AN3/RA3 Berechnung des Ladestroms 018B 22A5 00329 CALL ADC 018C 082E 00330 movf ACb1,w 018D 00C3 00331 movwf Vshunt1 018E 082F 00332 movf ACb0,w 018F 00C4 00333 movwf Vshunt0 0190 0008 00334 RETURN 00335 ;----------------------------------- 0191 00336 Meas_Vshunt_Out: 0191 21E1 00337 CALL B2D ;convert binär to decimal 0192 2218 00338 CALL Leading_Zero ;Führende Nullen unterdrücken 0193 3018 00339 movlw LINE3+.4 0194 21D7 00340 CALL Out_ADC 0195 0008 00341 RETURN 00342 ;********************************************************************* 0196 00343 Meas_Vref: 00344 ; Returns Vshunt1:0, as actual voltage(mV) over shunt resistor (1Ohm) 00345 ; Value ist also equivalent to the charging current mA) 0196 3024 00346 movlw ADC_VREF ;AN8/RB4 0197 22A5 00347 CALL ADC 0198 0008 00348 RETURN 00349 ;----------------------------------- 0199 00350 Meas_Vref_Out: 0199 21E1 00351 CALL B2D ;convert binär to decimal 019A 2218 00352 CALL Leading_Zero ;Führende Nullen unterdrücken 019B 304E 00353 movlw LINE2+.14 019C 21D7 00354 CALL Out_ADC 019D 0008 00355 RETURN 00356 ;********************************************************************* 019E 00357 WiperValue_Out: 019E 01AE 00358 clrf ACb1 019F 0847 00359 movf WiperValue,w 01A0 00AF 00360 movwf ACb0 01A1 21E1 00361 CALL B2D 01A2 13CA 00362 bcf Flags,ERR ;Wiperausgabe Sub16 keinen Fehler erzeugen 01A3 2218 00363 CALL Leading_Zero ;Führende Nullen unterdrücken 01A4 3022 00364 movlw LINE3+.14 01A5 21D7 00365 CALL Out_ADC ;Ausgabe im LCD 01A6 0008 00366 RETURN 00367 ;********************************************************************* 01A7 00368 WiperValue_Set: 00369 ; 16-Bit Command, used to set wiper position 00370 ; Bit 15:8 Data1 Address (4bits), Command(2bits), Data (2bits) MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 18 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00371 ; Bit 7;0 Data0 = value to be written to wiper-memory, 00372 ; is handed over through WREG 00373 ; Übergabe: Wiper_Value wird vom im WREG in Data0übernommen 00374 ; 01A7 00C6 00375 movwf Data0 ;LowByte copy WREG -> wipervalue 01A8 108C 00376 bcf PORTA,SS2 ;b2=1 ENABLE Chip Select Output (LOW) 00377 ; 01A9 3000 00378 movlw WIPER0_WRITE ;b7:4="0000" wiper0 memory-address 01AA 00C5 00379 movwf Data1 ;b3:2="00" Command "Write Data" 00380 ;1:0="00" b9:8 Databits 01AB 00381 WiperValue_Send: ;SEND COMMAND BYTE 01AB 00C5 00382 movwf Data1 ;16Bit-Comand Bit 16:9 WREG -> Data1 01AC 0024 00383 BANKSEL SSP2BUF ;bank4 01AD 0099 00384 movwf SSP2BUF ;copy Data to be send from WREG->SSP2BUF 00385 ; 00386 #IFDEF __DEBUG 01AE 141C 00387 bsf SSP2STAT,BF ;BF-Flag wird im Debug-Modus nicht gesetzt 00388 #ENDIF 00389 ; 01AF 00390 wipervalue_buf1: 01AF 1C1C 00391 btfss SSP2STAT,BF ;b0=1? Data transfer complete? (Buffer Full?) 01B0 29AF 00392 GOTO wipervalue_buf1 ;NO, check again 01B1 0819 00393 movf SSP2BUF,w ;Get Data from SSP2BUF, throw it away 00394 ;------------------ 01B2 0020 00395 BANKSEL 0 01B3 0846 00396 movf Data0,w ;16Bit-Comand Bit 7:0 Data0->WREG 01B4 0024 00397 BANKSEL SSP2BUF ;bank4 01B5 0099 00398 movwf SSP2BUF ;ccopy Data to be send from WREG->SSP2BUF 00399 ; 00400 #IFDEF __DEBUG ;Für Debugging muß das BF-Flag gesetzt 01B6 141C 00401 bsf SSP2STAT,BF ;werden da der SPI-Verkehr nicht erfolgt 00402 #ENDIF 00403 ; 01B7 00404 wipervalue_buf0: 01B7 1C1C 00405 btfss SSP2STAT,BF ;b0=1? Data transfer complete? (Buffer Full?) 01B8 29B7 00406 GOTO wipervalue_buf0 ;NO, check again 01B9 0819 00407 movf SSP2BUF,w ;Get Data from SSP2BUF, throw it away 00408 01BA 0020 00409 BANKSEL 0 ;bank0 01BB 148C 00410 bsf PORTA,SS2 ;b2=1 Disable Chip Select Output (high) 01BC 219E 00411 CALL WiperValue_Out ;Actual Wipervalue (MCP4151.P0W) 00412 01BD 0008 00413 RETURN 00414 ;********************************************************************* 01BE 00415 Math_Vakku: 00416 ;16 Bit Subtraktion, bei Überlauf (neg. Ergebnis) ist C gesetzt 00417 ; ;16 bit f:=f-xw 01BE 083D 00418 movf Vdd1,w 01BF 00AE 00419 movwf ACb1 01C0 083E 00420 movf Vdd0,w 01C1 00AF 00421 movwf ACb0 01C2 083F 00422 movf Vdrain1,w 01C3 00B2 00423 movwf BCb1 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 19 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 01C4 0840 00424 movf Vdrain0,w 01C5 00B3 00425 movwf BCb0 00426 ; 01C6 2200 00427 CALL Sub16 00428 ; 01C7 082E 00429 movf ACb1,w 01C8 00C1 00430 movwf Vakku1 01C9 082F 00431 movf ACb0,w 01CA 00C2 00432 movwf Vakku0 01CB 0008 00433 RETURN 00434 ;********************************************************************* 00435 #INCLUDE <03_LCD_LiIon.INC> 00001 ;********************************************************************* 00002 ; File: 03_LCD_LiIon.INC 00003 ; Author: Ottmar 00004 ; Date: 21.05.2022 00005 ;********************************************************************* 00006 ; Subroutines in file 03_LCD_16F1827_LiPo_1S_Lader_V07.INC 00007 ; Out_All_Measurments 00008 ; Out_ADC: 00009 ; B2D: 00010 ; Sub16: 00011 ; ADD_16: 00012 ; Leading_Zero: 00013 ; LcdOut_Table_1: 00014 ; Out_ChargeStart: 00015 ; Out_ChargeEnd: 00016 ; Out_ChargeTime_Start: 00017 ; Out_ChargeTime: 00018 ;********************************************************************* 01CC 00019 Out_All_Measurments: 01CC 2161 00020 CALL Meas_Vdd ;supply voltage to LCD 01CD 2169 00021 CALL Meas_Vdd_Out ;Ausgabe Vakku im LCD 01CE 2177 00022 CALL Meas_Vdrain 01CF 2185 00023 CALL Meas_Vdrain_Out 01D0 216E 00024 CALL Meas_Vakku ;Vdd-Vdrain=Vakku 01D1 2172 00025 CALL Meas_Vakku_Out 01D2 2196 00026 CALL Meas_Vref 01D3 2199 00027 CALL Meas_Vref_Out 01D4 218A 00028 CALL Meas_Vshunt 01D5 2191 00029 CALL Meas_Vshunt_Out 00030 ; CALL WiperValue_Out ;Actual Wipervalue (MCP4151.P0W) 01D6 0008 00031 RETURN 01D7 00032 Out_ADC: 00033 ; btfss Flags,NEW_SEC 00034 ; RETURN 00035 00036 ; Übergabe im WREG: DDRAM-Adresse z.B. LIN2+.4 00037 ; Ausgabe: Umess = "0,000mV" 00038 ; movlw LINE1+d'8' ;Ausgabe in Zeile 1 ab Digit 8 01D7 2303 00039 CALL OutDDRAM_Addr ;Instruction+DDRAM-Adr -> LCD 00040 ; 01D8 0835 00041 movf BCD3,w ;Binärzahl->WREG MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 20 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 01D9 2308 00042 CALL OutLcd_Ascii ;ASCII-Char WREG->Ascii -> LCD 00043 ; 00044 ; btfss Flags,V_VDD5V ;insert ";" after BCD3 00045 ; ;Vdd mit Kommastelle ausgeben und BCD3=0 setzen 00046 ; GOTO out_adc_bcd2 00047 ; movlw "," 00048 ; CALL OutLcd_Data 00049 ; movlw .0 ;Vdd set BD0=0 00050 ; movwf BCD0 00051 ; 01DA 00052 out_adc_bcd2: 01DA 0836 00053 movf BCD2,w 01DB 2308 00054 CALL OutLcd_Ascii 01DC 0837 00055 movf BCD1,w 01DD 2308 00056 CALL OutLcd_Ascii 01DE 0838 00057 movf BCD0,w 01DF 2308 00058 CALL OutLcd_Ascii 01E0 0008 00059 RETURN 00060 ;********************************************************************* 01E1 00061 B2D: 00062 ;16Bit Binär zu Dezimal max 4 Stellen 00063 ;Die Binärzahl (< 10000) steht in ACb1,ACb0 00064 ;Ergebnis: BCD3, BCD2, s10er, BCD0 00065 ; 01E1 01B5 00066 clrf BCD3 ;Dezimal Tausender 01E2 01B6 00067 clrf BCD2 ; Hunderter 01E3 01B7 00068 clrf BCD1 ; Zehner 01E4 01B8 00069 clrf BCD0 ; Einer 00070 ; 01E5 3003 00071 movlw 0x03 ;Test auf Tausender 1000d = 0x03E8 01E6 00B2 00072 movwf BCb1 01E7 30E8 00073 movlw 0xE8 01E8 00B3 00074 movwf BCb0 01E9 21F8 00075 CALL B2Da ;Subtrahieren Übertrag addieren 01EA 00B5 00076 movwf BCD3 00077 ; 01EB 01B2 00078 clrf BCb1 ;Test auf hunderter 100d = 0x0064 01EC 3064 00079 movlw 0x64 01ED 00B3 00080 movwf BCb0 01EE 21F8 00081 call B2Da 01EF 00B6 00082 movwf BCD2 00083 ; 01F0 01B2 00084 clrf BCb1 ;Test auf Zehner 10d = 0x000A 01F1 300A 00085 movlw 0x0A 01F2 00B3 00086 movwf BCb0 01F3 21F8 00087 call B2Da 01F4 00B7 00088 movwf BCD1 01F5 082F 00089 movfw ACb0 01F6 00B8 00090 movwf BCD0 ;Rest = Einer 01F7 0008 00091 RETURN 00092 ;********************************************************************* 01F8 00093 B2Da: 01F8 01BB 00094 clrf cntB2D MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 21 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 01F9 00095 B2Sb: 01F9 0ABB 00096 incf cntB2D, f ;wie oft abgezogen? 01FA 2200 00097 CALL Sub16 ;f:=f-xw 01FB 1C03 00098 btfss STATUS, C ;zu oft abgezogen? 01FC 29F9 00099 goto B2Sb ;nein: noch einmal 01FD 2211 00100 CALL ADD_16 ;f:=f+xw 01FE 033B 00101 decf cntB2D, w ;weil immer 1 zuviel gezählt wird 01FF 0008 00102 RETURN 00103 ;********************************************************************* 00104 ;16 Bit Subtraktion, bei Überlauf (neg. Ergebnis) ist C gesetzt 0200 00105 Sub16: ;16 bit f:=f-xw 0200 13CA 00106 bcf Flags,ERR ;Flags,0 löschen 0201 0833 00107 movf BCb0,w ;ACb0:=ACb0-BCb0 0202 02AF 00108 SUBWF ACb0, f 0203 1803 00109 btfsc STATUS,C 0204 2A09 00110 GOTO Sub16a 0205 3001 00111 movlw 0x01 ;borgen von ACb1 0206 02AE 00112 SUBWF ACb1,f 0207 1C03 00113 btfss STATUS,C 0208 17CA 00114 bsf Flags,ERR ;Flags,0=1 Unterlauf 0209 00115 Sub16a: 0209 0832 00116 movf BCb1,w ;ACb1:=ACb1-BCb1 020A 02AE 00117 SUBWF ACb1,f 020B 1C03 00118 btfss STATUS,C 020C 17CA 00119 bsf Flags,ERR ;Flags,0=1 Unterlauf 020D 1003 00120 bcf STATUS,C ;C-Flag invertieren 020E 1BCA 00121 btfsc Flags,ERR ;Flags,0=1? Fehler aufgetreten? 020F 1403 00122 bsf STATUS,C ;JA 0210 0008 00123 RETURN ;Nein, fertig 00124 ;********************************************************************* 0211 00125 ADD_16: 00126 ; 16 Bit adition, 00127 ; Acb1:0 = ACb1:0:BCb1:0, C-Flag is set by overflow 0211 0833 00128 movf BCb0,w ;xWert_0 nach W 0212 07AF 00129 addwf ACb0,f ;Bin_Low := Bin_Low + xWert_0 00130 0213 0832 00131 movf BCb1,w ;xWert_1 nach W 0214 1803 00132 btfsc STATUS,C ;falls ein Überlauf auftrat: 0215 0F32 00133 incfsz BCb1,w ;xWert_1+1 nach W 0216 07AE 00134 addwf ACb1,f ;Bin_High := Bin_High + xWert_1 0217 0008 00135 RETURN 00136 ;********************************************************************* 0218 00137 Leading_Zero: 00149 LIST 00150 ; 0218 3003 00151 movlw d'3' ;0-3=4stellig Digit 0 darf nicht 0219 00B9 00152 movwf cntDig ;mit Leerstelle beschrieben werden. 00153 ; 021A 3035 00154 movlw LOW BCD3 ;Pointer auf MSB Register-Adresse, page 0 021B 00155 Leading_Zero1 021B 00AB 00156 movwf pntr0 ;Aktuelle Adresse zwischenspeichern 021C 0084 00157 movwf FSR0 ;Adresse der Variablen ins FSR0 021D 0800 00158 movf INDF0,w ;Variablenwert ins WREG MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 22 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 021E 1103 00159 bcf STATUS,Z 021F 3A00 00160 xorlw d'0' ;Vergleich WREG = 0? 0220 1D03 00161 btfss STATUS,Z ;z=1? Variable = 0? 0221 2A29 00162 GOTO Leading_Zero0 ;Nein 0222 082B 00163 movf pntr0,w ;aktuelle Adresse des Registers 0223 0084 00164 movwf FSR0 ;ins FSR schreiben 0224 30F0 00165 movlw d'240' ;Ja, in Leerzeichen konvertieren 0225 0080 00166 movwf INDF0 ;und in Variable zurückschreiben 0226 0A2B 00167 incf pntr0,w ;Pointer auf Register 0227 0BB9 00168 decfsz cntDig,f ;Bit 0 erreicht? 0228 2A1B 00169 GOTO Leading_Zero1 0229 00170 Leading_Zero0 0229 0008 00171 RETURN 00172 ;********************************************************************* 022A 00173 LcdOut_Table_1: ;PAGEGRENZEN ÜBERSCHREITENDE LUT 00193 LIST 022A 00A9 00194 movwf tmpLines ;auszugebende Zeilenzahl 022B 0AA9 00195 incf tmpLines,f ;wegen nachfolgendem "decfsz" (tmpLines-1) 00196 ; 00197 ;--Prüfen: pntr0=0? Dann muss auch pntr1 decremetniert werden! 022C 0103 00198 clrw ;WREG auf 0 setzen 022D 062B 00199 xorwf pntr0,w ;Vergleich pntr0 = 0 durchführen 022E 1903 00200 btfsc STATUS,Z ;Z=1, pntr0=0? 022F 03AA 00201 decf pntr1,f ;JA, H-Pointer -1 0230 03AB 00202 decf pntr0,f ;L-Pointer-1 wegen incf in LcdOut_GetChar 00203 ; 0231 00204 lcdout_nextline: ;übertragt DDRAM-Startadresse an das LCD 0231 0BA9 00205 decfsz tmpLines,f ;Z=1, gesamter Text ausgegeben? 0232 2A34 00206 GOTO $+2 ;NEIN, PCL+2 weiter mit "CALL LcdOut_Char" 0233 2A45 00207 GOTO lcdout_tableend ;JA, Ausgabe beenden 0234 223D 00208 CALL LcdOut_Char ;NEIN, DDRAM-ADr des 1. auszugebendes Digtits 0235 2303 00209 CALL OutDDRAM_Addr ;Adressbefehl im WREG an LCD übergeben 00210 ; 0236 00211 lcdout_nextchar: ;Gibt Ascii-Zeichen in Zeile,Digit aus 0236 223D 00212 CALL LcdOut_Char ;Value aus Tabelle befindet sich im WREG 00213 ; 00214 ; Infolge des Überlaufs bei der Addition im WREG 80h+80h=255->0 bei 00215 ; Erreichen des Zeilenendes, setzt das Carryflag C=1. Dies ist bei 00216 ; den Ascii codes 0-127 nicht der Fall. 0237 3E80 00217 addlw 0x80 ;WREG + 128 0238 1803 00218 btfsc STATUS,C ;bit7=1, Zeilenende erreicht? 0239 2A31 00219 GOTO lcdout_nextline ;JA, neue Zeile,Digit lesen 00220 ; 00221 ; DAs Zeilenende ist nicht erreicht und der ursprüngliche Wert im 00222 ; WREG muss wieder hergestellt werden. Dazu wird zum WREG 7fh (.127) 00223 ; addiert. Z.B. Ascii .72 "H": .72+.128(80h)=.200 00224 ; 200+127(7Fh) = 327 = 255 -> .72=Ascii"H" 023A 397F 00225 andlw 0x7F ;Nein +127 Zeichen wieder herstellen 023B 2309 00226 CALL OutLcd_Data ;Zeichen ausgeben 023C 2A36 00227 GOTO lcdout_nextchar 00228 ; 023D 00229 LcdOut_Char: 00230 ; Der Wert des Pointers "pntr0" wird in den Programmzähler "PCL" MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 23 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00231 ; übertragen. Hierdurch springt das Programm auf die Adresse(PCL) 00232 ; liest dort 1 Byte ins WREG und führt danach den auf "movwf PCL" 00233 ; folgenden Befehl (RETURN) 00234 ; 023D 1103 00235 bcf STATUS,Z 023E 0AAB 00236 incf pntr0,f ;Low-Pointer + 1 023F 1903 00237 btfsc STATUS,Z ;Pagewechsel, Überlauf 255 -> 0 eingetreten? 0240 0AAA 00238 incf pntr1,f ;JA High-Pointer +1 0241 082A 00239 movf pntr1,w ;H-Pointer über WREG 0242 008A 00240 movwf PCLATH ;in PCLATH kopieren 0243 082B 00241 movf pntr0,w ;Low-Pointer ins WREG und in PCL kopieren 0244 0082 00242 movwf PCL ;springt dann nächsten Adresser in der Tabelle 0245 00243 lcdout_tableend: ; Rückgabe "Char" im WREG 0245 0008 00244 RETURN 00245 ;********************************************************************* 0246 00246 Out_ChargeTime_Start: 0246 3054 00247 movlw LINE4+.0 0247 2303 00248 CALL OutDDRAM_Addr ;LCD-Ausgabe Startzeile+Digit 0248 3000 00249 movlw .0 ;schreibt Leerzeichen in Zeile 4, 0249 00A8 00250 movwf d6 ;entfernt 'Push [START]' 024A 00251 lcd_clear_line4: 024A 3020 00252 movlw " " ;Leerzeichen 024B 2309 00253 CALL OutLcd_Data ;schreibt in LCD in LINE4,Digit(d6) 024C 0AA8 00254 incf d6,f 024D 3014 00255 movlw LCD_DIGITS ;LCD4x20 Digits 0-19 024E 0228 00256 subwf d6,w 024F 1D03 00257 btfss STATUS,Z 0250 2A4A 00258 GOTO lcd_clear_line4 00259 ; 00260 ; clear all clock-digits, display "START 00:00:00" 0251 3054 00261 movlw LINE4+.0 0252 2303 00262 CALL OutDDRAM_Addr ;LCD-Ausgabe Startzeile+Digit 0253 3053 00263 movlw "S" 0254 2309 00264 CALL OutLcd_Data 0255 3054 00265 movlw "T" 0256 2309 00266 CALL OutLcd_Data 0257 3041 00267 movlw "A" 0258 2309 00268 CALL OutLcd_Data 0259 3052 00269 movlw "R" 025A 2309 00270 CALL OutLcd_Data 025B 3054 00271 movlw "T" 025C 2309 00272 CALL OutLcd_Data 00273 ; 025D 01D1 00274 clrf Zstd ;clear all clock-digits 025E 01D0 00275 clrf Estd 025F 01D3 00276 clrf Zmin 0260 01D2 00277 clrf Emin 0261 01D5 00278 clrf Zsec 0262 01D4 00279 clrf Esec 00280 ; 0263 00281 Out_ChargeTime: 0263 305C 00282 movlw LINE4+.8 0264 2303 00283 CALL OutDDRAM_Addr ;display clock-digits "hh:mm:ss" MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 24 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0265 0851 00284 movf Zstd,w 0266 2308 00285 CALL OutLcd_Ascii 0267 0850 00286 movf Estd,w 0268 2308 00287 CALL OutLcd_Ascii 0269 303A 00288 movlw ":" 026A 2309 00289 CALL OutLcd_Data 00290 ; 026B 0853 00291 movf Zmin,w 026C 2308 00292 CALL OutLcd_Ascii 026D 0852 00293 movf Emin,w 026E 2308 00294 CALL OutLcd_Ascii 026F 303A 00295 movlw ":" 0270 2309 00296 CALL OutLcd_Data 00297 ; 0271 0855 00298 movf Zsec,w 0272 2308 00299 CALL OutLcd_Ascii 0273 0854 00300 movf Esec,w 0274 2308 00301 CALL OutLcd_Ascii 0275 0008 00302 RETURN 00303 ;********************************************************************* 0276 00304 Out_Lcd_NoBatt: 0276 3054 00305 movlw LINE4+.0 0277 2303 00306 CALL OutDDRAM_Addr ;LCD-Ausgabe Startzeile+Digit 0278 3000 00307 movlw .0 ;schreibt Leerzeichen in Zeile 4, 0279 00A8 00308 movwf d6 ;entfernt 'Push [START]' 027A 00309 out_lcd_nobatt_line4: 027A 3020 00310 movlw " " ;Leerzeichen 027B 2309 00311 CALL OutLcd_Data ;schreibt in LCD in LINE4,Digit(d6) 027C 0AA8 00312 incf d6,f 027D 3014 00313 movlw LCD_DIGITS ;LCD4x20 Digits 0-19 027E 0228 00314 subwf d6,w 027F 1D03 00315 btfss STATUS,Z 0280 2A7A 00316 GOTO out_lcd_nobatt_line4 00317 ; 0281 3080 00318 movlw HIGH tbl_no_batt 0282 00AA 00319 movwf pntr1 0283 30EE 00320 movlw LOW tbl_no_batt 0284 00AB 00321 movwf pntr0 0285 3001 00322 movlw .1 ;Zeilen 1-4 im LCD ausgeben 0286 222A 00323 CALL LcdOut_Table_1 0287 0008 00324 RETURN 00325 ;********************************************************************* 0288 00326 Out_ChargeEnd: 0288 3054 00327 movlw LINE4+.0 0289 2303 00328 CALL OutDDRAM_Addr ;LCD-Ausgabe Startzeile+Digit 028A 3045 00329 movlw "E" 028B 2309 00330 CALL OutLcd_Data 028C 304E 00331 movlw "N" 028D 2309 00332 CALL OutLcd_Data 028E 3044 00333 movlw "D" 028F 2309 00334 CALL OutLcd_Data 0290 3045 00335 movlw "E" 0291 2309 00336 CALL OutLcd_Data MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 25 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0292 3021 00337 movlw "!" 0293 2309 00338 CALL OutLcd_Data 00339 ; 0294 3005 00340 movlw .5 0295 239D 00341 CALL Delay100ms 00342 ; 0296 3054 00343 movlw LINE4+.0 0297 2303 00344 CALL OutDDRAM_Addr ;LCD-Ausgabe Startzeile+Digit 0298 3020 00345 movlw " " 0299 2309 00346 CALL OutLcd_Data 029A 3020 00347 movlw " " 029B 2309 00348 CALL OutLcd_Data 029C 3020 00349 movlw " " 029D 2309 00350 CALL OutLcd_Data 029E 3020 00351 movlw " " 029F 2309 00352 CALL OutLcd_Data 02A0 3020 00353 movlw " " 02A1 2309 00354 CALL OutLcd_Data 00355 ; 02A2 3005 00356 movlw .5 02A3 239D 00357 CALL Delay100ms 02A4 0008 00358 RETURN 00359 ;********************************************************************* 00436 #INCLUDE <04_ADC_LiIon.INC> 00001 ;********************************************************************* 00002 ; File: 04_ADC_LiIon.INC 00003 ; Author: Ottmar 00004 ; Date: 21.05.2022 00005 ;********************************************************************* 00006 ;********************************************************************* 00007 ; Subroutines in file 04_ADC_16F1827_LiPo_1S_Lader_V07.INC 00008 ; ADC: 00009 ; Vref_1024: 00010 ; Vref_4096: 00011 ; Mult10Bit_8: 00012 ; Mult10Bit_10: 00013 ; ; ADD_16_Test: 00014 ;********************************************************************* 02A5 00015 ADC: 00016 #IFDEF __DEBUG 02A5 2ABC 00017 GOTO adc_end 00018 #ENDIF 00019 ; btfss Flags,NEW_SEC ;b7=1 neue Sekunde? 00020 ; RETURN 00021 ; bcf Flags,NEW_SEC ;YES b7=0 00022 ; incf cntTest,f 00023 ; 00024 ; movf TMR0,w 00025 ; sublw .40 ;240-TMR0 00026 ; btfss STATUS,C ;C=1? Result >=0? TMR0 <= 240? 00027 ; RETURN ;NO 00028 ;NO 00029 ; MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 26 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00030 ; Der AD-Kanal wird im WREG übergeben. 00031 ; ADC_VDD EQU b'00001000' ;RA2(01) AN2 Vdd 00032 ; ADC_SHUNT EQU b'00001100' ;RA3(02) AN3 MCP4151,P0W 00033 ; ADC_DRAIN EQU b'00010000' ;RA4(03) AN4 MCP4151.P0A 00034 ; ADC_P0W EQU b'00100000' ;RB4(10) AN8 0 01000 00 00035 ; Das Ergebnis steht in den Variablen ADRESH:L und in ACb1:0 00036 ; 02A6 0021 00037 BANKSEL ADCON0 ;bank1 02A7 009D 00038 movwf ADCON0 ;Set analog channel RB4/AN8 S.145 02A8 141D 00039 bsf ADCON0,ADON ;Bit0 ADC enabled 00040 ; 02A9 0020 00041 BANKSEL 0 02AA 3020 00042 movlw .32 ;99us adc-aquisitions-time 02AB 00D6 00043 movwf tmpVar 02AC 0BD6 00044 decfsz tmpVar,f 00045 ; 00046 #IFDEF __DEBUG ;jump over with test value in ADRESH:L 00047 ; movlw 0x03 ;0x3FD=1021 00048 ; movwf ACb1 00049 ; movlw 0xFD 00050 ; movwf ACb0 02AD 2ABC 00051 GOTO adc_end 00052 #ENDIF 00053 ; 02AE 0021 00054 BANKSEL ADCON0 02AF 149D 00055 bsf ADCON0,GO ;Bit1=1 ADC starten 02B0 00056 adc_loop: 02B0 189D 00057 btfsc ADCON0,ADGO ;Bit1=0? ist der ADC fertig? 02B1 2AB0 00058 GOTO adc_loop ;nein, weiter warten 00059 ; 02B2 101D 00060 bcf ADCON0,ADON ;ADC disabled 02B3 081C 00061 movf ADRESH,w ;obere 2 Bit auslesen 02B4 0020 00062 BANKSEL 0 ;Bank0 02B5 00AE 00063 movwf ACb1 ;obere 2-Bit in Arbeitsvariable 02B6 00B2 00064 movwf BCb1 00065 ; 02B7 0021 00066 BANKSEL ADCON0 ;Bank1 02B8 081B 00067 movf ADRESL,w ;untere 8 Bit auslesen 02B9 0020 00068 BANKSEL 0 ;Bank0 02BA 00AF 00069 movwf ACb0 ;untere 8-Bit in Arbeitsvariable 02BB 00B3 00070 movwf BCb0 02BC 00071 adc_end: 02BC 0008 00072 RETURN 00073 ;********************************************************************* 02BD 00074 Vref_1024: 02BD 0022 00075 BANKSEL FVRCON ;S.135 02BE 0197 00076 clrf FVRCON 02BF 1797 00077 bsf FVRCON,FVREN ;b7= 1 FVR enabled 02C0 1097 00078 bcf FVRCON,ADFVR1 ;Bit1:0=01 Vref+ intern 1,024V 02C1 1417 00079 bsf FVRCON,ADFVR0 02C2 0020 00080 BANKSEL 0 02C3 0008 00081 RETURN 00082 ;********************************************************************* MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 27 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 02C4 00083 Vref_4096: 02C4 0022 00084 BANKSEL FVRCON ;S.135 02C5 0197 00085 clrf FVRCON 02C6 1797 00086 bsf FVRCON,FVREN ;b7= 1 FVR enabled 02C7 1497 00087 bsf FVRCON,ADFVR1 ;Bit1:0=11 Vref+ intern=4096mV 02C8 1417 00088 bsf FVRCON,ADFVR0 02C9 0020 00089 BANKSEL 0 02CA 0008 00090 RETURN 00091 ;********************************************************************* 02CB 00092 Mult10Bit_8: ;14 cycles incl. call 00093 ;Multipikation x 8 durch 3xLinks-Schieben 00094 ;Übergabe: ACb1:0, Rückgabe Produkt in ACb1:0, 00095 ;Der Übergabewert muß gleich/kleiner als 8192 = 0x2000 sein! Sonst 00096 ;erfolgt ein Überlauf, C=1, Flags,ERR=1! 00097 ; movlw 0x20 ;0x222E=8750 Überlauf! 00098 ; movwf ACb1 00099 ; movlw 0x00 ;0x2000=8192 OK 2^16=65536 00100 ; movwf ACb0 02CB 1003 00101 bcf STATUS,C 02CC 0DAF 00102 RLF ACb0,f 02CD 0DAE 00103 RLF ACb1,f 02CE 0DAF 00104 RLF ACb0,f 02CF 0DAE 00105 RLF ACb1,f 02D0 0DAF 00106 RLF ACb0,f 02D1 0DAE 00107 RLF ACb1,f 02D2 1803 00108 btfsc STATUS,C ;C=1? Overflow? 02D3 17CA 00109 bsf Flags,ERR ;JA, Fehler aufgetreten! Flag b7=1 setzen 02D4 0008 00110 RETURN 00111 ;********************************************************************* 00112 ;Mult10Bit_10: 00113 ; movlw 0x01 ;0x0151 = .337 00114 ; movwf ACb1 00115 ; movwf BCb1 00116 ; movlw 0x51 00117 ; movwf ACb0 00118 ; movwf BCb0 00119 ; CALL Mult10Bit_10 00120 ; CALL ADD_16_Test ;8xACb1:0 + BCb1:0 00121 ; CALL ADD_16_Test ;8xACb1:0 + BCb1:0 00122 ; RETURN 00123 ;********************************************************************* 00124 ;ADD_16_Test: 00125 ;; 16 Bit adition, 00126 ;; f = f + xw, C-Flag is set by overflow 00127 ;; movlw 0x02 ;0x0271 = .625 00128 ;; movwf ACb1 00129 ;; movlw 0x71 00130 ;; movwf ACb0 00131 ; 00132 ; movf BCb0,w ;xWert_0 nach W 00133 ; addwf ACb0,f ;Bin_Low := Bin_Low + xWert_0 00134 ; 00135 ; movf BCb1,w ;xWert_1 nach W MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 28 00_HEADER_LiIon.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00136 ; btfsc STATUS,C ;falls ein Überlauf auftrat: 00137 ; incfsz BCb1,w ;xWert_1+1 nach W 00138 ; addwf ACb1,f ;Bin_High := Bin_High + xWert_1 00139 ; RETURN 00437 #INCLUDE 00001 TITLE "HD44780_2Wire.INC" 00318 LIST 00319 #IFNDEF FOSC_MULT 00320 FOSC_MULT EQU d'5' ;FOSC_FAKTOR adapts delay to fosc>4MHz: 00321 #ENDIF 00322 ; 00323 ;--LCD-Initialization starts here 02D5 00324 Lcd_Init: 02D5 0020 00325 BANKSEL 0 02D6 30FF 00326 movlw d'255' ;255 ms Pause nach dem Einschalten 02D7 2365 00327 CALL Delay1ms ;gives time for Vdd to rise up to >4.5V 00328 ; 02D8 0022 00329 BANKSEL LCD_LAT ; alternate to bank with LATB (bank 2) 02D9 3030 00330 movlw b'00110000' ;1. Function set 02DA 008D 00331 movwf LCD_LAT ; (Interface is 8 bits long.) 02DB 0020 00332 BANKSEL 0 ; alternate to bank with PORTB (bank 0) 02DC 22F2 00333 CALL Control8Bit 02DD 3032 00334 movlw d'50'*FOSC_MULT ; 50 ms Pause 02DE 2365 00335 CALL Delay1ms 00336 ; 02DF 3030 00337 movlw b'00110000' ;2. Function set 02E0 22F2 00338 CALL Control8Bit ; (Interface is 8 bits long.) 00339 ; 02E1 3030 00340 movlw b'00110000' ;3. Function set 02E2 22F2 00341 CALL Control8Bit ; (Interface is 8 bits long.) 00342 ; 02E3 3020 00343 movlw b'00100000' ;4. Function set 02E4 22F2 00344 CALL Control8Bit ; INTERFACE IS NOW 4 BITS LONG. 00345 ; 02E5 3028 00346 movlw b'00101000' ;5. Function set 2 AND MORE LINES 5x8 Dot 00347 ; movlw b'00100000' ; Function set 1 SINGLE LINE 5x8 Dot 02E6 2304 00348 CALL OutLcd_Ctrl ; send function to LCD 00349 ; 02E7 3008 00350 movlw b'00001000' ;6. display off 02E8 2304 00351 CALL OutLcd_Ctrl 00352 ; 02E9 3006 00353 movlw b'00000110' ;7. entry mode, increment 02EA 2304 00354 CALL OutLcd_Ctrl ; disable display-shift 00355 ; 02EB 3003 00356 movlw b'00000011' ;8. cursor home, cursor home 02EC 2304 00357 CALL OutLcd_Ctrl 00358 ; 02ED 300C 00359 movlw b'00001100' ;9. Set Display ON, Cursor OFF Blink OFF 02EE 2304 00360 CALL OutLcd_Ctrl ; b3 b2 b1 b0 00361 ; 02EF 3001 00362 movlw b'00000001' ; Display löschen und cusor home 02F0 2304 00363 CALL OutLcd_Ctrl 02F1 0008 00364 RETURN MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 29 HD44780_2Wire.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00365 ;********************************************************************* 02F2 00366 Control8Bit: 00367 ; Aufruf erfolgt nur zu Beginn der LCD-Initialisierung, solange das 00368 ; 8Bit-Interface noch nicht auf 4Bit umgestellt ist. 00369 ; LCD_RS=0 bewirkt das Setzen von RS = 0 und damit die Übernahme 00370 ; in das LCD-INSTRUKTIONS-Register. 00371 ; NIBBLE=1 bewirkt die Ausgabe des oberen/unteren Nibble. 00372 ; 00373 ; Uebergabe im WREG: b'00110000' 02F2 13A2 00374 bcf LCD_RS ;LcdFlags,7=0? RS=0 Instruktion 02F3 1322 00375 bcf NIBBLE ;LcdFlags,6=0 nur Oberes Nibble ausgeben 02F4 230D 00376 CALL OutLcd ;Nibble ausgeben 02F5 0008 00377 RETURN 00378 ;********************************************************************* 02F6 00379 Clear_ShiftReg: 00380 ; Vor jeder Ausgabe eines Nibble in das Schieberegister, müssen dessen 00381 ; Ausgänge Q5:Q0 auf Low-Pegel gesetzt werden, um das Togglen von 00382 ; LCD-Enable mittels der DATA-Leitung durchführen zu können. Dies 00383 ; geschieht indem die Leitung DAT auf Low gesetzt wird und der L-Pegel 00384 ; 6 x durchgeschoben wird, so dass an Q5:0 = '000000" anliegt. 00385 ; 02F6 3006 00386 movlw .6 ;Presetwert Bit-Zähler (6 Ausgänge Q5:Q0) 02F7 00A1 00387 movwf LcdBit ;in Zählvariable kopieren 02F8 138D 00388 bcf LCD_DATA ;b0 = 0 setzen (LATA in Bank2) 02F9 00389 clearshiftr1: 02F9 170D 00390 bsf LCD_CLK ;LCD_PORT,b1 H->L RS -> ShiftReg 02FA 0000 00391 nop 02FB 130D 00392 bcf LCD_CLK ; übernimmt LCD_DATA ins Schieberegister 02FC 0020 00393 BANKSEL 0 02FD 0BA1 00394 decfsz LcdBit,f ;6 x Low-Pegel ins ShiftRegister geschoben? 02FE 2AF9 00395 GOTO clearshiftr1 ;Nein, nochmals dasselbe 02FF 0008 00396 RETURN 00397 ;********************************************************************* 00398 ; SUBROUTINES ZUM AUFRUF AUS ASM-FILES 00399 ;********************************************************************* 0300 00400 OutCGRAM_Addr: 00401 ; WREG: Übergabe der CGRAM-Adresse in welche das benutzerdefinierte 00402 ; Zeichen geladen werden soll 0300 393F 00403 andlw b'00111111' ;ausmaskieren von b7:6 0301 3840 00404 iorlw SET_CGRAM_ADDR ;mit Funktion "SET CGRAM" verknüpfen 0302 2B04 00405 GOTO OutLcd_Ctrl 00406 ; 0303 00407 OutDDRAM_Addr: 00408 ; WREG: Übergabe der LCD-DDRAM-Adresse in welcher das Zeichen 00409 ;ausgegeben werden soll (z.B. movlw LINEx+Digit movlw LINE2+.5) 0303 3880 00410 iorlw SET_DDRAM_ADDR ;Adresse mit Funktionsbefehl verknüpfen 00411 ; 0304 00412 OutLcd_Ctrl: 00413 ; LCD_RS =0 bewirkt die Übernahme in das LCD-INSTRUCTIONS-Register 00414 ; NIBBLE =1/0 bewirkt die Ausgabe des oberen/unteren Nibble. 00415 ; 0304 13A2 00416 bcf LCD_RS ;LcdFlags,7=0 RS=0 Instruction 0305 1722 00417 bsf NIBBLE ;LcdFlags,6=1/0 Oberes, Unteres Nibble MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 30 HD44780_2Wire.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0306 230D 00418 CALL OutLcd ;Oberes+unteres Nibble ausgeben 0307 0008 00419 RETURN 00420 ;********************************************************************* 0308 00421 OutLcd_Ascii: ;addiert zum WREG .48 -> Asciicode 0308 3E30 00422 addlw .48 ;0-9..a-z..A-Z 00423 ; 0309 00424 OutLcd_Data: 00425 ; Aufruf: movlw "X" X-> beliebiges ASCII-Zeichen 00426 ; CALL OutLcdData 00427 ; LCD_RS=1 Datenbefehl folgt - Übernahme in das LCD-DATEN-Register. 00428 ; NIBBLE=1 Ausgabe des oberen/unteren Nibble in das Schieberegister 0309 17A2 00429 bsf LCD_RS ;LcdFlags,7=1 RS=1 Datenausgabe 030A 1722 00430 bsf NIBBLE ;LcdFlags,6=1 Oberes, Unteres Nibble 030B 230D 00431 CALL OutLcd ;Oberes+unteres Nibble ausgeben 030C 0008 00432 RETURN 00433 ;********************************************************************* 030D 00434 OutLcd: 00435 ; Ist das 8Bit-Interface noch aktiv, wird nur das obere Nibble in das 00436 ; Instruktionsregister übernommen (NIBBLE=0, LCD_RS=0). 00437 ; Ist das 4Bit-Interface aktiviert, werden das Obere UND das Untere 00438 ; Nibble in das Shiftregister übertragen (NIBBLE=1). 00439 ; 00440 ;--OBERES bzw. UNTERES NIBBLE übertragen 030D 00A0 00441 movwf LcdData ;zu übertragendes Byte vom WREG in die 00442 ; ;Arbeitsvariable kopieren 030E 00443 outlcd_1: 030E 22F6 00444 CALL Clear_ShiftReg ;Setzt Q5:Q0 auf Low-Pegel (42cycles) 00445 ;--1. ENABLE-Bit 030F 178D 00446 bsf LCD_DATA ;LCD_PORT,0 Enable=H (->Q5) 0310 170D 00447 bsf LCD_CLK ;LCD_PORT,1 H->L übernimmt DATA ins ShiftReg 00448 ; 0311 130D 00449 bcf LCD_CLK 00450 ;--2. RS-Bit DATENREGISTER 0312 1BA2 00451 btfsc LCD_RS ;LcdFlags,7=1? RS=1? Datenausgabe? 0313 178D 00452 bsf LCD_DATA ;JA, RS=1 (->Q4) 0314 1FA2 00453 btfss LCD_RS ;LcdFlags,7=0? RS=0? Instruktion ausgeben? 0315 138D 00454 bcf LCD_DATA ;JA, RS=0 (->Q4) 0316 170D 00455 bsf LCD_CLK 0317 130D 00456 bcf LCD_CLK ;CLOCK H->L Übernahme DATA ins ShiftReg 00457 ;--3. 4 Bit (Nibble) LCD-Code 0318 3004 00458 movlw .4 ;Wert für 4 Bits/Nibble 0319 00A1 00459 movwf LcdBit ;in Zähler kopieren 031A 00460 outlcd_2: 031A 1FA0 00461 btfss LcdData,7 ;Bit 7 = Low?-wird ja nicht verwendet 031B 138D 00462 bcf LCD_DATA ;JA, LCD_PORT,0 auf Low-Pegel setzen 031C 1BA0 00463 btfsc LcdData,7 ;Bit 7 =High? 031D 178D 00464 bsf LCD_DATA ;JA, LCD_PORT,0 auf High-Pegel setzen 031E 170D 00465 bsf LCD_CLK ;mit LCD_PORT,1 H->L Pegel an DATA in das 031F 130D 00466 bcf LCD_CLK ; Schieberegister übernehmen 0320 0DA0 00467 rlf LcdData,f ;LCD-Code Bit 6 ist jetzt Bit 7 0321 0BA1 00468 decfsz LcdBit,f ;Bitzähler - 1 = 0? 0322 2B1A 00469 GOTO outlcd_2 ;NEIN, nächstes Bit ins Schieberegister 00470 ; MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 31 HD44780_2Wire.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00471 ;--4. Nibble ins LCD übernehmen 0323 178D 00472 bsf LCD_DATA ;DATA-Leitung H toggeln dabei wird 0324 0000 00473 nop ;das Nibble mit der HL-Fanke ins LCD 0325 0000 00474 nop ;übernommen 0326 138D 00475 bcf LCD_DATA 0327 3003 00476 movlw .3 0328 2365 00477 CALL Delay1ms 00478 ;CALL Delay ;Verarbeitungszeit im LCD vor Übertragung 00479 ;des nächsten Nibble abwarten (1541 cycles) 0329 1F22 00480 btfss NIBBLE ;LcdFlags,6=0? Beide Nibble ausgegeben? 032A 2B2D 00481 GOTO outlcd_0 ;JA, Fertig! 032B 1322 00482 bcf NIBBLE ;NEIN, oberes Nibble ist ausgegeben 032C 2B0E 00483 GOTO outlcd_1 ;jetzt noch unteres Nibble ausgeben 032D 00484 outlcd_0: 032D 0008 00485 RETURN 00486 ;********************************************************************* 032E 00487 Lcd_Clear: 032E 3001 00488 movlw b'00000001' ;Display Clear 032F 2304 00489 CALL OutLcd_Ctrl 0330 0008 00490 RETURN 00491 ;********************************************************************* 0331 00492 Lcd_Ready: 00493 ;after calling "LcdReady" you need to add a delay resp.: 00494 ; movlw d'20'*FOSC_MULT 00495 ; CALL Delay100ms ;displaya text during 20x100ms 00496 ; 0331 3000 00497 movlw LINE1 ;Ausgabe in Zeile 1, Digit 0 0332 2303 00498 CALL OutDDRAM_Addr ;send instruction to LCD 0333 304C 00499 movlw "L" ;Digit 0, copy character as ansii-code 0334 2309 00500 CALL OutLcd_Data ;to WREG send charactercode to LCD 0335 3043 00501 movlw "C" 0336 2309 00502 CALL OutLcd_Data 0337 3044 00503 movlw "D" 0338 2309 00504 CALL OutLcd_Data 0339 3020 00505 movlw " " 033A 2309 00506 CALL OutLcd_Data 033B 3032 00507 movlw "2" 033C 2309 00508 CALL OutLcd_Data 033D 3057 00509 movlw "W" 033E 2309 00510 CALL OutLcd_Data 033F 3069 00511 movlw "i" 0340 2309 00512 CALL OutLcd_Data 0341 3072 00513 movlw "r" ;Digit 7 0342 2309 00514 CALL OutLcd_Data 00515 ; 00516 ;--Bedingte Kompilierung: 00517 ; Bei LCD 2x8 (LCD_TYPE=1) wird der Testtext 2zeilig zu je 8 Zeichen 00518 ; ausgegeben. Bei allen anderen LCDs (LCD_TYPE > 1) erfolgt die Ausgabe 00519 ; 1zeilig 00520 #IFNDEF LCD_TYPE ;falls nicht definert, Ausgabeformat 00521 LCD_TYPE EQU .1 ;für LCD 2x8 verwenden 00522 LCD_LINES EQU .2 00523 LCD_DIGITS EQU .8 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 32 HD44780_2Wire.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 00524 #ENDIF 00525 ; 00526 IF LCD_DIGITS == 8 ;LCD 2zeilig, zu je 8 Digits (2x8)? 00527 movlw LINE2 ;JA, Ausgabe in DDRAM-Adresse Zeile 2 00528 CALL OutDDRAM_Addr ;Send instruction to LCD 00529 ENDIF 00530 ; 0343 3065 00531 movlw "e" ;Nur bei LCD 2x8: Ausgabe in Zeile 2 0344 2309 00532 CALL OutLcd_Data ;sonst: weiter mit Ausgabe in Digit 8 0345 3020 00533 movlw " " 0346 2309 00534 CALL OutLcd_Data 0347 3052 00535 movlw "R" 0348 2309 00536 CALL OutLcd_Data 0349 3065 00537 movlw "e" 034A 2309 00538 CALL OutLcd_Data 034B 3061 00539 movlw "a" 034C 2309 00540 CALL OutLcd_Data 034D 3064 00541 movlw "d" 034E 2309 00542 CALL OutLcd_Data 034F 3079 00543 movlw "y" 0350 2309 00544 CALL OutLcd_Data 0351 3021 00545 movlw "!" 0352 2309 00546 CALL OutLcd_Data ;Digit 15 (2x8 Line 2, Digit 7) 0353 0008 00547 RETURN 00548 ;********************************************************************* 00549 ; DELAYS 00550 ; Die Delayzeit verlängert sich bei Interrupts! 00551 ; Global: FOSC_MULT = fosc(MHz)/4 00552 ; movlw (1 bis 255) ;Multiplikator für Basis-Delay 00553 ; CALL Delay..ms ;maximum allowed result=255! 00554 ;********************************************************************* 0354 00555 Delay: 00556 ; 1,5ms Delay nach jeder Übertragung eines Nibble. Die Wartezeit ist 00557 ; erforderlich, damit das Nibble sicher LCD-intern verarbeitet werden 00558 ; kann. Die Abfrage des Busyflag ist mit 2Wire-Interface nicht möglich. 00559 ; 0354 3001 00560 movlw FOSC_MULT ;Multiplikator Fosx/4 x 1497cycles 0355 00A5 00561 movwf d3 0356 3A00 00562 xorlw 0 0357 1903 00563 btfsc STATUS,Z ;Z=1? WREG=0? 0358 0AA5 00564 incf d3,f ;JA, d3+1 -> 10ms Delayzeit 00565 ; 0359 00566 delay_1: 0359 302A 00567 movlw 0x2A 035A 00A3 00568 movwf d1 035B 3002 00569 movlw 0x02 035C 00A4 00570 movwf d2 035D 00571 delay_2: 035D 0BA3 00572 decfsz d1, f 035E 2B60 00573 GOTO $+2 035F 0BA4 00574 decfsz d2, f 0360 2B5D 00575 GOTO delay_2 0361 0000 00576 nop MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 33 HD44780_2Wire.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0362 0BA5 00577 decfsz d3,f 0363 2B59 00578 GOTO delay_1 0364 0008 00579 RETURN 00580 ;********************************************************************* 0365 00581 Delay1ms: 00582 ; Im WREG wird der Multiplikator für Basisdelay=1000 working-cycles 00583 ; übergeben. Der Festwert FOSC_MULT muß in der Form Fosc(MHz)/4 00584 ; zugewiesen sein.. 00585 ; 0365 00A7 00586 movwf d5 ;Multiplikator für Basisdelay 0366 3A00 00587 xorlw .0 ;Vergleich WREG = d3 = 0 0367 1903 00588 btfsc STATUS,Z ;Z=1? WREG=0? 0368 0AA7 00589 incf d5,f ;JA, d3+1 -> 10ms Delayzeit 00590 ; 0369 3001 00591 movlw FOSC_MULT ;Multiplikator Fosc/4 * d5 x Basisdelay 036A 00A6 00592 movwf d4 036B 3A00 00593 xorlw 0 036C 1903 00594 btfsc STATUS,Z ;Z=1? WREG=0? 036D 0AA6 00595 incf d4,f ;JA, d3+1 -> 10ms Delayzeit 036E 00596 delay1ms_0: 036E 0827 00597 movf d5,w 036F 00A5 00598 movwf d3 0370 00599 delay1ms_1: 0370 30C6 00600 movlw 0xC6 0371 00A3 00601 movwf d1 0372 3001 00602 movlw 0x01 0373 00A4 00603 movwf d2 0374 00604 delay1ms_2: 0374 0BA3 00605 decfsz d1, f 0375 2B77 00606 GOTO $+2 0376 0BA4 00607 decfsz d2, f 0377 2B74 00608 GOTO delay1ms_2 0378 2B79 00609 GOTO $+1 0379 2B7A 00610 GOTO $+1 037A 0BA5 00611 decfsz d3,f 037B 2B70 00612 GOTO delay1ms_1 037C 0BA6 00613 decfsz d4,f 037D 2B6E 00614 GOTO delay1ms_0 037E 0008 00615 RETURN 00616 ;********************************************************************* 037F 00617 Delay10ms: 00618 ; Im WREG wird der Multiplikator für Basisdelay=10.000 working-cycles 00619 ; übergeben. Der Festwert FOSC_MULT muß in der Form Fosc(MHz)/4 00620 ; zugewiesen sein. 00621 ; 037F 00A7 00622 movwf d5 ;Multiplikator für Basisdelay 0380 3A00 00623 xorlw 0x00 0381 1903 00624 btfsc STATUS,Z 0382 0AA7 00625 incf d5,f 00626 ; 0383 3001 00627 movlw FOSC_MULT ;Oscfreq/4 0384 00A6 00628 movwf d4 0385 3A00 00629 xorlw .0 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 34 HD44780_2Wire.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 0386 1903 00630 btfsc STATUS,Z ;Z=1? WREG=0? 0387 0AA6 00631 incf d4,f ;JA, d3+1 -> 10ms Delayzeit 00632 ; 0388 00633 delay10ms_0: 0388 0827 00634 movf d5,w 0389 00A5 00635 movwf d3 038A 00636 delay10ms_1: 038A 30BD 00637 movlw .189 ;0xCE=206 038B 00A3 00638 movwf d1 038C 3008 00639 movlw 0x08 038D 00A4 00640 movwf d2 038E 00641 delay10ms_2 038E 0BA3 00642 decfsz d1, f 038F 2B91 00643 GOTO $+2 0390 0BA4 00644 decfsz d2, f 0391 2B8E 00645 GOTO delay10ms_2 0392 2B93 00646 GOTO $+1 0393 2B94 00647 GOTO $+1 0394 2B95 00648 GOTO $+1 0395 0BA5 00649 decfsz d3,f 0396 2B8A 00650 GOTO delay10ms_1 0397 2B98 00651 GOTO $+1 0398 0000 00652 nop 0399 0BA6 00653 decfsz d4,f 039A 2B88 00654 GOTO delay10ms_0 039B 0000 00655 nop 039C 0008 00656 RETURN 00657 ;********************************************************************* 039D 00658 Delay100ms: 00659 ; Im WREG wird der Multiplikator für Basisdelay=100.000 working-cycles 00660 ; übergeben. Der Festwert FOSC_MULT muß in der Form Fosc(MHz)/4 00661 ; zugewiesen sein. 00662 ; 039D 00A7 00663 movwf d5 ;Multiplikator für Basisdelay 039E 3A00 00664 xorlw .0 ;Vergleich WREG = d3 = 0 039F 1903 00665 btfsc STATUS,Z ;Z=1? WREG=0? 03A0 0AA7 00666 incf d5,f ;JA, d3+1 -> 10ms Delayzeit 00667 ; 03A1 3001 00668 movlw FOSC_MULT ;Übergabe Festwert Fosc/4 03A2 00A6 00669 movwf d4 ;in Variable speichern 03A3 3A00 00670 xorlw 0 ;wenn d4=0 03A4 1903 00671 btfsc STATUS,Z ;dann ist Z=1 03A5 0AA6 00672 incf d4,f ;dann 100msxn*FoscMULT 00673 ; 03A6 00674 delay100ms_1: 03A6 0827 00675 movf d5,w 03A7 00A5 00676 movwf d3 03A8 00677 delay100ms_2: 03A8 301E 00678 movlw 0x1E 03A9 00A3 00679 movwf d1 03AA 304F 00680 movlw 0x4F 03AB 00A4 00681 movwf d2 03AC 00682 delay100ms_3: MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 35 HD44780_2Wire.INC LOC OBJECT CODE LINE SOURCE TEXT VALUE 03AC 0BA3 00683 decfsz d1, f 03AD 2BAF 00684 GOTO $+2 03AE 0BA4 00685 decfsz d2, f 03AF 2BAC 00686 GOTO delay100ms_3 03B0 2BB1 00687 GOTO $+1 03B1 0000 00688 nop 03B2 0BA5 00689 decfsz d3,f 03B3 2BA8 00690 GOTO delay100ms_2 03B4 0BA6 00691 decfsz d4,f 03B5 2BA6 00692 GOTO delay100ms_1 03B6 0008 00693 RETURN 00694 ;********************************************************************* 03B7 00695 Blink_Pin_DAT_CLK 00696 ;Zum Testen der Pins DAT, CLK auf Funktion als Outputs 03B7 178D 00697 bsf LCD_DATA 03B8 170D 00698 bsf LCD_CLK 03B9 3005 00699 movlw .5 03BA 239D 00700 CALL Delay100ms 03BB 138D 00701 bcf LCD_DATA 03BC 130D 00702 bcf LCD_CLK 03BD 3005 00703 movlw .5 03BE 239D 00704 CALL Delay100ms 03BF 0008 00705 RETURN 00706 ;********************************************************************* 00707 00438 ;********************************************************************* 00439 END MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 36 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE ABDEN 00000000 ABDOVF 00000007 ACKDT 00000005 ACKEN 00000004 ACKSTAT 00000006 ACKTIM 00000007 ACb0 0000002F ACb1 0000002E ACb2 0000002D ACb3 0000002C ADC 000002A5 ADCON0 0000009D ADCON1 0000009E ADCS0 00000004 ADCS1 00000005 ADCS2 00000006 ADC_ANSEL 0000018C ADC_DRAIN 00000010 ADC_LAT 0000010C ADC_PORT 0000000C ADC_SHUNT 0000000C ADC_TRIS 0000008C ADC_VDD 00000008 ADC_VREF 00000024 ADDEN 00000003 ADD_16 00000211 ADFM 00000007 ADFVR0 00000000 ADFVR1 00000001 ADGO 00000001 ADIE 00000006 ADIF 00000006 ADNREF 00000002 ADON 00000000 ADPREF0 00000000 ADPREF1 00000001 ADRES 0000009B ADRESH 0000009C ADRESL 0000009B AHEN 00000001 ANSA0 00000000 ANSA1 00000001 ANSA2 00000002 ANSA3 00000003 ANSA4 00000004 ANSB1 00000001 ANSB2 00000002 ANSB3 00000003 ANSB4 00000004 ANSB5 00000005 ANSB6 00000006 ANSB7 00000007 ANSELA 0000018C MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 37 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE ANSELB 0000018D APFCON0 0000011D APFCON1 0000011E B2D 000001E1 B2Da 000001F8 B2Sb 000001F9 BAUDCON 0000019F BCD0 00000038 BCD1 00000037 BCD2 00000036 BCD3 00000035 BCD4 00000034 BCL1IE 00000003 BCL1IF 00000003 BCL2IE 00000001 BCL2IF 00000001 BCb0 00000033 BCb1 00000032 BCb2 00000031 BCb3 00000030 BF 00000000 BOEN 00000004 BORCON 00000116 BORRDY 00000000 BRG16 00000003 BRGH 00000002 BSR 00000008 BSR0 00000000 BSR1 00000001 BSR2 00000002 BSR3 00000003 BSR4 00000004 BSR_SHAD 00000FE6 Blink_Pin_DAT_CLK 000003B7 C 00000000 C1HYS 00000001 C1IE 00000005 C1IF 00000005 C1INTN 00000006 C1INTP 00000007 C1NCH0 00000000 C1NCH1 00000001 C1OE 00000005 C1ON 00000007 C1OUT 00000006 C1PCH0 00000004 C1PCH1 00000005 C1POL 00000004 C1SP 00000002 C1SYNC 00000000 C1TSEL0 00000000 C1TSEL1 00000001 C2HYS 00000001 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 38 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE C2IE 00000006 C2IF 00000006 C2INTN 00000006 C2INTP 00000007 C2NCH0 00000000 C2NCH1 00000001 C2OE 00000005 C2ON 00000007 C2OUT 00000006 C2PCH0 00000004 C2PCH1 00000005 C2POL 00000004 C2SP 00000002 C2SYNC 00000000 C2TSEL0 00000002 C2TSEL1 00000003 C3TSEL0 00000004 C3TSEL1 00000005 C4TSEL0 00000006 C4TSEL1 00000007 CCP1AS 00000295 CCP1AS0 00000004 CCP1AS1 00000005 CCP1AS2 00000006 CCP1ASE 00000007 CCP1CON 00000293 CCP1IE 00000002 CCP1IF 00000002 CCP1M0 00000000 CCP1M1 00000001 CCP1M2 00000002 CCP1M3 00000003 CCP1SEL 00000000 CCP2AS 0000029C CCP2AS0 00000004 CCP2AS1 00000005 CCP2AS2 00000006 CCP2ASE 00000007 CCP2CON 0000029A CCP2IE 00000000 CCP2IF 00000000 CCP2M0 00000000 CCP2M1 00000001 CCP2M2 00000002 CCP2M3 00000003 CCP2SEL 00000003 CCP3CON 00000313 CCP3IE 00000004 CCP3IF 00000004 CCP3M0 00000000 CCP3M1 00000001 CCP3M2 00000002 CCP3M3 00000003 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 39 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE CCP4CON 0000031A CCP4IE 00000005 CCP4IF 00000005 CCP4M0 00000000 CCP4M1 00000001 CCP4M2 00000002 CCP4M3 00000003 CCPR1H 00000292 CCPR1L 00000291 CCPR2H 00000299 CCPR2L 00000298 CCPR3H 00000312 CCPR3L 00000311 CCPR4H 00000319 CCPR4L 00000318 CCPTMRS 0000029E CCPTMRS0 0000029E CDAFVR0 00000002 CDAFVR1 00000003 CFGS 00000006 CHRG_END 00000005 CHS0 00000002 CHS1 00000003 CHS2 00000004 CHS3 00000005 CHS4 00000006 CKE 00000006 CKP 00000004 CLKRCON 0000039A CLKRDC0 00000003 CLKRDC1 00000004 CLKRDIV0 00000000 CLKRDIV1 00000001 CLKRDIV2 00000002 CLKREN 00000007 CLKROE 00000006 CLKRSLR 00000005 CM1CON0 00000111 CM1CON1 00000112 CM2CON0 00000113 CM2CON1 00000114 CMOUT 00000115 CPSCH0 00000000 CPSCH1 00000001 CPSCH2 00000002 CPSCH3 00000003 CPSCON0 0000001E CPSCON1 0000001F CPSON 00000007 CPSOUT 00000001 CPSRNG0 00000002 CPSRNG1 00000003 CREN 00000004 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 40 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE CSRC 00000007 CTRL_LEDOFF bsf SPI_PORT,LED_GRN CTRL_LEDON bcf SPI_PORT,LED_GRN C_SHAD 00000000 Charge_Ctrl 00000134 Clear_ShiftReg 000002F6 Control8Bit 000002F2 DACCON0 00000118 DACCON1 00000119 DACEN 00000007 DACLPS 00000006 DACNSS 00000000 DACOE 00000005 DACPSS0 00000002 DACPSS1 00000003 DACR0 00000000 DACR1 00000001 DACR2 00000002 DACR3 00000003 DACR4 00000004 DC 00000001 DC1B0 00000004 DC1B1 00000005 DC2B0 00000004 DC2B1 00000005 DC3B0 00000004 DC3B1 00000005 DC4B0 00000004 DC4B1 00000005 DC_SHAD 00000001 DHEN 00000000 DISPLAY_OFF 00000008 DISPLAY_ON 0000000C DRAIN 00000004 D_NOT_A 00000005 Data0 00000046 Data1 00000045 Delay 00000354 Delay100ms 0000039D Delay10ms 0000037F Delay1ms 00000365 ECCP1AS 00000295 ECCP2AS 0000029C EEADR 00000191 EEADRH 00000192 EEADRL 00000191 EECON1 00000195 EECON2 00000196 EEDAT 00000193 EEDATH 00000194 EEDATL 00000193 EEIE 00000004 EEIF 00000004 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 41 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE EEPGD 00000007 ERR 00000007 Emin 00000052 Esec 00000054 Estd 00000050 F 00000001 FERR 00000002 FLAGMASK 000000E0 FOSC_MULT 00000001 FREE 00000004 FSR0 00000004 FSR0H 00000005 FSR0H_SHAD 00000FE9 FSR0L 00000004 FSR0L_SHAD 00000FE8 FSR1 00000006 FSR1H 00000007 FSR1H_SHAD 00000FEB FSR1L 00000006 FSR1L_SHAD 00000FEA FVRCON 00000117 FVREN 00000007 FVRRDY 00000006 Flags 0000004A GCEN 00000007 GIE 00000007 GO 00000001 GO_NOT_DONE 00000001 HFIOFL 00000003 HFIOFR 00000004 HFIOFS 00000000 INDF0 00000000 INDF1 00000001 INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 IOCBF 00000396 IOCBF0 00000000 IOCBF1 00000001 IOCBF2 00000002 IOCBF3 00000003 IOCBF4 00000004 IOCBF5 00000005 IOCBF6 00000006 IOCBF7 00000007 IOCBN 00000395 IOCBN0 00000000 IOCBN1 00000001 IOCBN2 00000002 IOCBN3 00000003 IOCBN4 00000004 IOCBN5 00000005 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 42 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE IOCBN6 00000006 IOCBN7 00000007 IOCBP 00000394 IOCBP0 00000000 IOCBP1 00000001 IOCBP2 00000002 IOCBP3 00000003 IOCBP4 00000004 IOCBP5 00000005 IOCBP6 00000006 IOCBP7 00000007 IOCIE 00000003 IOCIF 00000000 IRCF0 00000003 IRCF1 00000004 IRCF2 00000005 IRCF3 00000006 ISR_ACTIVE 00000004 KEY_ANSEL 0000018D KEY_LAT 0000010D KEY_MASK 00000006 KEY_PORT 0000000D KEY_START 00000002 KEY_STOP 00000001 KEY_TRIS 0000008D KeyPress 0000004C KeyState 0000004B LATA 0000010C LATA0 00000000 LATA1 00000001 LATA2 00000002 LATA3 00000003 LATA4 00000004 LATA6 00000006 LATA7 00000007 LATB 0000010D LATB0 00000000 LATB1 00000001 LATB2 00000002 LATB3 00000003 LATB4 00000004 LATB5 00000005 LATB6 00000006 LATB7 00000007 LCDCLK 00000006 LCDDAT 00000007 LCD_ANSEL 0000018D LCD_CLK LCD_LAT,LCDCLK LCD_DATA LCD_LAT,LCDDAT LCD_DIGITS 00000014 LCD_LAT 0000010D LCD_LINES 00000004 LCD_PORT 0000000D MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 43 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE LCD_RS LcdFlags,7 LCD_TRIS 0000008D LCD_TYPE 00000003 LED_GRN 00000000 LFIOFR 00000001 LINE1 00000000 LINE2 00000040 LINE3 00000014 LINE4 00000054 LWLO 00000005 LcdBit 00000021 LcdData 00000020 LcdFlags 00000022 LcdOut_Char 0000023D LcdOut_Table_1 0000022A Lcd_Clear 0000032E Lcd_Init 000002D5 Lcd_Ready 00000331 Leading_Zero 00000218 Leading_Zero0 00000229 Leading_Zero1 0000021B MC1OUT 00000000 MC2OUT 00000001 MCLRE 00000005 MDBIT 00000000 MDCARH 0000039F MDCARL 0000039E MDCH0 00000000 MDCH1 00000001 MDCH2 00000002 MDCH3 00000003 MDCHODIS 00000007 MDCHPOL 00000006 MDCHSYNC 00000005 MDCL0 00000000 MDCL1 00000001 MDCL2 00000002 MDCL3 00000003 MDCLODIS 00000007 MDCLPOL 00000006 MDCLSYNC 00000005 MDCON 0000039C MDEN 00000007 MDMS0 00000000 MDMS1 00000001 MDMS2 00000002 MDMS3 00000003 MDMSODIS 00000007 MDOE 00000006 MDOPOL 00000004 MDOUT 00000003 MDSLR 00000005 MDSRC 0000039D MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 44 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE MFIOFR 00000002 Math_Vakku 000001BE Meas_Vakku 0000016E Meas_Vakku_Out 00000172 Meas_Vdd 00000161 Meas_Vdd_Out 00000169 Meas_Vdrain 00000177 Meas_Vdrain_Out 00000185 Meas_Vref 00000196 Meas_Vref_Out 00000199 Meas_Vshunt 0000018A Meas_Vshunt_Out 00000191 Mult10Bit_8 000002CB NEW_SEC 00000006 NIBBLE LcdFlags,6 NOT_BOR 00000000 NOT_PD 00000003 NOT_POR 00000001 NOT_RI 00000002 NOT_RMCLR 00000003 NOT_T1SYNC 00000002 NOT_TO 00000004 NOT_WPUEN 00000007 OERR 00000001 OPTION_REG 00000095 OSCCON 00000099 OSCSTAT 0000009A OSCTUNE 00000098 OSFIE 00000007 OSFIF 00000007 OSTS 00000005 OutCGRAM_Addr 00000300 OutDDRAM_Addr 00000303 OutLcd 0000030D OutLcd_Ascii 00000308 OutLcd_Ctrl 00000304 OutLcd_Data 00000309 Out_ADC 000001D7 Out_All_Measurments 000001CC Out_ChargeEnd 00000288 Out_ChargeTime 00000263 Out_ChargeTime_Start 00000246 Out_Lcd_NoBatt 00000276 P 00000004 P1CSEL 00000001 P1DC0 00000000 P1DC1 00000001 P1DC2 00000002 P1DC3 00000003 P1DC4 00000004 P1DC5 00000005 P1DC6 00000006 P1DSEL 00000002 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 45 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE P1M0 00000006 P1M1 00000007 P1RSEN 00000007 P2BSEL 00000004 P2DC0 00000000 P2DC1 00000001 P2DC2 00000002 P2DC3 00000003 P2DC4 00000004 P2DC5 00000005 P2DC6 00000006 P2M0 00000006 P2M1 00000007 P2RSEN 00000007 PCIE 00000006 PCL 00000002 PCLATH 0000000A PCLATH_SHAD 00000FE7 PCON 00000096 PEIE 00000006 PEN 00000002 PIE1 00000091 PIE2 00000092 PIE3 00000093 PIE4 00000094 PIR1 00000011 PIR2 00000012 PIR3 00000013 PIR4 00000014 PLLR 00000006 PORTA 0000000C PORTB 0000000D PR2 0000001B PR4 00000416 PR6 0000041D PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 PSS1AC0 00000002 PSS1AC1 00000003 PSS1BD0 00000000 PSS1BD1 00000001 PSS2AC0 00000002 PSS2AC1 00000003 PSS2BD0 00000000 PSS2BD1 00000001 PSTR1CON 00000296 PSTR2CON 0000029D PWM1CON 00000294 PWM2CON 0000029B RA0 00000000 RA1 00000001 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 46 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE RA2 00000002 RA3 00000003 RA4 00000004 RA5 00000005 RA6 00000006 RA7 00000007 RB0 00000000 RB1 00000001 RB2 00000002 RB3 00000003 RB4 00000004 RB5 00000005 RB6 00000006 RB7 00000007 RCEN 00000003 RCIDL 00000006 RCIE 00000005 RCIF 00000005 RCREG 00000199 RCSTA 0000019D RD 00000000 RSEN 00000001 RX9 00000006 RX9D 00000000 RXDTSEL 00000007 R_NOT_W 00000002 S 00000003 SBCDE 00000002 SBOREN 00000007 SCIE 00000005 SCK2 00000005 SCKP 00000004 SCS0 00000000 SCS1 00000001 SDAHT 00000003 SDO1SEL 00000006 SDO2 00000000 SEN 00000000 SENDB 00000003 SET_CGRAM_ADDR 00000040 SET_DDRAM_ADDR 00000080 SHUNT 00000003 SMP 00000007 SPBRG 0000019B SPBRGH 0000019C SPBRGL 0000019B SPEN 00000007 SPI_ANSEL 0000018D SPI_LAT 0000010D SPI_PORT 0000000D SPI_TRIS 0000008D SPLLEN 00000007 SRCLK0 00000004 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 47 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE SRCLK1 00000005 SRCLK2 00000006 SRCON0 0000011A SRCON1 0000011B SREN 00000005 SRLEN 00000007 SRNQEN 00000002 SRPR 00000000 SRPS 00000001 SRQEN 00000003 SRRC1E 00000000 SRRC2E 00000001 SRRCKE 00000002 SRRPE 00000003 SRSC1E 00000004 SRSC2E 00000005 SRSCKE 00000006 SRSPE 00000007 SS1SEL 00000005 SS2 00000001 SSP1ADD 00000212 SSP1BUF 00000211 SSP1CON1 00000215 SSP1CON2 00000216 SSP1CON3 00000217 SSP1IE 00000003 SSP1IF 00000003 SSP1MSK 00000213 SSP1STAT 00000214 SSP2ADD 0000021A SSP2BUF 00000219 SSP2CON1 0000021D SSP2CON2 0000021E SSP2CON3 0000021F SSP2IE 00000000 SSP2IF 00000000 SSP2MSK 0000021B SSP2STAT 0000021C SSPADD 00000212 SSPBUF 00000211 SSPCON 00000215 SSPCON1 00000215 SSPCON2 00000216 SSPCON3 00000217 SSPEN 00000005 SSPM0 00000000 SSPM1 00000001 SSPM2 00000002 SSPM3 00000003 SSPMSK 00000213 SSPOV 00000006 SSPSTAT 00000214 STATUS 00000003 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 48 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE STATUS_SHAD 00000FE4 STKOVF 00000007 STKPTR 00000FED STKUNF 00000006 STR1A 00000000 STR1B 00000001 STR1C 00000002 STR1D 00000003 STR1SYNC 00000004 STR2A 00000000 STR2B 00000001 STR2C 00000002 STR2D 00000003 STR2SYNC 00000004 SWDTEN 00000000 SW_VREF 00000004 SYNC 00000004 Sub16 00000200 Sub16a 00000209 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 T0XCS 00000000 T1CKPS0 00000004 T1CKPS1 00000005 T1CON 00000018 T1GCON 00000019 T1GGO 00000003 T1GPOL 00000006 T1GSPM 00000004 T1GSS0 00000000 T1GSS1 00000001 T1GTM 00000005 T1GVAL 00000002 T1OSCEN 00000003 T1OSCR 00000007 T2CKPS0 00000000 T2CKPS1 00000001 T2CON 0000001C T2OUTPS0 00000003 T2OUTPS1 00000004 T2OUTPS2 00000005 T2OUTPS3 00000006 T4CKPS0 00000000 T4CKPS1 00000001 T4CON 00000417 T4OUTPS0 00000003 T4OUTPS1 00000004 T4OUTPS2 00000005 T4OUTPS3 00000006 T6CKPS0 00000000 T6CKPS1 00000001 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 49 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE T6CON 0000041E T6OUTPS0 00000003 T6OUTPS1 00000004 T6OUTPS2 00000005 T6OUTPS3 00000006 TMR0 00000015 TMR0CS 00000005 TMR0IE 00000005 TMR0IF 00000002 TMR0SE 00000004 TMR1 00000016 TMR1CS0 00000006 TMR1CS1 00000007 TMR1GE 00000007 TMR1GIE 00000007 TMR1GIF 00000007 TMR1H 00000017 TMR1IE 00000000 TMR1IF 00000000 TMR1L 00000016 TMR1ON 00000000 TMR2 0000001A TMR2IE 00000001 TMR2IF 00000001 TMR2ON 00000002 TMR4 00000415 TMR4IE 00000001 TMR4IF 00000001 TMR4ON 00000002 TMR6 0000041C TMR6IE 00000003 TMR6IF 00000003 TMR6ON 00000002 TOSH 00000FEF TOSL 00000FEE TRISA 0000008C TRISA0 00000000 TRISA1 00000001 TRISA2 00000002 TRISA3 00000003 TRISA4 00000004 TRISA5 00000005 TRISA6 00000006 TRISA7 00000007 TRISB 0000008D TRISB0 00000000 TRISB1 00000001 TRISB2 00000002 TRISB3 00000003 TRISB4 00000004 TRISB5 00000005 TRISB6 00000006 TRISB7 00000007 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 50 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE TRMT 00000001 TSEN 00000005 TSRNG 00000004 TUN0 00000000 TUN1 00000001 TUN2 00000002 TUN3 00000003 TUN4 00000004 TUN5 00000005 TX9 00000006 TX9D 00000000 TXCKSEL 00000000 TXEN 00000005 TXIE 00000004 TXIF 00000004 TXREG 0000019A TXSTA 0000019E UA 00000001 VDD5V 00000002 VREF 00000003 VREF_OFF bcf SPI_PORT,SW_VREF VREF_ON bsf SPI_PORT,SW_VREF V_MAX0 00000054 V_MAX1 00000010 Vakku0 00000042 Vakku1 00000041 Vdd0 0000003E Vdd1 0000003D Vdrain0 00000040 Vdrain1 0000003F Vref_1024 000002BD Vref_4096 000002C4 Vshunt0 00000044 Vshunt1 00000043 W 00000000 WCOL 00000007 WDTCON 00000097 WDTPS0 00000001 WDTPS1 00000002 WDTPS2 00000003 WDTPS3 00000004 WDTPS4 00000005 WIPER0_DECR 00000008 WIPER0_INCR 00000004 WIPER0_READ 0000000C WIPER0_WRITE 00000000 WIPER_MAX 00000096 WIPER_MIN 00000001 WPUA 0000020C WPUA5 00000005 WPUB 0000020D WPUB0 00000000 WPUB1 00000001 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 51 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE WPUB2 00000002 WPUB3 00000003 WPUB4 00000004 WPUB5 00000005 WPUB6 00000006 WPUB7 00000007 WR 00000001 WREG 00000009 WREG_SHAD 00000FE5 WREN 00000002 WRERR 00000003 WUE 00000001 WiperMax 00000048 WiperMin 00000049 WiperValue 00000047 WiperValue_Out 0000019E WiperValue_Send 000001AB WiperValue_Set 000001A7 XTAL 00000004 Z 00000002 Z_SHAD 00000002 Zmin 00000053 Zsec 00000055 Zstd 00000051 _BOREN_NSLEEP 0000FDFF _BOREN_OFF 0000F9FF _BOREN_ON 0000FFFF _BOREN_SBODEN 0000FBFF _BORV_19 0000FFFF _BORV_HI 0000FBFF _BORV_LO 0000FFFF _CLKOUTEN_OFF 0000FFFF _CLKOUTEN_ON 0000F7FF _CONFIG1 00008007 _CONFIG2 00008008 _CPD_OFF 0000FFFF _CPD_ON 0000FEFF _CP_OFF 0000FFFF _CP_ON 0000FF7F _DEVID1 00008006 _FCMEN_OFF 0000DFFF _FCMEN_ON 0000FFFF _FOSC_ECH 0000FFFF _FOSC_ECL 0000FFFD _FOSC_ECM 0000FFFE _FOSC_EXTRC 0000FFFB _FOSC_HS 0000FFFA _FOSC_INTOSC 0000FFFC _FOSC_LP 0000FFF8 _FOSC_XT 0000FFF9 _IDLOC0 00008000 _IDLOC1 00008001 _IDLOC2 00008002 MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 52 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE _IDLOC3 00008003 _IESO_OFF 0000EFFF _IESO_ON 0000FFFF _LVP_OFF 0000DFFF _LVP_ON 0000FFFF _MCLRE_OFF 0000FFBF _MCLRE_ON 0000FFFF _PLLEN_OFF 0000FEFF _PLLEN_ON 0000FFFF _PWRTE_OFF 0000FFFF _PWRTE_ON 0000FFDF _STVREN_OFF 0000FDFF _STVREN_ON 0000FFFF _WDTE_NSLEEP 0000FFF7 _WDTE_OFF 0000FFE7 _WDTE_ON 0000FFFF _WDTE_SWDTEN 0000FFEF _WRT_ALL 0000FFFC _WRT_BOOT 0000FFFE _WRT_HALF 0000FFFD _WRT_OFF 0000FFFF __16F1827 00000001 __DEBUG 1 adc_end 000002BC adc_loop 000002B0 charge_ctrl_end 00000160 chrg_vakku0_ctrl 00000146 chrg_vakku1_ctrl 0000013E chrg_wiper_ctrl 00000158 chrg_wiper_decr 00000151 chrg_wiper_incr 0000014F chrg_wpr_set 0000015E clearshiftr1 000002F9 cnTemp 0000003C cnt0 0000004E cnt1 0000004D cnt10ms 0000004F cntB2D 0000003B cntBit 0000003A cntDig 00000039 d1 00000023 d2 00000024 d3 00000025 d4 00000026 d5 00000027 d6 00000028 delay100ms_1 000003A6 delay100ms_2 000003A8 delay100ms_3 000003AC delay10ms_0 00000388 delay10ms_1 0000038A delay10ms_2 0000038E delay1ms_0 0000036E MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 53 HD44780_2Wire.INC SYMBOL TABLE LABEL VALUE delay1ms_1 00000370 delay1ms_2 00000374 delay_1 00000359 delay_2 0000035D init 00000044 isr_cnt 00000018 isr_debounce 00000008 isr_end 00000043 isr_sec 00000024 isr_tmr0 00000004 lcd_clear_line4 0000024A lcdout_nextchar 00000236 lcdout_nextline 00000231 lcdout_tableend 00000245 main 0000010C main_charge_loop 00000125 main_charge_sec 0000012A main_charge_start 00000121 main_end 00000133 main_start 00000111 out_adc_bcd2 000001DA out_lcd_nobatt_line4 0000027A outlcd_0 0000032D outlcd_1 0000030E outlcd_2 0000031A pntr0 0000002B pntr1 0000002A tbl_charge_end 00000104 tbl_lcd_mask4x20 00000096 tbl_no_batt 000000EE tmpLines 00000029 tmpVar 00000056 wipervalue_buf0 000001B7 wipervalue_buf1 000001AF MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX MPASM 5.51 LIION_1S_LADER.ASM 6-4-2022 17:27:16 PAGE 54 HD44780_2Wire.INC MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 02C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0340 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0380 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 8000 : -------XX------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 959 Program Memory Words Free: 3137 Errors : 0 Warnings : 0 reported, 61 suppressed Messages : 0 reported, 90 suppressed