Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.01.2008, 20:27
|
|
Частый гость
Регистрация: 18.10.2007
Сообщений: 22
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Запись в EEPROM pic16f628a
Всем привет. Такая ситуация, произвожу запись двух чисел в EEPROM, последовательно друг за другом, первое записывается, а второе нет.
Вот код:
КР set 0x9
;при первой записи SM = FF
clrwdt
bsf status,rp0
movlw 0xa
movwf eeadr
bsf eecon1,0
movf eedata,w
bcf status,rp0
movwf SM ; в регистр SM записан адрес по которому записана инфомация при прошлой записи
; проверка свободного адреса для записи нового кода
movf SM,w
sublw KP ; вычесть из W константу КР
btfsc status,2 ; если поднят флаг нулевого результата Z, исполнять программу далее
goto M13 ; переход в подпрограмму "нехватка памяти"
; определение нового адреса для записи
incf SM,1 ; к регистру SM прибавлена 1. В SM записан адрес для текущей записи кода карточки
; запись данных нового кода в EEPROM из Sum
movf SM,w
bsf status,rp0
movwf eeadr
bcf status,rp0
movf Sum,w
bsf status,rp0
movwf eedata
bsf eecon1,2
movlw 55h
movwf eecon2
movlw 0aah
movwf eecon2
bsf eecon1,1
bcf eecon1,2
bcf eecon1,4
bcf status,rp0
; запись нового адреса ячейки в EEPROM
movlw 0xa
bsf status,rp0
movwf eeadr
bcf status,rp0
movf SM,w
bsf status,rp0
movwf eedata
bsf eecon1,2
movlw 55h
movwf eecon2
movlw 0aah
movwf eecon2
bsf eecon1,1
bcf eecon1,4
bcf status,rp0
bsf portb,6 ; зажечь светодиод удачной записи в EEPROM
в чем ошибка?
|
|
|
|
21.01.2008, 20:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,497
Сказал спасибо: 694
Сказали Спасибо 4,286 раз(а) в 1,962 сообщении(ях)
|
Вот это из листинга Протон васика для 16F628 может поможет:
0067 00436 EE@WR
0067 00437 EE@WR@W
0067 1683 00438 BSF 3,5
0068 009A 00439 MOVWF 154
0069 151C 00440 BSF 156,WREN
006A 3055 00441 MOVLW 85
006B 009D 00442 MOVWF 157
006C 30AA 00443 MOVLW 170
006D 009D 00444 MOVWF 157
006E 149C 00445 BSF 156,WR
006F 189C 00446 BTFSC 156,WR
0070 286F 00447 GOTO $ - 1
0071 111C 00448 BCF 156,WREN
0072 0A9B 00449 INCF 155,F
0073 291A 00450 GOTO I@NT
0074 01A7 00451 DL@US CLRF 39
0075 3EFC 00452 DLUS@W ADDLW 252
0076 00A6 00453 MOVWF 38
0077 09A7 00454 COMF 39,F
0078 1C03 00455 SKPC
0079 2880 00456 GOTO $ + 7
007A 30FF 00457 MOVLW 255
007B 0000 00458 NOP
007C 07A6 00459 ADDWF 38,F
007D 1803 00460 SKPNC
007E 287B 00461 GOTO $ - 3
007F 07A6 00462 ADDWF 38,F
0080 0000 00463 NOP
0081 0FA7 00464 INCFSZ 39,F
0082 287A 00465 GOTO $ - 8
0083 0008 00466 RETURN
011A 1383 00621 I@NT BCF 3,7
011B 1283 00622 I@NT2 BCF 3,5
011C 1303 00623 BCF 3,6
011D 0000 00624 NOP
011E 0008 00625 RETURN
|
|
|
|
21.01.2008, 23:29
|
|
Гражданин KAZUS.RU
Регистрация: 17.07.2006
Адрес: PV.DP.UA
Сообщений: 620
Сказал спасибо: 3
Сказали Спасибо 60 раз(а) в 48 сообщении(ях)
|
Re: Запись в EEPROM pic16f628a
Сообщение от J-t
|
Всем привет. Такая ситуация, произвожу запись двух чисел в EEPROM, последовательно друг за другом, первое записывается, а второе нет.
в чем ошибка?
|
А где пауза между процедурами записи?
__________________
Если ты читаешь это - значит тебе нечем заняться...
|
|
|
|
22.01.2008, 00:36
|
|
Частый гость
Регистрация: 18.10.2007
Сообщений: 22
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
vdlab, спасибо.Уже все сделал.
Поставил паузу после окончания процессов записи 6,5 мсек.
Все в порядке. Всем спасибо.
|
|
|
|
22.01.2008, 04:13
|
|
Временная регистрация
Регистрация: 18.10.2007
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Правильней не просто паузу сделать, а дождаться сброса бита записи (см. документацию). При этом надо учесть, что бит может и не сброситься из-за неисправного кристалла, помех по питанию, большого пятна на солнце, фаз луны и т.п.
|
|
|
|
22.01.2008, 10:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.05.2006
Адрес: Владимир
Сообщений: 2,791
Сказал спасибо: 2,966
Сказали Спасибо 4,205 раз(а) в 1,183 сообщении(ях)
|
pfgx, спасибо! Ценное замечание! Никогда не учитывал...
|
|
|
|
22.01.2008, 16:10
|
|
Частый гость
Регистрация: 01.01.2007
Сообщений: 49
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Сообщение от pfgx
|
Правильней не просто паузу сделать, а дождаться сброса бита записи (см. документацию).....
|
Это точно! Пришлось когда-то читать документацию!
Делал запись 16 байт в EEPROM в PIC16F84A.
Ни сразу понял в чём косяк! Но после документации!!!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Запись EEPROM Megi88
|
FedorChek |
Микроконтроллеры, АЦП, память и т.д |
3 |
23.03.2009 18:42 |
PIC,запись в EEPROM ?
|
retas |
Микроконтроллеры, АЦП, память и т.д |
6 |
30.11.2007 19:13 |
Запись в I2C EEPROM
|
yel |
Микроконтроллеры, АЦП, память и т.д |
8 |
07.03.2007 16:08 |
Запись в eeprom в ATtiny2313
|
Violett |
Микроконтроллеры, АЦП, память и т.д |
4 |
23.04.2006 23:19 |
Запись чтение в EEPROM
|
gnom |
Микроконтроллеры, АЦП, память и т.д |
2 |
24.02.2006 23:10 |
Часовой пояс GMT +4, время: 13:52.
|
|