Guys need your help
I have a cheap commercial PIC programmer based on the JMD design. It
works fine, but I have subsequently found that it will not program
18F2550 PICs via ICSP, but will work fine when the PIC is placed in the
sockets on the programmer.
A friend therefore suggested that I use a bootloader which will make for
rapid loading and testing of the development code I'm working on. He
suggested the Tiny Bootloader (
http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm ) as it
supports the chip I'm using.
I then made a development board comprising of the the project hardware
and RS232 coms via a MAX 232cpe chip. - The project hardware checks out
OK, as does the MAX232 hardware, but every time I try to communicate
with the PIC via the PC software it fails to find the PIC.
We've modified the asm sample code to suit the 4 Mhz xtal I'm using in
the project.so the bootloader code now looks like:
radix DEC
LIST P=18F2550 ; change also: Configure->SelectDevice from Mplab
; 20MHzQuartz / 5 * 24 / 4 => 24MHz ; check _CONFIG1
xtal EQU 24000000 ; 'xtal' here is resulted frequency (is no
longer quartz frequency)
baud EQU 115200 ; the desired baud rate
;********************************************************************
; Tiny Bootloader 18F*55 series Size=100words
; c...@ugal.ro
; http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
;********************************************************************
; | 12kW 16kW
; -----+----------------
; 28pin| 2455 2550
; 40pin| 4455 4550
#include "../icdpictypes.inc" ;takes care of: #include
"p18fxxx.inc", max_flash, IdTypePIC
#include "../spbrgselect.inc" ; RoundResult and baud_rate
#define first_address max_flash-200 ;100 words
CONFIG PLLDIV=1, CPUDIV=OSC3_PLL4, USBDIV=2
CONFIG FOSC=XTPLL_XT, FCMEM=OFF, IESO=OFF
CONFIG PWRT=OFF, BOR=ON, BORV=3, VREGEN=ON
CONFIG WDT=OFF, WDTPS=32768
CONFIG MCLRE=ON, LPT1OSC=OFF, PBADEN=OFF, CCP2MX=ON
CONFIG STVREN=ON, LVP=OFF, XINST=OFF, DEBUG=OFF ; ICPRT=OFF
CONFIG CP0=OFF, CP1=OFF, CP2=OFF, CPB=OFF, CPD=OFF
CONFIG WRT0=OFF, WRT1=OFF, WRT2=OFF
CONFIG WRTB=OFF, WRTC=OFF, WRTD=OFF
CONFIG EBTR0=OFF, EBTR1=OFF, EBTR2=OFF
CONFIG EBTRB=OFF
IFDEF __18F2550
CONFIG WRT3=OFF, EBTR3=OFF, CP3=OFF
ENDIF
;----------------------------- PROGRAM ---------------------------------
cblock 0
crc
i
cnt1
cnt2
cnt3
counter_hi
counter_lo
flag
endc
cblock 10
buffer:64
endc
SendL macro car
movlw car
movwf TXREG
endm
;0000000000000000000000000 RESET 00000000000000000000000000
ORG 0x0000
GOTO IntrareBootloader
;view with TabSize=4
;&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&
;---------------------- Bootloader ----------------------
;PC_flash: C1h U H L x ...
<64 bytes> ... crc
;PC_eeprom: C1h 40h EEADR EEDATA 0
crc
;PC_cfg C1h U OR 80h H L 1
byte crc
;PIC_response: type `K`
ORG first_address ;space to deposit first 4 instr. of
user prog.
nop
nop
nop
nop
org first_address+8
IntrareBootloader
;skip TRIS to 0 C6 ;init serial port
movlw b'00100100'
movwf TXSTA
;use only SPBRG (8 bit mode default) not using BAUDCON
movlw spbrg_value
movwf SPBRG
movlw b'10010000'
movwf RCSTA
;wait for computer
rcall Receive
sublw 0xC1 ;Expect C1h
bnz way_to_exit
SendL IdTypePIC ;send PIC type
MainLoop
SendL 'K' ; "-Everything OK, ready and waiting."
mainl
clrf crc
rcall Receive ;Upper
movwf TBLPTRU
movwf flag ;(for EEPROM and CFG cases)
rcall Receive ;Hi
movwf TBLPTRH
movwf EEADR ;(for EEPROM case)
rcall Receive ;Lo
movwf TBLPTRL
movwf EEDATA ;(for EEPROM case)
rcall Receive ;count
movwf i
incf i
lfsr FSR0, (buffer-1)
rcvoct ;read 64+1 bytes
movwf TABLAT ;prepare for cfg; => store byte before crc
rcall Receive
movwf PREINC0
decfsz i
bra rcvoct
tstfsz crc ;check crc
bra ziieroare
btfss flag,6 ;is EEPROM data?
bra noeeprom
movlw b'00000100' ;Setup eeprom
rcall Write
bra waitwre
noeeprom
btfss flag,7 ;is CFG data?
bra noconfig
tblwt* ;write TABLAT(byte before crc) to TBLPTR***
movlw b'11000100' ;Setup cfg
rcall Write
bra waitwre
noconfig
;write
eraseloop
movlw b'10010100' ; Setup erase
rcall Write
TBLRD*- ; point to adr-1
writebigloop
movlw 2 ; 2groups
movwf counter_hi
lfsr FSR0,buffer
writesloop
movlw 32 ; 32bytes = 4instr
movwf counter_lo
writebyte
movf POSTINC0,w ; put 1 byte
movwf TABLAT
tblwt+*
decfsz counter_lo
bra writebyte
movlw b'10000100' ; Setup writes
rcall Write
decfsz counter_hi
bra writesloop
waitwre
;btfsc EECON1,WR ;for eeprom writes (wait to finish write)
;bra waitwre ;no need: round trip time with PC bigger
than 4ms
bcf EECON1,WREN ;disable writes
bra MainLoop
ziieroare ;CRC failed
SendL 'N'
bra mainl
;******** procedures ******************
Write
movwf EECON1
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR ;WRITE
nop
;nop
return
Receive
movlw xtal/2000000+1 ; for 20MHz => 11 => 1second delay
movwf cnt1
rpt2
clrf cnt2
rpt3
clrf cnt3
rptc
btfss PIR1,RCIF ;test RX
bra notrcv
movf RCREG,w ;return read data in W
addwf crc,f ;compute crc
return
notrcv
decfsz cnt3
bra rptc
decfsz cnt2
bra rpt3
decfsz cnt1
bra rpt2
;timeout:
way_to_exit
bcf RCSTA, SPEN ; deactivate UART
bra first_address
;*************************************************************
; After reset
; Do not expect the memory to be zero,
; Do not expect registers to be initialised like in catalog.
END
I've checked with a windows based scope and it records signals
(handshake request) on the RX pin of the PIC - but still it fails to
respond. I've also tried swapping the tx/rx lines over just in case I
got them wrong and that didn't work !
Can anyone come up with some ideas - or a didferent bootloader that
might work with this PIC ?
Cheers
Malcolm
to unsubscribe, go to http://www.yahoogroups.com and follow the instructions

(You need to be a member of piclist -- send a blank email to piclist-subscribe@yahoogroups.com )
Use the write command.
ADDRESS VAR BYTE
VALUE VAR BYTE
TEMP VAR BYTE
ADDRESS = 1
VALUE = 50
WRITE ADRESS,VALUE ' save value to EEPROM
READ ADDRESS,TEMP ' read it back to TEMP
Jim
----- Original Message -----
From: meriachee
To: p...@yahoogroups.com
Sent: Wednesday, April 05, 2006 10:20 PM
Subject: [piclist] 16f819 memory question
I've been reading the datasheet and the instruction set from the
PicBasic Pro book, and cannot figure out how to write variables to
memory and read variables from memory.
All I am trying to do is store a variable, and have that non-volatile.
Does anybody have any experience doing this?
to unsubscribe, go to http://www.yahoogroups.com and follow the instructions
SPONSORED LINKS Microcontroller Microprocessor Microchip pic
Microcontrollers Picmicro 8051 microprocessor
------------------------------------------------------------------------------
YAHOO! GROUPS LINKS
a..
------------------------------------------------------------------------------
This message has been processed by Firetrust Benign.

(You need to be a member of piclist -- send a blank email to piclist-subscribe@yahoogroups.com )