| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | #include "1wire.h"#include <util/delay.h>#include <avr/interrupt.h>#include <avr/wdt.h>#define SEARCHROM#undef INITST#ifdef SEARCHROM#ifdef INITSTextern unsigned char initst;#endif#endifunsigned char _1WireInit(void){	unsigned char wyj=0;	_1WPORT &= ~_1WL;	ZERO;	_delay_us(480);//	cli();	JEDEN;	_delay_us(70);	if(!WYS) wyj++;//	sei();	_delay_us(410);	if(!WYS) wyj++;	return wyj; // 0 - zwarcie, 1 - ok, 2 - rozwarcie}void _1WireWriteByte(unsigned char dana){	register unsigned char i;	for(i=0;i<8;i++){		_1WireWriteSlot(dana&1,0);		dana >>= 1;	}}void _1WireWriteBytePR(unsigned char dana){ //natychmiast po poleceniu włącz zasilanie	register unsigned char i;	for(i=0;i<7;i++){		_1WireWriteSlot(dana&1,0);		dana >>= 1;	}	_1WireWriteSlot(dana,1);	_1WPORT |= _1WL;	_1WDDR |= _1WL;//	sei();	if(!WYS) _1WirePoweroff();}void _1WireWriteSlot(unsigned char x, unsigned char pr){//	cli();	ZERO;	if(x) _delay_us(6); else _delay_us(60);	JEDEN;	if(x) _delay_us(64); else _delay_us(10);	if(!pr) sei();	_delay_us(1);}unsigned char _1WireReadByte(void){	register unsigned char i=1;	unsigned char dana=0;	while(i){		if(_1WireReadSlot()) dana |= i;		i <<= 1;	}	return dana;}unsigned char _1WireReadSlot(void){	unsigned char wyj=0;//	cli();	ZERO;	_delay_us(6);	JEDEN;	_delay_us(9);	if(WYS) wyj=1;//	sei();	_delay_us(55);	return wyj;}/*void _1WirePoweroff(void){ //wyłacz zasilanie	_1WDDR &= ~_1WL;	_1WPORT &= ~_1WL;}*/#ifdef SEARCHROMunsigned char _1WireSearch(unsigned char rv, unsigned char *buf){	unsigned char i,a,b,mask=1,lz=0;#ifdef INITST	if((initst = _1WireInit())!=1) return 0xff;#else	if(_1WireInit()!=1) return 0xff;#endif	_1WireWriteByte(0xf0);	for(i=1;i<65;i++){		a = _1WireReadSlot();		b = _1WireReadSlot();		if(a && b) return 0xff;		if(a==b) {			if(i>rv) a = 0;			else if(i==rv) a = 1;			else a = !!((*buf)&mask);			if(!a) lz=i;		}		_1WireWriteSlot(a,0);		if(a) (*buf)|=mask; else (*buf)&=~mask;		mask<<=1;		if(!mask){			mask = 1;			buf++;		}	}	rv=lz;	return rv;}void _1WireSendRom(unsigned char *rom){	register unsigned char i;	for(i=0;i<8;i++){		_1WireWriteByte(rom[i]);	}}#endif/*	unsigned char tablica_z_adresami[MAX_NUM][8];	unsigned char rom[8];	unsigned char i=0, rv=0;	do {		rv = _1WireSearch(rv, rom);		memcpy(tablica_z_adresami[i], rom, 8);		i++;	} while(rv && i<MAX_NUM);*/
 |