اطلاعیه

Collapse
No announcement yet.

خارج نشدن از وقفه

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    خارج نشدن از وقفه

    با سلام
    من برنامه ای نوشته ام از وقفه خارج نمیشه ولی برنامه ی ساده تر نوشته ام درست کار می کنه؟



    #include <mega32.h>
    #include <stdlib.h>
    #include <delay.h>
    #include <keypad.h>
    #include <SIM900.h>
    #include <alcd.h>
    #include <stdio.h>

    // Declare your global variables here
    char key=16;
    char text1[50],str[50],text2[100];
    char sms[80],phone[30];
    int i=0,s=0,ans;

    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    ans = 0;
    getstr(text1);
    getstr(text2);
    PORTD.6 = 1;
    delay_ms(200);
    PORTD.6 = 0;
    lcd_clear();
    lcd_gotoxy(0,0);

    if(!strcmp(text1,"RING&quot)
    {
    // while(PIND.2 == 0)
    // {
    ans = 1;
    PORTC.1=1;
    delay_ms(3000);
    i=Hangup();
    ans = 0;
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts("Hang up!"
    PORTC.1=0;
    lcd_gotoxy(0,1);
    delay_ms(2000);
    // }
    }
    lcd_clear();
    }


    void Signal_Dispaly(int i);
    void main(void)
    {
    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x00;
    PORTC=0x00;
    DDRC=0x0F;
    PORTD=0x00;
    DDRD=0x60;
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Falling Edge
    // INT1: Off
    // INT2: Off
    GICR|=0x40;MCUCR=0x02;MCUCSR=0x00;GIFR=0x40;

    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;UCSRB=0x18;UCSRC=0x86;UBRRH=0x00;UBRRL= 0x47;

    // RS - PORTA Bit 0
    // RD - PORTA Bit 1
    // EN - PORTA Bit 2
    // D4 - PORTA Bit 4
    // D5 - PORTA Bit 5
    // D6 - PORTA Bit 6
    // D7 - PORTA Bit 7
    // Characters/line: 16
    lcd_init(16);

    lcd_definechar(SigQual[0],0);
    lcd_definechar(SigQual[1],1);
    lcd_definechar(SigQual[2],2);
    lcd_definechar(SigQual[3],3);
    lcd_definechar(SigQual[4],4);
    lcd_definechar(SigQual[5],5);

    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts("Only GOD"
    lcd_gotoxy(0,1);
    lcd_puts("Ahmad Farahani"
    // Global enable interrupts
    #asm("sei&quot
    while (1)
    {
    key = keyscan();
    if(s==0)
    {
    Operator_Name(str);
    i = Signal_Quality();
    lcd_gotoxy(0,1);
    lcd_puts(str);
    Signal_Dispaly(i);
    }
    if(key == 12){delay_ms(50);lcd_clear();s++;if(s==7)s=0;}
    }
    }
    void Signal_Dispaly(int i)
    {
    if(i == 99) {
    lcd_gotoxy(0,1);
    lcd_puts("No Signal!"
    }
    else if(i == 0) {
    lcd_gotoxy(10,0);
    lcd_putchar(0);
    }
    else if(i == 1) {
    lcd_gotoxy(10,0);
    lcd_putchar(0);
    lcd_putchar(1);
    }
    else if(i == 2) {
    lcd_gotoxy(10,0);
    lcd_putchar(0);
    lcd_putchar(1);
    lcd_putchar(2);
    }
    else if(i == 3) {
    lcd_gotoxy(10,0);
    lcd_putchar(0);
    lcd_putchar(1);
    lcd_putchar(2);
    lcd_putchar(3);
    }
    else if((i > 3) & (i < 31)) {
    lcd_gotoxy(10,0);
    lcd_putchar(0);
    lcd_putchar(1);
    lcd_putchar(2);
    lcd_putchar(3);
    lcd_putchar(4);
    }
    else if(i == 31) {
    lcd_gotoxy(10,0);
    lcd_putchar(0);
    lcd_putchar(1);
    lcd_putchar(2);
    lcd_putchar(3);
    lcd_putchar(4);
    lcd_putchar(5);
    }
    }
    خدایا توانایی خدمت به ملت شریف ایران را در وجودم قرار ده.
    جان ، مال ، زندگی ، نسلم فدای بانوی دوعالم حضرت صدیقه طاهره(س)
    اللهم صل علی فاطمه و آله

    #2
    پاسخ : خارج نشدن از وقفه

    چند تا تابع توی این وقفه فراخوان کردی؟؟؟؟ oo:
    کد:
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
      ans = 0;
      getstr(text1);
      getstr(text2);  
      PORTD.6 = 1;
      delay_ms(200);
      PORTD.6 = 0;   
      lcd_clear();
      lcd_gotoxy(0,0);
      
      if(!strcmp(text1,"RING"))
      {
    //    while(PIND.2 == 0) 
    //    {    
        ans = 1;
        PORTC.1=1; 
        delay_ms(3000);
        i=Hangup(); 
        ans = 0;
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_puts("Hang up!");
        PORTC.1=0;
        lcd_gotoxy(0,1);    
        delay_ms(2000);    
    //    }                
      }
    lcd_clear();    
    }
    من قبلاً هم گفته ام و هم دوستان زیادی اشاره کرده اند که [glow=red,2,300]در روال وقفه هیچگاه تابع فراخوان نکنید[/glow]
    ساختار برنامه را عوض کن ؛ حتماً درست میشه

    موفق باشید
    امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

    دیدگاه


      #3
      پاسخ : خارج نشدن از وقفه

      نوشته اصلی توسط احمد فراهانی
      با سلام
      من برنامه ای نوشته ام از وقفه خارج نمیشه ولی برنامه ی ساده تر نوشته ام درست کار می کنه؟



      #include <mega32.h>
      #include <stdlib.h>
      #include <delay.h>
      #include <keypad.h>
      #include <SIM900.h>
      #include <alcd.h>
      #include <stdio.h>

      // Declare your global variables here
      char key=16;
      char text1[50],str[50],text2[100];
      char sms[80],phone[30];
      int i=0,s=0,ans;

      // External Interrupt 0 service routine
      interrupt [EXT_INT0] void ext_int0_isr(void)
      {
      ans = 0;
      getstr(text1);
      getstr(text2);
      PORTD.6 = 1;
      delay_ms(200);
      PORTD.6 = 0;
      lcd_clear();
      lcd_gotoxy(0,0);

      if(!strcmp(text1,"RING&quot)
      {
      // while(PIND.2 == 0)
      // {
      ans = 1;
      PORTC.1=1;
      delay_ms(3000);
      i=Hangup();
      ans = 0;
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_puts("Hang up!"
      PORTC.1=0;
      lcd_gotoxy(0,1);
      delay_ms(2000);
      // }
      }
      lcd_clear();
      }


      void Signal_Dispaly(int i);
      void main(void)
      {
      PORTA=0x00;
      DDRA=0x00;
      PORTB=0x00;
      DDRB=0x00;
      PORTC=0x00;
      DDRC=0x0F;
      PORTD=0x00;
      DDRD=0x60;
      TCCR0=0x00;
      TCNT0=0x00;
      OCR0=0x00;

      // External Interrupt(s) initialization
      // INT0: On
      // INT0 Mode: Falling Edge
      // INT1: Off
      // INT2: Off
      GICR|=0x40;MCUCR=0x02;MCUCSR=0x00;GIFR=0x40;

      // USART initialization
      // Communication Parameters: 8 Data, 1 Stop, No Parity
      // USART Receiver: On
      // USART Transmitter: On
      // USART Mode: Asynchronous
      // USART Baud Rate: 9600
      UCSRA=0x00;UCSRB=0x18;UCSRC=0x86;UBRRH=0x00;UBRRL= 0x47;

      // RS - PORTA Bit 0
      // RD - PORTA Bit 1
      // EN - PORTA Bit 2
      // D4 - PORTA Bit 4
      // D5 - PORTA Bit 5
      // D6 - PORTA Bit 6
      // D7 - PORTA Bit 7
      // Characters/line: 16
      lcd_init(16);

      lcd_definechar(SigQual[0],0);
      lcd_definechar(SigQual[1],1);
      lcd_definechar(SigQual[2],2);
      lcd_definechar(SigQual[3],3);
      lcd_definechar(SigQual[4],4);
      lcd_definechar(SigQual[5],5);

      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_puts("Only GOD"
      lcd_gotoxy(0,1);
      lcd_puts("Ahmad Farahani"
      // Global enable interrupts
      #asm("sei&quot
      while (1)
      {
      key = keyscan();
      if(s==0)
      {
      Operator_Name(str);
      i = Signal_Quality();
      lcd_gotoxy(0,1);
      lcd_puts(str);
      Signal_Dispaly(i);
      }
      if(key == 12){delay_ms(50);lcd_clear();s++;if(s==7)s=0;}
      }
      }
      void Signal_Dispaly(int i)
      {
      if(i == 99) {
      lcd_gotoxy(0,1);
      lcd_puts("No Signal!"
      }
      else if(i == 0) {
      lcd_gotoxy(10,0);
      lcd_putchar(0);
      }
      else if(i == 1) {
      lcd_gotoxy(10,0);
      lcd_putchar(0);
      lcd_putchar(1);
      }
      else if(i == 2) {
      lcd_gotoxy(10,0);
      lcd_putchar(0);
      lcd_putchar(1);
      lcd_putchar(2);
      }
      else if(i == 3) {
      lcd_gotoxy(10,0);
      lcd_putchar(0);
      lcd_putchar(1);
      lcd_putchar(2);
      lcd_putchar(3);
      }
      else if((i > 3) & (i < 31)) {
      lcd_gotoxy(10,0);
      lcd_putchar(0);
      lcd_putchar(1);
      lcd_putchar(2);
      lcd_putchar(3);
      lcd_putchar(4);
      }
      else if(i == 31) {
      lcd_gotoxy(10,0);
      lcd_putchar(0);
      lcd_putchar(1);
      lcd_putchar(2);
      lcd_putchar(3);
      lcd_putchar(4);
      lcd_putchar(5);
      }
      }
      با سلام. در روال سرویس وقفه از تابع getstr استفاده نموده ای این تابع تو برنامه شما مشکل ایجاد کرده؟
      اینجا ماس ماست

      دیدگاه

      لطفا صبر کنید...
      X