ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 13
  1. #1
    2019/11/29
    7
    1

    گیر افتادن پروگرام کانتر در تایمر 1

    با سلام خدمت دوستان
    در کدویژن بنده در داخل تابع اصلی برنامه دو تا while دارم به صورت زیر:

    While(setting==0)
    {
    }

    //-------------------------------------------
    While(setting==1)
    {
    While(i>0)
    {
    }
    Setting=0;
    }
    که در while دوم ، متغیر i توی تایمر 1 ;--i میشه و هر موقع به صفر رسید اصولا باید برنامه وارد حلقه اولی بشه دوباره. ولی متاسفانه اونجور که با فایل cof نگاه کردم ، توی تایمر گیر میکنه ولی توی پروتیوس خطا نمیده ، فقط lcd ثابت می مونه
    ممنون میشم راهنمایی بفرمایید
  2. #2
    2017/06/13
    1,013
    513

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    نقل قول نوشته اصلی توسط m_karimi7

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    با سلام خدمت دوستان
    در کدویژن بنده در داخل تابع اصلی برنامه دو تا while دارم به صورت زیر:

    While(setting==0)
    {
    }

    //-------------------------------------------
    While(setting==1)
    {
    While(i>0)
    {
    }
    Setting=0;
    }
    که در while دوم ، متغیر i توی تایمر 1 ;--i میشه و هر موقع به صفر رسید اصولا باید برنامه وارد حلقه اولی بشه دوباره. ولی متاسفانه اونجور که با فایل cof نگاه کردم ، توی تایمر گیر میکنه ولی توی پروتیوس خطا نمیده ، فقط lcd ثابت می مونه
    ممنون میشم راهنمایی بفرمایید
    سلام
    از این کد و توضیحاتی که دادید چیز زیادی نمیشه فهمید! یکم واضح تر مشکلتون رو بفرمایید.
    ضمنا برای قرار دادن کد حتما از تگ مناسب استفاده کنید که خوانایی اش بیشتر بشه. بهتره برای زبان C از تگ CPP استفاده کنید. تگ ها بالای این قسمتی که متن مینویسید مشخص هستن.
  3. #3
    2019/11/29
    7
    1

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    ممنون بابت توجه
    برنامه به صورت زیر است:
    در حلقه اول ساعت را از ds1307 میگیره و زمانی که به ساعت مد نظر ما رسید یک وسیله ای رو راه می اندازه و هر موقع وقفه INT1 زده بشه وارد حلقه دوم میشه و تا 20 ثانیه میشماره و از حلقه در میاد و اصولا باید وارد حلقه اول میشد که توی تایمر میچرخه



    #include <mega16a.h>


    // I2C Bus functions
    #include <i2c.h>


    // DS1307 Real Time Clock functions
    #include <ds1307.h>


    // Alphanumeric LCD functions
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>


    // Declare your global variables here
    unsigned char hour,minute,second,w_hour,w_minute,w_second,row;
    int w_counter,i=10,light=20;;
    unsigned int sw_counter,pomp_set_counter;
    char lcdShow[32];
    bit setting=0;
    eeprom unsigned char s_hour,s_minute,s_second;
    eeprom unsigned int counter;
    [FONT=Yekan]interrupt [EXT_INT1] void ext_int1_isr(void)[/FONT]{
    // Place your code here
    light=20;
    setting=1;
    PORTB.0=1;
    row=1;
    i=10;
    }


    // Timer1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Reinitialize Timer1 value
    TCNT1H=0xCF2C >> 8;
    TCNT1L=0xCF2C & 0xff;
    // Place your code here
    i--;
    w_counter--;
    light--;
    if(light==0)PORTB.0=0;
    pomp_set_counter++;
    [FONT=Yekan]}
    [/FONT]while(setting==0)
    {
    rtc_get_time(&hour,&minute,&second);
    sprintf(lcdShow,"%02u:%02u:%02u setting%02u:%02u:%02u ",hour,minute,second,s_hour,s_minute,s_second);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    {
    while(setting==1)
    {
    _lcd_write_data(0x0e);
    while(i>0)
    {
    rtc_get_time(&hour,&minute,&second);
    //line one= 15 from 0 line 2=14 from 0
    lcd_gotoxy(row,0);
    delay_ms(1);
    sprintf(lcdShow,"%02u:%02u:%02u watersetting<>%02u %02u",hour,minute,second,row,i);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);

    }
    s_hour=w_hour;
    // delay_ms(1);
    s_minute=w_minute;
    // delay_ms(1);
    s_second=w_second;
    //delay_ms(1);
    counter=sw_counter;
    // delay_ms(1);
    _lcd_write_data(0x0c);
    setting=0;
    }

    }



    کد زیاد بود شرمنده
    در پایان حلقه دوم ، setting رو مساوی صفر قرار کیده که وارد حلقه اولی بشه ولی نمیشه
    ممنون
  4. #4
    2017/06/13
    1,013
    513

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    نقل قول نوشته اصلی توسط m_karimi7

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ممنون بابت توجه
    برنامه به صورت زیر است:
    در حلقه اول ساعت را از ds1307 میگیره و زمانی که به ساعت مد نظر ما رسید یک وسیله ای رو راه می اندازه و هر موقع وقفه INT1 زده بشه وارد حلقه دوم میشه و تا 20 ثانیه میشماره و از حلقه در میاد و اصولا باید وارد حلقه اول میشد که توی تایمر میچرخه



    #include <mega16a.h>


    // I2C Bus functions
    #include <i2c.h>


    // DS1307 Real Time Clock functions
    #include <ds1307.h>


    // Alphanumeric LCD functions
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>


    // Declare your global variables here
    unsigned char hour,minute,second,w_hour,w_minute,w_second,row;
    int w_counter,i=10,light=20;;
    unsigned int sw_counter,pomp_set_counter;
    char lcdShow[32];
    bit setting=0;
    eeprom unsigned char s_hour,s_minute,s_second;
    eeprom unsigned int counter;
    [FONT=Yekan]interrupt [EXT_INT1] void ext_int1_isr(void)[/FONT]{
    // Place your code here
    light=20;
    setting=1;
    PORTB.0=1;
    row=1;
    i=10;
    }


    // Timer1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Reinitialize Timer1 value
    TCNT1H=0xCF2C >> 8;
    TCNT1L=0xCF2C & 0xff;
    // Place your code here
    i--;
    w_counter--;
    light--;
    if(light==0)PORTB.0=0;
    pomp_set_counter++;
    [FONT=Yekan]}
    [/FONT]while(setting==0)
    {
    rtc_get_time(&hour,&minute,&second);
    sprintf(lcdShow,"%02u:%02u:%02u setting%02u:%02u:%02u ",hour,minute,second,s_hour,s_minute,s_second);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    {
    while(setting==1)
    {
    _lcd_write_data(0x0e);
    while(i>0)
    {
    rtc_get_time(&hour,&minute,&second);
    //line one= 15 from 0 line 2=14 from 0
    lcd_gotoxy(row,0);
    delay_ms(1);
    sprintf(lcdShow,"%02u:%02u:%02u watersetting<>%02u %02u",hour,minute,second,row,i);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);

    }
    s_hour=w_hour;
    // delay_ms(1);
    s_minute=w_minute;
    // delay_ms(1);
    s_second=w_second;
    //delay_ms(1);
    counter=sw_counter;
    // delay_ms(1);
    _lcd_write_data(0x0c);
    setting=0;
    }

    }



    کد زیاد بود شرمنده
    در پایان حلقه دوم ، setting رو مساوی صفر قرار کیده که وارد حلقه اولی بشه ولی نمیشه
    ممنون
    این کد خیلی بهم ریختس و معلوم نیست اول و آخر بلوک ها کجاس. تابع main هم داخلش دیده نمیشه.
    کد کاملتون رو قرار بدید. ضمنا حتما از تگ CPP استفاده کنید که بشه کد ها رو خوند! توی کامنت قبلی توضیح دادم تگ رو.
  5. #5
    2019/11/29
    7
    1

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    کد کامل:
    [FONT=Yekan]/*******************************************************[/FONT]This program was created by the
    CodeWizardAVR V3.12 Advanced
    Automatic Program Generator
    © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com


    Project :
    Version :
    Date : 07/07/2020
    Author :
    Company :
    Comments:




    Chip type : ATmega16A
    Program type : Application
    AVR Core Clock frequency: 8/000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    *******************************************************/


    #include <mega16a.h>


    // I2C Bus functions
    #include <i2c.h>


    // DS1307 Real Time Clock functions
    #include <ds1307.h>


    // Alphanumeric LCD functions
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>


    // Declare your global variables here
    unsigned char hour,minute,second,w_hour,w_minute,w_second,row;
    int w_counter,i=10,light=20;;
    unsigned int sw_counter,pomp_set_counter;
    char lcdShow[32];
    bit setting=0;
    eeprom unsigned char s_hour,s_minute,s_second;
    eeprom unsigned int counter;


    // Declare your global variables here


    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    // Place your code here
    light=20;
    setting=1;
    PORTB.0=1;
    row=1;
    i=10;
    }


    // Timer1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Reinitialize Timer1 value
    TCNT1H=0xCF2C >> 8;
    TCNT1L=0xCF2C & 0xff;
    // Place your code here
    i--;
    w_counter--;
    light--;
    if(light==0)PORTB.0=0;
    pomp_set_counter++;
    }


    void main(void)
    {
    // Declare your local variables here


    // Input/Output Ports initialization
    // Port A initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);


    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (1<<DDB0);
    // State: Bit7=T Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=0 Bit0=0
    PORTB=(0<<PORTB7) | (1<<PORTB6) | (1<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);


    // Port C initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);


    // Port D initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=P Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (1<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);


    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0=0x00;


    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 125/000 kHz
    // Mode: Normal top=0xFFFF
    // OC1A output: Disconnected
    // OC1B output: Disconnected
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer Period: 0/1 s
    // Timer1 Overflow Interrupt: On
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
    TCNT1H=0xCF;
    TCNT1L=0x2C;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;


    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0<<AS2;
    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2=0x00;


    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);


    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: On
    // INT1 Mode: Falling Edge
    // INT2: Off
    GICR|=(1<<INT1) | (0<<INT0) | (0<<INT2);
    MCUCR=(1<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
    MCUCSR=(0<<ISC2);
    GIFR=(1<<INTF1) | (0<<INTF0) | (0<<INTF2);


    // USART initialization
    // USART disabled
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);


    // Analog Comparator initialization
    // Analog Comparator: Off
    // The Analog Comparator's positive input is
    // connected to the AIN0 pin
    // The Analog Comparator's negative input is
    // connected to the AIN1 pin
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    SFIOR=(0<<ACME);


    // ADC initialization
    // ADC disabled
    ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);


    // SPI initialization
    // SPI disabled
    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);


    // TWI initialization
    // TWI disabled
    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);


    // Bit-Banged I2C Bus initialization
    // I2C Port: PORTC
    // I2C SDA bit: 1
    // I2C SCL bit: 0
    // Bit Rate: 100 kHz
    // Note: I2C settings are specified in the
    // Project|Configure|C Compiler|Libraries|I2C menu.
    i2c_init();


    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: Off
    // SQW/OUT pin state: 0
    rtc_init(0,0,0);


    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTD Bit 0
    // RD - PORTD Bit 1
    // EN - PORTD Bit 2
    // D4 - PORTD Bit 4
    // D5 - PORTD Bit 5
    // D6 - PORTD Bit 6
    // D7 - PORTD Bit 7
    // Characters/line: 16
    lcd_init(16);


    // Global enable interrupts
    #asm("sei")


    while(setting==0)
    {
    rtc_get_time(&hour,&minute,&second);
    sprintf(lcdShow,"%02u:%02u:%02u setting%02u:%02u:%02u ",hour,minute,second,s_hour,s_minute,s_second);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    if(PINB.2==0||PINB.3==0||PINB.4==0||PINB.5==0)
    {
    light=20;
    PORTB.0=1;
    }
    if(hour==s_hour)
    {
    if(minute==s_minute)
    {
    if(second==s_second)
    {
    w_counter=counter;

    do
    {
    PORTB.1=1;
    rtc_get_time(&hour,&minute,&second);
    sprintf(lcdShow,"%02u:%02u:%02u setting%02u:%02u:%02u to %02u",hour,minute,second,s_hour,s_minute,s_second,w_counter);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    if(PINB.2==0||PINB.3==0||PINB.4==0||PINB.5==0)
    {
    light=20;
    PORTB.0=1;
    //delay_ms(1);
    //while(PINB.1==0||PINB.2==0||PINB.3==0||PINB.4==0){}
    }
    }while(w_counter>0);
    }
    else PORTB.1=0;
    }
    }
    PORTB.1=0;
    }
    while(setting==1)
    {
    _lcd_write_data(0x0e);
    while(i>0)
    {
    rtc_get_time(&hour,&minute,&second);
    //line one= 15 from 0 line 2=14 from 0
    lcd_gotoxy(row,0);
    delay_ms(1);
    sprintf(lcdShow,"%02u:%02u:%02u watersetting<>%02u %02u",hour,minute,second,row,i);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    if(PINB.2==0)
    {
    light=20;
    i=10;
    row+=3;
    if(row==10)row=11;
    else if(row==14)row=1;
    // lcd_gotoxy(row,0);
    delay_ms(1);
    while(PINB.2==0){}
    }
    if(PINB.3==0)
    {
    light=20;
    i=10;
    row-=3;
    if(row==254)row=11;
    else if(row==8)row=7;
    //lcd_gotoxy(row,0);
    delay_ms(100);
    while(PINB.3==0){}
    }
    if(PINB.5==0)
    {
    light=20;
    i=10;
    // rtc_get_time(&hour,&minute,&second);
    switch(row)
    {
    case 1:hour++;
    if(hour>23)hour=0;
    break;
    case 4:minute++;
    if(minute>59)minute=0;
    break;
    case 7:second++;
    if(second>59)second=0;
    break;
    }
    rtc_set_time(hour,minute,second);
    delay_ms(1);
    while(PINB.5==0){}
    }
    if(PINB.4==0)
    {
    light=20;
    i=10;
    //rtc_get_time(&hour,&minute,&second);
    switch(row)
    {
    case 1:hour--;
    if(hour==255)hour=0;
    break;
    case 4:minute--;
    if(minute==255)minute=0;
    break;
    case 7:second--;
    if(second==255)second=0;
    break;
    }
    rtc_set_time(hour,minute,second);
    delay_ms(1);
    while(PINB.4==0){}
    }
    if(row==11)
    {
    row=1;
    while(i>0)
    {
    sprintf(lcdShow,"%02u:%02u:%02u to m:%02u water<>%02u %02u",w_hour,w_minute,w_second,sw_counter,row,i);
    lcd_gotoxy(row,0);
    delay_ms(1);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    if(PINB.2==0)
    {
    light=20;
    i=10;
    row+=3;
    if(row==10)row=15;
    else if(row==18)row=1;

    //lcd_gotoxy(row,0);

    delay_ms(1);

    while(PINB.2==0){};
    }
    if(PINB.3==0)
    {
    light=20;
    i=10;
    row-=3;
    if(row==254)row=15;
    else if(row==12)row=7;
    // lcd_gotoxy(row,0);

    delay_ms(1);

    while(PINB.3==0){}
    }
    if(PINB.5==0)
    {
    light=20;
    i=10;
    switch(row)
    {
    case 1:w_hour++;
    if(w_hour>23)w_hour=0;
    break;
    case 4:w_minute++;
    if(w_minute>59)w_minute=0;
    break;
    case 7:w_second++;
    if(w_second>59)w_second=0;
    break;
    case 15:sw_counter++;
    break;
    }
    delay_ms(1);
    while(PINB.5==0){}
    }

    if(PINB.4==0)
    {
    light=20;
    i=10;
    switch(row)
    {
    case 1:w_hour--;
    if(w_hour==255)w_hour=23;
    break;
    case 4:w_minute--;
    if(w_minute==255)w_minute=59;
    break;
    case 7:w_second--;
    if(w_second==255)w_second=59;
    break;
    case 15:sw_counter--;
    if(sw_counter==65535)sw_counter=0;
    break;
    }
    delay_ms(1);
    while(PINB.4==0){}
    }
    if(PINB.6==0)
    {
    light=20;
    i=10;
    pomp_set_counter=0;
    delay_ms(1);
    while(PINB.6==0){}
    //delay_ms(1);
    while(PINB.6==1)
    {
    lcd_gotoxy(row,0);
    delay_ms(1);
    lcd_gotoxy(0,0);
    sprintf(lcdShow,"%5u ",pomp_set_counter);
    lcd_puts(lcdShow);
    delay_ms(1);
    i=10;
    PORTB.1=1;
    }
    delay_ms(1);
    while(PINB.6==0){}
    light=20;
    i=10;
    PORTB.1=0;
    sw_counter=pomp_set_counter;
    }

    }

    }

    }
    s_hour=w_hour;
    // delay_ms(1);
    s_minute=w_minute;
    // delay_ms(1);
    s_second=w_second;
    //delay_ms(1);
    counter=sw_counter;
    // delay_ms(1);
    _lcd_write_data(0x0c);
    setting=0;
    }

    [FONT=Yekan]}[/FONT]

    داخل cpp زدم
    وسط دوتا
  6. #6
    2017/06/13
    1,013
    513

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    نقل قول نوشته اصلی توسط m_karimi7

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    کد کامل:
    [FONT=Yekan]/*******************************************************[/FONT]This program was created by the
    CodeWizardAVR V3.12 Advanced
    Automatic Program Generator
    © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com


    Project :
    Version :
    Date : 07/07/2020
    Author :
    Company :
    Comments:




    Chip type : ATmega16A
    Program type : Application
    AVR Core Clock frequency: 8/000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    *******************************************************/


    #include <mega16a.h>


    // I2C Bus functions
    #include <i2c.h>


    // DS1307 Real Time Clock functions
    #include <ds1307.h>


    // Alphanumeric LCD functions
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>


    // Declare your global variables here
    unsigned char hour,minute,second,w_hour,w_minute,w_second,row;
    int w_counter,i=10,light=20;;
    unsigned int sw_counter,pomp_set_counter;
    char lcdShow[32];
    bit setting=0;
    eeprom unsigned char s_hour,s_minute,s_second;
    eeprom unsigned int counter;


    // Declare your global variables here


    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    // Place your code here
    light=20;
    setting=1;
    PORTB.0=1;
    row=1;
    i=10;
    }


    // Timer1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Reinitialize Timer1 value
    TCNT1H=0xCF2C >> 8;
    TCNT1L=0xCF2C & 0xff;
    // Place your code here
    i--;
    w_counter--;
    light--;
    if(light==0)PORTB.0=0;
    pomp_set_counter++;
    }


    void main(void)
    {
    // Declare your local variables here


    // Input/Output Ports initialization
    // Port A initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);


    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (1<<DDB0);
    // State: Bit7=T Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=0 Bit0=0
    PORTB=(0<<PORTB7) | (1<<PORTB6) | (1<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);


    // Port C initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);


    // Port D initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=P Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (1<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);


    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0=0x00;


    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 125/000 kHz
    // Mode: Normal top=0xFFFF
    // OC1A output: Disconnected
    // OC1B output: Disconnected
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer Period: 0/1 s
    // Timer1 Overflow Interrupt: On
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
    TCNT1H=0xCF;
    TCNT1L=0x2C;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;


    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0<<AS2;
    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2=0x00;


    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);


    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: On
    // INT1 Mode: Falling Edge
    // INT2: Off
    GICR|=(1<<INT1) | (0<<INT0) | (0<<INT2);
    MCUCR=(1<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
    MCUCSR=(0<<ISC2);
    GIFR=(1<<INTF1) | (0<<INTF0) | (0<<INTF2);


    // USART initialization
    // USART disabled
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);


    // Analog Comparator initialization
    // Analog Comparator: Off
    // The Analog Comparator's positive input is
    // connected to the AIN0 pin
    // The Analog Comparator's negative input is
    // connected to the AIN1 pin
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    SFIOR=(0<<ACME);


    // ADC initialization
    // ADC disabled
    ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);


    // SPI initialization
    // SPI disabled
    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);


    // TWI initialization
    // TWI disabled
    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);


    // Bit-Banged I2C Bus initialization
    // I2C Port: PORTC
    // I2C SDA bit: 1
    // I2C SCL bit: 0
    // Bit Rate: 100 kHz
    // Note: I2C settings are specified in the
    // Project|Configure|C Compiler|Libraries|I2C menu.
    i2c_init();


    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: Off
    // SQW/OUT pin state: 0
    rtc_init(0,0,0);


    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTD Bit 0
    // RD - PORTD Bit 1
    // EN - PORTD Bit 2
    // D4 - PORTD Bit 4
    // D5 - PORTD Bit 5
    // D6 - PORTD Bit 6
    // D7 - PORTD Bit 7
    // Characters/line: 16
    lcd_init(16);


    // Global enable interrupts
    #asm("sei")


    while(setting==0)
    {
    rtc_get_time(&hour,&minute,&second);
    sprintf(lcdShow,"%02u:%02u:%02u setting%02u:%02u:%02u ",hour,minute,second,s_hour,s_minute,s_second);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    if(PINB.2==0||PINB.3==0||PINB.4==0||PINB.5==0)
    {
    light=20;
    PORTB.0=1;
    }
    if(hour==s_hour)
    {
    if(minute==s_minute)
    {
    if(second==s_second)
    {
    w_counter=counter;

    do
    {
    PORTB.1=1;
    rtc_get_time(&hour,&minute,&second);
    sprintf(lcdShow,"%02u:%02u:%02u setting%02u:%02u:%02u to %02u",hour,minute,second,s_hour,s_minute,s_second,w_counter);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    if(PINB.2==0||PINB.3==0||PINB.4==0||PINB.5==0)
    {
    light=20;
    PORTB.0=1;
    //delay_ms(1);
    //while(PINB.1==0||PINB.2==0||PINB.3==0||PINB.4==0){}
    }
    }while(w_counter>0);
    }
    else PORTB.1=0;
    }
    }
    PORTB.1=0;
    }
    while(setting==1)
    {
    _lcd_write_data(0x0e);
    while(i>0)
    {
    rtc_get_time(&hour,&minute,&second);
    //line one= 15 from 0 line 2=14 from 0
    lcd_gotoxy(row,0);
    delay_ms(1);
    sprintf(lcdShow,"%02u:%02u:%02u watersetting<>%02u %02u",hour,minute,second,row,i);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    if(PINB.2==0)
    {
    light=20;
    i=10;
    row+=3;
    if(row==10)row=11;
    else if(row==14)row=1;
    // lcd_gotoxy(row,0);
    delay_ms(1);
    while(PINB.2==0){}
    }
    if(PINB.3==0)
    {
    light=20;
    i=10;
    row-=3;
    if(row==254)row=11;
    else if(row==8)row=7;
    //lcd_gotoxy(row,0);
    delay_ms(100);
    while(PINB.3==0){}
    }
    if(PINB.5==0)
    {
    light=20;
    i=10;
    // rtc_get_time(&hour,&minute,&second);
    switch(row)
    {
    case 1:hour++;
    if(hour>23)hour=0;
    break;
    case 4:minute++;
    if(minute>59)minute=0;
    break;
    case 7:second++;
    if(second>59)second=0;
    break;
    }
    rtc_set_time(hour,minute,second);
    delay_ms(1);
    while(PINB.5==0){}
    }
    if(PINB.4==0)
    {
    light=20;
    i=10;
    //rtc_get_time(&hour,&minute,&second);
    switch(row)
    {
    case 1:hour--;
    if(hour==255)hour=0;
    break;
    case 4:minute--;
    if(minute==255)minute=0;
    break;
    case 7:second--;
    if(second==255)second=0;
    break;
    }
    rtc_set_time(hour,minute,second);
    delay_ms(1);
    while(PINB.4==0){}
    }
    if(row==11)
    {
    row=1;
    while(i>0)
    {
    sprintf(lcdShow,"%02u:%02u:%02u to m:%02u water<>%02u %02u",w_hour,w_minute,w_second,sw_counter,row,i);
    lcd_gotoxy(row,0);
    delay_ms(1);
    lcd_gotoxy(0,0);
    lcd_puts(lcdShow);
    delay_ms(1);
    if(PINB.2==0)
    {
    light=20;
    i=10;
    row+=3;
    if(row==10)row=15;
    else if(row==18)row=1;

    //lcd_gotoxy(row,0);

    delay_ms(1);

    while(PINB.2==0){};
    }
    if(PINB.3==0)
    {
    light=20;
    i=10;
    row-=3;
    if(row==254)row=15;
    else if(row==12)row=7;
    // lcd_gotoxy(row,0);

    delay_ms(1);

    while(PINB.3==0){}
    }
    if(PINB.5==0)
    {
    light=20;
    i=10;
    switch(row)
    {
    case 1:w_hour++;
    if(w_hour>23)w_hour=0;
    break;
    case 4:w_minute++;
    if(w_minute>59)w_minute=0;
    break;
    case 7:w_second++;
    if(w_second>59)w_second=0;
    break;
    case 15:sw_counter++;
    break;
    }
    delay_ms(1);
    while(PINB.5==0){}
    }

    if(PINB.4==0)
    {
    light=20;
    i=10;
    switch(row)
    {
    case 1:w_hour--;
    if(w_hour==255)w_hour=23;
    break;
    case 4:w_minute--;
    if(w_minute==255)w_minute=59;
    break;
    case 7:w_second--;
    if(w_second==255)w_second=59;
    break;
    case 15:sw_counter--;
    if(sw_counter==65535)sw_counter=0;
    break;
    }
    delay_ms(1);
    while(PINB.4==0){}
    }
    if(PINB.6==0)
    {
    light=20;
    i=10;
    pomp_set_counter=0;
    delay_ms(1);
    while(PINB.6==0){}
    //delay_ms(1);
    while(PINB.6==1)
    {
    lcd_gotoxy(row,0);
    delay_ms(1);
    lcd_gotoxy(0,0);
    sprintf(lcdShow,"%5u ",pomp_set_counter);
    lcd_puts(lcdShow);
    delay_ms(1);
    i=10;
    PORTB.1=1;
    }
    delay_ms(1);
    while(PINB.6==0){}
    light=20;
    i=10;
    PORTB.1=0;
    sw_counter=pomp_set_counter;
    }

    }

    }

    }
    s_hour=w_hour;
    // delay_ms(1);
    s_minute=w_minute;
    // delay_ms(1);
    s_second=w_second;
    //delay_ms(1);
    counter=sw_counter;
    // delay_ms(1);
    _lcd_write_data(0x0c);
    setting=0;
    }

    [FONT=Yekan]}[/FONT]

    داخل cpp زدم
    وسط دوتا
    خوب بازم اونطوری که میگفتم کد رو قرار ندادید!
    بگذریم؛ این کد حلقه بی نهایت نداره و احتمالا به خاطر همون خواسته شما رو براورده نمیکنه. وقتی برنامه از حلقه setting==1 خارج میشه، به setting==0 وارد نمیشه چون مکانیزمی براش وجود نداره که برنامه رو به ابتدای حلقه setting==0 وارد کنه.
    شما باید توی همه برنامه های میکروکنترلری اتون از حلقه بی نهایت استفاده کنید.
  7. #7
    2019/11/29
    7
    1

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    شرمنده در پایان حلقه دوم زدم setting=0
  8. #8
    2017/06/13
    1,013
    513

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    نقل قول نوشته اصلی توسط m_karimi7

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    شرمنده در پایان حلقه دوم زدم setting=0
    بله اون هست ولی حلقه بی نهایت نیست.
  9. #9
    2019/11/29
    7
    1

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    الان حلقه اولی رو زدم
    while(1)

    ولی وقتی دکمه وقفه خارجی رو میزنم دیگه وارد حلقه دوم نمیشه
  10. #10
    2017/06/13
    1,013
    513

    پاسخ : گیر افتادن پروگرام کانتر در تایمر 1

    نقل قول نوشته اصلی توسط m_karimi7

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    الان حلقه اولی رو زدم
    while(1)

    ولی وقتی دکمه وقفه خارجی رو میزنم دیگه وارد حلقه دوم نمیشه
    برای درست کردن ابرو که نباید زد چشم رو کور کرد! من منظورم این نبود حلقه اولی رو تغییر بدید، منظورم این بود کدتون به کلیت چیزی به اسم حلقه بی نهایت کم داره!
    کد:
    #include <mega16.h>
    
    
    
    
    void main(void)
    {
    	// Hardware configuration
    	
    	while(1) // Infinite loop
    	{
    		// Code 
    	}
    }
    ببینید ساختمان کلی یه کد که برای میکروکنترلر نوشته میشه به شکل بالا هستش. قسمت ابتدایی تابع main به پیکربندی سخت افزار و نوشتن کدهایی از برنامه اختصاص داره که از زمان شروع به کار میکروکنترلر، تنها یک بار قراره اجرا بشن. قسمت بعدی حلقه بی نهایت هستش که کدهایی در اون قرار میگیره که به صورت مکرر و تا توقف کار میکروکنترلر قرار اجرا بشن.
    شما با توجه به خواسته و کارکرد مدارتون، باید کدهاتون رو در این بخش ها قرار بدید. مشکل کد شما این بود که قسمت حلقه بی نهایت براش در نظر گرفته نشده بود و همه کدها در کف تابع main قرار گرفته بود.
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 13

موضوعات مشابه

  1. پاسخ: 22
    آخرين نوشته: 2018/01/20, 22:07
  2. کمک: از کار افتادن تایمر در میکرو بعد از مدتی
    توسط erima در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2016/08/28, 23:46
  3. از کار افتادن وقفه تایمر در زیر برنامه
    توسط S_B_T در انجمن میکروکنترلرهای AVR
    پاسخ: 7
    آخرين نوشته: 2015/12/25, 17:19
  4. پاسخ: 1
    آخرين نوشته: 2015/11/13, 01:55
  5. از کار افتادن وقفه تایمر در LPC2388
    توسط m2babaey در انجمن NXP
    پاسخ: 0
    آخرين نوشته: 2013/07/30, 15:08

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •