Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Unsigned char EEPROM_read(unsigned int uiAddress)






{

while(EECR & (1< < EEWE));

EEAR = uiAddress;

EECR |= (1< < EERE);

Return EEDR;

}

Void EEPROM_write(unsigned int uiAddress, unsigned char ucData)

{

if (EEPROM_read(uiAddress)! =ucData){

while(EECR & (1< < EEWE));

Cli();

EEAR = uiAddress;

EEDR = ucData;

EECR |= (1< < EEMWE);

EECR |= (1< < EEWE);

Sei();

}

}

//-------------END------EEPROM----------------------

//**********1wire************

void pullup_off(void){

DDR_1wire& =~pwire0;

DDR_1wire& =~pwire1;

PORT_1wire& =~pwire0;

PORT_1wire& =~pwire1;

}

unsigned char readbit(void){

Unsigned char i;

Cli();

DDR_1wire|=out_1wire; //line down

asm(" nop");

asm(" nop"); //1.25us

DDR_1wire& =~out_1wire; //line up through 1.25us

_delay_us(11);

i=PIN_1wire;

Sei();

_delay_us(47);

Return i;

}

void readbyte(unsigned char *pw0, unsigned char *pw1) {

Unsigned char i, r, p;

Pullup_off();

*pw0=0;

*pw1=0;

for(i=0, r=1; i< 8; i++){

p=readbit();

if (p & pwire0) *pw0|=r;

if (p & pwire1) *pw1|=r;

r< < =1;

}

PORT_1wire|=out_1wire;

DDR_1wire|=out_1wire;

}

void writebit0(void){

Cli();

DDR_1wire|=out_1wire;

_delay_us(60);

DDR_1wire& =~out_1wire;

Sei();

}

void writebit1(void){

Cli();

DDR_1wire|=out_1wire;

_delay_us(3);

DDR_1wire& =~out_1wire;

Sei();

_delay_us(58);

}

void writebyte(unsigned char byte){

Unsigned char i;

Pullup_off();

for(i=0; i< 8; i++){

if (byte& BIT(0))

Writebit1();

Else

Writebit0();

byte> > =1;

}

PORT_1wire|=out_1wire;

DDR_1wire |=out_1wire;

}

void detectPresence(void){

Unsigned char i;

Pullup_off();

out_1wire=pwire0|pwire1;

DDR_1wire|=pwire0;

DDR_1wire|=pwire1;

_delay_ms(0.48);

DDR_1wire& =~pwire0;

DDR_1wire& =~pwire1;

Cli();

_delay_us(60);

i=PIN_1wire;

Sei();

if (i & pwire0) out_1wire& =~pwire0;

if (i & pwire1) out_1wire& =~pwire1;

if (out_1wire){

_delay_ms(0.42);

i=PIN_1wire;

if (! (i & pwire0)) out_1wire& =~pwire0;

if (! (i & pwire1)) out_1wire& =~pwire1;

}

if (out_1wire==0) state_wire=0;

else{

PORT_1wire|=out_1wire;

DDR_1wire|=out_1wire;

}

}

//***************************

void scratchpad_save(void){

DetectPresence();

if (out_1wire){

writebyte(0xCC); //SKIP ROM [CCh]

writebyte(0x4E); //WRITE SCRATCHPAD [4Eh]

writebyte(0); // TH

writebyte(0); // TL

writebyte(0x7F); // 20 Statys 10bit //writebyte(0x60); // Statys 12bit byte 4 Configuration Register* 0x7F - 12 bit 750mSek; 1F-9bit 94msek

DetectPresence();

if (out_1wire){// EEPROM

writebyte(0xCC); //SKIP ROM [CCh]

writebyte(0x48); //COPY SCRATCHPAD [48h]

PORT_1wire|=out_1wire;

DDR_1wire|=out_1wire;

}

}

}

//*******end***1wire************

//**************************************

Void result_in_bcd(int result)

{//0000 0000 0000 (1)0000 // (2)0000 (3)0000 (4)0000 (5)0000 hi2 hi3 low4 low5

unsigned char dig_out=0;

bcd_num1=0;

bcd_num2=0;

bcd_num3=0;

bcd_num4=0;

while (result > = 1000) {

result -= 1000;

dig_out ++;

}

bcd_num1=dig_out;

dig_out = 0;

while (result > = 100) {

result -= 100;

dig_out ++;

}

bcd_num2=dig_out;

dig_out = 0;

while (result > = 10) {

result -= 10;

dig_out ++;

}

bcd_num3=dig_out;

bcd_num4=result;

}

//**************************************************

//void format_t(unsigned char p){

//int t_point;

// t_point=(unsigned int)(temper[p*2+1]< < 8); //msb

// t_point|=temper[p*2]; //lsb;

// result_in_bcd((t_point& 0x0F)*625);

// t_stat[p+4]=(t_point> > 4)*10+bcd_num1;

//

}

void receive_t(void){

if (state_wire==0)

{

state_wire=1;

DetectPresence();

Return;

}

if (state_wire==1)

{

state_wire=2;

writebyte(0xCC); //SKIP ROM [CCh]

writebyte(0x44); //CONVERT T [44h]

time_wire=100; //87; // time= time_wire/100

Return;

}

if (state_wire==2)

{

if (! time_wire) state_wire=3;






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.