You can reduce the time a tiny bit by performing the operations manually, but just by a few Instruction cycles.
Here is what I ran in the MPLAB Simulator.
The times are listed for each method.
Code:'**************************************************************** '* Name : DigTest.pbp * '* Author : TABsoft * '* Notice : Copyright (c) 2015 TABSoft * '* : All Rights Reserved * '* Date : 2/12/2015 * '* Version : 1.0 * '* Notes : PIC MCU @ 4MHz * '* : * '**************************************************************** '*****PIC MCU Configuration Fuses (MPASM)***** #IF __PROCESSOR__ = "18F4620" #CONFIG CONFIG OSC = ECIO6 ; EC oscillator, port function on RA6 ;CONFIG OSC = INTIO67 ; Internal oscillator block, port function on RA6 and RA7 ;CONFIG WDT = OFF ; WDT disabled (control is placed on the SWDTEN bit) CONFIG FCMEN = OFF ; Fail-Safe Clock Monitor disabled CONFIG IESO = OFF ; Oscillator Switchover mode disabled CONFIG PWRT = OFF ; PWRT disabled CONFIG BOREN = SBORDIS ; Brown-out Reset enabled in hardware only (SBOREN is disabled) CONFIG BORV = 3 ; Minimum setting CONFIG WDT = ON ; WDT enabled CONFIG WDTPS = 512 ; 1:512 CONFIG CCP2MX = PORTC ; CCP2 input/output is multiplexed with RC1 CONFIG PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset CONFIG LPT1OSC = OFF ; Timer1 configured for higher power operation CONFIG MCLRE = ON ; MCLR pin enabled; RE3 input pin disabled CONFIG STVREN = ON ; Stack full/underflow will cause Reset CONFIG LVP = OFF ; Single-Supply ICSP disabled CONFIG XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode) CONFIG DEBUG = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins CONFIG CP0 = OFF ; Block 0 (000800-003FFFh) not code-protected CONFIG CP1 = OFF ; Block 1 (004000-007FFFh) not code-protected CONFIG CP2 = OFF ; Block 2 (008000-00BFFFh) not code-protected CONFIG CP3 = OFF ; Block 3 (00C000-00FFFFh) not code-protected CONFIG CPB = OFF ; Boot block (000000-0007FFh) not code-protected CONFIG CPD = OFF ; Data EEPROM not code-protected CONFIG WRT0 = OFF ; Block 0 (000800-003FFFh) not write-protected CONFIG WRT1 = OFF ; Block 1 (004000-007FFFh) not write-protected CONFIG WRT2 = OFF ; Block 2 (008000-00BFFFh) not write-protected CONFIG WRT3 = OFF ; Block 3 (00C000-00FFFFh) not write-protected CONFIG WRTC = OFF ; Configuration registers (300000-3000FFh) not write-protected CONFIG WRTB = OFF ; Boot Block (000000-0007FFh) not write-protected CONFIG WRTD = OFF ; Data EEPROM not write-protected CONFIG EBTR0 = OFF ; Block 0 (000800-003FFFh) not protected from table reads executed in other blocks CONFIG EBTR1 = OFF ; Block 1 (004000-007FFFh) not protected from table reads executed in other blocks CONFIG EBTR2 = OFF ; Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks CONFIG EBTR3 = OFF ; Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks CONFIG EBTRB = OFF ; Boot Block (000000-0007FFh) not protected from table reads executed in other blocks #ENDCONFIG #else #ERROR "This program requires a PIC 18F4620 MCU" #endif OSCCON = $60 ' Set PIC to 4Mhz & ECIO Clock Mode DEFINE OSC 4 ADCON0.0 = 0 ' A/D Converter module is disabled ADCON1 = $0F ' %0000 1111 AN2=VSS, AN3=VDD, AN12-0 = Digital ADCON2 = $00 ' %0000 0000 TRISB = %11111111 ' Set PORTB as input INTCON2.7 = 0 ' Enable PORTB pullups TRISC = TRISC & %11011111 ' Set PORTC pin directions (pin5 output to RTC VCC2) '*****Define LCD registers and bits***** define LCD_BITS 4 define LCD_LINES 2 ' Set to number of lines for the LCD Define LCD_DREG PORTD Define LCD_DBIT 4 Define LCD_RSREG PORTE Define LCD_RSBIT 0 Define LCD_EREG PORTE Define LCD_EBIT 1 define LCD_RWREG PORTE define LCD_RWBIT 2 define LCD_COMMANDUS 1500 define LCD_DATAUS 44 pressure var word tmpDig0 var byte tmpDig1 var byte tmpDig2 var byte tmpDig3 var byte '*****Initialize LCD***** Low LATE.2 ' LCD R/W line low (W) Pause 500 ' Wait .5 second for LCD to Initialize main: lcdout $fe,1 pressure = 1102 'Start Stopwatch in MPLAB Simulator tmpDig0 = pressure dig 0 tmpDig1 = pressure dig 1 tmpDig2 = pressure dig 2 tmpDig3 = pressure dig 3 'Stop Stopwatch in MPLAB Simulator = 2962 Instruction Cycles @4MHz = 2.962ms (Fosc/4) lcdout $fe,1,dec tmpDig3, dec tmpDig2, dec tmpDig1, dec tmpDig0 pause 500 'Start Stopwatch in MPLAB Simulator tmpDig0 = pressure // 10 tmpDig1 = pressure / 10 tmpDig2 = pressure / 100 tmpDig3 = pressure / 1000 tmpDig1 = tmpDig1 // 10 tmpDig2 = tmpDig2 // 10 tmpDig3 = tmpDig3 // 10 'Stop Stopwatch in MPLAB Simulator = 2086 Instruction Cycles @4MHz = 2.086ms (Fosc/4) lcdout $fe,$c0,dec tmpDig3, dec tmpDig2, dec tmpDig1, dec tmpDig0 pause 500 goto main end




Bookmarks