Witam państwa i znowu problem z eeprom(taki jak w tytule) nie mogę zapisać odczyt mi działa o to kod. Może znajdziecie jakiś błąd. A biblioteki to rklibavr
A dokładnie to es mi pokazuje 5F a w pamięci się nic nie zapisuje
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include "lcd.h"
#include "uart.h"
#include "onewire.h"
#define key_pin PINB
#define key_change 0
#define key_enter 1
#define key_read 2
void ds2431_wm(char addr, char data)
{
char i,es=0;
if(OW_reset() == 0);
{
OW_byte_wr(0xCC);
OW_byte_wr(0x0F);
OW_byte_wr(addr);
OW_byte_wr(0x00);
for(i=0;i<8;i++)
{
OW_byte_wr(data);
}
UART_putchar(OW_byte_rd());
UART_putchar(OW_byte_rd());
}
if(OW_reset() == 0);
{
OW_byte_wr(0xCC);
OW_byte_wr(0xAA);
UART_putchar(OW_byte_rd());
UART_putchar(OW_byte_rd());
es=OW_byte_rd();
UART_putchar(es);
for(i=0;i<8;i++)
{
UART_putchar(OW_byte_rd());
}
UART_putchar(OW_byte_rd());
UART_putchar(OW_byte_rd());
}
if(OW_reset() == 0)
{
OW_byte_wr(0xCC);
OW_byte_wr(0x55);
OW_byte_wr(addr);
OW_byte_wr(0x00);
OW_byte_wr(es);
_delay_us(13);
UART_putchar(OW_byte_rd());
}
}
void ds2431_rm(unsigned char addr)
{
unsigned char i;
OW_reset();
OW_byte_wr(0xCC);
OW_byte_wr(0xF0);
OW_byte_wr(addr);
OW_byte_wr(0x00);
for(i=0;i<=(143 - addr);i++)
{
UART_putchar(OW_byte_rd());
}
}
void key_init (void)
{
DDRB &=~ _BV(0)|_BV(1)|_BV(2);
PORTB |= _BV(0)|_BV(1)|_BV(2);
}
void key(void)
{
if(!(key_pin & _BV(key_change)))
{
_delay_ms(30);
while(!(key_pin & _BV(key_change))){}
}
if(!(key_pin & _BV(key_read)))
{
ds2431_wm(0x20, 0x33);
_delay_ms(30);
while(!(key_pin & _BV(key_read))){}
}
if(!(key_pin & _BV(key_enter)))
{
LCD_clear();
LCD_putstr_P(PSTR("Odczyt"));
ds2431_rm(0x00);
_delay_ms(30);
while(!(key_pin & _BV(key_enter))){}
LCD_clear();
LCD_putstr_P(PSTR("JEST"));
}
}
int main(void)
{
key_init();
LCD_init();
UART_init();
LCD_putstr_P(PSTR("JEST"));
for(;;)
{
key();
}
}
A dokładnie to es mi pokazuje 5F a w pamięci się nic nie zapisuje