This:
Code:
' Blink 56 LEDs connected to PORT A in charlie-plex manner
' PIC 18F44K22 int osc 64MHz
' PBP v2.60c
' MPASM v5.49
' MCS+ v2.1.0.7
' U2 programmer v4.32
asm
__CONFIG _CONFIG1H, _FOSC_INTIO67_1H & _PLLCFG_ON_1H & _PRICLKEN_OFF_1H & _FCMEN_ON_1H & _IESO_OFF_1H
__CONFIG _CONFIG2L, _PWRTEN_ON_2L & _BOREN_SBORDIS_2L & _BORV_285_2L
__CONFIG _CONFIG2H, _WDTEN_OFF_2H
__CONFIG _CONFIG3H, _CCP2MX_PORTC1_3H & _PBADEN_OFF_3H & _CCP3MX_PORTE0_3H & _HFOFST_OFF_3H & _T3CMX_PORTB5_3H & _P2BMX_PORTC0_3H & _MCLRE_EXTMCLR_3H
__CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
endasm
DEFINE OSC 64
OSCCON = %01110000 ' OSCILLATOR CONTROL REGISTER
' bit 7 IDLEN: Idle Enable bit
' R/W 1 = Device enters Idle mode on SLEEP instruction
' 0 = Device enters Sleep mode on SLEEP instruction
' bit 6-4 IRCF<2:0>: Internal RC Oscillator Frequency Select bits(2)
' R/W 111 = HFINTOSC – (16 MHz)
' 110 = HFINTOSC/2 – (8 MHz)
' 101 = HFINTOSC/4 – (4 MHz)
' 100 = HFINTOSC/8 – (2 MHz)
' 011 = HFINTOSC/16 – (1 MHz)(3)
' If INTSRC = 0 and MFIOSEL = 0:
' 010 = HFINTOSC/32 – (500 kHz)
' 001 = HFINTOSC/64 – (250 kHz)
' 000 = LFINTOSC – (31.25 kHz)
' If INTSRC = 1 and MFIOSEL = 0:
' 010 = HFINTOSC/32 – (500 kHz)
' 001 = HFINTOSC/64 – (250 kHz)
' 000 = HFINTOSC/512 – (31.25 kHz)
' If INTSRC = 0 and MFIOSEL = 1:
' 010 = MFINTOSC – (500 kHz)
' 001 = MFINTOSC/2 – (250 kHz)
' 000 = LFINTOSC – (31.25 kHz)
' If INTSRC = 1 and MFIOSEL = 1:
' 010 = MFINTOSC – (500 kHz)
' 001 = MFINTOSC/2 – (250 kHz)
' 000 = MFINTOSC/16 – (31.25 kHz)
' bit 3 OSTS: Oscillator Start-up Time-out Status bit
' R 1 = Device is running from the clock defined by FOSC<3:0> of the CONFIG1H register
' 0 = Device is running from the internal oscillator (HFINTOSC, MFINTOSC or LFINTOSC)
' bit 2 HFIOFS: HFINTOSC Frequency Stable bit
' R 1 = HFINTOSC frequency is stable
' 0 = HFINTOSC frequency is not stable
' bit 1-0 SCS<1:0>: System Clock Select bit
' R/W 1x = Internal oscillator block
' 01 = Secondary (SOSC) oscillator
' 00 = Primary clock (determined by FOSC<3:0> in CONFIG1H).
OSCCON2 = %00000100 ' OSCILLATOR CONTROL REGISTER 2
' bit 7 PLLRDY: PLL Run Status bit
' R 1 = System clock comes from 4xPLL
' 0 = System clock comes from an oscillator, other than 4xPLL
' bit 6 SOSCRUN: SOSC Run Status bit
' R 1 = System clock comes from secondary SOSC
' 0 = System clock comes from an oscillator, other than SOSC
' bit 5 Unimplemented: Read as ‘0’.
' bit 4 MFIOSEL: MFINTOSC Select bit
' R/W=0 1 = MFINTOSC is used in place of HFINTOSC frequencies of 500 kHz, 250 kHz and 31.25 kHz
' 0 = MFINTOSC is not used
' bit 3 SOSCGO(1): Secondary Oscillator Start Control bit
' R/W=0 1 = Secondary oscillator is enabled.
' 0 = Secondary oscillator is shut off if no other sources are requesting it.
' bit 2 PRISD: Primary Oscillator Drive Circuit Shutdown bit
' R/W=1 1 = Oscillator drive circuit on
' 0 = Oscillator drive circuit off (zero power)
' bit 1 MFIOFS: MFINTOSC Frequency Stable bit
' R 1 = MFINTOSC is stable
' 0 = MFINTOSC is not stable
' bit 0 LFIOFS: LFINTOSC Frequency Stable bit
' R 1 = LFINTOSC is stable
' 0 = LFINTOSC is not stable
OSCTUNE = %11000000 ' OSCILLATOR TUNING REGISTER
' bit 7 INTSRC: Internal Oscillator Low-Frequency Source Select bit
' R/W 1 = 31.25 kHz device clock derived from the MFINTOSC or HFINTOSC source
' 0 = 31.25 kHz device clock derived directly from LFINTOSC internal oscillator
' bit 6 PLLEN: Frequency Multiplier 4xPLL for HFINTOSC Enable bit(1)
' R/W 1 = PLL enabled
' 0 = PLL disabled
' bit 5-0 TUN<5:0>: Frequency Tuning bits – use to adjust MFINTOSC and HFINTOSC frequencies
' R/W 011111 = Maximum frequency
' 011110 =
' • • •
' 000001 =
' 000000 = Oscillator module (HFINTOSC and MFINTOSC) are running at the factory calibrated frequency.
' 111111 =
' • • •
' 100000 = Minimum frequency
ANSELA = %00000000 ' Set ports to digital
ANSELB = %00000000
ANSELC = %00000000
ANSELD = %00000000
ANSELE = %00000000
ADCON0 = %00000000 ' Disable ADC
TRISA = %00000000 ' Set all Ports to output
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %00000000
PORTA = %00000000 ' Set ports OFF
PORTB = %00000000
PORTC = %00000000
PORTD = %00000000
PORTE = %00000000
varLEDstate VAR BYTE[55]
varLEDport VAR BYTE[55]
varArray var byte
varEEPROM var byte
varEEPROM = 0
'------------------------- T E M P O R A R Y ------------------------------
for varArray = 0 to 55 ' Location in Array
varEEPROM = varEEPROM + 1 ' Location in EEPROM
read varEEPROM, VARLEDstate[varArray]
varEEPROM = varEEPROM + 1
read varEEPROM, VARLEDport[varArray]
next varArray
'------------------------------------------------------------------------------
pause 100
mainloop:
for varArray = 0 to 55 ' LEDs in ascending sequence
TRISA = VARLEDSTATE[varArray]
PORTA = VARLEDPORT[varArray]
PAUSE 15
next varArray
for varArray = 55 to 0 step -1 ' LEDs in decending sequence
TRISA = VARLEDSTATE[varArray]
PORTA = VARLEDPORT[varArray]
PAUSE 15
next varArray
goto mainloop
End
DATA @1,%11111100 ' Pin A0
DATA %00000001
DATA %11111010
DATA %00000001
DATA %11110110
DATA %00000001
DATA %11101110
DATA %00000001
DATA %11011110
DATA %00000001
DATA %10111110
DATA %00000001
DATA %01111110
DATA %00000001
DATA %11111100 ' Pin A1
DATA %00000010
DATA %11111001
DATA %00000010
DATA %11110101
DATA %00000010
DATA %11101101
DATA %00000010
DATA %11011101
DATA %00000010
DATA %10111101
DATA %00000010
DATA %01111101
DATA %00000010
DATA %11111010 ' Pin A2
DATA %00000100
DATA %11111001
DATA %00000100
DATA %11110011
DATA %00000100
DATA %11101011
DATA %00000100
DATA %11011011
DATA %00000100
DATA %10111011
DATA %00000100
DATA %01111011
DATA %00000100
DATA %11110110 ' Pin A3
DATA %00001000
DATA %11110101
DATA %00001000
DATA %11110011
DATA %00001000
DATA %11100111
DATA %00001000
DATA %11010111
DATA %00001000
DATA %10110111
DATA %00001000
DATA %01110111
DATA %00001000
DATA %11101110 ' Pin A4
DATA %00010000
DATA %11101101
DATA %00010000
DATA %11101011
DATA %00010000
DATA %11100111
DATA %00010000
DATA %11001111
DATA %00010000
DATA %10101111
DATA %00010000
DATA %01101111
DATA %00010000
DATA %11011110 ' Pin A5
DATA %00100000
DATA %11011101
DATA %00100000
DATA %11011011
DATA %00100000
DATA %11010111
DATA %00100000
DATA %11001111
DATA %00100000
DATA %10011111
DATA %00100000
DATA %01011111
DATA %00100000
DATA %10111110 ' Pin A6
DATA %01000000
DATA %10111101
DATA %01000000
DATA %10111011
DATA %01000000
DATA %10110111
DATA %01000000
DATA %10101111
DATA %01000000
DATA %10011111
DATA %01000000
DATA %00111111
DATA %01000000
DATA %01111110 ' Pin A7
DATA %10000000
DATA %01111101
DATA %10000000
DATA %01111011
DATA %10000000
DATA %01110111
DATA %10000000
DATA %01101111
DATA %10000000
DATA %01011111
DATA %10000000
DATA %00111111
DATA %10000000
Scanning through 56 LEDs:
Persistence of vision, no noticeable difference (not all LEDs point directly up):
Current consumption (removed Power Indicator LED from circuit):
- all off = 11.5mA
- all on = 22.0 mA
Robert
Bookmarks