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
Bookmarks