Problem is a floating point calculation that produces a result of 4 rather than expected 8 under “very” specific floating point values Seems to be dependent on code locations and code before the essentially “7.00 minus approx -1” calculation Using Compiler version V3.5.5.4 Device = 16LF1937 __Config _Config1, 0x09EC ;FOSC_INTOSC & WDTE_SWDTEN & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF __Config _Config2, 0x1EFF ;WRT_OFF & VCAPEN_OFF & PLLEN_OFF & STVREN_ON & BORV_LO & LVP_OFF Source code Snippets:- 596: Boot: 597: GoTo Start 04B5 3198 MOVLP 0x18 04B6 2800 GOTO 0 -------- 3240: Org 0x1800 3241: Start: 3242: Gain710 = 0.86705203 ;0x1FF75D7E @addr 0x0C8 1800 301F MOVLW 0x1f 1801 0021 MOVLB 0x1 1802 00CB MOVWF 0x4b 1803 30F7 MOVLW 0xf7 1804 00CA MOVWF 0x4a 1805 305D MOVLW 0x5d 1806 00C9 MOVWF 0x49 1807 307E MOVLW 0x7e 1808 00C8 MOVWF 0x48 3243: F_pH_ADCTC = -0.86705195 ; 0x1EF7DD7E @addr 0x0B8 1809 301E MOVLW 0x1e 180A 00BB MOVWF 0x3b 180B 30F7 MOVLW 0xf7 180C 00BA MOVWF 0x3a 180D 30DD MOVLW 0xdd 180E 00B9 MOVWF 0x39 180F 307E MOVLW 0x7e 1810 00B8 MOVWF 0x38 3244: GoSub Calc_Test ;[The problem area] 1811 0020 MOVLB 0 1812 3191 MOVLP 0x11 1813 2124 CALL 0x124 3245: B_Temp = F_pH_Val * 10 ;[Get 40, wrong answer] B_Temp @addr 0x04C 1814 01BB CLRF 0x3b 1815 01BA CLRF 0x3a 1816 3020 MOVLW 0x20 1817 00B9 MOVWF 0x39 1818 3082 MOVLW 0x82 1819 00B8 MOVWF 0x38 181A 0021 MOVLB 0x1 181B 083F MOVF 0x3f, W 181C 0020 MOVLB 0 181D 00BF MOVWF 0x3f 181E 0021 MOVLB 0x1 181F 083E MOVF 0x3e, W 1820 0020 MOVLB 0 1821 00BE MOVWF 0x3e 1822 0021 MOVLB 0x1 1823 083D MOVF 0x3d, W 1824 0020 MOVLB 0 1825 00BD MOVWF 0x3d 1826 0021 MOVLB 0x1 1827 083C MOVF 0x3c, W 1828 0020 MOVLB 0 1829 00BC MOVWF 0x3c 182A 3183 MOVLP 0x3 182B 238C CALL 0x38c 182C 3183 MOVLP 0x3 182D 23E9 CALL 0x3e9 182E 00CC MOVWF 0x4c 3246: ; 3247: F_pH_ADCTC = -0.86705201 ; 0x1FF7DD7E OK 182F 301F MOVLW 0x1f 1830 0021 MOVLB 0x1 1831 00BB MOVWF 0x3b 1832 30F7 MOVLW 0xf7 1833 00BA MOVWF 0x3a 1834 30DD MOVLW 0xdd 1835 00B9 MOVWF 0x39 1836 307E MOVLW 0x7e 1837 00B8 MOVWF 0x38 3248: GoSub Calc_Test ;[Problem area] 1838 0020 MOVLB 0 1839 3191 MOVLP 0x11 183A 2124 CALL 0x124 3249: B_Temp = F_pH_Val * 10 ;Get 80, which is right answer 183B 01BB CLRF 0x3b 183C 01BA CLRF 0x3a 183D 3020 MOVLW 0x20 183E 00B9 MOVWF 0x39 183F 3082 MOVLW 0x82 1840 00B8 MOVWF 0x38 1841 0021 MOVLB 0x1 1842 083F MOVF 0x3f, W 1843 0020 MOVLB 0 1844 00BF MOVWF 0x3f 1845 0021 MOVLB 0x1 1846 083E MOVF 0x3e, W 1847 0020 MOVLB 0 1848 00BE MOVWF 0x3e 1849 0021 MOVLB 0x1 184A 083D MOVF 0x3d, W 184B 0020 MOVLB 0 184C 00BD MOVWF 0x3d 184D 0021 MOVLB 0x1 184E 083C MOVF 0x3c, W 184F 0020 MOVLB 0 1850 00BC MOVWF 0x3c 1851 3183 MOVLP 0x3 1852 238C CALL 0x38c 1853 3183 MOVLP 0x3 1854 23E9 CALL 0x3e9 1855 00CC MOVWF 0x4c 3250: While 1 = 1 : Wend 1856 33FF BRA 0x1ff 3251: 1124 0020 MOVLB 0 2437: Org 0x1124 2438: Calc_Test: 2439: If F_pH_ADCTC >= 0.0 Then ;Note Should Fail this test and do ELSE at line 2442: 1125 01BB CLRF 0x3b 1126 01BA CLRF 0x3a 1127 01B9 CLRF 0x39 1128 01B8 CLRF 0x38 1129 0021 MOVLB 0x1 112A 083B MOVF 0x3b, W 112B 0020 MOVLB 0 112C 00BF MOVWF 0x3f 112D 0021 MOVLB 0x1 112E 083A MOVF 0x3a, W 112F 0020 MOVLB 0 1130 00BE MOVWF 0x3e 1131 0021 MOVLB 0x1 1132 0839 MOVF 0x39, W 1133 0020 MOVLB 0 1134 00BD MOVWF 0x3d 1135 0021 MOVLB 0x1 1136 0838 MOVF 0x38, W 1137 0020 MOVLB 0 1138 00BC MOVWF 0x3c 1139 3181 MOVLP 0x1 113A 21DC CALL 0x1dc 113B 3C01 SUBLW 0x1 113C 3191 MOVLP 0x11 113D 1903 BTFSC 0x3, 0x2 113E 2973 GOTO 0x173 2440: F_pH_ADCTC = F_pH_ADCTC / Gain47 113F 0021 MOVLB 0x1 1140 083B MOVF 0x3b, W 1141 0020 MOVLB 0 1142 00BB MOVWF 0x3b 1143 0021 MOVLB 0x1 1144 083A MOVF 0x3a, W 1145 0020 MOVLB 0 1146 00BA MOVWF 0x3a 1147 0021 MOVLB 0x1 1148 0839 MOVF 0x39, W 1149 0020 MOVLB 0 114A 00B9 MOVWF 0x39 114B 0021 MOVLB 0x1 114C 0838 MOVF 0x38, W 114D 0020 MOVLB 0 114E 00B8 MOVWF 0x38 114F 0021 MOVLB 0x1 1150 0847 MOVF 0x47, W 1151 0020 MOVLB 0 1152 00BF MOVWF 0x3f 1153 0021 MOVLB 0x1 1154 0846 MOVF 0x46, W 1155 0020 MOVLB 0 1156 00BE MOVWF 0x3e 1157 0021 MOVLB 0x1 1158 0845 MOVF 0x45, W 1159 0020 MOVLB 0 115A 00BD MOVWF 0x3d 115B 0021 MOVLB 0x1 115C 0844 MOVF 0x44, W 115D 0020 MOVLB 0 115E 00BC MOVWF 0x3c 115F 3183 MOVLP 0x3 1160 2314 CALL 0x314 1161 083B MOVF 0x3b, W 1162 0021 MOVLB 0x1 1163 00BB MOVWF 0x3b 1164 0020 MOVLB 0 1165 083A MOVF 0x3a, W 1166 0021 MOVLB 0x1 1167 00BA MOVWF 0x3a 1168 0020 MOVLB 0 1169 0839 MOVF 0x39, W 116A 0021 MOVLB 0x1 116B 00B9 MOVWF 0x39 116C 0020 MOVLB 0 116D 0838 MOVF 0x38, W 116E 0021 MOVLB 0x1 116F 00B8 MOVWF 0x38 1170 0020 MOVLB 0 1171 3191 MOVLP 0x11 1172 29A4 GOTO 0x1a4 2441: Else 2442: F_pH_ADCTC = F_pH_ADCTC / Gain710 1173 0021 MOVLB 0x1 1174 083B MOVF 0x3b, W 1175 0020 MOVLB 0 1176 00BB MOVWF 0x3b 1177 0021 MOVLB 0x1 1178 083A MOVF 0x3a, W 1179 0020 MOVLB 0 117A 00BA MOVWF 0x3a 117B 0021 MOVLB 0x1 117C 0839 MOVF 0x39, W 117D 0020 MOVLB 0 117E 00B9 MOVWF 0x39 117F 0021 MOVLB 0x1 1180 0838 MOVF 0x38, W 1181 0020 MOVLB 0 1182 00B8 MOVWF 0x38 1183 0021 MOVLB 0x1 1184 084B MOVF 0x4b, W 1185 0020 MOVLB 0 1186 00BF MOVWF 0x3f 1187 0021 MOVLB 0x1 1188 084A MOVF 0x4a, W 1189 0020 MOVLB 0 118A 00BE MOVWF 0x3e 118B 0021 MOVLB 0x1 118C 0849 MOVF 0x49, W 118D 0020 MOVLB 0 118E 00BD MOVWF 0x3d 118F 0021 MOVLB 0x1 1190 0848 MOVF 0x48, W 1191 0020 MOVLB 0 1192 00BC MOVWF 0x3c 1193 3183 MOVLP 0x3 1194 2314 CALL 0x314 1195 083B MOVF 0x3b, W 1196 0021 MOVLB 0x1 1197 00BB MOVWF 0x3b 1198 0020 MOVLB 0 1199 083A MOVF 0x3a, W 119A 0021 MOVLB 0x1 119B 00BA MOVWF 0x3a 119C 0020 MOVLB 0 119D 0839 MOVF 0x39, W 119E 0021 MOVLB 0x1 119F 00B9 MOVWF 0x39 11A0 0020 MOVLB 0 11A1 0838 MOVF 0x38, W 11A2 0021 MOVLB 0x1 11A3 00B8 MOVWF 0x38 2443: EndIf 2444: F_pH_Val = 7.00 - F_pH_ADCTC 11A4 0021 MOVLB 0x1 11A5 083B MOVF 0x3b, W 11A6 0020 MOVLB 0 11A7 00BF MOVWF 0x3f 11A8 0021 MOVLB 0x1 11A9 083A MOVF 0x3a, W 11AA 0020 MOVLB 0 11AB 00BE MOVWF 0x3e 11AC 0021 MOVLB 0x1 11AD 0839 MOVF 0x39, W 11AE 0020 MOVLB 0 11AF 00BD MOVWF 0x3d 11B0 0021 MOVLB 0x1 11B1 0838 MOVF 0x38, W 11B2 0020 MOVLB 0 11B3 00BC MOVWF 0x3c 11B4 01BB CLRF 0x3b 11B5 01BA CLRF 0x3a 11B6 3060 MOVLW 0x60 11B7 00B9 MOVWF 0x39 11B8 3081 MOVLW 0x81 11B9 00B8 MOVWF 0x38 11BA 3182 MOVLP 0x2 11BB 225A CALL 0x25a 11BC 083B MOVF 0x3b, W 11BD 0021 MOVLB 0x1 11BE 00BF MOVWF 0x3f 11BF 0020 MOVLB 0 11C0 083A MOVF 0x3a, W 11C1 0021 MOVLB 0x1 11C2 00BE MOVWF 0x3e 11C3 0020 MOVLB 0 11C4 0839 MOVF 0x39, W 11C5 0021 MOVLB 0x1 11C6 00BD MOVWF 0x3d 11C7 0020 MOVLB 0 11C8 0838 MOVF 0x38, W 11C9 0021 MOVLB 0x1 11CA 00BC MOVWF 0x3c 2445: Return 11CB 0020 MOVLB 0 11CC 0008 RETURN 2446: -------- 01DC 083D MOVF 0x3d, W 01DD 0639 XORWF 0x39, W 01DE 00C5 MOVWF 0x45 01DF 1BC5 BTFSC 0x45, 0x7 01E0 3234 BRA 0x34 01E1 1BBD BTFSC 0x3d, 0x7 --------