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





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









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









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





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

نمایش نتایج: از 1 به 6 از 6
  1. #1
    2011/05/01
    566
    3

    توضیح چند خط کد به زبان بیسیک

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

    کلیاتشو میدونم که از تایمر1 استفاده شده و از وقفه واحد ccp ، و تو روتین وقفه هم از تایمر0 استفاده شده، ولی همونطور که عرض کردم نمیتونم بفهمم چرا تو چند خط کد اول برنامه اونجایی که تنظیمات مربوط به تایمر1 و وقفه رو انجام دادن، از تایمر0 خبری نیست؟

    من گیج زدنم تو چند خط کد اول برنامه و برنامه ی وقفه است که در ادامه میذارم و تمنا دارم از دوستان که لطف کنن و توضیحات مربوط به این چند خط رو در اختیار بنده قرار بدن تا بتونم از گیر این مرحله بگذرم.

    این چند خط بعد از تعاریف ثابتها و قبل از لوپ اصلی برنامه آورده شدن:

    ON INTERRUPT GOTO lable



    TRISD=$00
    PORTD=$00


    TMR1L=0
    TMR1H=0

    CCP1CON=$0b

    CCPR1H=$9c
    CCPR1L=$40

    PIR1.2=0
    PIE1.2=1

    T1CON=$01

    INTCON.6=1
    INTCON.7=1


    و بعد از لوپ اصلی تو برنامه ی مربوط به وقفه این رو داریم:

    lable
    DISABLE INTERRUPT
    if PIR1.2=1 then

    PORTD = $01
    PAUSEUS 990
    INTCON.2=0
    TMR0 = 255-x
    OPTION_REG = OPTION_REG & $c0
    OPTION_REG = OPTION_REG | $02
    while INTCON.2=0
    wend

    امیدوارم دوستان مثل همیشه نظر لطفشون رو شامل حال بنده کنن. :smile:

    قبلا از لطف همگی بسیار ممنونم.
    زندگی برگ بودن در مسیر باد نیست
    امتحان ریشه هاست
    ریشه هم هرگز اسیر باد نیست
    زندگی چون پیچک است
    انتهایش میرسد پیش خدا!
  2. #2
    2011/01/21
    ساری - ایران
    150
    7

    پاسخ : توضیح چند خط کد به زبان بیسیک

    سلام.
    برای دریافت بخشی از پاسخ سوالاتون به آدرس زیر مراجعه کنید.

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

    عضویت



    در این برنامه از ماژول CCP1 در مد Compare همراه با ریست تایمر یک در زمان برابری مقایسه استفاده شده. که این تنظیمات توسط رجیستر CCP1CON انجام شده.
    تایمر صفر هم فقط در روتین وقفه پیکره بندی و استفاده شده.
    برای درک بهتر حتماً به دیتاشیت میکروکنترلر مراجعه کنید.

    در روتین وقفه برای عدم مزاحمت منابع وقفه دیگه ، اونها رو غیر فعال کردیم( DISABLE INTERRUPT) .
    سپس با یک شرط چک میکنیم که آیا وقفه توسط پرچم وقفه ماژول CCP1 ایجاد شده یا خیر؟(if PIR1.2=1 then ).
    اگر جواب مثبت بود مراحل بعدی رو انجام میدیم. چون برای کنترل سروو موتور یک دوره تناوب 20ms نیاز است که این دوره تناوب توسط ماژول CCP1 ایجاد میشه. باتوجه به اینکه از کریستال 8Mhz استفاده کردید کلاک داخی برابر 2mhz میشه و برای تولید 20 میلی ثانیه تایمر 1 رو با همون کلاک 2Mhz راه اندازی کردیم. رجیستر های مقایسه واحد Compare (یعنی دو رجیستر CCPR1H و CCPR1L) مقدار تایمر رو با عدد 40000 مقایسه میکنند و در صورت برابری برنامه وارد وقفه میشه. همچنین برای کنترل سروو مدت یک بودن پالس در این دوره 20ms فقط بین 1 الی 2 میلی ثانیه میتونه باشه .بنابراین ما این تایم رو داخل سرویس وقفه ایجاد میکنیم به این ترتیب که اون رو به دو بخش تقسیم کردیم. بخش اول که یک زمان ثابت حدود 1 میلی ثانیه است که توسط دستور PAUSEUS 990 تولید شده و زمان بین 1ms تا 2ms توسط تایمر صفر به صورت تقریبی تولید میشه. علت اینکه بخش ثابت رو دقیق 1 میلی ثانیه انتخاب نکردیم تاخیر هایی هست که اجرای دستورات بعدی برای راه اندازی تایمر و غیره ایجاد میکنند.
    تایمر صفر هم توسط مقدار دهی به رجیستر OPTION_REG راه اندازی میشه که برای درک اون به دیتاشیت یا لینک معرفی شده باید مراجعه کنید.
  3. #3
    2011/05/01
    566
    3

    پاسخ : توضیح چند خط کد به زبان بیسیک

    از بنده هم عرض سلام و تشکر فراوان جناب perfect ، همونطور که تو نوشتن برنامه ی اخیر که تو پست قبلی عرض کردم، حوصله و دقت به خرج داده بودید، و لطف کرده و برنامه ی کنترل سرووها رو نوشتید، این بار هم بنده رو شرمنده ی الطاف خودتون فرمودید :redface: امیدوارم از پس جبرانش بر بیام.
    و امیدوارم سوال بنده رو خدای نکرده حمل بر جسارت، نگذارید و همه رو به پای کم سوادیم قرار بدید.

    نقل قول نوشته اصلی توسط Perfect
    برای دریافت بخشی از پاسخ سوالاتون به آدرس زیر مراجعه کنید.

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

    عضویت

    تایپیک بسیار مفیدی بود البته بنده قبلا تا جاهاییش رو پیگیر بودم اما متاسفانه پستهای جدیدش رو ندیده بودم.

    نقل قول نوشته اصلی توسط Perfect
    در این برنامه از ماژول CCP1 در مد Compare همراه با ریست تایمر یک در زمان برابری مقایسه استفاده شده. که این تنظیمات توسط رجیستر CCP1CON انجام شده.
    تایمر صفر هم فقط در روتین وقفه پیکره بندی و استفاده شده.
    برای درک بهتر حتماً به دیتاشیت میکروکنترلر مراجعه کنید.

    در روتین وقفه برای عدم مزاحمت منابع وقفه دیگه ، اونها رو غیر فعال کردیم( DISABLE INTERRUPT) .
    سپس با یک شرط چک میکنیم که آیا وقفه توسط پرچم وقفه ماژول CCP1 ایجاد شده یا خیر؟(if PIR1.2=1 then ).
    اگر جواب مثبت بود مراحل بعدی رو انجام میدیم. چون برای کنترل سروو موتور یک دوره تناوب 20ms نیاز است که این دوره تناوب توسط ماژول CCP1 ایجاد میشه. باتوجه به اینکه از کریستال 8Mhz استفاده کردید کلاک داخی برابر 2mhz میشه و برای تولید 20 میلی ثانیه تایمر 1 رو با همون کلاک 2Mhz راه اندازی کردیم. رجیستر های مقایسه واحد Compare (یعنی دو رجیستر CCPR1H و CCPR1L) مقدار تایمر رو با عدد 40000 مقایسه میکنند و در صورت برابری برنامه وارد وقفه میشه. همچنین برای کنترل سروو مدت یک بودن پالس در این دوره 20ms فقط بین 1 الی 2 میلی ثانیه میتونه باشه .بنابراین ما این تایم رو داخل سرویس وقفه ایجاد میکنیم به این ترتیب که اون رو به دو بخش تقسیم کردیم. بخش اول که یک زمان ثابت حدود 1 میلی ثانیه است که توسط دستور PAUSEUS 990 تولید شده و زمان بین 1ms تا 2ms توسط تایمر صفر به صورت تقریبی تولید میشه. علت اینکه بخش ثابت رو دقیق 1 میلی ثانیه انتخاب نکردیم تاخیر هایی هست که اجرای دستورات بعدی برای راه اندازی تایمر و غیره ایجاد میکنند.
    تایمر صفر هم توسط مقدار دهی به رجیستر OPTION_REG راه اندازی میشه که برای درک اون به دیتاشیت یا لینک معرفی شده باید مراجعه کنید.
    ok، بسیار ممنون مهندس، خیلی چیزا برام روشن شد.
    فقط یه نکته باقی میمونه اونم این که اگر بزرگواری کنید و معادل باینری مقادیر 0b$, $9c, $40 و 01$ رو لطف بفرمائید، یک دنیا سپاسگذار میشم ازتون.
    زندگی برگ بودن در مسیر باد نیست
    امتحان ریشه هاست
    ریشه هم هرگز اسیر باد نیست
    زندگی چون پیچک است
    انتهایش میرسد پیش خدا!
  4. #4
    2011/01/21
    ساری - ایران
    150
    7

    پاسخ : توضیح چند خط کد به زبان بیسیک

    نقل قول نوشته اصلی توسط pama
    فقط یه نکته باقی میمونه اونم این که اگر بزرگواری کنید و معادل باینری مقادیر 0b$, $9c, $40 و 01$ رو لطف بفرمائید، یک دنیا سپاسگذار میشم ازتون.
    اینها مقادیر hex هستند که در زبان بیسیک به این صورت نوشته میشن. معادل باینری اونها :
    $40=%01000000
    $9c=%10011100
    $0b=%00001011
    $01=%00000001
  5. #5
    2011/05/01
    566
    3

    پاسخ : توضیح چند خط کد به زبان بیسیک

    نقل قول نوشته اصلی توسط Perfect
    اینها مقادیر hex هستند که در زبان بیسیک به این صورت نوشته میشن. معادل باینری اونها :
    $40=%01000000
    $9c=%10011100
    $0b=%00001011
    $01=%00000001
    آقا بسیار ممنون، چیزی نمیتونم بگم جز اینکه یک دنیا سپاسگذارم. :smile:
    زندگی برگ بودن در مسیر باد نیست
    امتحان ریشه هاست
    ریشه هم هرگز اسیر باد نیست
    زندگی چون پیچک است
    انتهایش میرسد پیش خدا!
  6. #6
    2011/05/01
    566
    3

    راهنمائی در مورد برنامه ای برای خوندن فرکانس

    با سلام خدمت همه ی دوستان و اساتید محترم.
    دوستان بنده با استفاده از وقفه ی خارجی میکرو pic16f877a و pic basic pro و راهنمائی یکی از دوستان، برنامه ای رو برای خوندن فرکانس، که مربوط به خروجی یک سنسور هست رو نوشتم، منتها وقتی یه lcd رو بهش میزنم برای اینکه بتونم خروجی رو ببینم، به جای رنج فرکانسم که از 4 تا 130 هرتز هست، فقط عدد 0 و 1 رو میبینم، از سخت افزارم مطمئنم و میدونم مشکل از برنامه هست اما کجاش نمیدونم!!
    از دوستان محترم خواهشمندم، لطفا راهنمائیم بفرمایند.
    اینم برنامه:

    define osc 8
    @ DEVICE PIC16F877A ,WDT_OFF ,PWRT_ON ,PROTECT_OFF ,LVP_ON ,HS_OSC ,BOD_OFF
    f_temp var word
    f var word

    define DEBUG_MODE 1
    DEFINE DEBUG_BAUD 9600
    define lcd_dreg portd
    define lcd_dbit 4
    define lcd_rsreg portd
    define lcd_rsbit 2
    define lcd_ereg portd
    define lcd_ebit 3
    define lcd_bits 4
    define lcd_lines 2

    trisb.0 = 1


    on interrupt goto lable
    intcon = $90

    main:
    f_temp = 0
    pause 250
    f = f_temp

    lcdout $fe, 1
    lcdout "fr="
    lcdout $fe, $14
    lcdout #f

    goto main

    disable
    lable:
    f_temp = f_temp + 1
    intcon.1 = 0
    resume
    enable

    end

    نکته ای که وجود داره اینه که مهمه که همونطور که تو برنامه رعایت شده حتما فرکانس تو 250 میلی ثانیه خونده بشه.
    زندگی برگ بودن در مسیر باد نیست
    امتحان ریشه هاست
    ریشه هم هرگز اسیر باد نیست
    زندگی چون پیچک است
    انتهایش میرسد پیش خدا!
نمایش نتایج: از 1 به 6 از 6

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

  1. مدافعان زبان بیسیک
    توسط man2008 در انجمن میکروکنترلرهای AVR
    پاسخ: 65
    آخرين نوشته: 2015/02/28, 12:40
  2. اسیلوسکوپ با avr به زبان بیسیک
    توسط jafar2000 در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2010/12/23, 15:11
  3. تبدیل زبان c به بیسیک
    توسط haji125 در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2010/11/09, 22:54
  4. تایمر در AVR به زبان بیسیک
    توسط 3xbox.mohammad در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2008/12/12, 18:36
  5. زبان C یا بیسیک
    توسط Aristar در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2008/09/17, 21:50

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

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

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

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

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