Имею следующую проблему:
К Atmega128 подключена внешняя память 24LC16B (SCL - к 25-й ноге МК, SDA - к 26-й ноге МК - согласно даташиту)
Подтягивающие резисторы 4,7 кОм
Данная память работала в прошлом моем проекте на Мега8535-сейчас адаптирую прогу под Мегу128-столкнулся с проблемой-а именно-я не использую прерываний по TWI-использую стандартные подпрограммы :
Спойлер
Код: Выделить всё
;- Блок подпрограмм работы с памятью 24LC16B:
;---------------Подпрограмма инициализации I2C
i2c_init: //Инициализация и2с
ldi temp,0x0A;TWBR=10
sts TWBR,temp
ldi temp,(0<<TWPS1)|(0<<TWPS0)
sts TWSR,temp
ret
;---------------Конец подпрограммы инициализации I2C
;---------------Подпрограмма передачи стартовой посылки
i2c_start: //Передача стартовой посылки
ldi temp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
sts TWCR, temp
wait1:
lds temp,TWCR
sbrs temp,TWINT;
rjmp wait1
ret
;---------------Подпрограмма передачи стартовой посылки
;---------------Подпрограмма передачи стоповой посылки
i2c_stop: //Отправляет стоповую посылку
ldi temp, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
sts TWCR, temp
ret
;---------------Конец подпрограммы передачи стоповой посылки
;---------------Подпрограмма считывания первого байта из памяти
i2c_recive: //Считывает байт и записывает его в TEMP
ldi temp, (1<<TWINT|1<<TWEN|1<<TWEA)
sts TWCR, temp
wait4:
lds temp,TWCR
sbrs temp,TWINT;
rjmp wait4
lds temp,TWDR
ret
;---------------Конец подпрограммы считывания первого байта из памяти
;---------------Подпрограмма считывания второго байта из памяти
i2c_recive_last: //Считать последний байт и записать в TEMP
ldi temp, (1<<TWINT|1<<TWEN)
sts TWCR, temp
wait3:
lds temp,TWCR
sbrs temp,TWINT;
rjmp wait3
lds temp,TWDR
ret
;---------------Конец подпрограммы считывания второго байта из памяти
;---------------Подпрограмма отправки байта в память
i2c_send: //Будет передан байт из регистра TEMP
sts TWDR,temp
ldi temp, (1<<TWINT)|(1<<TWEN)
sts TWCR, temp
wait2:
lds temp,TWCR
sbrs temp,TWINT;
rjmp wait2
ret
;---------------Конец подпрограммы отправки байта в память
;- Конец блока подпрограмм работы с памятьюОтличие этих подпрограмм от подпрограмм для Меги8535 в том, что команды IN и OUT заменены на LDS и STS-иначе AVRStudio 6 давал ошибку при компиляции
Сигналы проверял осциллографом-идут
Фьюзы-М103 отключен, JTAGEN-что вкл, что выкл-без разницы
*бусь уже долго-если у кого есть идеи-подскажите-плз!

