اطلاعیه

Collapse
No announcement yet.

سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

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

    سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

    سلام دوستان
    من فضای این انجمن رو مناسب دیدم و یک تایپیک پیرامون رفع اشکلات برنامه نویسی 8051 در اینجا باز کردم امیدوارم دوستان همکاری لازم را بکنند
    و اما اولین سوال من خوب همتون میدونید که وقتی منبع تغذیه به 8051 وصل میشه و 8051 روشن میشه تمامی چهار تا پورت خودش رو به صورت خروجی پیکربندی میکنه و همه 32 تا پین چهار پورت در سطح یک منطقی قرار میگیرند و همچنین برای اینکه پورتی رو به صورت ورودی پیکربندی کنیم باید در اون پورت یک بنویسیم مثلاً دستور MOV P1,#0FFH تمامی 8 پین پورت یک رو بصورت ورودی پیکربندی میکنه حالا مشکل من چیه ؟ مشکل من با همین یک بودن پین ها هستش بذارید واضحتر بگم من میخوام برنامه ای بنویسم که مثلاً یک شدن و صفر شدن P1.1 رو ردیابی کنه و به محضل اینکه این پایه یک شد مثلاً عدد 24H رو در P2 بنویسه و به محض صفر شدن P1.1 عدد 56H رو در P2 بنویسه و این کار رو تکرار کنه من این برنامه رو بصورت زیر مینویسم

    ORG 0H
    SETB P1.1
    MOV A,#24H
    MOV R0,#56H
    FIRST:
    JB P1.1,LOOP
    MOV P2,R0
    LOOP:
    MOV P2,A
    SJMP FIRST
    END

    خوب تو این برنامه من اول P1.1 رو بصورت ورودی پیکربندی کردمش سپس عدد 24H رو تو رجیستر A ریختم و عدد 56H رو تو رجیستر R0 و با یه دستور شرطی یک شدن P1.1 رو ردیابی میکنم به این صورت که اگه P1.1 یک شد در این صورت شرط برقرار بوده و به حلقه LOOP پرش کرده و عدد 24H موجود تو رجیستر A رو در P2 مینویسه و دوباره به اول بر میگرده ولی اگه شرط برقرار نباشه یعنی P1.1 صفر باشه شرط اجرا نشده و در دستور بعدی عدد56H موجود تو رجیستر R0 رو تو P2 مینویسه و دوباره به اول برمیگرده من این برنامه رو تو پروتیوس هم شبیه سازی کردم و در اینجا اتچ میکنم تا ببینید حالا مشکل اینه که 8051 به محض روشن شدن عدد 24H رو تو P2 مینوسه چون P1.1 از ابتدا یک هستش به همون دلیلی که تو اول پستم گفتم و وقتی هم که P1.1 صفر میشه 8051 به طور متناوب اعداد 24H و 56H رو تو P2 مینویسه و یه جورایی قاطی میکنه ببینید این مشکل جایی خودش رو نشون میده که مثلاً شما P1.1 رو به یکی از پین های یک کلید وصل کردین و پین دوم کلید هم یا میتونه به زمین وصل بشه و یا میتونه به تغذیه وصل بشهآ‌ ولی اون پینی که به P1.1 وصل کردین در حقیق هیچ یک از دو حالت صفر بودن یا یک بودن رو نباید داشته باشه چون به جایی وصل نیست و وضعیتش تابع پین اول کلید
    هستش ولی چون به P1.1 وصله و P1.1 هم در اولین لحظه روشن شدن 8051 وضعیت یک منطقی به خودش میگیره بنابراین 8051 فوری و در همان ابتدای شروع به کار عدد 24H رو تو خروجی مینوسه در حالی که اصلاً نباید هیچ عددی رو در خروجی بنویسه چون هنوز فرمانی از سمت کلید بهش داده نشده ( من برای ایجاد همچین حالتی از دو شستی استفاده کردم که پینهای دومشون به هم وصل شده و مشترک هستش و به P1.1 رفته و پینهای دوم هر کدوم آزاد هستند بنابراین این کلید در لحضه شروع به کار مدار هیچ فرمان صفر یا یکی رو صادر نمیکنه )

    حالا من چطوری باید این مشکل رو حل کنم ؟
    ممنون
    لینک دانلود فایل پروتیوس : http://rapidshare.de/files/10065720/8051_BUG.zip.html

    #2
    سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

    سلام . خوبی دوست عزیز .
    در مورد اون قسمت از سوالاتون که چرا وقتی p1.1 رو صفر می کنید . یه علت ساده داره که پورت مدام 2 عدد رو به صورت تناوبی نشون میده ، برنامه یه اشکال کوچیک دره . برنامه رو رو اینطوری باید بنویسید :

    ORG 0H
    SETB P1.1
    MOV A,#24H
    MOV R0,#56H
    FIRST:
    JB P1.1,LOOP
    MOV P2,R0
    SJMP FIRST
    LOOP:
    MOV P2,A
    SJMP FIRST
    END
    شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
    هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
    چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

    دیدگاه


      #3
      سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

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

      دیدگاه


        #4
        سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

        سلام . خوبی دوست عزیز ؟
        من قسمت اول سوالاتون رو 3 بار خوندم ولی متوجه نشدم دقیقا چه مشکلی با یک بودن پورت ها دارید .
        یک مسئله هست . اگه ساختار داخلی پایه های میکرو رو بخونید ، اونجا علت اینکه برای ورودی شدن پورت باید اول 1 بشه رو گفته . ولی در حالت کلی تا زمانی که شما خودتون نرم افزاری یه پورتی رو ورودی نکرده باشید اون پورت ورودی نیست . حتی در لحظه روشن شدن میکرو .
        نمی دونم جوابتون رو دادم یا نه . اگه جوابتون رو نگرفتید در مورد سوالتون بیشتر توضیح بدید .
        موفق و پیروز باشید . یا علی
        شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
        هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
        چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

        دیدگاه


          #5
          سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

          ممنون دوست عزیز
          ببین همون طور که خودت میدونی ما تو دیجیتال دو حالت داریم یا صفر و یا یک البته یه حالت امپدانس بالا هم داریم که تو اون دیگه ما نه ولتاژ صفر داریم و نه 5 ولت به عبارتی امپدانس بالا یعنی اینکه اونی پینی که امپدانس بالا هستش به هیچ جایی وصل نیست تا تحت اثر اون جا بره تو حالت صفر یا یک من میخوام بدونم آیا یه همچین حالتی میشه تو پایه های 8051 ایجاد کرد یا نه حالا این کار به چه درد من میخوره
          فرض کن ما دو تا کلید داریم هر کلید دارای دو تا ترمینال هستش که ما بوسیله این دوتا ترمینال و سری کردن کلید در مسیر جریان باعث قطع و وصل شدن جریان میشیم حالا ما میایم و ترمینال اول کلید اولی رو به ولتاژ 5 ولت وصل میکنیم و ترمینال اول کلید دوم رو هم به ولتاژ صفر ولت یا زمین وصل میکنیم و ترمینال های دوم هر دو تا کلید رو به همدیگه وصل میکنیم و یک ترمینال مشترک ایجاد میکنیم درست عین شکل زیر

          حالا شما می بینید که در لحظه شروع به کار مدار ترمینال مشترک کلید ما به هیچ کجایی وصل نیست بنابراین نه در حالت صفر هستش و نه در حالت یک ( امپدانس بالا ) ، و ما فقط میتونیم با استفاده از شستی اول این ترمینال مشترک رو به حالت یک منطقی ببریم و با استفاده از شستی دوم این ترمینال مشترک رو به حالت صفر منطقی ببریم و اگه هر دو شستی رها باشند دیگه ترمینال مشترک نه صفر هستش و نه یک تا اینجا فکر کنم خیلی واضح بود
          خوب حالا میرسیم سر میکروکنترلر برنامه ای که من نوشتم این طوره که وقتی شستی اول فشرده میشه ترمینال مشترک به سطح یک منطقی میره و عدد 24H در خروجی نوشته بشه و وقتی شستی دوم فشرده میشه ترمینل مشترک به سطح صفر منطقی میره و عدد 56H در خروجی نوشته میشه و وقتی که هیچ کدوم از شستی ها فشرده نمیشه بطبع ترمینال مشترک نه صفر هستش و نه یک بنابراین نباید در خروجی چیزی نوشته بشه ولی .... مشکل اینجاست وقتی من ترمینال مشترک رو به پین P1.1 میکرو وصل میکنم یک بودن این پین در هنگام روشن شدن میکرو باعث این میشه که در خروجی عدد 24H نوشته بشه چون این پین در سطح یک منطقی قرار داره و برنامه هم درست عملکرده اما من هیچ فرمانی به وسیله شستی اول نداده ام تا ترمیینال مشترک 5 ولت شده و عدد 24H خروجی نوشته بشه و برنامه با توجه به یک بودن اولیه این پین عملکرده
          فکر کنم کاملاً و واضح توضیح دادم منظورم چه بوده حالا شما میتونین این مشکل رو رفع کنین ؟
          ممنون از توجه شما

          دیدگاه


            #6
            سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

            سلام . خوبی دوست عزیز .
            این که می گید میکرو هیچ چیز نباید بخونه چون شما این پایه رو نه 1 کردید نه 0 که منطقی نیست . خودتون هم گفتید که 2 حالت بیشتر نداره . میکرو زمانی که ورودی میشه نمیتونه حالت Z رو بخونه . بگذریم.
            به نظر من شما باید یه مدار سخت افزاری طراحی کنید که مثلا اگه یکی از 2 کلید فشرده شده بود یه بیت دیگه از میکرو صفر بشه در غیر این صورت یک بشه . و زمانیکه دارید p1.1 رو میخونید اون بیت رو هم در نظر بگیرید . اگه یک بود اصلا ورودی رو چک نکنید .
            البته من خودم ایده برای این مدار سخت افزاری به ذهنم نرسید باید روش فکر کرد .
            موفق باشید
            شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
            هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
            چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

            دیدگاه


              #7
              سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

              یه سوال از آقای نحوی
              آقای نحوی میکرو 8051 میتونه لااقل تو حالت خروجی حالت Z یا امپدانس بالا رو ایجاد کنه ؟ :?:

              دیدگاه


                #8
                سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

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

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

                کدوم یکی از میکرو های که معروف هست حالت امپدانس بالا رو پشتیبانی میکنه ؟

                موفق و پیروز باشید .
                شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
                هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
                چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

                دیدگاه


                  #9
                  سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

                  ممنون آقای نحوی
                  درسته منم در مورد AVR ها همچین چیزی رو شنیدم ولی دقیقاً نمیدونم درست هستش یا نه ؟
                  ولی اگر 8051 این حالت رو ساپورت میکرد واقعاً عالی بود چون با توجه به قیمتش که 900 تومان هستش در مقابل 3200 تومن AVR خیلی به صرفه هستش

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

                  دیدگاه


                    #10
                    سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

                    سلام آقای نحوی عزیز
                    امیدوارم حالتون خوب باشه دوست عزیز
                    همون طور که تو اول تایپیک و تو عنوان تایپیک گفتم اینجا مکانی هستش برای طراح مشکلات و اشکلات پیرامون برنامه اسمبلی میکرو 8051 هستش و همون طور که خودم گفتم من تازه کار هستم و سوال و اشکال زیاد دارم و اما سوال جدیدم
                    نحوی جان من الآن به طور مجزا میتونم برای میکرو 8051 و قطعات جانبی که به اون وصل میشه برنامه بنویسم مثلاٌ برای کیبورد برای استپ موتور برای LCD برای سون سگمنتها برای تایمر میکرو و اینتراپت ها و ... البته به طور مجزا یعنی مثلاً تو یه برنامه جداگانه میتونم کیبورد رو اسکن کنم و عدد فشرده شده رو تشخیص بدم و اما اشکالم چیه ؟ اشکالم اینکه نمیتونم این برنامه هایی که نوشتم رو در یک پروژه و یکجا به کار ببرم یعنی چی ؟ یعنی اینکه فرض کن شما ما یه پروژه داریم که در اون از طریق کیبورد یک عدد خاصی رو وارد میکنیم بعد این عدد در LCD نمایش داده بشه بعدش ما یک کلید از کیبورد فشار بدیم و استپ موتور که به میکرو وصل هستش به اندازه اون عدد بچرخه و بعد چرخیدن به اندازه عدد مورد نظر یک پیام در روی LCD به نشان انجام دادن درخواست ما نشان داده بشه خوب شما این پروژه رو در نظر داشته باش
                    حالا من میتونم کیبورد اسکن کنم و یا استپر رو درایو کنم و یک پیام در روی LCD نشان بدم ولی وقتی این برنامه ها رو با هم در یک فایل اسمبلی واحد مینویسم و هگز اون رو در میارم و در پروتیوس تست میکنم فقط اولین قسمت برنامه اجرا میشه و بقیه قسمت های برنامه اجرا نمیشه یعنی چی یعنی مثلاً اگه من اول برنامه کیبورد رو اسکن بکنم همون برنامه اسکن کیبورد کار میکنه و بقیه قسمت های برنامه مثل LCD کار نمیکنه به عبارتی من نمیتونم ارتباط صحیح و درست رو بین قسمت های مختلف برنامه برقرار بکنم تا همه قسمت های برنامه اجرا بشه و پروژه به درستی کار کنه اصولاً برقراری ارتباط بین قسمت های مختلف برنامه یک پروژه برای 8051 چگونه هستش ؟
                    ممنون از لطف شما
                    منتظرم

                    دیدگاه


                      #11
                      سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

                      علی جان سلام .
                      اگه از نظر اصولی بخواهی بدونی یه تکنیک هست به نام تکینیک رفرش . زمانی استفاده میشه که شما چند تا تابع رو باید همزمان اجرا کنید . برای این منظور توی تابع MAIN یه حلقه بینهایت ایجاد میکنید و این توابع رو اونجا قرار میدید که همواره این توابع اجرا میشن .
                      روش دیگه استفاده از تایمر هست که مال زمانی هست که شما تابعی دارید که حتما باید در زمان های مشخصی فراخونی بشه . مثلا تابع رفرش سون سگمنت ها . در این جور مواقع از تایمر استفاده میکنید و تابع سون سگمنت رو توی تایمر قرار میدید .
                      در مورد برنامه شما باید برنامه رو برام بفرستید تا بتونم کمکتون کنم .
                      موفق باشید .
                      شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
                      هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
                      چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

                      دیدگاه


                        #12
                        سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

                        سلام علی آقا(professor)
                        امیدوارم که همواره با مطرح کردن هر نوع سوالی آینده ی روشنی را برای خودت رقم بزنی چون طرح سوالات علمی و تحقیقاتی جرقه ی همه ی پیشرفتهای انسانی بوده است
                        خوب از این حرفها گذشته به سر اصل مطلب میرم
                        درسته من خیلی زیاد با 8051 کار نکرده ام ولی چند پروژه رو تا حد شبیه سازی با Protuesپیش بردم می خواستم در مورد سوال اولتون اینو بهتون پیشنهاد کنم که با توجه به اینکه پورت صفر به صورت پیش فرض نه یک منطقی هستش و نه صفر منطقی (چون مقاومتهای بالا برنده ندارند) آیا به نظرتون نمیتوانید از این پورت به جای پورت یک به عنوان ورودی(کلیدها) استفاده کنید؟
                        البته چون فعلا نرم افزار مبدل asm به hex ندارم نتوانستم خودم آنرا امتحان کنم ولی از لحاظ منطقی درست به نظر می آید

                        در ضمن این را هم به اطلاع آقای نحوی و سایر دوستان برسانم که اسم بنده سجاد هستش

                        امیدوارم موفق باشید
                        ssajh

                        دیدگاه


                          #13
                          سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

                          سلام خوبی سجاد جان ؟
                          به نظرم نشه این کار رو کرد .
                          من یه مطالعه ای روی پایه های میکرو میکنم مفصل پاسخش رو به شما میدم .
                          در ضمن در مورد کامپایلر هم چندین کامپایلر توی سایت هست .
                          یکی فرانکلین هست که هم نرم افزارش و هم آموزشش توی سایت هست .
                          یه مطالبی هم در مورد میکرو های سری S هست که اونجا کامپایلر اسمبلی رو هم گذاشتم .
                          ولی خودم هر چی سرچ کردم پیداش نکردم یه تاپیک با این عنوان باز میکنم و این رو توش میذارم .
                          موفق باشید .
                          شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
                          هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
                          چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

                          دیدگاه


                            #14
                            سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

                            نوشته اصلی توسط Professor
                            ممنون دوست عزیز
                            ببین همون طور که خودت میدونی ما تو دیجیتال ....................... ا
                            سلام:
                            شما به یک نکته خیلی مهم و یک شرط اصلی توجه ای نکرده اید که در هنگام خواندن یک پورت در وضعیت Z ممکن است نویز محیط را بجای مقدار روی پورت بخوانید؟

                            وضعیت Z در P0 میکروکنترلر 8051 برای ارتباط پیرامونی با وسایل متفاوت همچنین در شرایط خاص است و شما در حقیقت در حال مبارزه با استاندارد و قوانین تعریف شده سطوح دیجیتال هستید. پیشنهاد میکنم یک سری به کتاب دیجیتال خودتون بزنید.
                            برای خواندن سطوح دیجیتال شما می توانید فقط دوضعیت را مقایسه کنید"0" و "1"، اما هنوز حالت سومی هم وجود دارد "Z" که همان وضعیت امپدانس بالا یا قرار گرفتن در هیچ سطحی از ولتاژها، در حقیقت قطع ارتباط است اما این وضعیت برای محاسبات پیشبینی نشده و فقط برای کارآمد کردن بیشتر ارتباط بین گیتهای منطقی و قطعات پیرامونی در نظر گرفته شده است. یعنی همان طور که میدانید خواندن سطوح دیجیتال به آن علت قابل اطمینان است که قطعه دیجیتالی شما میتواند دو وضعیت معتبر و تعریف شده را تشخیص دهد که این دو وضعیت از طرف قطعه مجاور سازگار تامین میشود، اما اگر قرار باشد وضعیت سومی هم شناخته شده باشد بدون شک باید تغییراتی را در خانواده های شریف TTL و CMOS که تنها میتوانند 2 وضعیت را تشخیص دهند ایجاد کرد و یک خانواده جدید را با قابلیت خواندن 3 وضعیت، 4 وضعیت و n وضعیت بوجود آورد که حتما در آینده امکان پذیر میباشد، کما اینکه در حال حاضر بعضی قطعات خاص برای شکستن شمارش دودویی و تبدیل آن به سه سه ای و در نتیجه ایجاد ارقام بیشتر از حالت Z که به وضعیت شناور (floating) و به اختصار 'f' نیز شناخته شده است، استفاده میکنند و در حقیقت معماری داخلی آنها وضعیت سوم را نیز تشخیص میدهد همان نیازی که در ایده شما احساس میشود. برای اینکه شما بتوانید به دو سطح "1" و "0" در دو زمان متفاوت پاسخ دهید میکروکنترلر شما نیازمند یک وضعیت بیطرف است و این وضعیت به میکروکنترلر میگوید هنوز منتظر بمان! چنانچه بخواهید از یک پین 8051 سه وضعیت را بخوانید یک موضوع انجام شدنی است اما، شما حتمآ به سخت افزار خارجی نیاز دارید و اگرهم قصد دارید از وضعیت Z پورت به این شکل استفاده کنید باید منتظر پیامدهای ناخواسته نیز باشید.

                            موفق باشید.
                            11001010110010001100100011110010101111101100101
                            011000110110110001100101011000110111010001101001
                            01100011

                            دیدگاه


                              #15
                              سوالات و اشکالات پیرامون میکروکنترلر 8051 و برنامه نویسی آن

                              Professor عزیز

                              ببین من مشکل شما رو درست فهمیدم یا نه!

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

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

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

                              اما برای رفع مشکل شما!
                              اگر می خوای که مدار قبل از فشرده شدن کلید صفر بخونه، خیلی راحت هست. اون پایه p1.1 رو با یک مقاومت 4.7 کیلو Pull Down بکن!
                              اگر میخوای که مدار قبل از فشرده شدن اولین کلید هیچ کاری رو نکنه باید اینکار رو نرم افزاری انجام بدی به این صورت که قبل از دیدن یک تغییر ولتاژ در پایه هیچ کاری رو انجام ندی!
                              اگرم می خوای واقعا یک حالت High Z رو سنس بکنی، که کاره عاقلانه ای هم نیست باید از یک مدار اضافی و یک پایه دیگه استفاده بکنی کاری که در Logic Probe انجام میشه!
                              HTH - Shahriar
                              Circuit Designers Choose Different Horses For Different Courses!

                              دیدگاه

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