MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; 00002 ;************************************************************************ 00003 ; 00004 ; GM ALDL bus 8192 baud interface & LCD parameter display 00005 ; for Hummer N/A Diesel & 4L80E Transmission Juha Niinikoski 00006 ; 00007 ; Version 1.0 3.2.1999 00008 ; ASCII conversion routines added 4.2.1999 00009 ; Command sequence startup corrected. 5.2.1999 Field test done. v 1.1 00010 ; Option for inverted TX pin added 00011 ; parameter table corrections 9.2.1999 v1.2 00012 ; more table corrections, gear selector display added 6.1.1999 00013 ; Watch Dog function added 7.1.1999 v1.21 00014 ; 00015 ;************************************************************************ 00016 ; Warning[215]: Processor superceded by command line. Verify processor symbol. 00017 LIST P = 16F84, R = HEX 00018 ; _config H'3FFD' ; xt OSC, WDT ON, PWR UP DLY ON, CP OFF 00019 ; _config dont work with my assembler ??? Config bits have to be 00020 ; set rom programmer 00021 ; 00022 ;************************************************************************ 00023 ; RS-232 Communication With PIC16C54 changed to 00024 ; PIC16F84 code 2.2.1999/ JNI 00025 ; Half Duplex Asynchronous Communication 00026 ; This program has been tested at Bauds from 1200 to 19200 Baud 00027 ; ( @ 8,16,20 Mhz CLKIN ) 00028 ; As a test, this program will echo back the data that has been 00029 ; received. 00030 ; Program: HALF_DUP.ASM 00031 ; Revision Date: 12-12-95 Compatibility with MPASMWIN 1.30 00032 ;************************************************************************ 00033 ; 00034 INCLUDE "d:\yp\mplab\p16f84.inc" 00001 LIST 00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc. 00003 ; NOLIST 00004 00005 ; This header file defines configurations, registers, and other useful bits of 00006 ; information for the PIC16F84 microcontroller. These names are taken to match 00007 ; the data sheets as closely as possible. 00008 00009 ; Note that the processor must be selected before this file is 00010 ; included. The processor may be selected the following ways: 00011 00012 ; 1. Command line switch: 00013 ; C:\ MPASM MYFILE.ASM /PIC16F84 00014 ; 2. LIST directive in the source file 00015 ; LIST P=PIC16F84 00016 ; 3. Processor Type entry in the MPASM full-screen interface 00017 00018 ;========================================================================== MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00019 ; 00020 ; Revision History 00021 ; 00022 ;========================================================================== 00023 00024 ;Rev: Date: Reason: 00025 00026 ;2.00 07/24/96 Renamed to reflect the name change to PIC16F84. 00027 ;1.01 05/17/96 Corrected BADRAM map 00028 ;1.00 10/31/95 Initial Release 00029 00030 ;========================================================================== 00031 ; 00032 ; Verify Processor 00033 ; 00034 ;========================================================================== 00035 00036 IFNDEF __16F84 00037 MESSG "Processor-header file mismatch. Verify selected processor." 00038 ENDIF 00039 00040 ;========================================================================== 00041 ; 00042 ; Register Definitions 00043 ; 00044 ;========================================================================== 00045 00000000 00046 W EQU H'0000' 00000001 00047 F EQU H'0001' 00048 00049 ;----- Register Files------------------------------------------------------ 00050 00000000 00051 INDF EQU H'0000' 00000001 00052 TMR0 EQU H'0001' 00000002 00053 PCL EQU H'0002' 00000003 00054 STATUS EQU H'0003' 00000004 00055 FSR EQU H'0004' 00000005 00056 PORTA EQU H'0005' 00000006 00057 PORTB EQU H'0006' 00000008 00058 EEDATA EQU H'0008' 00000009 00059 EEADR EQU H'0009' 0000000A 00060 PCLATH EQU H'000A' 0000000B 00061 INTCON EQU H'000B' 00062 00000081 00063 OPTION_REG EQU H'0081' 00000085 00064 TRISA EQU H'0085' 00000086 00065 TRISB EQU H'0086' 00000088 00066 EECON1 EQU H'0088' 00000089 00067 EECON2 EQU H'0089' 00068 00069 ;----- STATUS Bits -------------------------------------------------------- 00070 00000007 00071 IRP EQU H'0007' MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000006 00072 RP1 EQU H'0006' 00000005 00073 RP0 EQU H'0005' 00000004 00074 NOT_TO EQU H'0004' 00000003 00075 NOT_PD EQU H'0003' 00000002 00076 Z EQU H'0002' 00000001 00077 DC EQU H'0001' 00000000 00078 C EQU H'0000' 00079 00080 ;----- INTCON Bits -------------------------------------------------------- 00081 00000007 00082 GIE EQU H'0007' 00000006 00083 EEIE EQU H'0006' 00000005 00084 T0IE EQU H'0005' 00000004 00085 INTE EQU H'0004' 00000003 00086 RBIE EQU H'0003' 00000002 00087 T0IF EQU H'0002' 00000001 00088 INTF EQU H'0001' 00000000 00089 RBIF EQU H'0000' 00090 00091 ;----- OPTION Bits -------------------------------------------------------- 00092 00000007 00093 NOT_RBPU EQU H'0007' 00000006 00094 INTEDG EQU H'0006' 00000005 00095 T0CS EQU H'0005' 00000004 00096 T0SE EQU H'0004' 00000003 00097 PSA EQU H'0003' 00000002 00098 PS2 EQU H'0002' 00000001 00099 PS1 EQU H'0001' 00000000 00100 PS0 EQU H'0000' 00101 00102 ;----- EECON1 Bits -------------------------------------------------------- 00103 00000004 00104 EEIF EQU H'0004' 00000003 00105 WRERR EQU H'0003' 00000002 00106 WREN EQU H'0002' 00000001 00107 WR EQU H'0001' 00000000 00108 RD EQU H'0000' 00109 00110 ;========================================================================== 00111 ; 00112 ; RAM Definition 00113 ; 00114 ;========================================================================== 00115 000000CF 00116 __MAXRAM H'CF' 00117 __BADRAM H'07', H'50'-H'7F', H'87' 00118 00119 ;========================================================================== 00120 ; 00121 ; Configuration Bits 00122 ; 00123 ;========================================================================== 00124 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0000000F 00125 _CP_ON EQU H'000F' 00003FFF 00126 _CP_OFF EQU H'3FFF' 00003FF7 00127 _PWRTE_ON EQU H'3FF7' 00003FFF 00128 _PWRTE_OFF EQU H'3FFF' 00003FFF 00129 _WDT_ON EQU H'3FFF' 00003FFB 00130 _WDT_OFF EQU H'3FFB' 00003FFC 00131 _LP_OSC EQU H'3FFC' 00003FFD 00132 _XT_OSC EQU H'3FFD' 00003FFE 00133 _HS_OSC EQU H'3FFE' 00003FFF 00134 _RC_OSC EQU H'3FFF' 00135 00136 LIST 00035 ; 00036 ;************************************************************************ 00037 ; LCD I/O parameters 00038 ; 00000006 00039 LCDPORT EQU PORTB ; Port B - LCD 00000004 00040 LCDRS EQU 4 ; Lcd register select output 00000005 00041 LCDEN EQU 5 ; Lcd enable output 00042 ; LCD commands 00000001 00043 LCDCLER EQU B'00000001' ; Clears display, resets curcor 00000080 00044 LCDCM EQU B'10000000' ; Sets cursor using bits 0 - 6 00045 ; Line 1 range - 0 to .15 00046 ; Line 2 range - .40 to .55 00047 00048 ; NOTE that subroutine LCDCUR2 take the 00049 ; value in W in range 0 - 15 and adjusts for 00050 ; line 2 offset. 00051 00052 ;***************** Communication Parameters ************************** 00053 ; 00000001 00054 X_MODE EQU 1 ; If ( X_MODE==1) Then transmit LSB first 00055 ; if ( X_MODE==0) Then transmit MSB first ( CODEC like ) 00000001 00056 R_MODE EQU 1 ; If ( R_MODE==1) Then receive LSB first 00057 ; if ( X_MODE==0) Then receive MSB first ( CODEC like ) 00000001 00058 X_NBIT EQU 1 ; if (X_Nbit==1) # of data bits ( Transmission ) is 8 else 7 00000001 00059 R_NBIT EQU 1 ; if (R_Nbit==1) # of data bits ( Reception ) is 8 else 7 00060 ; 00000001 00061 SBIT2 EQU 1 ; if Sbit2 = 0 then 1 Stop Bit else 2 Stop Bits 00062 ; 00000001 00063 INV_TX EQU 1 ; if inverted TX output signal 00064 00000000 00065 B9600_8 EQU 0 ; 9600 / 8 MHz clock 00000000 00066 B9600_4 EQU 0 ; 9600 / 4 MHz clock 00000001 00067 B8192_4 EQU 1 ; 8192 / 4 MHz clock special GM ALDL speed 00068 ; 00069 ;************************************************************************ 00000000 00070 CARRY EQU 0 00000001 00071 SAME EQU 1 00000000 00072 LSB EQU 0 00000007 00073 MSB EQU 7 00074 ; 00075 ; PORT A = RS232 I/O MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00076 ; 00000003 00077 DX EQU 3 ; Transmit Pin ( Bit 3 of Port A ) 00000004 00078 DR EQU 4 ; Reciive Pin ( Bit 4 of Port A ) 00079 ; 00080 IF B9600_8 00081 ;9600 / 8 Mhz kello 00082 BAUD_1 EQU .68 ; 3+3X = CLKOUT/Baud 00083 BAUD_2 EQU .67 ; 6+3X = CLKOUT/Baud 00084 BAUD_3 EQU .34 ; 3+3X = 0.5*CLKOUT/Baud 00085 BAUD_4 EQU .86 ; 3+3X = 1.25*CLKOUT/Baud 00086 BAUD_X EQU .66 ; 11+3X = CLKOUT/Baud 00087 BAUD_Y EQU .66 ; 9 +3X = CLKOUT/Baud 00088 ENDIF 00089 IF B9600_4 00090 ;9600 / 4 Mhz kello 00091 BAUD_1 EQU .30 ; 3+3X = CLKOUT/Baud 00092 BAUD_2 EQU .30 ; 6+3X = CLKOUT/Baud 00093 BAUD_3 EQU .15 ; 3+3X = 0.5*CLKOUT/Baud 00094 BAUD_4 EQU .38 ; 3+3X = 1.25*CLKOUT/Baud 00095 BAUD_X EQU .30 ; 11+3X = CLKOUT/Baud 00096 BAUD_Y EQU .30 ; 9 +3X = CLKOUT/Baud 00097 ENDIF 00098 IF B8192_4 00099 ;8192 / 8 Mhz kello 00000026 00100 BAUD_1 EQU .38 ; 3+3X = CLKOUT/Baud 00000026 00101 BAUD_2 EQU .38 ; 6+3X = CLKOUT/Baud 00000014 00102 BAUD_3 EQU .20 ; 3+3X = 0.5*CLKOUT/Baud 00000030 00103 BAUD_4 EQU .48 ; 3+3X = 1.25*CLKOUT/Baud 00000023 00104 BAUD_X EQU .35 ; 11+3X = CLKOUT/Baud 00000023 00105 BAUD_Y EQU .35 ; 9 +3X = CLKOUT/Baud 00106 00107 ENDIF 00108 ; 00109 ;************************ Data RAM Assignments ********************** 00110 ; 000C 00111 ORG 0CH ; Dummy Origin for RAM 00112 ; 00113 ; Serial I/O variables 000C 00114 RCVREG RES 1 ; Data received 000D 00115 XMTREG RES 1 ; Data to be transmitted 000E 00116 COUNT RES 1 ; Counter for #of Bits Transmitted 000F 00117 DLYCNT RES 1 00118 ; 00119 ; LCD I/O variables 0010 00120 GP1 RES 1 ; General purpose register 0011 00121 STRNUM RES 1 0012 00122 CHPT RES 1 ; Character string pointer in string. 0013 00123 LCDCH RES 1 ; Saves byte to be sent to lcd while 00124 ; it is processed 0014 00125 TABOFF RES 1 ; Table ofset pointer in lcd string lookup 0015 00126 APU RES 1 ; anotger gp register 00127 ; 00128 ; Main program variables MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0016 00129 RCNT RES 1 ;byte reject counter 0017 00130 TS RES 1 ;temp sign 00131 ; 0018 00132 THROTLE RES 1 ; #20 throtle pos 00133 ; 0019 00134 TTEMP RES 1 ; #23 trans temp 00135 ; 001A 00136 ERPMHI RES 1 ; #24 engine rpm hi 001B 00137 ERPMLO RES 1 ; #25 lo 00138 ; 001C 00139 IRPMHI RES 1 ; #26 input rpm hi 001D 00140 IRPMLO RES 1 ; #27 lo 00141 ; 001E 00142 TRPMHI RES 1 ; #28 turbine rpm hi 001F 00143 TRPMLO RES 1 ; #29 lo 00144 ; 00145 ; also vechile speed ?? 0020 00146 ORPMHI RES 1 ; #30 output rpm hi 0021 00147 ORPMLO RES 1 ; #31 lo 00148 ; 0022 00149 BATT RES 1 ; #38 battery voltage 00150 ; 0023 00151 SPEED RES 1 ; #30 ?? 00152 ; 0024 00153 TSIG RES 1 ; #41 torque conv signal PSI ? 00154 ; 0025 00155 GEAR RES 1 ; #47 current gear 00156 0026 00157 TDUTY RES 1 ; #48 TCC duty cycle ? 0027 00158 RATIO RES 1 ; #50 gear ratio ? 00159 ; 0028 00160 TSLIPHI RES 1 ; #62 TCC slip rpm hi 0029 00161 TSLIPLO RES 1 ; #63 lo 00162 ; 002A 00163 SFAIL RES 1 ; #73 shift fail ? 00164 ; 002B 00165 PROMHI RES 1 ; #82 PROM ID hi 002C 00166 PROMLO RES 1 ; #83 lo 00167 ; 002D 00168 BBIT RES 1 ; #84 bit 7 = brake applied 002E 00169 BBIT2 RES 1 ; #85 bits 2 - 4 = gear selector 00170 ; 0 = ? selector bits decoded 00171 ; 1 = OD 00172 ; 2 = ? 00173 ; 3 = D 00174 ; 4 = R 00175 ; 5 = N/P 00176 ; 6 = 1 00177 ; 7 = 2 00178 ; 00179 ; B2_BCD Bin to BCD conversion variables 00180 ; count res 1 ; ! already defined 002F 00181 TEMP RES 1 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00182 ; 0030 00183 H_BYTE RES 1 ; 16-bit binary input 0031 00184 L_BYTE RES 1 00185 ; 0032 00186 R0 RES 1 ; hi order 0033 00187 R1 RES 1 ; 5 digit BCD output 0034 00188 R2 RES 1 00189 ; 0035 00190 A4 RES 1 ; hi orde value 0036 00191 A3 RES 1 ; 5 byte ASCII output 0037 00192 A2 RES 1 0038 00193 A1 RES 1 0039 00194 A0 RES 1 ; lo order value 00195 ; 00196 ; mult 8 * 8 multiply parameters 003A 00197 MULCND RES 1 ; 8 bit multiplicand 003B 00198 MULPLR RES 1 ; 8 bit multiplier 00199 ;H_byte res 1 ; High byte of the 16 bit result 00200 ;L_byte res 1 ; Low byte of the 16 bit result 00201 ; 00202 ;*********************************************************************** 00203 ; 00000000 00204 BIGLCD EQU 0 ; size of lcd panel 00000001 00205 ZSUP EQU 1 ; leading zero supress in 4 digit displays 00206 ; 00207 ; 0000 00208 ORG 0 ; Restart vector 0000 2805 00209 GOTO MAIN0 00210 ; 0004 00211 ORG 4 ; INT vector 0004 2805 00212 GOTO MAIN0 00213 ; 0005 00214 MAIN0 00215 ; 00216 ;*********************************************************************** 00217 ; LCD (B) port setup & LCD INIT 00218 ; 00219 ; Outputs 00220 ; RA0 - 3 lcd data 00221 ; RA4 lcd register select 00222 ; RA5 lcd enable 00223 0005 0186 00224 CLRF LCDPORT 0006 1683 00225 BSF STATUS,RP0 ; Select BANK 1 0007 3000 00226 MOVLW B'00000000' ; Set port data directions Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0008 0086 00227 MOVWF TRISB 0009 1283 00228 BCF STATUS,RP0 ; Select BANK 0 00229 ;*********************************************************************** 00230 ; RS (A) port setup & init 00231 ; 00232 IF INV_TX ; No glitch 000A 1185 00233 BCF PORTA, DX MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 8 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00234 ELSE 00235 BSF PORTA, DX 00236 ENDIF 000B 0186 00237 CLRF PORTB 000C 1683 00238 BSF STATUS, RP0 ; select reg bank 1 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000D 1605 00239 BSF TRISA, DR ; Bit DR (4) of Port A is Output pin # 3 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000E 1185 00240 BCF TRISA, DX ; Set Port_A (3) as output ( DX ) pin # 2 000F 1283 00241 BCF STATUS, RP0 ; select bank 0 00242 ; 00243 ;*********************************************************************** 00244 ; 00245 ; 00246 ;********************************************************************** 00247 ; 0010 218E 00248 CALL INITLCD ;start LCD routines 00249 ; 00250 ; Display banner messages 00251 ; 0011 217B 00252 CALL LCDCLR ; Not really required here as display has 00253 ; just been set up! 0012 3000 00254 MOVLW .0 0013 216F 00255 CALL CUR1 ; Position text on line 1 00256 ; 0014 3001 00257 MOVLW .1 ; Hello message 0015 2162 00258 CALL STRING ; ROM at page 0X300. 00259 ; ; Move cursor for line 2 of banner 0016 3000 00260 MOVLW .0 0017 2173 00261 CALL CUR2 ; Position text on line 2 00262 ; 0018 3002 00263 MOVLW .2 ; Version message 0019 2162 00264 CALL STRING 00265 ; 001A 1A03 00266 BTFSC STATUS, NOT_TO ; Check if watchdog bite 001B 281E 00267 GOTO OK 001C 3005 00268 MOVLW .5 ; Show Fault message 001D 2162 00269 CALL STRING 00270 ; 001E 0064 00271 OK CLRWDT ; FEED WATCHDOG 00272 ; 001F 300A 00273 MOVLW .10 ;wait 1s 0020 2187 00274 CALL WAIT100 00275 0021 0064 00276 CLRWDT ; FEED WATCHDOG 00277 00278 ; 00279 ; Send request to TCM and wait & store response 00280 ; 00281 ; Send test request message F5,57,01,00,B3 0022 30F5 00282 MOVLW 0XF5 0023 2142 00283 CALL TX_W ; need wake up message first ??? 0024 3057 00284 MOVLW 0X57 ; required data unknown try with this MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0025 2142 00285 CALL TX_W 0026 3001 00286 MOVLW 0X01 0027 2142 00287 CALL TX_W 0028 3000 00288 MOVLW 0X00 0029 2142 00289 CALL TX_W 002A 30B3 00290 MOVLW 0XB3 002B 2142 00291 CALL TX_W 00292 ; 002C 3002 00293 MOVLW .02 002D 2187 00294 CALL WAIT100 ; wait 200 ms 00295 ; 002E 00296 MAIN1 00297 002E 0064 00298 CLRWDT ; FEED WATCHDOG 00299 00300 ; Send test message request F5,57,01,00,B3 002F 30F5 00301 MOVLW 0XF5 0030 2142 00302 CALL TX_W ; Need this two times ??? 0031 3057 00303 MOVLW 0X57 0032 2142 00304 CALL TX_W 0033 3001 00305 MOVLW 0X01 0034 2142 00306 CALL TX_W 0035 3000 00307 MOVLW 0X00 0036 2142 00308 CALL TX_W 0037 30B3 00309 MOVLW 0XB3 0038 2142 00310 CALL TX_W 00311 ; 0039 212C 00312 MAIN2 CALL RXBYTE 003A 30F5 00313 MOVLW 0XF5 ;wait for header bytes F5,AB 003B 020C 00314 SUBWF RCVREG, W 003C 1903 283F 00315 BZ MAIN3 003E 2839 00316 GOTO MAIN2 00317 ; 003F 212C 00318 MAIN3 CALL RXBYTE 0040 30AB 00319 MOVLW 0XAB ;wait for header bytes 0041 020C 00320 SUBWF RCVREG, W 0042 1903 2845 00321 BZ MAIN4 ;match 0044 2839 00322 GOTO MAIN2 00323 ;Start reading data from TCM 0045 3014 00324 MAIN4 MOVLW .20 0046 0096 00325 MOVWF RCNT ;reject 20 bytes (#0-19) 0047 212C 00326 MAIN5 CALL RXBYTE 0048 0B96 00327 DECFSZ RCNT, F 0049 2847 00328 GOTO MAIN5 00329 004A 212C 00330 CALL RXBYTE 004B 080C 00331 MOVF RCVREG, W ;get throtle byte #20 004C 0098 00332 MOVWF THROTLE 00333 ; 004D 212C 00334 CALL RXBYTE ; #21 004E 212C 00335 CALL RXBYTE ; #22 00336 ; 004F 212C 00337 CALL RXBYTE ;get temp byte #23 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0050 080C 00338 MOVF RCVREG, W 0051 0099 00339 MOVWF TTEMP 00340 ; 0052 212C 00341 CALL RXBYTE 0053 080C 00342 MOVF RCVREG, W ;get engine rpm hi byte #24 0054 009A 00343 MOVWF ERPMHI 0055 212C 00344 CALL RXBYTE 0056 080C 00345 MOVF RCVREG, W ;get engine rpm lo byte #25 0057 009B 00346 MOVWF ERPMLO 00347 ; 0058 212C 00348 CALL RXBYTE 0059 080C 00349 MOVF RCVREG, W ;get turbine rpm hi byte #26 005A 009C 00350 MOVWF IRPMHI 005B 212C 00351 CALL RXBYTE 005C 080C 00352 MOVF RCVREG, W ;get turbine rpm lo byte #27 005D 009D 00353 MOVWF IRPMLO 00354 ; 005E 212C 00355 CALL RXBYTE 005F 080C 00356 MOVF RCVREG, W ;get input rpm hi byte #28 0060 009E 00357 MOVWF TRPMHI 0061 212C 00358 CALL RXBYTE 0062 080C 00359 MOVF RCVREG, W ;get input rpm lo byte #29 0063 009F 00360 MOVWF TRPMLO 00361 ; 0064 212C 00362 CALL RXBYTE 0065 080C 00363 MOVF RCVREG, W ;get output rpm hi byte #30 0066 00A0 00364 MOVWF ORPMHI 0067 00A3 00365 MOVWF SPEED ;vechicle speed ? 0068 212C 00366 CALL RXBYTE 0069 080C 00367 MOVF RCVREG, W ;get output rpm lo byte #31 006A 00A1 00368 MOVWF ORPMLO 00369 ; 006B 3006 00370 MOVLW .06 006C 0096 00371 MOVWF RCNT ;reject 6 bytes 006D 212C 00372 MAIN6 CALL RXBYTE 006E 0B96 00373 DECFSZ RCNT, F 006F 286D 00374 GOTO MAIN6 00375 ; 0070 212C 00376 CALL RXBYTE ;get battery voltage #38` 0071 080C 00377 MOVF RCVREG, W 0072 00A2 00378 MOVWF BATT 00379 ; 0073 212C 00380 CALL RXBYTE ; #39 00381 ; 0074 212C 00382 CALL RXBYTE ;get vechicle speed #40 ?? 0075 080C 00383 MOVF RCVREG, W 00384 ; movwf speed ; ??? 00385 ; 0076 212C 00386 CALL RXBYTE ;torque sig PSI #41 0077 080C 00387 MOVF RCVREG, W 0078 00A4 00388 MOVWF TSIG 00389 ; 0079 3005 00390 MOVLW .05 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 11 LOC OBJECT CODE LINE SOURCE TEXT VALUE 007A 0096 00391 MOVWF RCNT ;reject 5 bytes 007B 212C 00392 MAIN7 CALL RXBYTE 007C 0B96 00393 DECFSZ RCNT, F 007D 287B 00394 GOTO MAIN7 00395 ; 007E 212C 00396 CALL RXBYTE ;Current gear #47 007F 080C 00397 MOVF RCVREG, W 0080 00A5 00398 MOVWF GEAR 00399 ; 0081 212C 00400 CALL RXBYTE ; #8 00401 ; 0082 212C 00402 CALL RXBYTE ;gear ratio #49 ? 0083 080C 00403 MOVF RCVREG, W 0084 00A7 00404 MOVWF RATIO 00405 ; 0085 3005 00406 MOVLW .05 0086 0096 00407 MOVWF RCNT ;reject 5 bytes 0087 212C 00408 MAIN8 CALL RXBYTE 0088 0B96 00409 DECFSZ RCNT, F 0089 2887 00410 GOTO MAIN8 00411 ; 008A 212C 00412 CALL RXBYTE ;?? #55 008B 080C 00413 MOVF RCVREG, W 00414 ; movwf gear 00415 ; 008C 3006 00416 MOVLW .6 008D 0096 00417 MOVWF RCNT ;reject 6 bytes 008E 212C 00418 MAIN9 CALL RXBYTE 008F 0B96 00419 DECFSZ RCNT, F 0090 288E 00420 GOTO MAIN9 00421 ; 0091 212C 00422 CALL RXBYTE 0092 080C 00423 MOVF RCVREG, W ;get TCC slip value hi #62 0093 00A8 00424 MOVWF TSLIPHI 0094 212C 00425 CALL RXBYTE 0095 080C 00426 MOVF RCVREG, W ;get TCC slip lo #63 0096 00A9 00427 MOVWF TSLIPLO 00428 ; 0097 3009 00429 MOVLW .9 0098 0096 00430 MOVWF RCNT ;reject 9 bytes 0099 212C 00431 MAIN91 CALL RXBYTE 009A 0B96 00432 DECFSZ RCNT, F 009B 2899 00433 GOTO MAIN91 00434 ; 009C 212C 00435 CALL RXBYTE ;get shift fail ??? #73 009D 080C 00436 MOVF RCVREG, W 009E 00AA 00437 MOVWF SFAIL 00438 ; 009F 3008 00439 MOVLW .8 00A0 0096 00440 MOVWF RCNT ;reject 8 bytes 00A1 212C 00441 MAIN10 CALL RXBYTE 00A2 0B96 00442 DECFSZ RCNT, F 00A3 28A1 00443 GOTO MAIN10 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00444 ; 00A4 212C 00445 CALL RXBYTE 00A5 080C 00446 MOVF RCVREG, W ;get PROM ID hi #82 00A6 00AB 00447 MOVWF PROMHI 00A7 212C 00448 CALL RXBYTE 00A8 080C 00449 MOVF RCVREG, W ;get PROM ID lo #83 00A9 00AC 00450 MOVWF PROMLO 00451 ; 00AA 212C 00452 CALL RXBYTE ;get brake etc ?? bits #84 00AB 080C 00453 MOVF RCVREG, W 00AC 00AD 00454 MOVWF BBIT 00455 ; 00AD 212C 00456 CALL RXBYTE ;get gear selector bits #85 00AE 080C 00457 MOVF RCVREG, W 00AF 00AE 00458 MOVWF BBIT2 00459 ; 00460 00461 ; last byte should be #86 00462 ; 00463 ; 00464 ;************************************************************** 00465 ; CALL LCDCLR ; Clear first 00466 ;________________________________ 00467 00B0 0064 00468 CLRWDT ; FEED WATCHDOG 00469 00470 ; First LCD line 00471 ; 00B1 3000 00472 MOVLW .0 00B2 216F 00473 CALL CUR1 ; Position text on line 1 00474 ;__________ 00B3 1FAD 00475 BTFSS BBIT, 7 ;brake applied ? 00B4 28B7 00476 GOTO NOBR 00B5 3042 00477 MOVLW 0X42 ;sho big B 00B6 28B9 00478 GOTO SH1 00B7 0825 00479 NOBR MOVF GEAR, W ;show current gear 00B8 3E31 00480 ADDLW 0X31 ; convert to ASCII 00B9 216A 00481 SH1 CALL PUTLCD 00482 ;__________ 00BA 3054 00483 MOVLW 0X54 ; T 00BB 216A 00484 CALL PUTLCD 00485 ; 00BC 3028 00486 MOVLW .40 00BD 0219 00487 SUBWF TTEMP, W ;trans temp 0-255 = -40-215 C 00BE 1803 28C4 00488 BC T0215 ; = positive show + 0-215 C 00489 ; 00C0 0819 00490 MOVF TTEMP, W ;temp = 40 - ttemp ( - sign ) 00C1 3C28 00491 SUBLW .40 00C2 1797 00492 BSF TS, 7 00C3 28C5 00493 GOTO TDIS ;set show - sign 00494 ; 00C4 1397 00495 T0215 BCF TS, 7 ;was positive sign flag off 00C5 00B1 00496 TDIS MOVWF L_BYTE ;convert to decimal MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00C6 01B0 00497 CLRF H_BYTE 00C7 21E5 00498 CALL B2_BCD 00499 ; 00C8 302D 00500 MOVLW 0X2D ; - sign 00C9 1F97 00501 BTFSS TS, 7 ; show negative -00 00CA 0837 00502 MOVF A2, W ; show positive 000 00CB 216A 00503 CALL PUTLCD 00CC 0838 00504 MOVF A1, W 00CD 216A 00505 CALL PUTLCD 00CE 0839 00506 MOVF A0, W 00CF 216A 00507 CALL PUTLCD 00508 ;_____________ 00D0 3065 00509 MOVLW 0X65 ; e = engine rpm 00D1 216A 00510 CALL PUTLCD 00511 ; 00D2 081A 00512 MOVF ERPMHI, W 00D3 00B0 00513 MOVWF H_BYTE 00D4 081B 00514 MOVF ERPMLO, W 00D5 00B1 00515 MOVWF L_BYTE 00516 ; 00D6 2223 00517 CALL DIV8 ; first divide by 8 00D7 21E5 00518 CALL B2_BCD ; convert rpm value to ASCII 00519 ; 00D8 0836 00520 MOVF A3, W ; display it 00D9 216A 00521 CALL PUTLCD 00DA 0837 00522 MOVF A2, W 00DB 216A 00523 CALL PUTLCD 00DC 0838 00524 MOVF A1, W 00DD 216A 00525 CALL PUTLCD 00DE 0839 00526 MOVF A0, W 00DF 216A 00527 CALL PUTLCD 00528 ;___________ 00E0 3006 00529 MOVLW .6 ; Tr = turbine rpm 00E1 2162 00530 CALL STRING 00531 00E2 081E 00532 MOVF TRPMHI, W 00E3 00B0 00533 MOVWF H_BYTE 00E4 081F 00534 MOVF TRPMLO, W 00E5 00B1 00535 MOVWF L_BYTE 00536 ; 00E6 2223 00537 CALL DIV8 ; first divide by 8 00E7 21E5 00538 CALL B2_BCD ; convert rpm value to ASCII 00539 ; 00E8 0836 00540 MOVF A3, W ; display it 00E9 216A 00541 CALL PUTLCD 00EA 0837 00542 MOVF A2, W 00EB 216A 00543 CALL PUTLCD 00EC 0838 00544 MOVF A1, W 00ED 216A 00545 CALL PUTLCD 00EE 0839 00546 MOVF A0, W 00EF 216A 00547 CALL PUTLCD 00548 ;________________________________ 00549 ; Second line MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 14 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00550 ; 00F0 3000 00551 MOVLW .0 00F1 2173 00552 CALL CUR2 ; Position text on line 1 00553 ;______________ 00554 ; 00F2 0CAE 00555 RRF BBIT2, F ; show gear selector position 00F3 0C2E 00556 RRF BBIT2, W 00F4 3907 00557 ANDLW B'00000111' ; scale selector bits in range 0 - 7 00F5 3E0A 00558 ADDLW .10 ; string numbers are 10 - 17 00F6 2162 00559 CALL STRING 00560 ; 00F7 3025 00561 MOVLW 0X25 ; % sign 00F8 216A 00562 CALL PUTLCD 00563 ; 00F9 0818 00564 MOVF THROTLE, W 00FA 00BA 00565 MOVWF MULCND ; TB * 100 / 256 = throtle % 00FB 3064 00566 MOVLW .100 00FC 00BB 00567 MOVWF MULPLR ; divide throttle byte by 2.56 00FD 0831 00568 MOVF L_BYTE, W 00569 ; 00FE 222B 00570 CALL MPY_F ; multiply by 100 00FF 0830 00571 MOVF H_BYTE, W 0100 00B1 00572 MOVWF L_BYTE ; divide by 256 = move hi to lo 0101 01B0 00573 CLRF H_BYTE 00574 0102 21E5 00575 CALL B2_BCD ; convert to ascii 00576 ; 0103 0838 00577 MOVF A1, W ; display it 0 - 99 % 0104 216A 00578 CALL PUTLCD 0105 0839 00579 MOVF A0, W 0106 216A 00580 CALL PUTLCD 00581 ;_________________ 0107 3069 00582 MOVLW 0X69 ; i = input rpm 0108 216A 00583 CALL PUTLCD 00584 ; 0109 081C 00585 MOVF IRPMHI, W 010A 00B0 00586 MOVWF H_BYTE 010B 081D 00587 MOVF IRPMLO, W 010C 00B1 00588 MOVWF L_BYTE 00589 ; 010D 2223 00590 CALL DIV8 ; first divide by 8 010E 21E5 00591 CALL B2_BCD ; convert rpm value to ASCII 00592 ; 010F 0836 00593 MOVF A3, W ; display it 0110 216A 00594 CALL PUTLCD 0111 0837 00595 MOVF A2, W 0112 216A 00596 CALL PUTLCD 0113 0838 00597 MOVF A1, W 0114 216A 00598 CALL PUTLCD 0115 0839 00599 MOVF A0, W 0116 216A 00600 CALL PUTLCD 00601 ;___________ 0117 3020 00602 MOVLW 0X20 ; space MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0118 216A 00603 CALL PUTLCD 0119 306F 00604 MOVLW 0X6F ; o = output rpm 011A 216A 00605 CALL PUTLCD 00606 ; 011B 0820 00607 MOVF ORPMHI, W 011C 00B0 00608 MOVWF H_BYTE 011D 0821 00609 MOVF ORPMLO, W 011E 00B1 00610 MOVWF L_BYTE 00611 ; 011F 2223 00612 CALL DIV8 ; first divide by 8 0120 21E5 00613 CALL B2_BCD ; convert rpm value to ASCII 00614 ; 0121 0836 00615 MOVF A3, W ; display it 0122 216A 00616 CALL PUTLCD 0123 0837 00617 MOVF A2, W 0124 216A 00618 CALL PUTLCD 0125 0838 00619 MOVF A1, W 0126 216A 00620 CALL PUTLCD 0127 0839 00621 MOVF A0, W 0128 216A 00622 CALL PUTLCD 00623 ; 00624 ;_________________________________________ 00625 IF BIGLCD 00626 ; 00627 MOVLW 0X56 ; V 00628 CALL PUTLCD 00629 ; 00630 MOVF BATT, W ; show battery voltage 00631 MOVWF L_BYTE 00632 CLRF H_BYTE 00633 CALL B2_BCD 00634 ; 00635 MOVF A2, W ; without decimal point 00636 CALL PUTLCD 00637 MOVF A1, W 00638 CALL PUTLCD 00639 MOVF A0, W 00640 CALL PUTLCD 00641 ;________________ 00642 MOVLW 0X52 ; R 00643 CALL PUTLCD 00644 ; 00645 MOVF RATIO, W ; show gear ratio without scaling 0 - 255 00646 MOVWF L_BYTE 00647 CLRF H_BYTE 00648 CALL B2_BCD 00649 ; 00650 MOVF A2, W ; without decimal point & scaling 00651 CALL PUTLCD 00652 MOVF A1, W 00653 CALL PUTLCD 00654 MOVF A0, W 00655 CALL PUTLCD MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 16 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00656 00657 ENDIF 00658 0129 00659 ___________________ 00660 ; 0129 3003 00661 MOVLW .3 ;wait 0,3 s for next round 012A 2187 00662 CALL WAIT100 00663 ; 012B 282E 00664 GOTO MAIN1 ;go to ask next frame 00665 00666 ;*************************************************************** 00667 ; 012C 2932 00668 RXBYTE GOTO TALK 00669 ; 00670 ; 012D 3014 00671 USER MOVLW BAUD_3 012E 008F 00672 MOVWF DLYCNT 012F 0B8F 00673 REDO_2 DECFSZ DLYCNT,SAME 0130 292F 00674 GOTO REDO_2 0131 2932 00675 GOTO TALK ; Loop Until Start Bit Found 00676 ; 0132 018C 00677 TALK CLRF RCVREG ; Clear all bits of RcvReg 0133 1A05 00678 BTFSC PORTA,DR ; check for a Start Bit 00679 ; 0134 292D 00680 GOTO USER ; delay for 104/2 uS 0135 2159 00681 CALL DELAY4 ; delay for 104+104/4 00682 ;*************************************************************** 00683 ; Receiver 00684 ; 0136 00685 RCVR 00686 IF R_NBIT 0136 3008 00687 MOVLW 8 ; 8 Data bits 00688 ELSE 00689 MOVLW 7 ; 7 data bits 00690 ENDIF 00691 ; 0137 008E 00692 MOVWF COUNT 0138 1003 00693 R_NEXT BCF STATUS,CARRY 00694 IF R_MODE 0139 0C8C 00695 RRF RCVREG,SAME ; to set if MSB first or LSB first 00696 ELSE 00697 RLF RCVREG,SAME 00698 ENDIF 013A 1A05 00699 BTFSC PORTA,DR 00700 ; 00701 IF R_MODE 00702 IF R_NBIT 013B 178C 00703 BSF RCVREG,MSB ; Conditional Assembly 00704 ELSE 00705 BSF RCVREG,MSB-1 00706 ENDIF 00707 ELSE 00708 BSF RCVREG,LSB MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00709 ENDIF 00710 ; 013C 2155 00711 CALL DELAYY 013D 0B8E 00712 DECFSZ COUNT,SAME 013E 2938 00713 GOTO R_NEXT 00714 ; 013F 3400 00715 RETLW 0 00716 ; 00717 ;**************************************************** 0140 080C 00718 R_OVER MOVF RCVREG,0 ; Send back What is Just Received 00719 ; 00720 ; 0141 008D 00721 MOVWF XMTREG 00722 ;**************************************************** 00723 ; Transmitter 00724 ; 0142 008D 00725 TX_W MOVWF XMTREG ;send byte from W 00726 ; 0143 00727 TXBYTE ;send byte from xmtreg 0143 00728 XMTR 00729 IF X_NBIT 0143 3008 00730 MOVLW 8 00731 ELSE 00732 MOVLW 7 00733 ENDIF 0144 008E 00734 MOVWF COUNT 00735 ; 00736 IF X_MODE 00737 ELSE 00738 IF X_NBIT 00739 ELSE 00740 RLF XMTREG,SAME 00741 ENDIF 00742 ENDIF 00743 ; 00744 IF INV_TX ; Send Start bit 0145 1585 00745 BSF PORTA,DX 00746 ELSE 00747 BCF PORTA,DX 00748 ENDIF 0146 215B 00749 CALL DELAY1 0147 1003 00750 X_NEXT BCF STATUS,CARRY 00751 ; 00752 IF X_MODE 0148 0C8D 00753 RRF XMTREG,SAME ; Conditional Assembly 00754 ELSE ; to set if MSB first or LSB first 00755 RLF XMTREG,SAME 00756 ENDIF 00757 ; 0149 1803 00758 BTFSC STATUS,CARRY 00759 IF INV_TX ; Send bit 014A 1185 00760 BCF PORTA,DX 00761 ELSE MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00762 BSF PORTA,DX 00763 ENDIF 014B 1C03 00764 BTFSS STATUS,CARRY 00765 IF INV_TX 014C 1585 00766 BSF PORTA,DX 00767 ELSE 00768 BCF PORTA,DX 00769 ENDIF 014D 2157 00770 CALL DELAYX 014E 0B8E 00771 DECFSZ COUNT,SAME 014F 2947 00772 GOTO X_NEXT 00773 IF INV_TX ; Send Stop Bit 0150 1185 00774 BCF PORTA,DX 00775 ELSE 00776 BSF PORTA,DX 00777 ENDIF 0151 215B 00778 CALL DELAY1 00779 ; 00780 IF SBIT2 00781 IF INV_TX 0152 1185 00782 BCF PORTA,DX 00783 ELSE 00784 BSF PORTA,DX 00785 ENDIF 0153 215B 00786 CALL DELAY1 00787 ENDIF 00788 ; 0154 3400 00789 RETLW 0 00790 ; 00791 ; End of Transmission 00792 ; 0155 3023 00793 DELAYY MOVLW BAUD_Y 0156 295E 00794 GOTO SAVE 0157 3023 00795 DELAYX MOVLW BAUD_X 0158 295E 00796 GOTO SAVE 0159 3030 00797 DELAY4 MOVLW BAUD_4 ;1.25 * baud 015A 295E 00798 GOTO SAVE 015B 3026 00799 DELAY1 MOVLW BAUD_1 ; 104 uS for 9600 baud 015C 295E 00800 GOTO SAVE 015D 3026 00801 DELAY2 MOVLW BAUD_2 00802 ; 015E 008F 00803 SAVE MOVWF DLYCNT 015F 0B8F 00804 REDO_1 DECFSZ DLYCNT,SAME 0160 295F 00805 GOTO REDO_1 0161 3400 00806 RETLW 0 00807 ; 00808 ;*********************************************************** 00809 ; 00810 ; LCD I/O routines 00811 ; 00812 00813 ;****** 00814 ; CLKLCD clocks data/command to the lcd by making the EN line MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 19 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00815 ; high then low. 00816 CLKLCD MACRO 00817 BSF LCDPORT,LCDEN ; Lcd enable LOW 00818 BCF LCDPORT,LCDEN ; Lcd enable HIGH 00819 ENDM 00820 ;****** 00821 ; TABSET sets up the lcd table offset pointer before string output 00822 ; starts 00823 00824 TABSET MACRO 00825 MOVLW B'11111111' ; Offset is incremented on each call to 00826 ; table - first call must generate zero value 00827 ; offset. 00828 MOVWF TABOFF 00829 ENDM 00830 ;****** 00831 ; POINT increments the string pointer offset and adds it to the 00832 ; PLC ready for string lookup 00833 00834 POINT MACRO 00835 INCF TABOFF 00836 MOVFW TABOFF 00837 ADDWF PCL 00838 ENDM 00839 ;****** 00840 ; POINT8 increments the string pointer offset and adds it to the 00841 ; PLC ready for string lookup. Sets PCLATH to 3 00842 POINT8 MACRO 00843 MOVLW .3 ; Page 3xx 00844 MOVWF PCLATH 00845 INCF TABOFF 00846 MOVFW TABOFF 00847 ADDWF PCL 00848 ENDM 00849 ;****** 00850 ; POINT9 increments the string pointer offset and adds it to the 00851 ; PLC ready for string lookup. Sets PCLATH to 9 00852 POINT9 MACRO 00853 MOVLW .3 00854 MOVWF PCLATH 00855 INCF TABOFF 00856 MOVFW TABOFF 00857 ADDWF PCL 00858 ENDM 00859 ;****** 00860 ; PAGE0 selects rom page 0 00861 PAGE0 MACRO 00862 BCF PCLATH,3 ; Select rom page 0 00863 ENDM 00864 ;****** 00865 ; PAGE1 selects rom page 1 00866 00867 PAGE1 MACRO MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 20 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00868 BSF PCLATH,3 ; Select rom page 1 00869 ENDM 00870 00871 ;-------------------------------------------------------------------------- 00872 00873 ; Subroutines 00874 00875 ;-------------------------------------------------------------------------- 00876 ;****** 00877 ; STRING sends the string with number in W register - to the lcd 0162 00878 STRING 0162 0091 00879 MOVWF STRNUM 00880 TABSET ; Xero the offset 0163 30FF M MOVLW B'11111111' ; Offset is incremented on each call to M ; table - first call must generate zero value M ; offset. 0164 0094 M MOVWF TABOFF 00881 PAGE1 0165 158A M BSF PCLATH,3 ; Select rom page 1 0166 2300 00882 CALL DOSTR ; Character from string 00883 PAGE0 ; Restore rom page 0167 118A M BCF PCLATH,3 ; Select rom page 0 0168 0008 00884 RETURN 00885 ;****** 00886 ; BCDLCD sends the bcd character in W to lcd 0169 3830 00887 BCDLCD IORLW B'00110000' ; Convert to ascii 00888 ;****** 00889 ; PUTLCD sends the ASCII character in W to lcd 016A 00890 PUTLCD 016A 0093 00891 MOVWF LCDCH 00892 PAGE1 016B 158A M BSF PCLATH,3 ; Select rom page 1 016C 23BD 00893 CALL CHALCD ; Character to lcd 00894 PAGE0 ; Restore rom page 016D 118A M BCF PCLATH,3 ; Select rom page 0 00895 016E 0008 00896 RETURN 00897 ;****** 00898 ; CUR1 and CUR2 are indirect subroutine calls to LCDCUR1/2 00899 ; Enter with character placement in W in range 0 - 15 016F 00900 CUR1 00901 PAGE1 016F 158A M BSF PCLATH,3 ; Select rom page 1 0170 23D9 00902 CALL LCDCUR1 ; Line 1 please 00903 PAGE0 0171 118A M BCF PCLATH,3 ; Select rom page 0 0172 0008 00904 RETURN 00905 0173 00906 CUR2 00907 PAGE1 0173 158A M BSF PCLATH,3 ; Select rom page 1 0174 23DC 00908 CALL LCDCUR2 ; Line 2 please 00909 PAGE0 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0175 118A M BCF PCLATH,3 ; Select rom page 0 0176 0008 00910 RETURN 00911 0177 00912 CUR3 00913 PAGE1 0177 158A M BSF PCLATH,3 ; Select rom page 1 0178 23E0 00914 CALL LCDCUR3 00915 PAGE0 0179 118A M BCF PCLATH,3 ; Select rom page 0 017A 0008 00916 RETURN 00917 00918 ;****** 00919 ; LCDCLR is an indirect call to LCDCLR1 on page 1 00920 017B 00921 LCDCLR 00922 PAGE1 017B 158A M BSF PCLATH,3 ; Select rom page 1 017C 23D6 00923 CALL LCDCLR1 00924 PAGE0 017D 118A M BCF PCLATH,3 ; Select rom page 0 00925 017E 0008 00926 RETURN 00927 ;****** 00928 ; WAITGP waits for the number of ms in GP1 00929 017F 00930 WAITGP 017F 304A 00931 MOVLW .74 ; 1ms DELAY 0180 23EC 00932 CALL DL1 0181 30FF 00933 MOVLW .255 0182 23EC 00934 CALL DL1 Message[305]: Using default destination of 1 (file). 0183 0390 00935 DECF GP1 ; TOTAL DELAY N * 1 ms 0184 1D03 297F 00936 BNZ WAITGP ; Loop until delay is complete 0186 0008 00937 RETURN ; Exit from WAITGP 00938 ; 0187 0095 00939 WAIT100 MOVWF APU ; wait n * 100 ms W = delay 0188 3064 00940 WA101 MOVLW .100 0189 0090 00941 MOVWF GP1 018A 217F 00942 CALL WAITGP ; wait 100 ms Message[305]: Using default destination of 1 (file). 018B 0B95 00943 DECFSZ APU 018C 2988 00944 GOTO WA101 018D 0008 00945 RETURN 00946 00947 ;-------------------------------------------------------------------------- 00948 00949 ; Setup 00950 00951 ;-------------------------------------------------------------------------- 00952 ; 018E 00953 INITLCD 00954 ;****** 00955 ; Reset the lcd MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00956 018E 3014 00957 INITA MOVLW .20 ; Delay for 20 ms to let lcd settle 018F 0090 00958 MOVWF GP1 0190 217F 00959 CALL WAITGP ; Wait for lcd 00960 0191 3003 00961 MOVLW B'00000011' ; Reset 00962 0192 0086 00963 MOVWF LCDPORT ; Command to lcd port 00964 CLKLCD ; Clock the nibble to the lcd 0193 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 0194 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 00965 0195 3006 00966 MOVLW .6 ; Delay to let lcd settle 0196 0090 00967 MOVWF GP1 0197 217F 00968 CALL WAITGP ; Wait for lcd 00969 0198 3003 00970 MOVLW B'00000011' ; Reset 00971 0199 0086 00972 MOVWF LCDPORT ; Command to lcd port 00973 CLKLCD ; Clock the nibble to the lcd 019A 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 019B 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 00974 019C 3005 00975 MOVLW .5 ; Delay for 5 ms to let lcd settle 019D 0090 00976 MOVWF GP1 019E 217F 00977 CALL WAITGP ; Wait for lcd 00978 019F 3003 00979 MOVLW B'00000011' ; Reset 00980 01A0 0086 00981 MOVWF LCDPORT ; Command to lcd port 00982 CLKLCD ; Clock the nibble to the lcd 01A1 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01A2 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 00983 01A3 3005 00984 MOVLW .5 ; Delay for 5 ms to let lcd settle 01A4 0090 00985 MOVWF GP1 01A5 217F 00986 CALL WAITGP ; Wait for lcd 00987 01A6 3002 00988 MOVLW B'00000010' ; 4 bit interface 01A7 0086 00989 MOVWF LCDPORT ; Command to lcd port 00990 CLKLCD ; Clock the nibble to the lcd 01A8 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01A9 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 00991 01AA 3005 00992 MOVLW .5 ; Delay for 5 ms to let lcd settle 01AB 0090 00993 MOVWF GP1 01AC 217F 00994 CALL WAITGP ; Wait for lcd 00995 01AD 3002 00996 MOVLW B'00000010' ; 4 bit interface 01AE 0086 00997 MOVWF LCDPORT ; Command to lcd port 00998 CLKLCD ; Clock the nibble to the lcd 01AF 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01B0 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 23 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00999 01B1 3008 01000 MOVLW B'00001000' ; 2 LINES, 5*7 01B2 0086 01001 MOVWF LCDPORT ; Command to lcd port 01002 CLKLCD ; Clock the nibble to the lcd 01B3 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01B4 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01003 01B5 3005 01004 MOVLW .5 ; Delay for 5 ms to let lcd settle 01B6 0090 01005 MOVWF GP1 01B7 217F 01006 CALL WAITGP ; Wait for lcd 01007 01B8 3000 01008 MOVLW B'00000000' ; Display OFF 01B9 0086 01009 MOVWF LCDPORT ; Command to lcd port 01010 CLKLCD ; Clock the nibble to the lcd 01BA 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01BB 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01011 01BC 3008 01012 MOVLW B'00001000' ; 01BD 0086 01013 MOVWF LCDPORT ; Command to lcd port 01014 CLKLCD ; Clock the nibble to the lcd 01BE 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01BF 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01015 01C0 3005 01016 MOVLW .5 ; Delay for 5 ms to let lcd settle 01C1 0090 01017 MOVWF GP1 01C2 217F 01018 CALL WAITGP ; Wait for lcd 01019 01C3 3000 01020 MOVLW B'00000000' ; Display clear 01C4 0086 01021 MOVWF LCDPORT ; Command to lcd port 01022 CLKLCD ; Clock the nibble to the lcd 01C5 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01C6 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01023 01C7 3001 01024 MOVLW B'00000001' ; 01C8 0086 01025 MOVWF LCDPORT ; Command to lcd port 01026 CLKLCD ; Clock the nibble to the lcd 01C9 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01CA 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01027 01CB 3005 01028 MOVLW .5 ; Delay for 5 ms to let lcd settle 01CC 0090 01029 MOVWF GP1 01CD 217F 01030 CALL WAITGP ; Wait for lcd 01031 01CE 3000 01032 MOVLW B'00000000' ; Entry mode set 01CF 0086 01033 MOVWF LCDPORT ; Command to lcd port 01034 CLKLCD ; Clock the nibble to the lcd 01D0 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01D1 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01035 01D2 3006 01036 MOVLW B'00000110' ; 01D3 0086 01037 MOVWF LCDPORT ; Command to lcd port 01038 CLKLCD ; Clock the nibble to the lcd 01D4 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 24 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01D5 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01039 01D6 3005 01040 MOVLW .5 ; Delay for 5 ms to let lcd settle 01D7 0090 01041 MOVWF GP1 01D8 217F 01042 CALL WAITGP ; Wait for lcd 01043 01D9 3000 01044 MOVLW B'00000000' ; Display on 01DA 0086 01045 MOVWF LCDPORT ; Command to lcd port 01046 CLKLCD ; Clock the nibble to the lcd 01DB 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01DC 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01047 01DD 300C 01048 MOVLW B'00001100' ; 01DE 0086 01049 MOVWF LCDPORT ; Command to lcd port 01050 CLKLCD ; Clock the nibble to the lcd 01DF 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 01E0 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01051 01E1 3005 01052 MOVLW .5 ; Delay for 5 ms to let lcd settle 01E2 0090 01053 MOVWF GP1 01E3 217F 01054 CALL WAITGP ; Wait for lcd 01E4 0008 01055 RETURN 01056 ; 01057 ;******************************************************************** 01058 ; Binary To BCD Conversion Routine 01059 ; The 16 bit binary number is input in locations H_byte and 01060 ; L_byte with the high byte in H_byte. 01061 ; The 5 digit BCD number is returned in R0, R1 and R2 with R0 01062 ; containing the MSD in its right most nibble. 01063 ; 01E5 1003 01064 B2_BCD BCF STATUS,0 ; clear the carry bit 01E6 3010 01065 MOVLW .16 01E7 008E 01066 MOVWF COUNT 01E8 01B2 01067 CLRF R0 01E9 01B3 01068 CLRF R1 01EA 01B4 01069 CLRF R2 01EB 0DB1 01070 LOOP16 RLF L_BYTE, F 01EC 0DB0 01071 RLF H_BYTE, F 01ED 0DB4 01072 RLF R2, F 01EE 0DB3 01073 RLF R1, F 01EF 0DB2 01074 RLF R0, F 01075 ; 01F0 0B8E 01076 DECFSZ COUNT, F 01F1 29F3 01077 GOTO ADJDEC 01F2 2A08 01078 GOTO BCDASC ; continue with ascii conv RETLW 0 01079 ; 01F3 3034 01080 ADJDEC MOVLW R2 01F4 0084 01081 MOVWF FSR 01F5 21FD 01082 CALL ADJBCD 01083 ; 01F6 3033 01084 MOVLW R1 01F7 0084 01085 MOVWF FSR 01F8 21FD 01086 CALL ADJBCD MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 25 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01087 ; 01F9 3032 01088 MOVLW R0 01FA 0084 01089 MOVWF FSR 01FB 21FD 01090 CALL ADJBCD 01091 ; 01FC 29EB 01092 GOTO LOOP16 01093 ; 01FD 3003 01094 ADJBCD MOVLW 3 01FE 0700 01095 ADDWF 0,W 01FF 00AF 01096 MOVWF TEMP 0200 19AF 01097 BTFSC TEMP,3 ; test if result > 7 0201 0080 01098 MOVWF 0 0202 3030 01099 MOVLW 30 0203 0700 01100 ADDWF 0,W 0204 00AF 01101 MOVWF TEMP 0205 1BAF 01102 BTFSC TEMP,7 ; test if result > 7 0206 0080 01103 MOVWF 0 ; save as MSD 0207 3400 01104 RETLW 0 01105 ; 01106 ; continue with ASCII conversion 0208 0834 01107 BCDASC MOVF R2, W ; convert low order byte r0 0209 00B8 01108 MOVWF A1 020A 390F 01109 ANDLW 0X0F 020B 3E30 01110 ADDLW 0X30 ; low order nible = ASCII number 020C 00B9 01111 MOVWF A0 020D 0E38 01112 SWAPF A1, W 020E 390F 01113 ANDLW 0X0F 020F 3E30 01114 ADDLW 0X30 ; hi order nible = ASCII 0210 00B8 01115 MOVWF A1 01116 ; 0211 0833 01117 MOVF R1, W ; convert low order byte r1 0212 00B6 01118 MOVWF A3 0213 390F 01119 ANDLW 0X0F 0214 3E30 01120 ADDLW 0X30 ; low order nible = ASCII number 0215 00B7 01121 MOVWF A2 0216 0E36 01122 SWAPF A3, W 0217 390F 01123 ANDLW 0X0F ; sets also Z-flag 01124 ; 01125 IF ZSUP 0218 1903 2A1C 01126 BZ LZSUP 021A 3E30 01127 ADDLW 0X30 ; if non zero show number 021B 2A1D 01128 GOTO LZ1 021C 3020 01129 LZSUP MOVLW 0X20 ; if zero replace with space 021D 00B6 01130 LZ1 MOVWF A3 01131 ELSE 01132 ADDLW 0X30 ; hi order nible = ASCII 01133 MOVWF A3 01134 ENDIF 01135 ; 021E 0832 01136 MOVF R0, W ; convert low order byte r2 021F 390F 01137 ANDLW 0X0F 0220 3E30 01138 ADDLW 0X30 ; hi order nible = ASCII 0221 00B5 01139 MOVWF A4 ; save but dont care later MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 26 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01140 ; 0222 3400 01141 RETLW 0 01142 ; 01143 ;************************************************************** 01144 ; Divide H_byte & L_byte by 8 01145 ; 0223 3003 01146 DIV8 MOVLW .3 ; 3 * shift right = div by 8 0224 00AF 01147 MOVWF TEMP 0225 1003 01148 DIV81 CLRC 0226 0CB0 01149 RRF H_BYTE, F 0227 0CB1 01150 RRF L_BYTE, F 0228 0BAF 01151 DECFSZ TEMP, F 0229 2A25 01152 GOTO DIV81 022A 3400 01153 RETLW 0 01154 ; 01155 ;******************************************************************* 01156 ; 8x8 Software Multiplier 01157 ; ( Fast Version : Straight Line Code ) 01158 ;******************************************************************* 01159 ; 01160 ; The 16 bit result is stored in 2 bytes 01161 ; 01162 ; Before calling the subroutine " mpy ", the multiplier should 01163 ; be loaded in location " mulplr ", and the multiplicand in 01164 ; " mulcnd " . The 16 bit result is stored in locations 01165 ; H_byte & L_byte. 01166 ; 01167 ;**** Define a macro for adding & right shifting ** 01168 ; 01169 MULT MACRO BIT ; Begin macro 01170 BTFSC MULPLR,BIT 01171 ADDWF H_BYTE,SAME 01172 RRF H_BYTE,SAME 01173 RRF L_BYTE,SAME 01174 ENDM ; End of macro 01175 ; 01176 ; ***************************** Begin Multiplier Routine 022B 01B0 01177 MPY_F CLRF H_BYTE 022C 01B1 01178 CLRF L_BYTE 022D 083A 01179 MOVF MULCND,W ; move the multiplicand to W reg. 022E 1003 01180 BCF STATUS,CARRY ; Clear the carry bit in the status Reg. 01181 MULT 0 022F 183B M BTFSC MULPLR,0 0230 07B0 M ADDWF H_BYTE,SAME 0231 0CB0 M RRF H_BYTE,SAME 0232 0CB1 M RRF L_BYTE,SAME 01182 MULT 1 0233 18BB M BTFSC MULPLR,1 0234 07B0 M ADDWF H_BYTE,SAME 0235 0CB0 M RRF H_BYTE,SAME 0236 0CB1 M RRF L_BYTE,SAME 01183 MULT 2 0237 193B M BTFSC MULPLR,2 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 27 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0238 07B0 M ADDWF H_BYTE,SAME 0239 0CB0 M RRF H_BYTE,SAME 023A 0CB1 M RRF L_BYTE,SAME 01184 MULT 3 023B 19BB M BTFSC MULPLR,3 023C 07B0 M ADDWF H_BYTE,SAME 023D 0CB0 M RRF H_BYTE,SAME 023E 0CB1 M RRF L_BYTE,SAME 01185 MULT 4 023F 1A3B M BTFSC MULPLR,4 0240 07B0 M ADDWF H_BYTE,SAME 0241 0CB0 M RRF H_BYTE,SAME 0242 0CB1 M RRF L_BYTE,SAME 01186 MULT 5 0243 1ABB M BTFSC MULPLR,5 0244 07B0 M ADDWF H_BYTE,SAME 0245 0CB0 M RRF H_BYTE,SAME 0246 0CB1 M RRF L_BYTE,SAME 01187 MULT 6 0247 1B3B M BTFSC MULPLR,6 0248 07B0 M ADDWF H_BYTE,SAME 0249 0CB0 M RRF H_BYTE,SAME 024A 0CB1 M RRF L_BYTE,SAME 01188 MULT 7 024B 1BBB M BTFSC MULPLR,7 024C 07B0 M ADDWF H_BYTE,SAME 024D 0CB0 M RRF H_BYTE,SAME 024E 0CB1 M RRF L_BYTE,SAME 01189 ; 024F 3400 01190 RETLW 0 01191 ; 01192 ; 01193 ;-------------------------------------------------------------------------- 01194 01195 ; 0x300 page of ROM 01196 01197 ;-------------------------------------------------------------------------- 01198 ; Text strings and control subroutines must be stored on the correct 01199 ; page or this pcogram WILL NOT FUNCTION CORRECTLY. 01200 ; Only move code around if you are absoluteley clear as to what you 01201 ; are doing! 01202 0300 01203 ORG 0X300 ; Last page for messages 01204 00000080 01205 LAST EQU B'10000000' ; Value to add to last character in a string 01206 ;****** 01207 ; DOSTR uses CALLSTR table to direct flow to the correct lookup table 01208 ; for lcd strings. Gets string characters and outputs to lcd 01209 0300 01210 DOSTR 0300 3003 01211 MOVLW .3 ; 3xx Page 0301 008A 01212 MOVWF PCLATH ; Keep the pageing ok 0302 0811 01213 MOVFW STRNUM ; Get the string number MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 28 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0303 2309 01214 CALL CALLSTR 0304 0093 01215 MOVWF LCDCH 0305 23BD 01216 CALL CHALCD ; Character to lcd 0306 1F93 01217 BTFSS LCDCH,7 ; Test if end of string flagged - bit 7 set 0307 2B00 01218 GOTO DOSTR ; Loop until all sent 0308 0008 01219 RETURN 01220 ;****** 01221 ; CALLSTR is the dispatch table for lcd string lookup 01222 ; Message[305]: Using default destination of 1 (file). 0309 0782 01223 CALLSTR ADDWF PCL 030A 0000 01224 NOP 030B 2B1D 01225 GOTO MSG1 ; 'Banner display' 030C 2B3F 01226 GOTO MSG2 ; 'version info' 030D 2B4D 01227 GOTO MSG3 ; 'Throttle ' 030E 2B5B 01228 GOTO MSG4 ; 'RPM ' 030F 2B6A 01229 GOTO MSG5 ; 'Fault ' 0310 2B75 01230 GOTO MSG6 ; Tur Turbine 0311 2B7C 01231 GOTO MSG7 ; Tcs TCC slip 0312 2B6A 01232 GOTO MSG5 0313 2B6A 01233 GOTO MSG5 0314 2B85 01234 GOTO MSG10 ; Gear selector messages 0315 2B8C 01235 GOTO MSG11 ; should be 10 - 17 0316 2B93 01236 GOTO MSG12 0317 2B9A 01237 GOTO MSG13 0318 2BA1 01238 GOTO MSG14 0319 2BA8 01239 GOTO MSG15 031A 2BAF 01240 GOTO MSG16 031B 2BB6 01241 GOTO MSG17 031C 2B6A 01242 GOTO MSG5 01243 01244 01245 ;****** 01246 ; THE TEXT STRINGS! 01247 MSG1 POINT8 ; Use macro POINT8 when the string is in 0x200 031D 3003 M MOVLW .3 ; Page 3xx 031E 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 031F 0A94 M INCF TABOFF 0320 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 0321 0782 M ADDWF PCL 01248 ; address area 0322 344A 01249 RETLW 'J' 0323 344E 01250 RETLW 'N' 0324 3420 01251 RETLW ' ' 0325 3441 01252 RETLW 'A' 0326 344C 01253 RETLW 'L' 0327 3444 01254 RETLW 'D' 0328 344C 01255 RETLW 'L' 0329 3420 01256 RETLW ' ' 032A 3444 01257 RETLW 'D' 032B 3469 01258 RETLW 'i' MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 29 LOC OBJECT CODE LINE SOURCE TEXT VALUE 032C 3473 01259 RETLW 's' 032D 3470 01260 RETLW 'p' 032E 346C 01261 RETLW 'l' 032F 3461 01262 RETLW 'a' 0330 3479 01263 RETLW 'y' 0331 34A0 01264 RETLW ' '+LAST 0332 3479 01265 RETLW 'y' 0333 3420 01266 RETLW ' ' 0334 3454 01267 RETLW 'T' 0335 3465 01268 RETLW 'e' 0336 3473 01269 RETLW 's' 0337 3474 01270 RETLW 't' 0338 3431 01271 RETLW '1' 0339 3420 01272 RETLW ' ' 033A 3454 01273 RETLW 'T' 033B 3465 01274 RETLW 'e' 033C 3473 01275 RETLW 's' 033D 3474 01276 RETLW 't' 033E 34B2 01277 RETLW '2'+LAST 01278 ; 01279 MSG2 POINT8 033F 3003 M MOVLW .3 ; Page 3xx 0340 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 0341 0A94 M INCF TABOFF 0342 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 0343 0782 M ADDWF PCL 0344 3476 01280 RETLW 'v' 0345 3420 01281 RETLW ' ' 0346 3431 01282 RETLW '1' 0347 342E 01283 RETLW '.' 0348 3432 01284 RETLW '2' 0349 3431 01285 RETLW '1' 034A 3420 01286 RETLW ' ' 034B 3420 01287 RETLW ' ' 034C 34A0 01288 RETLW ' '+LAST 01289 ; 01290 MSG3 POINT8 034D 3003 M MOVLW .3 ; Page 3xx 034E 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 034F 0A94 M INCF TABOFF 0350 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 0351 0782 M ADDWF PCL 0352 3454 01291 RETLW 'T' 0353 3468 01292 RETLW 'h' 0354 3472 01293 RETLW 'r' 0355 346F 01294 RETLW 'o' 0356 3474 01295 RETLW 't' 0357 3474 01296 RETLW 't' 0358 346C 01297 RETLW 'l' MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 30 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0359 3465 01298 RETLW 'e' 035A 34A0 01299 RETLW ' '+LAST 01300 ; 01301 MSG4 POINT8 035B 3003 M MOVLW .3 ; Page 3xx 035C 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 035D 0A94 M INCF TABOFF 035E 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 035F 0782 M ADDWF PCL 0360 3449 01302 RETLW 'I' 0361 346E 01303 RETLW 'n' 0362 3470 01304 RETLW 'p' 0363 3475 01305 RETLW 'u' 0364 3474 01306 RETLW 't' 0365 3420 01307 RETLW ' ' 0366 3472 01308 RETLW 'r' 0367 3470 01309 RETLW 'p' 0368 346D 01310 RETLW 'm' 0369 34A0 01311 RETLW ' '+LAST 01312 ; 01313 MSG5 POINT8 036A 3003 M MOVLW .3 ; Page 3xx 036B 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 036C 0A94 M INCF TABOFF 036D 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 036E 0782 M ADDWF PCL 036F 3446 01314 RETLW 'F' 0370 3461 01315 RETLW 'a' 0371 3475 01316 RETLW 'u' 0372 346C 01317 RETLW 'l' 0373 3474 01318 RETLW 't' 0374 34A0 01319 RETLW ' '+LAST 01320 ; 01321 MSG6 POINT8 0375 3003 M MOVLW .3 ; Page 3xx 0376 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 0377 0A94 M INCF TABOFF 0378 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 0379 0782 M ADDWF PCL 037A 3454 01322 RETLW 'T' 037B 34F2 01323 RETLW 'r'+LAST 01324 ; 01325 MSG7 POINT8 037C 3003 M MOVLW .3 ; Page 3xx 037D 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 037E 0A94 M INCF TABOFF MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 31 LOC OBJECT CODE LINE SOURCE TEXT VALUE 037F 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 0380 0782 M ADDWF PCL 0381 3420 01326 RETLW ' ' 0382 3452 01327 RETLW 'R' 0383 3470 01328 RETLW 'p' 0384 34B2 01329 RETLW '2'+LAST 01330 ; 01331 ; 01332 ; gear selector messages 10 - 17 01333 ; should be in these positions 01334 MSG10 POINT8 0385 3003 M MOVLW .3 ; Page 3xx 0386 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 0387 0A94 M INCF TABOFF 0388 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 0389 0782 M ADDWF PCL 038A 343F 01335 RETLW '?' 038B 34A0 01336 RETLW ' ' + LAST 01337 MSG11 POINT8 038C 3003 M MOVLW .3 ; Page 3xx 038D 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 038E 0A94 M INCF TABOFF 038F 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 0390 0782 M ADDWF PCL 0391 344F 01338 RETLW 'O' 0392 34C4 01339 RETLW 'D' + LAST 01340 MSG12 POINT8 0393 3003 M MOVLW .3 ; Page 3xx 0394 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 0395 0A94 M INCF TABOFF 0396 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 0397 0782 M ADDWF PCL 0398 343F 01341 RETLW '?' 0399 34A0 01342 RETLW ' ' + LAST 01343 MSG13 POINT8 039A 3003 M MOVLW .3 ; Page 3xx 039B 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 039C 0A94 M INCF TABOFF 039D 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 039E 0782 M ADDWF PCL 039F 3444 01344 RETLW 'D' 03A0 34A0 01345 RETLW ' ' + LAST 01346 MSG14 POINT8 03A1 3003 M MOVLW .3 ; Page 3xx MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 32 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03A2 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 03A3 0A94 M INCF TABOFF 03A4 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 03A5 0782 M ADDWF PCL 03A6 3452 01347 RETLW 'R' 03A7 34A0 01348 RETLW ' ' + LAST 01349 MSG15 POINT8 03A8 3003 M MOVLW .3 ; Page 3xx 03A9 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 03AA 0A94 M INCF TABOFF 03AB 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 03AC 0782 M ADDWF PCL 03AD 344E 01350 RETLW 'N' 03AE 34D0 01351 RETLW 'P' + LAST 01352 MSG16 POINT8 03AF 3003 M MOVLW .3 ; Page 3xx 03B0 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 03B1 0A94 M INCF TABOFF 03B2 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 03B3 0782 M ADDWF PCL 03B4 3431 01353 RETLW '1' 03B5 34A0 01354 RETLW ' ' + LAST 01355 MSG17 POINT8 03B6 3003 M MOVLW .3 ; Page 3xx 03B7 008A M MOVWF PCLATH Message[305]: Using default destination of 1 (file). 03B8 0A94 M INCF TABOFF 03B9 0814 M MOVFW TABOFF Message[305]: Using default destination of 1 (file). 03BA 0782 M ADDWF PCL 03BB 3432 01356 RETLW '2' 03BC 34A0 01357 RETLW ' ' + LAST 01358 ; 01359 ;-------------------------------------------------------------------------- 01360 01361 ; Subroutines to handle the lcd 01362 01363 ;-------------------------------------------------------------------------- 01364 ; CHALCD writes the character in W register to the lcd. 01365 ; On entry, the display character is in LCDCH. 03BD 01366 CHALCD 01367 ; Get the upper nibble and load to the lcd port 01368 03BD 0E13 01369 SWAPF LCDCH,W ; Get the ms nibble to ls position 03BE 3907 01370 ANDLW 07H ; Strip to ms nibble in ls position, 01371 ; and mask top bit in case this is the lset 01372 ; character in a string MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 33 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03BF 0086 01373 MOVWF LCDPORT ; Data to lcd port 03C0 1606 01374 BSF LCDPORT,LCDRS ; Select lcd data 01375 ; Clock the ms nibble to the lcd 01376 CLKLCD 03C1 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 03C2 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01377 ; Get the lower nibble and load to the lcd port 03C3 0813 01378 MOVFW LCDCH ; Get back the character 03C4 390F 01379 ANDLW 0FH ; Strip to ms nibble in ls position 03C5 0086 01380 MOVWF LCDPORT ; Data to lcd port 03C6 1606 01381 BSF LCDPORT,LCDRS ; Select lcd data 01382 ; Clock the ls nibble to the lcd. 01383 CLKLCD 03C7 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 03C8 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 03C9 1206 01384 BCF LCDPORT,LCDRS 03CA 2BE4 01385 GOTO LCD64 ; Delay then exit from CHALCD 01386 ;***** 01387 ; COMLCD writes the command in W register to the lcd 01388 ; On entry, the command character is in LCDCH. 03CB 01389 COMLCD 01390 ; Get the upper nibble and load to the lcd port 03CB 0E13 01391 SWAPF LCDCH,W ; Get the ms nibble to ls position 03CC 390F 01392 ANDLW 0FH ; Strip to ms nibble in ls position 03CD 0086 01393 MOVWF LCDPORT ; Command to lcd port 01394 ; Clock the ms nibble to the lcd 01395 CLKLCD 03CE 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 03CF 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 01396 ; Get the lower nibble and load to the lcd port 03D0 0813 01397 MOVFW LCDCH ; Get back the character 03D1 390F 01398 ANDLW 0FH ; Strip to ms nibble in ls position 03D2 0086 01399 MOVWF LCDPORT ; Command to lcd port 01400 ; Clock the ls nibble to the lcd. 01401 CLKLCD 03D3 1686 M BSF LCDPORT,LCDEN ; Lcd enable LOW 03D4 1286 M BCF LCDPORT,LCDEN ; Lcd enable HIGH 03D5 2BE6 01402 GOTO LCD2 ; Delay then exit from COMLCD 01403 ;****** 01404 ; LCDCL1R clears the display and resets the cursor 03D6 3001 01405 LCDCLR1 MOVLW LCDCLER ; LCD clear command 03D7 0093 01406 MOVWF LCDCH 03D8 2BCB 01407 GOTO COMLCD 01408 ;****** 01409 ; LCDCUR1 sets cursor to position on line 1 using value in W register 03D9 3880 01410 LCDCUR1 IORLW LCDCM ; Cursor move command 03DA 0093 01411 MOVWF LCDCH 03DB 2BCB 01412 GOTO COMLCD 01413 ;****** 01414 ; LCDCUR2 sets cursor to position on line 2 using value in W register 03DC 3880 01415 LCDCUR2 IORLW LCDCM ; Cursor move command 03DD 0093 01416 MOVWF LCDCH 03DE 1713 01417 BSF LCDCH,6 ; This bit set for line 2 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 34 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03DF 2BCB 01418 GOTO COMLCD 01419 ;****** 01420 ; 03E0 3014 01421 LCDCUR3 MOVLW .20 ; CURSOR POSITION ABSOLUTE 20 03E1 3880 01422 IORLW LCDCM 03E2 0093 01423 MOVWF LCDCH 03E3 2BCB 01424 GOTO COMLCD 01425 ;****** 01426 ; LCD64/2 gives a delay of 64us or 1.6ms while the lcd accepts the 01427 ; data or command. 01428 03E4 3016 01429 LCD64 MOVLW .22 ; Gives 65 us delay 03E5 2BEC 01430 GOTO DL1 01431 ; 03E6 3041 01432 LCD2 MOVLW .65 ; Gives 1.6ms delay 03E7 23EC 01433 CALL DL1 03E8 30FF 01434 MOVLW .255 03E9 23EC 01435 CALL DL1 03EA 30FF 01436 MOVLW .255 03EB 2BEC 01437 GOTO DL1 01438 ; 03EC 008F 01439 DL1 MOVWF DLYCNT 03ED 038F 01440 DL11 DECF DLYCNT, F 03EE 1D03 01441 BTFSS STATUS, Z 03EF 2BED 01442 GOTO DL11 03F0 3400 01443 RETLW .0 ; Exit from CHA/COMLCD routines 01444 ; 01445 END MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 35 SYMBOL TABLE LABEL VALUE A0 00000039 A1 00000038 A2 00000037 A3 00000036 A4 00000035 ADJBCD 000001FD ADJDEC 000001F3 APU 00000015 B2_BCD 000001E5 B8192_4 00000001 B9600_4 00000000 B9600_8 00000000 BATT 00000022 BAUD_1 00000026 BAUD_2 00000026 BAUD_3 00000014 BAUD_4 00000030 BAUD_X 00000023 BAUD_Y 00000023 BBIT 0000002D BBIT2 0000002E BCDASC 00000208 BCDLCD 00000169 BIGLCD 00000000 C 00000000 CALLSTR 00000309 CARRY 00000000 CHALCD 000003BD CHPT 00000012 CLKLCD COMLCD 000003CB COUNT 0000000E CUR1 0000016F CUR2 00000173 CUR3 00000177 DC 00000001 DELAY1 0000015B DELAY2 0000015D DELAY4 00000159 DELAYX 00000157 DELAYY 00000155 DIV8 00000223 DIV81 00000225 DL1 000003EC DL11 000003ED DLYCNT 0000000F DOSTR 00000300 DR 00000004 DX 00000003 EEADR 00000009 EECON1 00000088 EECON2 00000089 EEDATA 00000008 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 36 SYMBOL TABLE LABEL VALUE EEIE 00000006 EEIF 00000004 ERPMHI 0000001A ERPMLO 0000001B F 00000001 FSR 00000004 GEAR 00000025 GIE 00000007 GP1 00000010 H_BYTE 00000030 INDF 00000000 INITA 0000018E INITLCD 0000018E INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 INV_TX 00000001 IRP 00000007 IRPMHI 0000001C IRPMLO 0000001D LAST 00000080 LCD2 000003E6 LCD64 000003E4 LCDCH 00000013 LCDCLER 00000001 LCDCLR 0000017B LCDCLR1 000003D6 LCDCM 00000080 LCDCUR1 000003D9 LCDCUR2 000003DC LCDCUR3 000003E0 LCDEN 00000005 LCDPORT 00000006 LCDRS 00000004 LOOP16 000001EB LSB 00000000 LZ1 0000021D LZSUP 0000021C L_BYTE 00000031 MAIN0 00000005 MAIN1 0000002E MAIN10 000000A1 MAIN2 00000039 MAIN3 0000003F MAIN4 00000045 MAIN5 00000047 MAIN6 0000006D MAIN7 0000007B MAIN8 00000087 MAIN9 0000008E MAIN91 00000099 MPY_F 0000022B MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 37 SYMBOL TABLE LABEL VALUE MSB 00000007 MSG1 0000031D MSG10 00000385 MSG11 0000038C MSG12 00000393 MSG13 0000039A MSG14 000003A1 MSG15 000003A8 MSG16 000003AF MSG17 000003B6 MSG2 0000033F MSG3 0000034D MSG4 0000035B MSG5 0000036A MSG6 00000375 MSG7 0000037C MULCND 0000003A MULPLR 0000003B MULT NOBR 000000B7 NOT_PD 00000003 NOT_RBPU 00000007 NOT_TO 00000004 OK 0000001E OPTION_REG 00000081 ORPMHI 00000020 ORPMLO 00000021 PAGE0 PAGE1 PCL 00000002 PCLATH 0000000A POINT POINT8 POINT9 PORTA 00000005 PORTB 00000006 PROMHI 0000002B PROMLO 0000002C PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 PUTLCD 0000016A R0 00000032 R1 00000033 R2 00000034 RATIO 00000027 RBIE 00000003 RBIF 00000000 RCNT 00000016 RCVR 00000136 RCVREG 0000000C RD 00000000 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 38 SYMBOL TABLE LABEL VALUE REDO_1 0000015F REDO_2 0000012F RP0 00000005 RP1 00000006 RXBYTE 0000012C R_MODE 00000001 R_NBIT 00000001 R_NEXT 00000138 R_OVER 00000140 SAME 00000001 SAVE 0000015E SBIT2 00000001 SFAIL 0000002A SH1 000000B9 SPEED 00000023 STATUS 00000003 STRING 00000162 STRNUM 00000011 T0215 000000C4 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 TABOFF 00000014 TABSET TALK 00000132 TDIS 000000C5 TDUTY 00000026 TEMP 0000002F THROTLE 00000018 TMR0 00000001 TRISA 00000085 TRISB 00000086 TRPMHI 0000001E TRPMLO 0000001F TS 00000017 TSIG 00000024 TSLIPHI 00000028 TSLIPLO 00000029 TTEMP 00000019 TXBYTE 00000143 TX_W 00000142 USER 0000012D W 00000000 WA101 00000188 WAIT100 00000187 WAITGP 0000017F WR 00000001 WREN 00000002 WRERR 00000003 XMTR 00000143 XMTREG 0000000D X_MODE 00000001 MPASM 01.50 Released PICALDL.ASM 3-7-1999 2:44:11 PAGE 39 SYMBOL TABLE LABEL VALUE X_NBIT 00000001 X_NEXT 00000147 Z 00000002 ZSUP 00000001 _CP_OFF 00003FFF _CP_ON 0000000F _HS_OSC 00003FFE _LP_OSC 00003FFC _PWRTE_OFF 00003FFF _PWRTE_ON 00003FF7 _RC_OSC 00003FFF _WDT_OFF 00003FFB _WDT_ON 00003FFF _XT_OSC 00003FFD __16F84 00000001 ___________________ 00000129 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 0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0240 : XXXXXXXXXXXXXXXX ---------------- ---------------- ---------------- 0300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0340 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0380 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 03C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX X--------------- All other memory blocks unused. Program Memory Words Used: 830 Program Memory Words Free: 194 Errors : 0 Warnings : 1 reported, 0 suppressed Messages : 36 reported, 0 suppressed