реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Closed TopicStart new topic
> не пишится в EEPROM данные, Реально не пишится в EEPROM данные
Sholkin
сообщение Apr 2 2007, 15:43
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Здравствуйте. Первый раз на вашем форуме. На том где я обычно страшиваю не кто не ответил .Посоветовали к вам. Проблема вот какая.
(тему по ентому можно посмотреть сдесь http://www.fulcrum.ru/cgi-bin/bbs/mess_sel...564&page=1)
В процессоре не записываються данные в EEPROM. Написал программу в AVR 4.12 всё нормально данные пишуться прогу зашил в проц мега 8L на этом блоке где идет запись в EEPROM он застопориваеться и даль всё.
Вот мой кусок проги записи в эмуляторе всё тип топ
;запись расхода электроэнергии в EEPROM
clr r22 ;обнуление переменной условия записи в EEPROM
ldi r20,0
OUT $1E,R20
lds r21,$60
OUT $1D,R21
LDI R21,4
sts $3C,R21
LDI R21,2
sts $3C,R21
WEP0: SBIC $1C,1
RJMP WEP0

ldi r20,1
OUT $1E,R20
lds r21,$61
OUT $1D,R21
LDI R21,4
sts $3C,R21
LDI R21,2
sts $3C,R21
WEP1: SBIC $1C,1
RJMP WEP1

ldi r20,2
OUT $1E,R20
lds r21,$62
OUT $1D,R21
LDI R21,4
sts $3C,R21
LDI R21,2
sts $3C,R21
WEP2: SBIC $1C,1
RJMP WEP2

ldi r20,3
OUT $1E,R20
lds r21,$63
OUT $1D,R21
LDI R21,4
sts $3C,R21
LDI R21,2
sts $3C,R21
WEP3: SBIC $1C,1
RJMP WEP3

ldi r20,4
OUT $1E,R20
lds r21,$64
OUT $1D,R21
LDI R21,4
sts $3C,R21
LDI R21,2
sts $3C,R21
WEP4: SBIC $1C,1
RJMP WEP4

ldi r20,5
OUT $1E,R20
lds r21,$65
OUT $1D,R21
LDI R21,4
sts $3C,R21
LDI R21,2
sts $3C,R21
WEP5:SBIC $1C,1
RJMP WEP5

ldi r20,6
OUT $1E,R20
MOV r21,r15
OUT $1D,R21
LDI R21,4
sts $3C,R21
LDI R21,2
sts $3C,R21
WEP6:SBIC $1C,1
RJMP WEP6
;обнуление памяти о расходе електроэнергии
ldi r16,0b00000000 ;временно заносим данные о электроэнергии
sts $60,r16
sts $61,r16
sts $62,r16
sts $63,r16
sts $64,r16
sts $65,r16
clr r15
; чтение из EEPROM данных расхода электроэнергии в десятичной форме
; и запись их в память
ldi R20,0 ;чтение 1 цифры
OUT $1E,R20
LDI R20,1
OUT $1C,R20
REP0:SBIC $1C,0
RJMP REP0
IN R21,$1D
sts $60,r21

ldi R20,1 ;чтение 2 цифры
OUT $1E,R20
LDI R20,1
OUT $1C,R20
REP1:SBIC $1C,0
RJMP REP1
IN R21,$1D
sts $61,r21

ldi R20,2 ;чтение 3 цифры
OUT $1E,R20
LDI R20,1
OUT $1C,R20
REP2:SBIC $1C,0
RJMP REP2
IN R21,$1D
sts $62,r21

ldi R20,3 ;чтение 4 цифры
OUT $1E,R20
LDI R20,1
OUT $1C,R20
REP3:SBIC $1C,0
RJMP REP3
IN R21,$1D
sts $63,r21

ldi R20,4 ;чтение 5 цифры
OUT $1E,R20
LDI R20,1
OUT $1C,R20
REP4:SBIC $1C,0
RJMP REP4
IN R21,$1D
sts $64,r21

ldi R20,5 ;чтение 6 цифры
OUT $1E,R20
LDI R20,1
OUT $1C,R20
REP5:SBIC $1C,0
RJMP REP5
IN R21,$1D
sts $65,r21

ldi R20,6 ;чтение номера счётчика из EEPROM
OUT $1E,R20
LDI R20,1
OUT $1C,R20
REP6:SBIC $1C,0
RJMP REP6
IN R15,$1D ;запись номера счётчика в регистор

; конец чтение из EEPROM данных расхода электроэнергии в десятичной форме
Потом сделал как доке сначала команду WEP0: SBIC $1C,1
RJMP WEP0
потом OUT $1E,R20
lds r21,$60
OUT $1D,R21
LDI R21,4
sts $3C,R21
LDI R21,2
sts $3C,R21
думал в этом деле нет всё осталось по прежнему. чегодальше делать где рыть не знаю
Go to the top of the page
 
+Quote Post
Dima_Ag
сообщение Apr 2 2007, 15:53
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 12-09-06
Пользователь №: 20 304



ПОсмотрите в Datasheet на MEGA8 , на стр.20 и 21 приведён пример работы с ЕЕПРОМ.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 3 2007, 08:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Sholkin - вот, собсно всё работает и на 8-й и на 168-й и на 16-й..

--------------------------------------------------------------------------------------------------

void STORE_STRUCT_2_EEPROM(UINT E2P_addr, char *p2str, UINT length)
{
/////////////////
cli();

CRC4SEND.crcuint = MakeCRC16(&EEPROM_DATA,EEPROM_CONFIG_INFO_VOLUME);//crcuint
EEPROM_DATA.EEP_CRC16 = CRC4SEND.crcuint;
/////////////////
while (length--)
{

while(EECR & (1<<EEPE)) ;
/////////////////////////
EEAR = E2P_addr++;//location
EEDR = *p2str++;//byte
/* Write logical one to EEMPE */
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
asm volatile ("nop");
asm volatile ("nop");


}
/////////////////
sei();
/////////////////
}
//*************************************************************
//*************************************************************
//*************************************************************
void GET_STRUCT_FROM_EEPROM(UINT E2P_addr, char *p2str, UINT length)
{
//////////////////////
cli();
//////////////////////
while (length--)
{
//cli();
//////////////////////
while(EECR & 0x02);//
//////////////////////
EEAR = E2P_addr++;//location;
EECR |= (1<<EERE); //
while ( CHECKBIT(EECR,0x01) ) ;//
*p2str++=EEDR;

}
//////////////////////
sei();
//////////////////////
}
//*************************************************************
Go to the top of the page
 
+Quote Post
Dopler
сообщение Apr 3 2007, 10:22
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Не юбижайтесь, но довольно трудно разбираться в чужих листингах asm, если они такие большие и без всяких комментариев, так что не думаю, что кто-то этим займется. Также превожу свой код, копирующий массив данных в EEPROM.


Код
;----------------------------------------------------------------------------------------------------------------------------
; Загрузка параметров из EEPROM
LoadParameters:
    ldi    ZL,    0; Z указатель на начало области данных
    ldi    ZH,    0

    ldi    YL,    low(SpeedBuff)
    ldi    YH,    1; Работаем только в пределах первых 256 байт ОЗУ

    out     EEARH,     zero

EEPROM_read:    

    out     EEARL,     YL; Set up address (Y) in address register


    sbi     EECR,    EERE; Start eeprom read by writing EERE
    
    in     tmp,    EEDR; Read data from data register
    st    Y+,    tmp

    cpi    YL,    low(ParamsBuff+ParamsCount)
    brne    EEPROM_read

    ld    maxAdrH,    -Y
    ld    maxAdrL,    -Y

    ld    maxSpeed,    -Y
    ld    config,        -Y
    ld    tmp,        -Y
    mov    YL,        tmp
    
    ldi    sCountL,    1
    ldi    sCountH,    0

ret
;----------------------------------------------------------------------------------------------------------------------------



;----------------------------------------------------------------------------------------------------------------------------
; Сохранение параметров EEPROM
; Перед каждой запись байт проверяется на соответствие, запись производится только при обновлении значения
SaveParameters:
    ldi    YL,    low(SpeedBuff)
    out    EECR,    zero

; Wait for completion of previous write
EEPROM_Write:
    sbic     EECR,    EEPE
    rjmp     EEPROM_Write

; Set up address  in address register
    out     EEARL,     YL

; Start eeprom read by writing EERE
    sbi     EECR,    EERE
    
; Read data from data register
    in     tmp,    EEDR    ; сравниваем текущее значение с записанным
    ld    tmp2,    Y+
    
    cp    tmp,    tmp2
    breq    DoNotWrite    ; если это значение уже записано - выходим
    
; Write data  to data register
    out     EEDR,    tmp2    ; обновляем параметр
    
; Write logical one to EEMPE
    sbi     EECR,    EEMPE
    
; Start eeprom write by setting EEPE
    sbi     EECR,    EEPE

DoNotWrite:
    cpi        YL,        low(ParamsBuff+ParamsCount)
    brne    EEPROM_Write        

ret
Go to the top of the page
 
+Quote Post
sadat
сообщение Apr 3 2007, 12:32
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Приведу и свой код:
A = R16 (привык называть регистры)

WRITE_EEPROM:
; записываем содержимое регистра А по установленному адресу в EEARH и ЕЕARL
wr_epr_1: sbic EECR, EEWE; ждем нуля
rjmp wr_epr_1;
out EEDR,a; данные на запись
sbi EECR, EEMWE; установили бит для подготовки записи
sbi EECR, EEWE; записываем байт
wr_epr_end: sbic EECR, EEWE; ждем пока запишется
rjmp wr_epr_end;
RET;

Все очень просто. Только нужно ждать (8мс на запись одного байта) и НЕ МЕНЯТЬ EEAR в процессе записи!!!!!
Go to the top of the page
 
+Quote Post
Sholkin
сообщение Apr 4 2007, 10:30
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Здравствуйте
вроде в моём коде все коментарии прописаны програмка просто проверяеть записалось или нет.
Сделал я как в даташите (я и раньше писал что всё сотрел там и сделал так) оказалось при чтении у меня первое значение которое считываеться с еепрома не правильно считываеться вместо него считываеться последнне записаноое если продублировать с какй ячейки считываеться то всё в норме. При зашитии в проц даже байда что и была.
Вернулься к предыдущему варианту. В авеерке все как надо и пишиться и считываеться . Парни спасибо что привели свои програимки но они пахоже на мои но почему мой та не работает.
Чужое хорошо но своё та надо добить Что делать???7
Go to the top of the page
 
+Quote Post
bodja74
сообщение Apr 4 2007, 11:18
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(Sholkin @ Apr 4 2007, 10:30) *
Чужое хорошо но своё та надо добить Что делать???7


Чужой код со своим сравнивать ,вот что делать.

ldi r20,0
OUT $1E,R20 <<В младший мы записали ,а где в старший ?
lds r21,$60
OUT $1D,R21
LDI R21,4
sts $3C,R21 <<К чему это шаманство ? Это же адресс таймера.
LDI R21,2
sts $3C,R21 << И это тоже?
WEP0: SBIC $1C,1
RJMP WEP0


Где установка EEMWE, EEWE ? В том же духе и по остальному коду.
В этом коде слишком много ошибок ,чтобы он работал даже на симуляторе smile.gif
Go to the top of the page
 
+Quote Post
Sholkin
сообщение Apr 5 2007, 06:35
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



bodja74 вы немного не правы . Симуляторе работает всё идеально и пишится всё как надо . Попробую применить код выше сказанный и посмотреть как он работает
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Apr 7 2007, 16:34
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Привет
вот ещё мой код который стопроцентно рабочий
(покрайней мере в мегеа8 и мега8535 работал)

; П/П чтения данных из EEPROM
; адрес ячейки памяти помещается в регистры s2:s1
; данные считываются из регистра s3
EEPROM_read: wdr
sbic EECR,EEWE
rjmp EEPROM_read
out EEARH,s2
out EEARL,s1
sbi EECR,EERE
in s3,EEDR
ret

; П/П записи данных в EEPROM
; адрес ячейки памяти помещается в регистры s2:s1
; данные помещаются в регистр s3
EEPROM_write:
wdr
sbic EECR,EEWE
rjmp EEPROM_write
out EEARH,s2
out EEARL,s1
out EEDR,s3
sbi EECR,EEMWE
sbi EECR,EEWE
ret
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 7 2007, 17:10
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Sholkin
Цитата
...
OUT $1E,R20
lds r21,$61
...


Это просто дурной тон написания программ. В такой каше найти почему что-то не работает не тривиальная задача.

Для начала попробуйте использовать имена регистров, и разделите задачу на подзадачу - повыносите функции записи и чтения eeprom как тут уже советовали.
Go to the top of the page
 
+Quote Post
Sholkin
сообщение Apr 10 2007, 05:36
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Здравствуйте
В пятницу поседел над програмкой вот чего получилось. Задачи у меня разделены сначала пишим в память потом в еепром потом обнуляем в памяти ячейки куда пишим считываем с еепром и записываем в память. Раньше у меня считывалось (убрал в програмке запись в еепром ) из еепром всё нормально как только занашу код записи прога не работаеть. Чего сделал в пятницу . Убрал все перечисленные ошибки зашил в память проца прогу (в имуляторе всё работает проверил) болт. Потом убрал опять записи в ячейки еепрома зашил всё считываеться . Потом вставил замись в еепром полько в первыю ячейку зашил заработало потом вставил запись во вторрую ячейку зашил работает теперь пишиться в две ячейки встави запиь в третью ячейку болт не стала работать прога. записи одинаковые но дальше 3 ячейки не пишит . Вообще не понял привожу новый код

Как он приведен пишится в ячейки еепрома в 0 и 1 если раблокировать запись в 3 прога на ней встанет колом пока мыслей нет в имуляторе всё окей
Пожскажите ещё чего может быть ? может проц гнилой ? или я ..................
rjmp reset
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
rjmp RXC
rjmp UDRE
rjmp TXC

aa: sbic $12,4 ; сравнение Pd(0)=1
rjmp outr0 ; пограмма передачи низкого уровня символа
rjmp outr1
outr0:cbi $12,4 ;вывод сигнала анти сброс (0)
rjmp aa
outr1:sbi $12,4 ;вывод сигнала анти сброс (1)
wdr ;сбрасывать WDT(вачдок таймер
rjmp aa
reset:
////////////////////////////////////////////////////////////////////////////////
ldi r16,0b00011001 ;установка защиты от зависания программы
out $21,r16
ldi r16,0b00000001 ;временно заносим данные о электроэнергии
sts $60,r16
ldi r16,0b00000010
sts $61,r16
ldi r16,0b00000011
sts $62,r16
ldi r16,0b00000100
sts $63,r16
ldi r16,0b00000101
sts $64,r16
ldi r16,0b00000110
sts $65,r16

ldi r16,0b10000001 ;временно заносим номер счётчика
mov r15,r16
ldi r16,$DF ;инициализация стека
out $3d,r16
clr r14
;запись расхода электроэнергии в EEPROM
WRITE_EEPROM:
clr r22 ;обнуление переменной условия записи в EEPROM
ldi r20,0
OUT $1F,R20
ldi r20,0
OUT $1E,R20
lds r21,$60
OUT $1D,R21
SBI $1C,2
SBI $1C,1
WEP0:SBIC $1C,1
RJMP WEP0


ldi r20,0
OUT $1F,R20
ldi r20,1
OUT $1E,R20
lds r21,$61
OUT $1D,R21
SBI $1C,2
SBI $1C,1
WEP1:SBIC $1C,1
RJMP WEP1

// ldi r20,0
// OUT $1F,R20
// ldi r20,2
// OUT $1E,R20
// lds r21,$62
// OUT $1D,R21
// SBI $1C,2
// SBI $1C,1
//WEP2:SBIC $1C,1
// RJMP WEP2

// ldi r20,0
// OUT $1F,R20
// ldi r20,3
// OUT $1E,R20
// lds r21,$63
// OUT $1D,R21
// SBI $1C,2
// SBI $1C,1
/////WEP3:SBIC $1C,1
// RJMP WEP3

// ldi r20,0
// OUT $1F,R20
// ldi r20,4
// OUT $1E,R20
// lds r21,$64
// OUT $1D,R21
// SBI $1C,2
// SBI $1C,1
//WEP4:SBIC $1C,1
// RJMP WEP4

// ldi r20,0
// OUT $1F,R20
// ldi r20,5
// OUT $1E,R20
// lds r21,$65
// OUT $1D,R21
// SBI $1C,2
// SBI $1C,1
//WEP5:SBIC $1C,1
// RJMP WEP5

// ldi r20,0
// OUT $1F,R20
// ldi r20,6
// OUT $1E,R20
// mov r21,r15
// OUT $1D,R21
// SBI $1C,2
// SBI $1C,1
//WEP6:SBIC $1C,1
// RJMP WEP6


;обнуление памяти о расходе електроэнергии
ldi r16,0b00000000 ;временно заносим данные о электроэнергии
sts $60,r16
sts $61,r16
sts $62,r16
sts $63,r16
sts $64,r16
sts $65,r16
clr r15

; чтение из EEPROM данных расхода электроэнергии в десятичной форме
; и запись их в память


ldi R20,0 ;чтение 1 цифры
OUT $1E,R20
SBI $1C,0
REP0:SBIC $1C,0
RJMP REP0
IN R21,$1D
sts $60,r21

ldi R20,1 ;чтение 2 цифры
OUT $1E,R20
SBI $1C,0
REP1:SBIC $1C,0
RJMP REP1
IN R21,$1D
sts $61,r21

ldi R20,2 ;чтение 3 цифры
OUT $1E,R20
SBI $1C,0
REP2:SBIC $1C,0
RJMP REP2
IN R21,$1D
sts $62,r21

ldi R20,3 ;чтение 4 цифры
OUT $1E,R20
SBI $1C,0
REP3:SBIC $1C,0
RJMP REP3
IN R21,$1D
sts $63,r21

ldi R20,4 ;чтение 5 цифры
OUT $1E,R20
SBI $1C,0
REP4:SBIC $1C,0
RJMP REP4
IN R21,$1D
sts $64,r21

ldi R20,5 ;чтение 6 цифры
OUT $1E,R20
SBI $1C,0
REP5:SBIC $1C,0
RJMP REP5
IN R21,$1D
sts $65,r21

ldi R20,6 ;чтение номера счётчика из EEPROM
OUT $1E,R20
SBI $1C,0
REP6:SBIC $1C,0
RJMP REP6
IN R15,$1D ;запись номера счётчика в регистор

; конец чтение из EEPROM данных расхода электроэнергии в десятичной форме

////////////////////////////////////////////////////////////////////////////
;установка режима порт D
ldi r16,0b11110010
ldi r17,0b00001101
out $11,r16 ;установка регистра DDR_D
out $12,r17 ;установка регистра PORT_D
;установка режима USART
ldi r23,0b00000010
out $0B,r23 ;установка регистра UCSRA
ldi r23,0b11011000 ;разрешаем работу приёмника/передатчика и разрешаем прерывания по завершению приёма/передачи
out $0A,r23 ;установка регистра UCSRB
ldi r23,0b00000000
out $20,r23 ;установка регистра UBRRH
ldi r23,0b10000110
out $20,r23 ;установка регистра UCSRC
ldi r23,0b01100111
out $09 ,r23 ;установка регистра скорости приёма/передачи UBRRL
sei ;разрешение прерывания
rjmp aa


RXC: sbi $12,5 ;вывод сигнала приём закончен
in r23,$0C ;получение данных с регистра USART
cpse r23,r15 ;сравнение данных регистра приёма USART с номером счётчика
rjmp felse ;не совпадение кода и на подпрограмму о передачи принятых данных
sbi $12,6 ;вывод сигнала о совподении кода
lds r23,$60 ;данные совпадают с номером счётчика
out $0C,r23
ldi r23,0b11111000
out $0A,r23 ; разрешаем прерывание по опусташению регистра данных USART
inc r14
reti
UDRE: mov r23,r14
cpi r23,0b00000001
brne writ3
lds r23,$61 ;передача второй цифры
out $0C,r23
inc r14
reti
writ3:cpi r23,0b00000010
brne writ4
lds r23,$62 ;передача третей цифры
out$0C,r23
inc r14
reti
writ4:cpi r23,0b00000011
brne writ5
lds r23,$63 ;передача четвёртой цифры
out $0C,r23
inc r14
reti
writ5:cpi r23,0b00000100
brne writ6
lds r23,$64 ;передача пятой цифры
out $0C,r23
inc r14
reti
writ6:lds r23,$65 ;передача шестой цифры
out $0C,r23
clr r14
ldi r23,0b11011000
out $0A,r23 ;заприщаем работу прерывания по опустошению регистра приёма/передачи
reti
TXC: sbi $12,7 ;вывод сигнала завершения передачи
reti

felse:mov r24,r23
out $0C,r24
ldi r24,0b10101010
out $0C,r24
reti
Go to the top of the page
 
+Quote Post
bodja74
сообщение Apr 10 2007, 18:52
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



1 Есть такая волшебная строчка
.include "C:\...\m8def.inc"
она позволит заместь адрессов регистров и битов писать их имена,и никто не будет высматривать названия регистров по вашим адрессам в коде.

2 Есть еще одна строчка
.org 0
И ваш код с векторами гарантировано начнется с 0

3 Если есть прерывания в момент записи в ЕЕПРОМ их нужно запрещать флагом I ,и разрешать после записи в ячейку

4 В прерываниях нужно сохранять регистр SREG при входе и востанавливать при выходе ,тоже самое и регистры РОН -если одни и теже используются в программе и прерываниях.

5. Уберите собаку ,если вы написали глючный код - она вам все равно не поможет, а только усложнит отладку.

Возможно я еще что нибудь подсказал если приведете код в читабельный вид (п 1) ,а так скорее всего можно предполагать что неприятности из за п3 и п4.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 11 2007, 00:20
Сообщение #13


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(bodja74 @ Apr 10 2007, 17:52) *
3 Если есть прерывания в момент записи в ЕЕПРОМ их нужно запрещать флагом I ,и разрешать после записи в ячейку

Ну тут надо немного уточнить.
Запрешать прерывания нужно обязательно перед записью EEMWE(EEMPE), а разрешать можно сразу после установки бита EEWE(EEPE) регистра EECR. Дожидаться окончания записи не обязательно, да и это довольно длительная операция - несколько ms. В примерах от атмела, проверка EEWE делается перед записью, а не после.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 11 2007, 12:52
Сообщение #14


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(defunct @ Apr 11 2007, 00:20) *
... В примерах от атмела, проверка EEWE делается перед записью, а не после.

Перед чтением её тоже надо делать, т. к. в это время может осуществляться запись (если именно таким методом пользоваться).
Go to the top of the page
 
+Quote Post
Sholkin
сообщение Apr 17 2007, 05:37
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Здравствуйте.
Зделал всё как мне сказали выше борада ещё больше запуталься какойто проклятый .
Если я делаю как у атмела (... В примерах от атмела, проверка EEWE делается перед записью, а не после) у мкня после записи в ЕЕпром читаем записываем в память в первую ячейку пишется значение не первой ячейки еепрома а последняя запись е еепром тесть пишу допустим в 6 ячеек еепрома обнуляю память потом считываю с еепропа пишу в память 6 ячейка еепрома пишится и в нулевую ячейку памяти и в шестую это всё в эмуляторе
Тот код который я превёл он в имуляторе работает без глюков вот потому так и оставил . Но я уже писал пишитчся полько первые две ячейки на третьеи прога встаёт колом .
Но вот породокс в коде при записи в третью ячеику функцию WEP0:SBIC $1C,1
RJMP WEP0
записал перед ldi r20,0
OUT $1F,R20
ldi r20,2
OUT $1E,R20
lds r21,$62
OUT $1D,R21
SBI $1C,2
SBI $1C,1
третья стала писаться проделал тоже с четвертой болт теперь на четвёртой клинит с ней ни так ни так не идёт перед записью ставил CLI запретить прерывание тоже болт
воопще мистика эта так пишится это так эта вообще не как
SOS .................................................
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 22:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01461 секунд с 7
ELECTRONIX ©2004-2016