/* * main.c * * Created on: 18 wrz 2014 * Author: X */ #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <math.h> #define WE 2 #define PORT_1WIRE PIND #define SET_1WIRE DDRD&=~_BV(WE) #define CLEAR_1WIRE DDRD|=_BV(WE) int main (void) { DDRB=0x00; //int dziesiatki; //int ldziesiatki; int cyferki[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; /* for (dziesiatki=0; dziesiatki<10;dziesiatki++) { for(ldziesiatki=0;ldziesiatki<10;ldziesiatki++) { DDRB=~(cyferki[ldziesiatki]|cyferki[dziesiatki]<<4); _delay_ms ( 100 ); } } */ void liczba(int a,int b) { DDRB=~(cyferki[b]|cyferki[a]<<4); } unsigned char RESET_PULSE(void) { unsigned char presence; CLEAR_1WIRE; _delay_us(500); SET_1WIRE; _delay_us(30); if(bit_is_clear(PORT_1WIRE,WE)) {presence=1;}else{presence=0;} _delay_us(470); if(bit_is_set(PORT_1WIRE,WE)){presence=1;}else{presence=0;} return presence; } void send(char bit){ CLEAR_1WIRE; _delay_us(5); if(bit==1) { SET_1WIRE; _delay_us(80); SET_1WIRE; } }//koniec send unsigned char read(void) { unsigned char presence; CLEAR_1WIRE; _delay_us(2); SET_1WIRE; _delay_us(15); if(bit_is_set(PORT_1WIRE,WE)) presence=1;else presence=0; return presence; }//koniec read void send_byte(char wartosc) { unsigned char i;//zmienna licznikowa unsigned char pom; //zmienna pomocnicza for(i=0;i<8;i++) { pom = wartosc>>i; pom &=0x01; send(pom); } _delay_us(100); }//koniec sendbyte unsigned char read_byte(void) { unsigned char i; unsigned char wartosc=0; for(i=0;i<8;i++) { if(read()) wartosc|=0x01<<i; _delay_us(15); } return(wartosc); }//koniec readbyte unsigned char sprawdz; //int temp1=0,temp2=0; while(1){ sprawdz=RESET_PULSE(); if(sprawdz==1) { uint8_t temperature[2]; uint8_t digit; send_byte(0xCC);//skip rom send_byte(0x44);//convert t _delay_ms(750); sprawdz=RESET_PULSE(); send_byte(0xCC); send_byte(0xBE); temperature[0]=read_byte(); temperature[1]=read_byte(); sprawdz=RESET_PULSE(); digit=temperature[0]>>4; digit|=(temperature[1] & 0x07)<<4; liczba(floor(digit/10),digit%10); _delay_ms(500); RESET_PULSE(); } } }
uniwel