اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام بر اساتید
    عید بر همه مبارک

    من یک بر نامه به زبان اسمبلی میکرو8051 برای شمارش تعداد قطع و وصل شدن کلید نوشتم . در این بر نامه از 3 تا سگمنت استفاده کردم که به 3 پورت وصل شدن. (برنامه ان در زیر هست که با اسم برنامه اول نام گذاری شده)
    سگمنت1= به پورت 0 وصل شده و نشانگر اعداد یکان است.
    سگمنت2= به پورت 2 وصل شده و نشانگر اعداد دهگان است.
    سگمنت3= به پورت 3 وصل شده و نشانگر اعداد صدگان است.
    پورت1 هم به عنوان ورودی معرفی شده است. که 3کلید به ان وصل است. کلیدی که بهP1.1 وصل است کار START رو (درگار گاه ماشین برای راه اندازی ساده یک موتور ) انجام میده وP1.2 کار STOPور (درگار گاه ماشین برای راه اندازی ساده یک موتور ) انجام میده و P1.0 کار افزایش مقدار سگمنت ها را بر عهده دارد.
    اصول کار این طور هست که ابتدا سگمنت ها رو معرفی می کنم بعد شروع به افزایش مقدار سگمنت1 می کنم اگر مقدار سگمنت1 از عدد9 بیشتر شد سگمنت1=0 خواهد شد ولی به سگمنت2 یک واحد افزایش پیدا می کند. این حلقه باز ادامه می یابد تا مقدار سگمنت2 به عدد 9 برسد و مانند شرط قبل اگر مساوی 10شد یعنی بیشتر از 9شد سگمنت 1وسگمنت2 هر دو=0 وبه سگمنت3 یک واحد افزایش داده شود این حلقه باز هم ادامه پیدا می کند تا سگمنت3 به عدد 9 برسد و بعد از 9 چون 10 است مانند شرط های قبل سگمنت1و سگمنت2و سگمنت3 هرسه مساوی 0 می شوند که این بیانگر پایان شمارش است. COMPA هم نقش مقایسه را بر عهده دارد که اعداد 1و2و3 مشخص شده اند.
    این برنامه درست کار می کندولی من می خواهم از تکنیک خطای دید برای نشان دادن اعداد استفاده کنم یعنی از یک پورت ویک آی سی 7447و3 عدد سگمنت. برنامه ی خطای دید را هم نوشتم ولی لطفا یک نگاه بیندازید و اشکالاتش را به من به بگید. (برنامه ان در زیر هست که با اسم برنامه دوم نام گذاری شده) متشکرم.
    توجه : بر نامه اول بدون خطای دید است ولی برنامه دوم با خطای دید است:

    برنامه اول(بدون خطای دید):
    میتوانید فایل پورتیوس6.9 ان رو از لینک زیر دریافت کنید:
    http://rapidshare.com/files/20943482..._8051.zip.html
    SEG1 EQU 15H
    SEG2 EQU 16H
    SEG3 EQU 17H
    ORG 20H
    MOV P1,#0FFH
    MOV SEG1,#0H
    MOV SEG2,#0H
    MOV SEG3,#0H

    MAIN: JB P1.1,START
    JB P1.2,STOP
    LJMP MAIN
    START: JNB P1.0,INCUP
    JB P1.2,STOP
    SJMP MAIN
    INCUP:

    MOV A,#0H
    INC SEG1
    MOV A,SEG1
    SJMP COMPA1
    COMPA1: CJNE A,#0AH,SHOW1

    MOV SEG1,#0H ;<==
    LCALL SHOW
    MOV A,#0H
    INC SEG2
    MOV A,SEG2
    SJMP COMPA2
    COMPA2: CJNE A,#0AH,SHOW1
    MOV SEG1,#0H ;<==
    MOV SEG2,#0H ;<==
    LCALL SHOW
    MOV A,#0
    INC SEG3
    MOV A,SEG3
    SJMP COMPA3
    COMPA3: CJNE A,#0AH,SHOW1
    MOV SEG1,#0H
    MOV SEG2,#0H
    MOV SEG3,#0H
    LCALL SHOW
    SETB P0.6
    LOO2: LJMP LOO2
    SHOW1: MOV P0,SEG1
    MOV P2,SEG2
    MOV P3,SEG3
    LOO1: JNB P1.0,LOO1
    LJMP LOOP
    SHOW: MOV P0,SEG1
    MOV P2,SEG2
    MOV P3,SEG3
    RET
    STOP: SETB P0.7

    JNB P1.0,DANGE
    DANGE: JB P1.2,DANGE
    LJMP MAIN

    END

    برنامه دوم(با خطای دید):
    نکته : در این روش از ترانزیستور های PNP برای روشن کردن سگمنت ها استفاده کردم .
    میتوانید فایل پورتیوس6.9 ان رو از لینک زیر دریافت کنید:
    http://rapidshare.com/files/20943579...E_DID.zip.html
    SEG1 EQU 15H
    SEG2 EQU 16H
    SEG3 EQU 17H
    ORG 20H
    MOV P1,#0FFH
    MOV SEG1,#0H
    MOV SEG2,#0H
    MOV SEG3,#0H

    MAIN: LCALL SHOW
    JB P1.1,START
    JB P1.2,STOP
    LJMP MAIN
    START: JNB P1.0,INCUP
    JB P1.2,STOP
    SJMP MAIN
    INCUP:
    MOV A,#0H
    INC SEG3
    MOV A,SEG3
    SJMP COMPA1
    COMPA1: CJNE A,#3AH,SHOW1

    MOV SEG3,#30H ;<==
    LCALL SHOW
    MOV A,#0H
    INC SEG2
    MOV A,SEG2
    SJMP COMPA2
    COMPA2: CJNE A,#5AH,SHOW1
    MOV SEG3,#30H ;<==
    MOV SEG2,#50H ;<==
    LCALL SHOW
    MOV A,#0
    INC SEG1
    MOV A,SEG1
    SJMP COMPA3
    COMPA3: CJNE A,#6AH,SHOW1
    MOV SEG2,#50H ;<==
    MOV SEG1,#60H ;<==
    LCALL SHOW
    SETB P2.0
    LOO2: LJMP LOO2
    SHOW1: MOV P0,SEG3
    LCALL DELAY
    MOV P0,SEG2
    LCALL DELAY
    MOV P0,SEG1
    LCALL DELAY
    LOO1: JNB P1.0,LOO1
    LJMP MAIN
    SHOW: MOV P0,SEG3
    LCALL DELAY
    MOV P0,SEG2
    LCALL DELAY
    MOV P0,SEG1
    LCALL DELAY
    RET

    STOP: SETB P2.1
    JNB P1.0,DANGE
    DANGE: JB P1.2,DANGE
    LJMP MAIN

    DELAY: MOV R0,#255
    LOOP3: MOV R1,#25
    LOOP2: MOV R2,#2
    LOOP1: DJNZ R2,LOOP1
    DJNZ R1,LOOP2
    DJNZ R0,LOOP3
    RET
    END
لطفا صبر کنید...
X