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.
Any suggested improvements would be greatly appreciated.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
Cheers
Barry
VK2XBP




Bookmarks