Kod: Zaznacz cały
#include <avr/io.h>
#include <lcd4bit.h>
#include <util/delay.h>
#include <avr/avrlibdefs.h>
#define twi PORTC
#define scl 1
#define sda 0
int minuty;
int main(void)
{
MCUCSR = 1<<7;
MCUCSR = 1<<7;
DDRC=0xff;
PORTC=0xff;
MCUCSR = 1<<7;
MCUCSR = 1<<7;
DDRD = 0xff;
PORTD = 0x00;
DDRB = 0xff;
PORTB = 0xff;
DDRA = 0xff;
PORTA = 0xff;
LcdInit();
{
for(;;)
{
WriteTextXY(1,2,"lecimy z tym koksem");
cbi (twi,scl);//
sbi (twi,sda);// } ustawienie danych i zegara na 1
sbi (twi,scl);//
/////////////////start///////////////
cbi (twi,sda);/////zmina stanu lini danych z 1na 0 przy zegarze na 1 - czyli start
/////////////////////////////////////
/////////adres urzadzenia//////w tym przypadku 7 zer///////
// wczesniej ustawilismy 0 na sda przy starcie wiec zostaje
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 0 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 1 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 2 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 3 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 4 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 5 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 6 bitu /// czyli 7 zer przeszlo
cbi (twi,scl);
sbi (twi,sda);
sbi (twi,scl);////////////7 bit 1 czyli odczyt/////
/////////////////////////////////
DDRC=0b11111110;/// przygotowanie do odbioru ack
cbi (twi,scl);
sbi (twi,scl);
if ((twi,sda)==0)
{
WriteTextXY(1,2,"adres 1 ok");
}
else
{
WriteTextXY(1,2,"fatal errrrrrrror");
}
DDRC=0xff;
cbi (twi,scl);
cbi (twi,sda);
///////////////////adres wewnetrzny//////
// wczesniej ustawilismy 0 na sda przy starcie wiec zostaje
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 0 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 1 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 2 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 3 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 4 bitu
cbi (twi,scl);
sbi (twi,scl);////////////odczyt 5 bitu
cbi (twi,scl);
sbi (twi,sda);////////////6 bit (1)
sbi (twi,scl);
cbi (twi,scl);
sbi (twi,scl);////////////7 bit (1) 6,7 bit 11 czyli 3/////
/////////////////////////////////
DDRC=0b11111110;/// przygotowanie do odbioru ack
cbi (twi,scl);
sbi (twi,scl);
if ((twi,sda)==0)
{
WriteTextXY(1,2,"adres 2 22222222 2 ok");
}
else
{
WriteTextXY(1,2,"fatal errrrrrrror 2");
}
DDRC=0xff;
cbi (twi,scl);
cbi (twi,sda);
///////////////////////////////////////////////////////////////////////
////////////////ODCZYT minut//////////////////
minuty=0x00;
DDRC=0b11111110;
//////////////////////////////////////////////
sbi (twi,scl);
if ((twi,sda)==1)
{
minuty=0x01;
}
else
{
DDRB=0xff;
}
cbi (twi,scl);////////////////koniec odczytu 0 bitu
sbi (twi,scl);
if ((twi,sda)==1)
{
minuty=minuty+2;
}
else
{
DDRB=0xff;
}
cbi (twi,scl);////////////////koniec odczytu 1 bitu
sbi (twi,scl);
if ((twi,sda)==1)
{
minuty=minuty+4;
}
else
{
DDRB=0xff;
}
cbi (twi,scl);////////////////koniec odczytu 2 bitu
sbi (twi,scl);
if ((twi,sda)==1)
{
minuty=minuty+8;
}
else
{
DDRB=0xff;
}
cbi (twi,scl);////////////////koniec odczytu 3 bitu
sbi (twi,scl);
if ((twi,sda)==1)
{
minuty=minuty+16;
}
else
{
DDRB=0xff;
}
cbi (twi,scl);////////////////koniec odczytu 4 bitu
sbi (twi,scl);
if ((twi,sda)==1)
{
minuty=minuty+32;
}
else
{
DDRB=0xff;
}
cbi (twi,scl);////////////////koniec odczytu 5 bitu
sbi (twi,scl);
if ((twi,sda)==1)
{
minuty=minuty+64;
}
else
{
DDRB=0xff;
}
cbi (twi,scl);////////////////koniec odczytu 6 bitu
sbi (twi,scl);
if ((twi,sda)==1)
{
minuty=minuty+128;
}
else
{
DDRB=0xff;
}
cbi (twi,scl);////////////////koniec odczytu 7 bitu
//////////////////////////////////////////////
DDRC=0xff;
cbi (twi,sda);
sbi (twi,scl);//////wgenerowany ack od odbiornika czyli procka
//////////////STOP////////////////
////////zegar jest na 1 a dene na 0////////
sbi (twi,sda); //skok z 0 na 1 danych przy zegarze na 1 STOP
//////////////////////////////////////////////////////////////////////
GotoXY(1,1);
WriteChar(minuty);
}
return 0;
}
}