اطلاعیه

Collapse
No announcement yet.

چرا در مگا 8 تایمر کانتر2 درست کار نمیکنه

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

    چرا در مگا 8 تایمر کانتر2 درست کار نمیکنه

    سلام
    من برنامه ساعت در مگا8 با کریستال ساعت 32.768نوشتم اما نمیتونم 1 دقیقه رو درست کنم این مسله تو مگا16 خیلی بهتر عمل میکنه یا بهتر بگم درست کار میکنه اما در مگا 8 نه
    اگر میشه راهنماییم کنینن

    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>

    #asm
    .equ __lcd_port = 0x12;
    #endasm
    #include <Lcd.h>

    eeprom unsigned char ond=1 , onc=2 , day=1,rr,onm=0 ;
    unsigned char sec=0 , min=0 , hr=0 , replay=0 ,clk=1;
    unsigned char lcd_buff[16],str[16],h[16],m[8],on[16],r[16];
    int i;
    interrupt [TIM2_OVF] void timer2_ovf_isr(void){

    if(sec++ == 60){
    sec = 0;

    if(min++ == 59){
    min = 0;
    clk++;
    //cllk++;
    if(hr++ == 23){
    hr = 0;
    if(day++ == 31){
    day = 1;
    }
    }
    }
    }

    }

    void main() {
    PORTC=0X0F ;
    DDRC=0X00;
    PORTB=0x00;
    DDRB=0x02;
    lcd_init (16);
    ASSR = 0X08;
    TCCR2 = 0X05;
    TCNT2 = 0x00;
    OCR2 = 0x00;
    TIMSK = 0x40;
    #asm("sei"
    while(1){ }

    #2
    پاسخ : چرا در مگا 8 تایمر کانتر2 درست کار نمیکنه

    در مگا 8 روی تایمر صفر جواب میده کریستال 32.768
    دلا خو کن به تنهایی که از تنها بلا خیزد

    دیدگاه


      #3
      پاسخ : چرا در مگا 8 تایمر کانتر2 درست کار نمیکنه

      دوست عزیز باید برنامه رو به این صورت بنویسین:


      .


      توجه کن که باید کدویزارد رو به این صورت تنظیم کنی:




      دوست خوبمون که گفتند:
      نوشته اصلی توسط Navid_Micro
      در مگا 8 روی تایمر صفر جواب میده کریستال 32.768
      بهشون پیشنهاد میدم یه بار دیگه دیتا شیت mega8 رو نگاه کنند.

      [glow=red,2,300]گرد هم آمدن شروع است.با هم ماندن پیشرفت است.با هم کار کردن موفقیت است.[/glow]
      [img width=98 height=100]http://s3.picofile.com/file/7407857311/icon3.png[/img]

      دیدگاه


        #4
        پاسخ : چرا در مگا 8 تایمر کانتر2 درست کار نمیکنه

        سلام مجدد
        برنامه ای که داده بودین با برنامه خودم تلفیق کردم تنظیمات کدویژن درست انجام داده بودم اما وقتی اجراش میکنم ( روی ایسی) در 12 ساعت 45 ثانیه جلو می افته با تایمر کانتر 0 هم نوشتم بازم جلو افتاد کل برنامهرو براتون می زارم اگر می شه چک کنید ببینین درست هست یا فقط سایت خیلی قاطی چاپش میکنه اگر خواستید بگید عکسشو بگذارم

        #include <mega8.h>
        #include <delay.h>
        #include <stdio.h>

        #asm
        .equ __lcd_port = 0x12;
        #endasm
        #include <Lcd.h>

        void mode();
        void inc();
        void dec();
        void start();
        void stop();


        eeprom unsigned char ond=1 , onc=2 , day=1,rr,onm=0 ;
        unsigned char sec=0 , min=0 , hr=0 , replay=0 ,clk=1;
        unsigned char lcd_buff[16],str[16],h[15],m[8],on[16],r[16];
        //int o;
        int i;
        //eeprom int x=0,del=0 ;


        interrupt [TIM2_OVF] void timer2_ovf_isr(void){

        if(sec==59){
        sec=0;
        if(min==59){
        min=0 ;
        if(hr==24)
        hr=0;

        else
        hr++;}
        else
        min++;}
        else
        sec++;
        if(i==0){

        lcd_clear();
        lcd_gotoxy(0,0);
        sprintf(lcd_buff,"Time=%2d:%2d:%2d" , hr , min , sec);

        lcd_puts(lcd_buff);
        lcd_gotoxy(0,1);
        sprintf(on,"LITGHT ON=%2d:%2d",onc,onm);

        lcd_puts(on);
        }

        }

        void main() {
        PORTC=0X0F ;
        DDRC=0X00;
        PORTB=0x00;
        DDRB=0x02;
        lcd_init (16);
        ASSR = 0X08;
        TCCR2 = 0X05;
        TCNT2 = 0x00;
        OCR2 = 0x00;
        MCUCR=0x00;
        TIMSK = 0x40;
        UCSRB=0x00;
        ACSR=0x80;
        SFIOR=0x00;
        ADCSRA=0x00;
        SPCR=0x00;
        TWCR=0x00;
        #asm("sei"
        day=1;
        ond=1;

        while(1){

        if (hr != onc && min != onm){
        rr=0;
        }

        if( rr==0 && hr == onc && min == onm && sec == 0){

        PORTB.1=1;

        }
        if(i==1){
        lcd_clear();
        lcd_gotoxy(5,0);
        sprintf(h,"HR:%2d" , hr);
        lcd_puts(h);
        delay_ms(20);
        }
        if(i==2){
        lcd_clear();
        lcd_gotoxy(5,0);
        sprintf(m,"Min:%2d" ,min);
        lcd_puts(m);
        delay_ms(20);
        }

        if(i==3){
        lcd_clear();
        sprintf(r,"hour on=%2d",onc);
        lcd_gotoxy(0,0);
        lcd_puts(r);
        delay_ms(20);
        }
        if(i==4){
        lcd_clear();
        sprintf(str,"Minute=%2d",onm);
        lcd_gotoxy(0,1);
        lcd_puts(str);
        delay_ms(30);
        }



        if(PINC.0==0) mode();
        if(PINC.1==0) inc();
        if(PINC.2==0) dec();
        if(PINC.3==0) start();
        if(PINC.4==0) stop();
        }

        }

        void mode(){
        i++;
        if(i==5) i=0;
        while(PINC.0==0);
        }

        void inc(){
        if(i==1){
        hr++;
        if(hr==24) hr=0;
        }
        if(i==2){
        min++;
        if(min==60) min=0;
        }
        if(i==3){
        onc++;
        if(onc==24) onc=0;
        }
        if(i==4){
        onm++;
        if(onm==59) onm=0;
        }

        while(PINC.1==0);
        }



        void dec(){
        if(i==1){
        if(hr==0) hr=24;
        hr--;
        }
        if(i==2){
        if(min==0) min=60;
        min--;
        }
        if(i==3){
        if(onc==0) onc=24;
        onc--;
        }
        if(i==4){
        if(onm==0) onm=60;
        onm--;
        }

        while(PINC.2==0);

        }
        void start(){
        PORTB.1=1;

        while(PINC.3==0);

        }

        void stop(){
        PORTB.1=0;

        while(PINC.4==0);


        }

        دیدگاه

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