السلام عليكم استاذ ماجد ,, شكرا جزيلاً لحضرتك لما تبذله معي من وقت وما تمنحني اياه من علماً نافع ...
استخدمت الدوال التي ذكرتها . حيث كتبت
كود:
void store_float(unsigned int adres, float sayi){
eeprom_write(adres,lo(sayi));
delay_ms(20);
eeprom_write(adres+1,hi(sayi));
delay_ms(20);
eeprom_write(adres+2,higher(sayi));
delay_ms(20);
eeprom_write(adres+3,highest(sayi));
delay_ms(20);
}
float read_float(unsigned int adres){
float th;
lo(th)=eeprom_read(adres);
hi(th)=eeprom_read(adres+1);
higher(th)=eeprom_read(adres+2);
highest(th)=eeprom_read(adres+3);
return th;
}
وقمت بأستدعاء دالة built_in
كود:
#include <built_in.h>
والنتيجة كانت
عمل على اكمل وجه في المحاكاة
ولكن في العملي لم يعمل بل بمجرد استدعاء دالة القراءة المايكرو يتجمد
وهذا الكود كاملا
كود:
#include <built_in.h>
//#include <eprom.h>
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
#define relay1 portd.f7
#define relay2 portd.f6
#define relay3 portd.f5
#define relay4 portd.f4
#define relay5 portc.f7
#define led_check portd.f1
#define relay1_dir trisd.f7
#define relay2_dir trisd.f6
#define relay3_dir trisd.f5
#define relay4_dir trisd.f4
#define relay5_dir trisc.f7
#define led_check_dir trisd.f1
#define sw1 portc.f2
#define sw2 portc.f3
#define sw3 portd.f0
#define sw1_dir trisc.f2
#define sw2_dir trisc.f3
#define sw3_dir trisd.f0
#define led_low portc.f4
#define led_normal portd.f3
#define led_high portd.f2
#define led_low_dir trisc.f4
#define led_normal_dir trisd.f3
#define led_high_dir trisd.f2
char x=0; float read_sensor_input; float read_sensor_output;
char txt[15]; char txt1[15]; char normal=0; int ss;
char over[8]; char edit=0;
char flag_data[8]; char rrr=0; float mm=0; char yy=0;
int time_data[8];
float factor=74.23; unsigned long save_data;
typedef unsigned char byte;
typedef unsigned int word;
void micro()
{
lcd_init();
lcd_cmd(1);
lcd_cmd(12);
ADC_Init();
TRISA.F3=1;
TRISA.f5=1;
relay1_dir=0;
relay2_dir=0;
relay3_dir=0;
relay4_dir=0;
relay5_dir=0;
sw1_dir=1;
sw2_dir=1;
sw3_dir=1;
led_low_dir=0;
led_normal_dir=0;
led_high_dir=0;
led_low=1;
led_normal=1;
led_high=1;
relay1=0;
relay2=0;
relay3=0;
relay4=0;
relay5=0;
led_check_dir=0;
led_check=0;
lcd_out(1,4, "HELLOoo");
for(x=0;x<6;x++){ led_check=!led_check; Delay_ms(500);}
lcd_cmd(1);
}
void store_float(unsigned int adres, float sayi){
eeprom_write(adres,lo(sayi));
delay_ms(20);
eeprom_write(adres+1,hi(sayi));
delay_ms(20);
eeprom_write(adres+2,higher(sayi));
delay_ms(20);
eeprom_write(adres+3,highest(sayi));
delay_ms(20);
}
float read_float(unsigned int adres){
float th;
lo(th)=eeprom_read(adres);
hi(th)=eeprom_read(adres+1);
higher(th)=eeprom_read(adres+2);
highest(th)=eeprom_read(adres+3);
return th;
}
void read_analoge()
{
read_sensor_input=0.0;
for(x=0;x<50;x++)
{
read_sensor_input+=adc_read(3);
Delay_ms(1);
}
read_sensor_input=read_sensor_input/50;
}
void set_factor()
{
lcd_cmd(1);
while(1)
{
lcd_out(1,1,"factor=");
floatToStr(factor,txt);
for(x=0;x<14;x++)
{
if(txt[x]!=' '){lcd_chr_cp(txt[x]);}
}
if(sw1==1){ Delay_ms(250); factor=factor+1.0;edit=1;}
if(sw2==1){ Delay_ms(250); factor=factor-1.0;edit=1;}
if(sw3==1){ Delay_ms(250); store_float(0,factor); lcd_cmd(1); lcd_out(1,1,"Data Seved"); Delay_ms(1500); lcd_cmd(1);return;}
}
}
void main()
{
micro();
Delay_ms(100);
factor= read_float(0);
while(1)
{
if(sw3){ Delay_ms(250); set_factor();}
if(sw1){ Delay_ms(250); read_float(0);}
read_analoge();
read_sensor_input=(read_sensor_input*5000)/1023;
read_sensor_input/=1000;
floatToStr(read_sensor_input,txt);
lcd_out(1,1,"Vson=");
for(x=0;x<14;x++)
{
if(txt[x]!=' '){lcd_chr_cp(txt[x]);}
}
read_sensor_input*= factor;
floatToStr(read_sensor_input,txt);
lcd_out(2,1,"Vin=");
for(x=0;x<14;x++)
{
if(txt[x]!=' '){lcd_chr_cp(txt[x]);}
}
// ÇáãÑÍáÉ ÇáÇæáì
////////////////////////////////////////////////////
if( read_sensor_input>95 && read_sensor_input <110)
{
relay2=1;
relay1=0; relay3=0; relay4=0; relay5=0; //relay6=0;
}
//////////////////////////////////////////////////////
// ÇáãÑÍáÉ ÇáËÇäíÉ
///////////////////////////////////////////////////////
else if( read_sensor_input >110 && read_sensor_input < 124)
{
relay2=1; relay5=1;
relay1=0; relay3=0; relay4=0; //relay6=0;
}
// ÇáãÑÍáÉ ÇáËÇáËÉ
/////////////////////////////////////////////////////////
else if( read_sensor_input>124 && read_sensor_input<141)
{
relay1=1; relay2=1;
relay3=0; relay4=0; relay5=0; // relay6=0;
}
// ÇáãÑÍáÉ ÇáÑÇÈÚÉ
//////////////////////////////////////////////////////////
else if( read_sensor_input>142 && read_sensor_input<=160)
{
relay1=1; relay2=1; relay5=1;
relay3=0; relay4=0; //relay6=0;
}
// ÇáãÑÍáÉ ÇáÎÇãÓÉ
//////////////////////////////////////////////////////////
else if( read_sensor_input>161 && read_sensor_input<169)
{
relay3=1;
relay1=0; relay2=0; relay4=0; relay5=0; //relay6=0;
}
// ÇáãÑÍáÉ ÇáÓÇÏÓÉ
//////////////////////////////////////////////////////////
else if( read_sensor_input>170 && read_sensor_input<190)
{
relay3=1; relay5=1;
relay1=0; relay2=0; relay4=0; //relay6=0;
}
// ÇáãÑÍáÉ ÇáÓÇÈÚÉ
/////////////////////////////////////////////////////////
else if( read_sensor_input>191 && read_sensor_input<210)
{
relay4=1; relay5=1;
relay1=0; relay2=0; relay3=0; //relay6=0;
}
else if( read_sensor_input>210 && read_sensor_input<245)
{
relay4=0; relay5=0;
relay1=0; relay2=0; relay3=0; //relay6=0;
}
//ÇáãÑÍáÉ ÇáËÇãäÉ
////////////////////////////////////////////////////////////
else if( read_sensor_input>245 && read_sensor_input <270)
{
relay1=0; relay2=0; relay3=0; relay4=0; relay5=1; // relay6=0;
}
Delay_ms(100);
if( read_sensor_input<180)
{
led_low=0; led_high=1; led_normal=1;
}
if( read_sensor_input>180 && read_sensor_input<245)
{
led_low=1; led_high=1; led_normal=0;
}
if( read_sensor_input>245)
{
led_low=1; led_high=0; led_normal=1;
}
}
}