Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
08.07.2008, 14:42
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Помогите с 24LC512
Пытаюсь разобраться с интерфейсом I2C и работой с внешней памятью.
Вот код, по идее должен читать первый байт с памяти. Что не так? В приложении архив с проекто MPLAB и PROTEUS.
Код:
|
#include ‹pic18.h›
static bit sspflag;
char b1=0x00;
void interrupt other(void)
{
if (SSPIF)
{
sspflag=1;
SSPIF=0;
}
}
int main()
{
__CONFIG(1, HS);
__CONFIG(2, PWRTEN & WDTDIS & BORDIS);
__CONFIG(5, CPALL);
STATUS=0x00;
RCSTA=0x00;
TXSTA=0x00;
INTCON=0xE0;
CCP1CON=0x00;
CCP2CON=0x00;
ADCON0=0x00;
ADCON1=0x0F;
TRISA=0xFF;
TRISB=0xFE;
TRISC=0xFF;
SSPSTAT=0x00;
SSPCON1=0b00101110;
SSPCON2=0b01001000;
SEN=1;
while (!sspflag) continue;
sspflag=0;
SSPBUF = 0b10100000;
while (!sspflag) continue;
sspflag=0;
SSPBUF = 0x01;
while (!sspflag) continue;
sspflag=0;
SSPBUF = 0x00;
while (!sspflag) continue;
sspflag=0;
SSPBUF = 0b10100001;
while (!sspflag) continue;
sspflag=0;
b1=SSPBUF;
while (!sspflag) continue;
sspflag=0;
PEN=1;
if (b1) RB0=1;
else RB0=0;
for (;;) continue;
} |
Прикрепленный файл: 7609415.zip
|
|
|
|
08.07.2008, 15:12
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Немного изменил
Код:
|
TRISB=0x00;
TRISC=0xFF;
SSPSTAT=0x00;
SSPCON1=0b00101110;
SSPCON2=0b01001000;
SEN=1;//START
while (!sspflag) continue;
sspflag=0;
SSPBUF = 0b10100000;//CONTROL BYTE W
while (!sspflag) continue;
sspflag=0;
SSPBUF = 0x00;//H_ADRESS
while (!sspflag) continue;
sspflag=0;
SSPBUF = 0x01;//L_ADRESS
while (!sspflag) continue;
sspflag=0;
RSEN=1;//START
while (!sspflag) continue;
sspflag=0;
SSPBUF = 0b10100001;//CONTROL BYTE R
while (!sspflag) continue;
sspflag=0;
PORTB=SSPBUF;//READ BYTE
while (!sspflag) continue;
sspflag=0;
PEN=1;//STOP
for (;;) continue;
} |
В результате в PORTB выводит одно и то же значение, не совпадающее со значение в памяти, если меняю адресс, все равно то же самое.
|
|
|
|
08.07.2008, 17:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Где задержка в 10 миллисекунд на запись ?
|
|
|
|
08.07.2008, 21:14
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Сообщение от urry
|
Где задержка в 10 миллисекунд на запись ?
|
Что за задержка?
-- Прилагается рисунок: --
|
|
|
|
09.07.2008, 05:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Запись в память 24LC512,нужно подождать пока пропишется в EEPROM и попробывать считать.
|
|
|
|
09.07.2008, 10:52
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Можете показать в каком именно месте моего кода нужна задержка?
Дело в том, что после инициализации START, не происходит прерывание
Код:
|
SEN=1;//START
while (!sspflag) continue;
sspflag=0; |
Может в настройках что то не так?
Код:
|
STATUS=0x00;
RCSTA=0x00;
TXSTA=0x00;
INTCON=0b11000000;
CCP1CON=0x00;
CCP2CON=0x00;
ADCON0=0x00;
ADCON1=0x0F;
TRISA=0xFF;
TRISB=0x00;
TRISC=0xFE;
SSPSTAT=0x00;
SSPCON1=0b00101110;
SSPCON2=0b01001000;
SSPIE=1; |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:30.
|
|