اطلاعیه

Collapse
No announcement yet.

کمک در مورد تایمر 1768

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

    کمک در مورد تایمر 1768

    سلام به همه دوستان و اساتید محترم

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

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

    با تشکر

    #2
    پاسخ : کمک در مورد تایمر 1768

    سلام
    ببینید عملکرد تایمر که مشخصه. شما تایمرتون را فعال می کنید و یک مقداری هم قبلا به رجیستر مقایسه دادید. تا شمارنده رسید به این مقدار یک وقفه می آید و به زیر روال وقفه می رود. در این زیر روال می توانید کار مربوطه را انجام دهید. توضیحات بیشتر قبلا در جاهای دیگر هم داده شده البته برای lpc2378 که دیگه خودتون باید با این میکرو تون رجیستر ها را تغییر بدید :
    http://www.iranmicro.ir/forum/showthread.php?t=5401
    فيلم آموزشي ميکروکنترلر LPC1768
    فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
    فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
    فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

    دیدگاه


      #3
      پاسخ : کمک در مورد تایمر 1768

      نوشته اصلی توسط mahdizarkoob
      سلام
      ببینید عملکرد تایمر که مشخصه. شما تایمرتون را فعال می کنید و یک مقداری هم قبلا به رجیستر مقایسه دادید. تا شمارنده رسید به این مقدار یک وقفه می آید و به زیر روال وقفه می رود. در این زیر روال می توانید کار مربوطه را انجام دهید. توضیحات بیشتر قبلا در جاهای دیگر هم داده شده البته برای lpc2378 که دیگه خودتون باید با این میکرو تون رجیستر ها را تغییر بدید :
      http://www.iranmicro.ir/forum/showthread.php?t=5401
      ممنون از راهنماییتون
      این کد مثالهای فیلیپس هست اما بعد از شدن وقفه تایمر ریست میشه اما مجموعه دستوراتی که میخوام تو این حالت اجرا بشه رو کجا باید بزارم و چجوری من اینجاش مشکل دارم

      این هم برنامه :


      // Initialize timer 0, prescale count time of 100uS
      TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL;
      TIM_ConfigStruct.PrescaleValue = 100;

      // use channel 0, MR0
      TIM_MatchConfigStruct.MatchChannel = 0;
      // Enable interrupt when MR0 matches the value in TC register
      TIM_MatchConfigStruct.IntOnMatch = TRUE;
      //Enable reset on MR0: TIMER will reset if MR0 matches it
      TIM_MatchConfigStruct.ResetOnMatch = TRUE;
      //Stop on MR0 if MR0 matches it
      TIM_MatchConfigStruct.StopOnMatch = FALSE;
      //Toggle MR0.0 pin if MR0 matches it
      TIM_MatchConfigStruct.ExtMatchOutputType =TIM_EXTMATCH_TOGGLE;
      // Set Match value, count value of 200 (200 * 100uS = 20000us = 20 ms --> 50 Hz)
      TIM_MatchConfigStruct.MatchValue = 200 ;

      // Set configuration for Tim_config and Tim_MatchConfig
      TIM_Init(LPC_TIM0, TIM_TIMER_MODE,&TIM_ConfigStruct);
      TIM_ConfigMatch(LPC_TIM0,&TIM_MatchConfigStruc t);


      TIM_Cmd(LPC_TIM0,ENABLE );

      با تشکر

      دیدگاه


        #4
        پاسخ : کمک در مورد تایمر 1768

        سلام
        ببینید شما بعد از فعال کردن تایمرتن باید یه جایی برنامتون کلاک بخوره تا تایمر بشماره. این کار با قرار دادن یک حلقه whie انجام میشه. برنامه درون این حلقه گیر میکنه تا وقفه بیاد بره در زیر روال وقفه و برگرده. در زیر روال وقفه یک شرط بذارید مثلا a=1 که قبلا a=0 بوده . حالا دیگه با یک if ساده دستورات مد نظر را بنویسید:

        کد:
        While(1) {
         If (a = 1) { 
        دستورات مد نظر
        {
        a=0;
        {
        فيلم آموزشي ميکروکنترلر LPC1768
        فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
        فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
        فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

        دیدگاه


          #5
          پاسخ : کمک در مورد تایمر 1768

          نوشته اصلی توسط mahdizarkoob
          سلام
          ببینید شما بعد از فعال کردن تایمرتن باید یه جایی برنامتون کلاک بخوره تا تایمر بشماره. این کار با قرار دادن یک حلقه whie انجام میشه. برنامه درون این حلقه گیر میکنه تا وقفه بیاد بره در زیر روال وقفه و برگرده. در زیر روال وقفه یک شرط بذارید مثلا a=1 که قبلا a=0 بوده . حالا دیگه با یک if ساده دستورات مد نظر را بنویسید:

          کد:
          While(1) {
           If (a = 1) { 
          دستورات مد نظر
          {
          a=0;
          {
          با تشکر از توضیحاتتون

          ببینید من تا اینجاش رو متوجه شده بودم اما مشکل من جایی هست که من در داخل حلقه while اصلی برنامه دو تا حلقه for تو در تو دارم که دارن از a2d میخونن
          و میخواستم به محض اینکه وقفه ایجاد شد کار نمونه برداری تموم بشه و عمل جمع و تقسیم نمونه ها شروع بشه
          و بعد تایمر ریست بشه و بعد دوباره از اول

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

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

          با تشکر فراوان

          دیدگاه


            #6
            پاسخ : کمک در مورد تایمر 1768

            حل شد


            ممنون

            دیدگاه

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