|
ME Labs, Inc. 719-520-5323 |
|
|
|
ME Labs, Inc. | 1-719-520-5323 | Example Program - PROGEEX.pbpPICBASIC PRO program to receive a HEX file from PC and write data to I2C memory. Writes data in page mode, 16 bytes at one time. Memory device must be addressed with 8 bits and capable of receiving 16 bytes at once.' Name : PROGEEX.pbp
' Compiler : PICBASIC PRO Compiler 2.6
' Assembler : PM or MPASM
' Target PIC : 40-pin 16F877A, 18F452 or similar
' Hardware : LAB-X1 Experimenter Board
' Oscillator : 4MHz external crystal
' Keywords : HSERIN, HSEROUT, I2CREAD, I2CWRITE, WAIT
' Description : PICBASIC PRO program to receive a HEX file from PC
' and write data to I2C memory. Writes data in page mode, 16 bytes at
' one time. Memory device must be addressed with 8 bits and capable
' of receiving 16 bytes at once.
'
' Define LOADER_USED to allow use of the boot loader.
' This will not affect normal program operation.
Define LOADER_USED 1
' Set receive register to receiver enabled
Define HSER_RCSTA 90h
' Set transmit register to transmitter enabled
Define HSER_TXSTA 20h
' Set baud rate
Define HSER_BAUD 2400
scl VAR PORTC.3 ' Clock pin
sda VAR PORTC.4 ' Data pin
pinin VAR PORTC.7 ' Serial receive pin
pinout VAR PORTC.6 ' Serial transmit pin
addr VAR WORD ' Memory Address
dta1 VAR BYTE[17] ' Data array with location for checksum
bb VAR BYTE ' Byte count
tt VAR BYTE ' Record type
i VAR WORD ' Loop counter
cs VAR BYTE ' Checksum
ln VAR BYTE ' Line count
Clear ' Clear RAM data
ADCON1 = 7 ' Set PORTA and PORTE to digital
ln = 0 ' Clear line count
HSerout ["Erasing"]
For i = 0 To 8192 Step 8 ' Store $00 to all locations (for testing)
I2CWrite sda,scl,$A0,i,[STR dta1\8]
If i//256 = 0 Then
HSerout ["."]
EndIf
Pause 6
Next i
HSerout [13,10,"Ready",13,10] ' Notify: ready for file
mainloop:
cs = 0 ' Reset checksum byte
HSerin [WAIT(":"),HEX2 bb,HEX4 addr,HEX2 tt] ' Receive line and parse
cs = bb + addr.lowbyte + addr.highbyte + tt ' Begin checksum calculation
If (tt = 1) Then eof ' Check for end of file
For i = 0 To bb ' Loop for each expected data-byte and checksum
HSerin [HEX2 dta1[i]] ' Store each byte to location in array
cs = cs + dta1[i] ' Add each byte to checksum calculation
Next i
ln = ln + 1 ' Count line received
If (cs <> 0) Then sume ' Check for checksum error
I2CWrite sda,scl,$A0,addr,[STR dta1\bb] ' Write data to device, checksum is dropped
Goto mainloop ' Go get another line
sume:
HSerout ["Checksum Error: line ",DEC ln,13,10] ' Notify: checksum error
eof:
HSerout [DEC ln," lines received",13,10] ' Notify: Confirm line count
For i = 0 To (ln*16) ' Loop 16 times for each line received
I2CRead sda,scl,$A0,i,[cs] ' Read back each character
HSerout [HEX2 cs] ' Send each character
If (i+1)//16 = 0 Then
HSerout [13,10] ' New line every 16 characters
EndIf
Next i
HSerout [13,10,13,10] ' New Lines
End
Download the program file. |
|
Copyright 2022 ME Labs, Inc. PO Box 8250 Asheville NC 28814 (719) 520-5323 (719) 520-1867 fax email: support@melabs.com |
|