![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
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;
|