Proszę o weryfikacje i uproszczenie tego kodu tak aby mógł go zmieścić w tym procesorze co w temacie
jest to mechanizm wyświetlający temperaturę z dwóch ds18b20 na osobnych pinach mogą być razem tylko nie wiem jak to zrobić. i włączające pompę c.w.u
Proszę o korektę tego kodu mi to zajmuje 2,4Kbs
#include <avr/io.h>
#include <avr/delay.h>
#include <string.h>
#define F_CPU 1000000UL
#include <stdlib.h>
#define SET_E PORTB |= _BV(3)
#define CLR_E PORTB &= ~_BV(3)
#define SET_RS PORTB |= _BV(2)
#define CLR_RS PORTB &= ~_BV(2)
#define SET_W DDRD &= ~_BV(l)
#define CLR_W DDRD |= _BV(l)
#define ON_P DDRD |= _BV(2)
#define OFF_P DDRD &= ~_BV(2)
char wys[16];
char l =0 ;
char we = 0;
// procedura zapisu
void w_l(char x)
{
SET_E;
PORTB = ((PORTB & 0x0F) | (x & 0xF0));
CLR_E;
SET_E;
PORTB = ((PORTB & 0x0f) | ((x & 0x0F) << 4));
CLR_E;
_delay_ms(1);
}
// procedura instrukcji
void w_c(char x)
{
CLR_RS;
w_l(x);
}
// zapis tekstu do lcd
void w_t(char * s)
{
while(*s)
{
SET_RS;
w_l(*s);
s++;
}
}
// inicjacja lcd
void l_i(void)
{
_delay_us(15);
CLR_E;
CLR_RS;
char i;
for(i = 0; i < 3; i++)
{
SET_E;
PORTB &=0x3F;
CLR_E;
_delay_ms(5);
}
SET_E;
PORTB &= 0x2E;
CLR_E;
_delay_ms(1);
w_c(0x28);
w_c(0x08);
w_c(0x01);
w_c(0x06);
w_c(0x0C);
}
// reset 1W
unsigned char r_p(char l)
{
unsigned char p;
if(l == 0)
{
we = 0x01;
}
if(l == 1)
{
we = 0x02;
}
CLR_W;
_delay_us(500);
SET_W;
_delay_us(30);
if(bit_is_clear(PIND, we)) {p=1;}else{p=0;}
_delay_us(470);
if(bit_is_clear(PIND, we)) {p=1;}else{p=0;}
return p;
}
// wysyłanie bajtu
void s_b(char w)
{
unsigned char i;
unsigned char p;
for(i = 0; i < 8; i++)
{
p = w >> i;
p &= we;
CLR_W;
_delay_us(5);
if(p == 1)
SET_W;
_delay_us(80);
SET_W;
}
_delay_us(100);
}
// wysyłanie bajtu
unsigned char r_b(void)
{
unsigned char i;
unsigned char w = 0;
unsigned char p = 0;
for(i = 0; i < 8; i++)
{
CLR_W;
_delay_us(2);
SET_W;
_delay_us(15);
if(bit_is_set(PIND, we)) {p=1;}else{p=0;}
if(p) w |=we << i;
_delay_us(15);
}
}
// główna funkcja
int main(void)
{
unsigned char s;
char b1[8],b2[8];
char t_1 = 0,t_2 = 1,e = 0;
float t1 = 0,t2 = 0;
DDRB = 0xFF;
PORTB = 0xFF;
l_i();
w_t("Start");
for(;;)
{
for(e = 0; e <= 1; e++)
{
s=r_p(e);
if(s == 1)
{
s_b(0xCC);
s_b(0x44);
_delay_us(750);
s=r_p(e);
s_b(0XCC);
s_b(0xBE);
t_1=r_b();
t_2=r_b();
s=r_p(e);
if(e == 0)
{
t1=(float)(t_1+(t_2*256))/16;
dtostrf(t1,1,1,b1);
}
if(e == 1)
{
t2=(float)(t_2+(t_2*256))/16;
dtostrf(t2,1,1,b2);
}
}
else
{
if(e == 0){t1= 0;}
if(e == 1){t2= 0;}
}
}
strcat(wys, b1);
strcat(wys, b2);
w_c(0x01);
w_t(wys);
if(t1 >= 40)
{
if(t2 <= 40)
{
ON_P;
}
}
if(t1 <= 40)
{
OFF_P;
}
_delay_us(200);
}
}jest to mechanizm wyświetlający temperaturę z dwóch ds18b20 na osobnych pinach mogą być razem tylko nie wiem jak to zrobić. i włączające pompę c.w.u
Proszę o korektę tego kodu mi to zajmuje 2,4Kbs
