بازدیدها: 236
اين شمارنده به زبان اسمبلي نوشته شده و از 000 تا 999 را مي شمارد و با رسيدن به عدد 999 تمام ثبات ها و حافظه هاي مورد استفاده شده را ريست مي كند و از نو شروع به شمارش مي كند اين روند همين طور ادامه دارد. همانطور كه ميدانيد به علت بالا بودن سرعت ميكروكنترلر (اگر از كريستال 11.0592 مگاهرتزي استفاده شود سرعت اجراي هر دستور توسط ميكر حدود 1.085 ميكرو ثانيه مي شود) اگر بخواهيم از يك پورت ميكرو اطلاعاتي بخوانيم (بستگي به شرايط برنامه دارد) بايد از يك تاخير استفاده كنيم. مثلا من در اين شمارنده از يك كليد براي شمارش استفاده كرده ام (با هر بار فشار داده يك عدد به عدد قبلي اضافه مي كند) كه اگر از برنامه تاخيري استفاده نكنم با هر بار فشار دادن كليد به علت بالا بودن سرعت ميكرو اين كليد را بيش از هزار بار از زير دست من مي خواند و مي بينيم كه يك دفعه شمارنده يك عدد بسيار بزرگي را به ما نشان مي دهد.
در ضمن اگر بخواهيم به جاي كليد استفاده شده در مدار از يك مولد پالس يا گيرنده مادون قرمز و يا هر سنسور ديگر كه بخواهيم سرعت عمل بشتري داشته باشيم مي توان مدت زمان تاخير را كم كرد تا به سرعت دلخواه رسيد. MGH
براي كم كردن بايد ثبات هاي R3,R4,R5 را كه من در برنامه استفاده كرده ام را بسته به سرعت مقدار هگز آن را كم كرد. در زير برنامه و سخت افزار مدار آمده است اميد وارم كه اين توضيحات براي شما كارآمد باشد. MGH
برنامه:
ORG 30H
MOV A,#0FFH
MOV P0,A
MOV A,#01H
MOV 60H,A
MOV 61H,A
MOV 62H,A
MOV A,#00H
MOV P2,A
MOV P3,A
MOV P1,A
; MGHMGH MGH MGH MGH MGH MGH ;
MOV R0,#60H
START: JB P0.0,START
COUNTERMGH: MOV A,60H
CJNE A,#0AH,MGHSEG1
MOV A,#00H
MOV P2,A
MOV 60H,A
SJMP MGHSEG2
MGHSEG1: MOV A,60H
MOV P2,A
INC 60H
CALL DELAY
SJMP START
; MGHMGH MGH MGH MGH MGH MGH ;
MGHSEG2: MOV A,61H
CJNE A,#0AH,MGHSEG3
MOV A,#00H
MOV P3,A
MOV 61H,A
SJMP MGHSEG4
MGHSEG3: MOV A,61H
MOV P3,A
INC 61H
SJMP START
; MGHMGH MGH MGH MGH MGH MGH ;
MGHSEG4: MOV A,62H
CJNE A,#0AH,RESET
MOV A,#00H
MOV P1,A
MOV P2,A
MOV P3,A
MOV 60H,A
MOV 61H,A
MOV 62H,A
RESET: MOV A,62H
MOV P1,A
INC 62H
SJMP START
; MGHMGH MGH MGH MGH MGH MGH ;
DELAY: MOV R3,#14H
MGH1: MOV R4,#0FFH
MGH2: MOV R5,#00F4H
MGH3: DJNZ R5,MGH3
DJNZ R4,MGH2
DJNZ R3,MGH1
RET