Hi All,

I am still waiting for my PIC16F1783 chips to arrive so I have been doing some testing with a PIC16F1829.
I am getting good results but unsure if my code can be improved. Here is the stripped down version for comment.

Code:
' Connect LCD D4 to RC4 (Pin 6)
' Connect LCD D5 to RC5 (Pin 5)
' Connect LCD D6 to RC6 (Pin 8) 
' Connect LCD D7 to RC7 (Pin 9)
' Connect LCD RS to RC3 (Pin 7)
' Connect LCD E  to RC2 (Pin 14)
' Connect Data Line 1 to RA0 (Pin 19)
' Connect Data Line 2 to RA1 (Pin 18)
' Connect Data Line 3 to RA2 (Pin 17)
' Connect Data Line 4 to RA3 (Pin 4)
' Connect Data Line 5 to RA4 (Pin 3)
' Connect Data Line 6 to RA5 (Pin 2)
' Connect Data Line 7 to RB4 (Pin 13)
' Connect Data Line 8 to RB5 (Pin 12)
' Connect Data Line 9 to RB6 (Pin 11)

#CONFIG
        __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _MCLRE_OFF & _BOREN_OFF
        __config _CONFIG2, _PLLEN_ON & _LVP_OFF & _WRT_HALF
#ENDCONFIG

OSCCON = %11110000              ; Fosc = 32MHz
                                ; Clock determined by Fosc<1:0> Config Word
DEFINE OSC 32                   ; Define socillator as 32MHz

' Define LCD registers and bits
Define	LCD_DREG	PORTC
Define	LCD_DBIT	4
Define	LCD_RSREG	PORTC
Define	LCD_RSBIT	3
Define	LCD_EREG	PORTC
Define	LCD_EBIT	2
Define	LCD_BITS	4
Define	LCD_LINES	4
PAUSE 500               ' Pause to initialise LCD Display


' Define program variables
DisplayFlag var BIT
DisplayFlag = 0

Counter1    var BYTE
Counter2    var BYTE
Counter3    var BYTE
Counter4    var BYTE
Counter5    var BYTE
Counter6    var BYTE
Counter7    var BYTE
Counter8    var BYTE
Counter9    var BYTE
IOCA        var BYTE
IOCB        var BYTE

Counter1 = 0
Counter2 = 0
Counter3 = 0
Counter4 = 0
Counter5 = 0
Counter6 = 0
Counter7 = 0
Counter8 = 0
Counter9 = 0


ANSELA = 0                      ' Disable PORTA ADC
ANSELB = 0                      ' Disable PORTB ADC
ANSELC = 0                      ' Disable PORTC ADC
DACCON0.7 = 0                   ' Disable DAC
CM1CON0.7 = 0                   ' Disable comparator 1
CM2CON0.7 = 0                   ' Disable comparator 2
TRISC = %00000001               ' Set PORTC.0 and PORTC.1 as digital input
TRISA = %00111111               ' Set PORTA as digital inputs
TRISB = %01110000               ' Set PORTB.4-6 as digital inputs
OPTION_REG.7 = 0                ' Enable Weak Pull-ups
WPUA = %00111111                ' Pull-ups enabled on PORTA.0 - 5
WPUB = %01110000                ' Pull-ups enabled on PORTB.4 - 6
WPUC = %00000001                ' Enable PORTC.0 pull-ups

IOCAP = %00111111               ' Enable IOC rising edge on PORTA.0-5
IOCBP = %01110000               ' Enable IOC rising edge on PORTB.4-6
IOCAN = 0                       ' Disable IOC falling edge on PORTA
IOCBN = 0                       ' Disable IOC falling edge on PORTB


Main:
    IOCA = IOCAF                ' Save IOCAF to IOCA
    IOCB = IOCBF                ' Save IOCBF to IOCB
    IOCAF = 0                   ' Reset IOCAF
    IOCBF = 0                   ' Reset IOCBF
    IF IOCA > 0 OR IOCB > 0 THEN    ' Test if IOC Flags have changed
        DisplayFlag = 1             ' If so, set Display flag
    ENDIF
    Counter1 = Counter1 + IOCA.0
    Counter2 = Counter2 + IOCA.1
    Counter3 = Counter3 + IOCA.2
    Counter4 = Counter4 + IOCA.3
    Counter5 = Counter5 + IOCA.4
    Counter6 = Counter6 + IOCA.5
    Counter7 = Counter7 + IOCB.4
    Counter8 = Counter8 + IOCB.5
    Counter9 = Counter9 + IOCB.6
    IF DisplayFlag = 1 THEN         ' Go to Display subroutine if DisplayFlag set
        Gosub Display
        DisplayFlag = 0             ' Reset DisplayFlag
    ENDIF
GOTO Main

Display:
    LCDOUT $FE, $80, "    Fault Status    "
    LCDOUT $FE, $C0, "1. ", DEC3 Counter1, " 2. ", DEC3 Counter2, " 3. ", DEC3 Counter3
    LCDOUT $FE, $94, "4. ", DEC3 Counter4, " 5. ", DEC3 Counter5, " 6. ", DEC3 Counter6
    LCDOUT $FE, $D4, "7. ", DEC3 Counter7, " 8. ", DEC3 Counter8, " E. ", DEC3 Counter9
Return
Any suggested improvements would be greatly appreciated.

Cheers
Barry
VK2XBP