السلام عليكم ورحمه الله
لقد عملت علي مشروع بستخدام ال pic 12f 675 ..... و المشرو يعمل بشكل جيد ولكن اريد استخدام ذاكرة الأبروم .. وعندما اضع أوامر الأبروم ... البرنامج يتوقف ولا يستجيب ..
فما هو الحل ...
اليكم الكود ...
كود:
#define FOSC_HS 0X31FB ;
#define LATSH_HIGH GP2_bit = 1;
#define DATA_HIGH GP4_bit = 1;
#define CLOCK_HIGH GP5_bit = 1;
#define LATSH_LOW GP2_bit = 0;
#define DATA_LOW GP4_bit = 0;
#define CLOCK_LOW GP5_bit = 0;
#define LAMP_ON GP1_bit=1;
#define LAMP_OFF GP1_bit=0;
#define SWETSH_ON GP0_bit==1
#define allof GP2_bit = 0; GP4_bit = 0; GP5_bit = 0;
#define ZERO_PAET for(m=0; m<8; m++){ DATA_LOW SAEV_DATA(); DATA_SHWO(); }
unsigned timer=0,m=0,x =0;
unsigned long int TCOUNT;
unsigned long int take;
//******************* ----------------------- ********************//
void SAEV_DATA()
{
LATSH_LOW delay_ms(1);
LATSH_HIGH delay_ms(1);
}
void DATA_SHWO()
{
CLOCK_LOW delay_ms(1);
CLOCK_HIGH delay_ms(1);
}
//-----------------------------------------//
void owen(){
ZERO_PAET
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_SHWO(); delay_ms(550); x=2; }
//--------------------------------------//
void tow(){
ZERO_PAET
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_SHWO(); delay_ms(550); x=4;}
//---------------------------------------//
void thre(){
ZERO_PAET
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_SHWO(); delay_ms(550); x=6;}
//---------------------------------------//
void foer(){
ZERO_PAET
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_SHWO(); delay_ms(550); x=8;}
//-------------------------------------------//
void faev(){
ZERO_PAET
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_SHWO(); delay_ms(550); x=10;}
//-------------------------------------------//
void sex(){
ZERO_PAET
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_SHWO(); delay_ms(550); x=12; }
//------------------------------------------//
void seven(){
ZERO_PAET
DATA_LOW SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_SHWO(); delay_ms(550);x=14;}
void eet(){
ZERO_PAET
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_SHWO(); delay_ms(550);x=16;}
void naen(){
ZERO_PAET
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_LOW SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_HIGH SAEV_DATA();
DATA_SHWO(); delay_ms(550); x=18;}
//------------------ ÇáÊÚÑíÝÇÊ ááÈÑäÇãÌ ---------------------//
void main() {
// FOSC_HS
VRCON = 0X00; // Shut off the Voltage Reference
ADCON0 = 0x00; // Shut off the A/D CONVERTR
ANSEL = 0X00; // Set ports as digital I/0, not analog input
TRISIO = 0b00001001;
CMCON = 0x07; // Shut off the Cmparator
GPIO = 0X00;
//-------------------!!!!!!!!!!!!!!!!!!!!!-------------------//
//------- ÍáÞÉ ÈÏÇíå ÇáÈÑäÇãÌ -------//
while(1){
if( GP3_bit==0 ) { x++; delay_ms(350); }
if( x==19 ) { ZERO_PAET x=0; delay_ms(150); }
if( x==1 ) { owen(); } if( x==3 ) { tow(); } if( x==5 ) { thre(); }
if( x==7 ) { foer(); } if( x==9 ) { faev(); } if( x==11 ) { sex(); }
if( x==13 ) { seven(); } if( x==15 ) { eet(); } if( x==17 ) { naen(); }
//--------------------------------------------------------------------------//
if( x==2 && GP0_bit==1 ) { GP1_bit=1; delay_ms(48000); LAMP_OFF }
if( x==4 && GP0_bit==1 ) { GP1_bit=1; delay_ms(96000); LAMP_OFF }
if( x==6 && GP0_bit==1 ) { GP1_bit=1; delay_ms(169900); LAMP_OFF }
if( x==8 && GP0_bit==1 ) { GP1_bit=1; delay_ms(216000); LAMP_OFF }
if( x==10 && GP0_bit==1 ) { GP1_bit=1; delay_ms(292400); LAMP_OFF }
if( x==12 && GP0_bit==1 ) { GP1_bit=1; delay_ms(312000); LAMP_OFF }
if( x==14 && GP0_bit==1 ) { GP1_bit=1; delay_ms(360000); LAMP_OFF }
if( x==16 && GP0_bit==1 ) { GP1_bit=1; delay_ms(396000); LAMP_OFF }
if( x==18 && GP0_bit==1 ) { GP1_bit=1; delay_ms(499000); LAMP_OFF }
//--------------------------------------------------------------------------//
}
}
هذا الكود يعمل جيداااا ولكن عندما أضيف اليه اكواد استخدام الأبروم البرنامج يتوقف ولا يستجيب ..
وهذة هي أوامر الأبلروم المستخدمه ...
كود:
eeprom_Write(0,0);
eeprom_Write(1,0);
eeprom_Write(2,0);
eeprom_Write(3,0);
eeprom_Write(4,0);
eeprom_Write(5,0);
eeprom_Write(6,0);
eeprom_Write(7,0);
eeprom_Write(8,0);
eeprom_Write(9,0);
وهذا اقتباس جزء من الكود مع اضافه أمر الكتابه علي الإبروم
كود:
if( GP3_bit==0 ) { x++; eeprom_Write(1, x);delay_ms(10); delay_ms(350); }
if( x==19 ) { ZERO_PAET x=0; delay_ms(150); }
ما اريده هنا تخزين قيمه المتغير "" x "" في ذاكرة الأبروم .... وبعد فصل التيار عن الدائره استعيد قيمه المتغير "" x "" من ذاكرة الإبروم ....
طبعاااا هذا الأمر للكتابه علي ذاكرة الإبروم
كود:
eeprom_Write(1, x);delay_ms(10);
وهذا الأمر للقرأه من ذاكرة الإبروم
كود:
x= eeprom_read(1); delay_ms(10);
ولكن عن ادخال هذة الأوامر للكود يتوقف البرنامج ولا يستجيب ابداااا للأوامر الشرطيه ..
أرجو الحل ..
وشكرااا للجميع