اطلاعیه

Collapse
No announcement yet.

trnslate C to basic

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

    trnslate C to basic

    اگه ممکنه این کد رو به زبان basic ترجمه کنید! :job:
    در صورتی که کسی کد آماده به زبان بیسیک برای دریافت و تبدیل کد DTMF از mt8870 داشته باشه که خیلی بهتره!

    قبلاً از کمکتون ممنونم
    کد:
    #include <mega16.h>
    
    // Alphanumeric LCD Module functions
    #asm
     .equ __lcd_port=0x18
    #endasm
    #include <lcd.h> 
    #include <delay.h> 
    
    #define soundp PORTA.5
    #define cd PORTA.4
    #define ringing PINA.6
    #define TLED PORTD.7
    
    int i;   
    
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {   
    	i=0;    
    	lcd_gotoxy(6,1);
    	switch(PINA & 0x0F)
    	{   
    	case 10:
    		lcd_putchar('0');
    		break;   
    	case 11:
    		lcd_putchar('*'); 
    		TLED=1;
    		break;
    	case 12:
    		lcd_putchar('#'); 
    		TLED=0;
    		break;
    	case 13:
    		lcd_putchar('A');
    		break; 
    	case 14:
    		lcd_putchar('B');
    		break; 
    	case 15:
    		lcd_putchar('C');
    		break; 
    	case 0:
    		lcd_putchar('D');
    		break;
    	default:
    		lcd_putchar('0' + (PINA & 0x0F));  
    	}  
    } 
    
    void beep()
    {
    	int n;
    	
    	while(n<7000)
    	{     
    		soundp = !soundp;
    		delay_us(400);
    		n++;  
    	}
    }    
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func0=In Func1=In Func2=In Func3=In Func4=Out Func5=Out Func6=In Func7=In 
    // State0=T State1=T State2=T State3=T State4=0 State5=0 State6=T State7=T 
    PORTA=0x00;
    DDRA=0x30;
    
    // Port B initialization
    // Func0=In Func1=In Func2=In Func3=Out Func4=In Func5=In Func6=In Func7=In 
    // State0=T State1=T State2=T State3=1 State4=T State5=T State6=T State7=T 
    PORTB=0x08;
    DDRB=0x08;
    
    // Port C initialization
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
    // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=Out
    // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=0
    PORTD=0x00;
    DDRD=0x80;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Rising Edge
    // INT1: Off
    // INT2: Off
    GICR|=0x40;
    MCUCR=0x03;
    MCUCSR=0x00;
    GIFR=0x40;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    // Analog Comparator Output: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // LCD module initialization
    lcd_init(16);
    
    // Global enable interrupts
    #asm("sei")
    
    lcd_putsf("MT8870 Project");
    delay_ms(1000);
    lcd_clear();
    lcd_putsf("Ready");
    
    while (1)
    {
    	if(ringing)
    	{    
    		lcd_clear();
    		lcd_putsf("Ringing...");
    		delay_ms(4000); 
    		i=0;
    		cd=1; 
    		beep();
    	}
    	if(cd==1)
    	{
    		lcd_clear();
    		lcd_putsf("Connected"); 
    		lcd_gotoxy(0,1);
    		lcd_putsf("DTMF: ");
    		while(i<10)
    		{
    			i++;
    			delay_ms(1000);
    		}   
    		cd=0;     
    		lcd_clear();
    		lcd_putsf("Ready");
    	}	
    };
    }
    
    // END
    خدا نور است و من اشعه ای از او ...

    #2
    پاسخ : trnslate C to basic

    اگه می خوای کالر ای دی کار بکنی باید چند تا چیز رو در نظر بگیری
    1- مدار تشخیص زنگ ( شاید بی معنی به نظر برسه ولی به چند دلیل لازمه خواستی بهشون اشاره می کنم ) که به یکی از وقفه ها خروجی اون رو وصل کردی
    2- وفه خود MT8870 همون پایه 15 که به یکی از وقفه ها متصله

    توجه بکن که وقفه ها رو با توجه به اولویت باید وصل بکنی توی میکرو های AVR اولویت با وقفه شماره کوچیکتره است پس وقفه صفر رو به خروجی TTL قسمت مدار تشخیص زنگ می دی و وقفه MT8870 رو به وقفه 1

    حالا می خوای برنامه بنویسی
    اخه دوست عزیز چرا خودتو اذیت می کنی اگه توی برنامه نویسی تازه کاری با همون بسکام خیلی راحت می تونه واسه این پروژه ات برنامه نویسی بکنی
    چیا لازمه؟؟؟
    1- پیکره بندی میکرو
    2- پیکره بندی ال سی دی
    3-پیکره بندی وقفه ها براساس نوع وقفه ( بالا به پائین یا برعکس یا هر تغییر توی ولتاژ پایه متصله ) و پیکره بندی 4 بیت از اون پورتی که برای پایه های ورودی MT8870 اختصاص دادی
    4- برنامه انتظار وقفه ها ( اول وقفه تشخیص رو فعال می کنی و اون یکی رو غیر فعال تا مشکلی ایجاد نشه وقتی وقفه تشیص زنگ اومد بعدش توی روتین وقفه وقفه MT رو فعال می کنی و براساس اون هی شماره ها رو از روی 4 بیت ورودی که برای اون اختصاص دادی می خونی و ذخیره می کنی )
    5- نمایش عددهای ذخیره شده روی ال سی دی ( هر بار که شماره اومد بهتره همه اونا رو ذخیره بکنی بصورت ارایه و بعد یه جا روی ال سی دی نمایش بدی )
    6- تمام

    این کل اصول برنامه ات بود که باید خودتون زحمت نوشت اون رو بکشی ( کار سختی نیست با بسکام )
    اگه خواستی در مورد شماتیک درست مدارت می تونم کمکت بکنم .
    موفق باشی

    دیدگاه


      #3
      پاسخ : trnslate C to basic

      خیلی از راهنماییت ممنون

      ولی من هدفم یه پروژه ریموت کنترله و باید کدهای TONE که در تلفن مقابل تولید میشه رو decode و به میکرو ارسال کنم . فقط نمی دونم چه جوری این کدها رو از MT8870 به میکرو بفهمونم یه مدار هم از این پروژ گیر اوردم
      خدا نور است و من اشعه ای از او ...

      دیدگاه


        #4
        پاسخ : trnslate C to basic

        برای این کار بهترین کار اینه
        اول یادتون باشه این سیستم فقط جائی که کالر آی دی هست کار می کنه
        البته اگه کالر ای دی نباشه جواب نمیده و اونجا باید یه کار دیگه ای کرد که اگه لازم شد و خواستید بهتون می گم

        برای کار مورد نظرتون فقط کافیه برای سیستم ریموتتون همچین کاری رو بکنید
        قبلا بشه یه شماره تلفن مورد نظر رو به میکرو داد
        وقتی تلفن زنگ زد سیستم اون شماره رو با MT8870 بگیره بعد دیکدش بکنه و میکرو این دیتای دیکد شده رو با اون دیتای از قبل ذخیره شده مقایسه بکنه
        اگه برابر بودن سیسیتم اجازه دسترسی به کاربر رو با پخش یک پیغام صوتی بده

        بعدش کاربر با وارد کردن یک عدد که اون هم توسط MT8870 دیکدمیشه و میکرو اون رو میگره کارهای از قبل تعیین شده که با توجه به کدهای مربوطه انجام میشه رو کنترل بکنه
        اصول کلی کار همینه
        به همین ساده گی

        موفق باشی

        دیدگاه


          #5
          پاسخ : trnslate C to basic

          مشکل من هم همینجاست؛ چه جوری کد decode شده رو از MT8870 بگیرم
          یعنی منظورم کد bascom اون هست و گرنه هم مدارشو دارم و هم منطق برنامه رو فهمیدم

          در حقیقت MT8870 برای ارسال کد مذبور چه عملی انجام میده که توسط میکرو قابل فهم باشه

          2- من هدفم اینه که با هر تلفنی و از هرجا بشه فرمانهای لازم رو به میکرو بدم

          بازم از راهنماییت ممنون
          خدا نور است و من اشعه ای از او ...

          دیدگاه


            #6
            پاسخ : trnslate C to basic

            mt8870 دیتای خودشو 4 بیتی به صورت موازی بعد از گرفتن دیکد کردن هر شماره تلفن روی این پایه به همراه یک وقفه بالا رونده روی پایه 15 ظاهر می کنه به همین ساده گی
            چیزی نامفهومه؟؟؟!!! :eek: موفق باشید

            دیدگاه


              #7
              پاسخ : trnslate C to basic

              آره دیگه!
              برای من صفر نامفهومه :question:
              خدا نور است و من اشعه ای از او ...

              دیدگاه


                #8
                پاسخ : trnslate C to basic

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

                دیدگاه

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