قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:
قديم 14-03-2015, 01:50 AM المشاركة 33   
افتراضي



أخي هذا الكود خاطئ
كود:
 if(sw1==1 && portb.f0 ==1){
 x=0;
 while(x>60){
  portb.f0=1;
  }
  portb.f0=0;
       }
ما غايتك من هذا الكود؟
اخي العزيز
اريد ان تشتغل ليد عند الضغط على الزر
وعند رفع اليد على الزر تبقى مضيئة لمدة 3 تواني ثم تنطفئ
بدون استعمال delay اي استعمال التيمر0

اعلانات

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:
قديم 16-03-2015, 01:53 AM المشاركة 34   
افتراضي


هل من مجيب

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 16-03-2015, 08:15 PM المشاركة 35   
افتراضي


أسف جدا اخي على تأخير
تفضل هذا الكود لسويج واحد وحمل واحد حتى اسهل عليك فهم الكود

كود:
sbit sw1 at RA0_bit;
sbit sw1_dir at TRISA0_bit;

sbit load1 at RB0_bit;
sbit load1_dir at TRISB0_bit;

char sw1_flag=0 , state_load=0 ;
char sw1_time=0 ,load_off_time=0;

//Timer1

//Prescaler 1:2; TMR1 Preload = 15536; Actual Interrupt Time : 50 ms

//Place/Copy this part in declaration section
void InitTimer1(){
  T1CON         = 0x11;
  TMR1IF_bit         = 0;
  TMR1H         = 0x3C;
  TMR1L         = 0xB0;
  TMR1IE_bit         = 1;
  INTCON         = 0xC0;
}

void Interrupt(){
  if (TMR1IF_bit){
    TMR1IF_bit = 0;
    TMR1H         = 0x3C;
    TMR1L         = 0xB0;
    //Enter your code here
    if(sw1_flag==1)sw1_time++;
    if(state_load ==1)load_off_time++;
  }
}

void main()
{
cmcon=7;
InitTimer1();
sw1_dir=1;// input
load1_dir=0;// output
load1=0; // OFF load1

while(1){
         if(sw1==0 ) sw1_flag=1;
        if(sw1_flag==1 && sw1_time>=5)// this mean time >= 250
          {
           sw1_flag=0;
           sw1_time=0;
           state_load=1;
           load1=1;
          }
          
          if(state_load == 1 && load_off_time>=60)// this mean time >= 3000ms=3sec
            {
             state_load =0;
             load_off_time=0;
             load1=0;
            }
      }
}


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:
قديم 16-03-2015, 09:48 PM المشاركة 36   
افتراضي


شكرا اخي العزيز


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:
قديم 16-03-2015, 10:52 PM المشاركة 37   
افتراضي


كود:
  if(state_load == 1 && load_off_time>=60)// this mean time >= 3000ms=3sec
            {
             state_load =0;
             load_off_time=0;
             load1=0;
            }
ممكن شرح


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:
قديم 16-03-2015, 10:55 PM المشاركة 38   
افتراضي


عند اضافة زر اخر يعمل التاني جيدا و يعمل الاول بدون تاخير

كود:
sbit sw1 at RA0_bit;
sbit sw1_dir at TRISA0_bit;

sbit load1 at RB0_bit;
sbit load1_dir at TRISB0_bit;

char sw1_flag=0 , state_load=0 ;
char sw1_time=0 ,load_off_time=0;

sbit sw2 at RA1_bit;
sbit sw2_dir at TRISA1_bit;

sbit load2 at RB1_bit;
sbit load2_dir at TRISB1_bit;

char sw2_flag=0 , state2_load=0 ;
char sw2_time=0 ,load2_off_time=0;

//Timer1

//Prescaler 1:2; TMR1 Preload = 15536; Actual Interrupt Time : 50 ms

//Place/Copy this part in declaration section
void InitTimer1(){
  T1CON         = 0x11;
  TMR1IF_bit         = 0;
  TMR1H         = 0x3C;
  TMR1L         = 0xB0;
  TMR1IE_bit         = 1;
  INTCON         = 0xC0;
}

void Interrupt(){
  if (TMR1IF_bit){
    TMR1IF_bit = 0;
    TMR1H         = 0x3C;
    TMR1L         = 0xB0;
    //Enter your code here
    if(sw1_flag==1)sw1_time++;
    if(state_load ==1)load_off_time++;
     if(sw2_flag==1)sw2_time++;
    if(state2_load ==1)load2_off_time++;
  }
}

void main()
{
cmcon=7;
InitTimer1();
sw1_dir=1;// input
load1_dir=0;// output
load1=0; // OFF load1
sw2_dir=1;// input
load2_dir=0;// output
load2=0; // OFF load1
while(1){
         if(sw1==0 ) sw1_flag=1;
        if(sw1_flag==1 && sw1_time>=5)// this mean time >= 250
          {
           sw1_flag=0;
           sw1_time=0;
           state_load=1;
           load1=1;
          }

          if(state_load == 1 && load_off_time>=60)// this mean time >= 3000ms=3sec
            {
             state_load =0;
             load_off_time=0;
             load1=0;
            }
              if(sw2==0 ) sw2_flag=1;
        if(sw2_flag==1 && sw2_time>=5)// this mean time >= 250
          {
           sw2_flag=0;
           sw2_time=0;
           state2_load=1;
           load2=1;
          }

          if(state2_load == 1 && load2_off_time>=60)// this mean time >= 3000ms=3sec
            {
             state2_load =0;
             load2_off_time=0;
             load2=0;
            }
      }
}


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:
قديم 18-03-2015, 05:02 PM المشاركة 39   
افتراضي


هل من مجيب


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 18-03-2015, 06:14 PM المشاركة 40   
افتراضي


عند اضافة زر اخر يعمل التاني جيدا و يعمل الاول بدون تاخير

كود:
sbit sw1 at RA0_bit;
sbit sw1_dir at TRISA0_bit;

sbit load1 at RB0_bit;
sbit load1_dir at TRISB0_bit;

char sw1_flag=0 , state_load=0 ;
char sw1_time=0 ,load_off_time=0;

sbit sw2 at RA1_bit;
sbit sw2_dir at TRISA1_bit;

sbit load2 at RB1_bit;
sbit load2_dir at TRISB1_bit;

char sw2_flag=0 , state2_load=0 ;
char sw2_time=0 ,load2_off_time=0;

//Timer1

//Prescaler 1:2; TMR1 Preload = 15536; Actual Interrupt Time : 50 ms

//Place/Copy this part in declaration section
void InitTimer1(){
  T1CON         = 0x11;
  TMR1IF_bit         = 0;
  TMR1H         = 0x3C;
  TMR1L         = 0xB0;
  TMR1IE_bit         = 1;
  INTCON         = 0xC0;
}

void Interrupt(){
  if (TMR1IF_bit){
    TMR1IF_bit = 0;
    TMR1H         = 0x3C;
    TMR1L         = 0xB0;
    //Enter your code here
    if(sw1_flag==1)sw1_time++;
    if(state_load ==1)load_off_time++;
     if(sw2_flag==1)sw2_time++;
    if(state2_load ==1)load2_off_time++;
  }
}

void main()
{
cmcon=7;
InitTimer1();
sw1_dir=1;// input
load1_dir=0;// output
load1=0; // OFF load1
sw2_dir=1;// input
load2_dir=0;// output
load2=0; // OFF load1
while(1){
         if(sw1==0 ) sw1_flag=1;
        if(sw1_flag==1 && sw1_time>=5)// this mean time >= 250
          {
           sw1_flag=0;
           sw1_time=0;
           state_load=1;
           load1=1;
          }

          if(state_load == 1 && load_off_time>=60)// this mean time >= 3000ms=3sec
            {
             state_load =0;
             load_off_time=0;
             load1=0;
            }
              if(sw2==0 ) sw2_flag=1;
        if(sw2_flag==1 && sw2_time>=5)// this mean time >= 250
          {
           sw2_flag=0;
           sw2_time=0;
           state2_load=1;
           load2=1;
          }

          if(state2_load == 1 && load2_off_time>=60)// this mean time >= 3000ms=3sec
            {
             state2_load =0;
             load2_off_time=0;
             load2=0;
            }
      }
}
جربت الكود على بروتيس ويعمل بشكل طبيعي
هل انت جربته عملي
نرجو التوضيح



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 07:31 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)