Professional Documents
Culture Documents
Timer PDF
Timer PDF
ﻣﻄﺎﻟﺐ ﺑﻴﺎﻥ ﺷﺪﻩ ﻓﻮﻕ ﺍﺯ ﺳﺮﯼ ﻣﺜﺎﻝ ﻫﺎ ﻭ ﻣﻄﺎﻟﺐ ﺗﮑﻤﻴﻠﯽ ﮐﺘﺎﺏ " ﺁﻣﻮﺯﺵ ﺣﺮﻓﻪ ﺍﯼ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮﻫﺎﯼ "PICﻣﯽ ﺑﺎﺷﺪ .
ﺑﺮﺍﯼ ﺍﻃﻼﻋﺎﺕ ﺑﻴﺸﺘﺮ ﺩﺭ ﻣﻮﺭﺩ ﮐﺘﺎﺏ ﻭ ﻳﺎ ﺧﺮﻳﺪ ﻣﯽ ﺗﻮﺍﻧﻴﺪ ﺍﺯ ﻃﺮﻳﻖ ﻟﻴﻨﮏ ﺯﻳﺮ ﺍﻗﺪﺍﻡ ﮐﻨﻴﺪ :
www.dspic.ir/product_info.php?products_id=1447
www.ir-micro.com/modules.php?name=Forums&file=viewtopic&t=483
۱
www.Ir-micro.com ﻭﺏ ﺳﺎﻳﺖ ﺟﺎﻣﻊ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ،ﺑﺮﻕ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ
ﺭﻟﻪ ﻫﺎﯼ ﺗﺎﺧﻴﺮﯼ ﭼﻨﺪ ﺯﻣﺎﻧﻪ)ﺗﺎﻳﻤﺮ ﭼﻨﺪ ﺯﻣﺎﻧﻪ( :
۲
www.Ir-micro.com ﻭﺏ ﺳﺎﻳﺖ ﺟﺎﻣﻊ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ،ﺑﺮﻕ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ
ﮐﻠﻴﺪ ﻭﺭﻭﺩﯼ ﻣﺮﺑﻮﻃﻪ ﺯﺩﻩ ﺷﻮﺩ ،ﻣﻘﺎﺩﻳﺮ ﺛﺎﻧﻴﻪ ﻭ ﺩﻗﻴﻘﻪ ﺷﻤﺎﺭ ﻣﺮﺟﻊ ﺳﻴﺴﺘﻢ ﺭﺍ ﺩﺭ ﺧﻮﺩ ﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﻨﺪ ﺗـﺎ
ﺑﺘﻮﺍﻥ ﺯﻣﺎﻥ ﺯﺩﻩ ﺷﺪﻥ ﮐﻠﻴﺪ ﺭﺍ ﺑﻪ ﺍﻳﻦ ﻭﺳﻴﻠﻪ ﺗﻌﻴﻴﻦ ﮐﺮﺩ .ﺩﺭ ﺍﺩﺍﻣﻪ ﺑﺎ ﻣﻘﺎﻳﺴﺔ ﺯﻣﺎﻥ ﺣـﺎﻝ ﺳﻴﺴـﺘﻢ ﻭ ﺯﻣـﺎﻥ
ﺯﺩﻩ ﺷﺪﻥ ﮐﻠﻴﺪ ،ﻣﯽ ﺗﻮﺍﻥ ﺗﻌﻴﻴﻦ ﻧﻤﻮﺩ ﮐﻪ ﭼﻪ ﻣﻘﺪﺍﺭ ﺍﺯ ﺗﺎﺧﻴﺮ ﻣﻮﺭﺩ ﻧﻈﺮ ﺳﭙﺮﯼ ﺷﺪﻩ ﺍﺳـﺖ ﮐـﻪ ﺍﮔـﺮ ﺗـﺎﺧﻴﺮ
ﮐﺎﻣﻞ ﺳﭙﺮﯼ ﺷﺪﻩ ﺑﻮﺩ ،ﻓﻠﮓ ﻭ ﺧﺮﻭﺟﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﻧﺪ .
ﻋﻤﻞ ﻣﻘﺎﻳﺴﻪ ﺯﻣﺎﻧﯽ ﺑﻪ ﺍﻳﻦ ﺻﻮﺭﺕ ﺍﻧﺠﺎﻡ ﻣﯽ ﺷﻮﺩ ﮐﻪ ﺯﻣﺎﻥ ﺣﺎﻝ ﻭ ﻫﻤﭽﻨﻴﻦ ﺯﻣﺎﻥ ﺯﺩﻩ ﺷﺪﻥ ﮐﻠﻴﺪ ﺑﻪ ﺛﺎﻧﻴـﻪ
ﻣﺤﺎﺳﺒﻪ ﻣﯽ ﺷﻮﺩ )ﺩﻗﻴﻘﻪ ﺷﻤﺎﺭ ﺿﺮﺏ ﺩﺭ + ۶۰ﺛﺎﻧﻴﻪ ﺷﻤﺎﺭ( ﻭ ﺳﭙﺲ ﺍﺯ ﻫﻢ ﮐﻢ ﻣﯽ ﺷﻮﻧﺪ ؛ ﺍﮔﺮ ﺍﻳﻦ ﻣﻘﺪﺍﺭ ﺑﺎ
ﻣﻘﺪﺍﺭ ﺗﺎﺧﻴﺮ ﻣﻮﺭﺩ ﻧﻈﺮ )ﺑﻪ ﺛﺎﻧﻴﻪ( ﺑﺮﺍﺑﺮ ﺑﻮﺩ ،ﺑﻪ ﻣﻌﻨﺎﯼ ﺳﭙﺮﯼ ﺷﺪﻥ ﺯﻣﺎﻥ ﺗﺎﺧﻴﺮ ﻣﻮﺭﺩ ﻧﻈﺮ ﺍﺳﺖ .
ﺗﻨﻬﺎ ﺣﺎﻟﺖ ﺧﻄﺎﻳﻲ ﮐﻪ ﺍﺗﻔﺎﻕ ﻣﻴﻔﺘﺪ ﺑﺮﺍﯼ ﺯﻣﺎﻧﯽ ﺍﺳﺖ ﮐﻪ ﻣﻌﺎﺩﻝ ﺯﻣﺎﻥ ﺳﻴﺴﺘﻢ )ﺑـﻪ ﺛﺎﻧﻴـﻪ( ،ﺍﺯ ﻣﻌـﺎﺩﻝ ﺯﻣـﺎﻥ
ﺯﺩﻩ ﺷﺪﻥ ﮐﻠﻴﺪ )ﺑﻪ ﺛﺎﻧﻴﻪ( ﮐﻤﺘﺮ ﺑﺎﺷﺪ .ﺑﻪ ﻃﻮﺭ ﻣﺜﺎﻝ ﮐﻠﻴﺪ ﺩﺭ ﺯﻣﺎﻥ ۵۹ﺩﻗﻴﻘﻪ ﻭ ۳۰ﺛﺎﻧﻴـﻪ ﺯﺩﻩ ﻣـﯽ ﺷـﻮﺩ ﻭ
ﺯﻣﺎﻥ ﺳﻴﺴﺘﻢ ﻧﻴﺰ ۵ﺩﻗﻴﻘﻪ ﻭ ۳۰ﺛﺎﻧﻴﻪ ﺭﺍ ﻧﺸﺎﻥ ﻣﯽ ﺩﻫﺪ ﻭ ﻣﺪﺕ ﺯﻣﺎﻥ ﺗﺎﺧﻴﺮ ﺑﺮﺍﯼ ﺁﻥ ﺧﺮﻭﺟﯽ ﻧﻴـﺰ ۶ﺩﻗﻴﻘـﻪ
ﺍﺳﺖ ؛ ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﺑﺎﻳﺪ ﺧﺮﻭﺟﯽ ﻣﻮﺭﺩ ﻧﻈﺮ ﻏﻴﺮ ﻓﻌﺎﻝ ﺷﻮﺩ ،ﺍﻣﺎ ﺑﻪ ﺩﻟﻴﻞ ﮐﻮﭼﮑﺘﺮ ﺑﻮﺩﻥ ﺯﻣـﺎﻥ ﺳﻴﺴـﺘﻢ ﺍﺯ
ﺯﻣﺎﻥ ﮐﻠﻴﺪ ،ﺣﺎﺻﻞ ﺗﻔﺮﻳﻖ ﺫﮐﺮ ﺷﺪﻩ ﻣﻨﻔﯽ ﻭ ﻏﻴﺮ ﻓﻌﺎﻝ ﺷﺪﻥ ﺧﺮﻭﺟﯽ ﺍﻧﺠﺎﻡ ﻧﺨﻮﺍﻫﺪ ﺷﺪ .ﺩﺭ ﺍﻳـﻦ ﺷـﺮﺍﻳﻂ
ﻗﺒﻞ ﺍﺯ ﻋﻤﻞ ﺗﻔﺮﻳﻖ ،ﺣﺎﻟﺖ ﺧﻄﺎ ﭼﮏ ﻣﯽ ﺷﻮﺩ ﮐﻪ ﺍﮔﺮ ﺍﻳﻦ ﺣﺎﻟﺖ ﺑﺮ ﻗﺮﺍﺭ ﺑـﻮﺩ ۶۰ﺩﻗﻴﻘـﻪ ﺑـﻪ ﺯﻣـﺎﻥ ﺳﻴﺴـﺘﻢ
ﺍﺿﺎﻓﻪ ﺧﻮﺍﻫﺪ ﺷﺪ ﺗﺎ ﻣﺎﻧﻊ ﺑﺮﻭﺯ ﺧﻄﺎ ﺷﻮﺩ ) ۳۶۰۰ﺛﺎﻧﻴﻪ( .
DELAY_xﻫﻢ ﺛﺎﺑﺖ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺟﻬﺖ ﺗﻌﻴﻴﻦ ﺯﻣﺎﻥ ﺗﺎﺧﻴﺮ ﺑﺮﺍﯼ ﺧﺮﻭﺟﯽ xﺍﺳﺖ .
ﺩﺭ ﺍﺩﺍﻣﻪ ﺑﺮﻧﺎﻣﻪ ﮐﺎﺭﯼ ﻭ ﺷﻤﺎﺗﻴﮏ ﻣﺪﺍﺭ ﻗﺎﺑﻞ ﻣﺸﺎﻫﺪﻩ ﺍﺳﺖ :
MAIN:
GOSUB SCAN
IF FLAG[0]=1 THEN GOSUB DEVICE_0
IF FLAG[1]=1 THEN GOSUB DEVICE_1
IF FLAG[2]=1 THEN GOSUB DEVICE_2
IF FLAG[3]=1 THEN GOSUB DEVICE_3
IF FLAG[4]=1 THEN GOSUB DEVICE_4
IF FLAG[5]=1 THEN GOSUB DEVICE_5
IF FLAG[6]=1 THEN GOSUB DEVICE_6
IF FLAG[7]=1 THEN GOSUB DEVICE_7
GOTO MAIN
END
SCAN :
IF PORTD.0=1 THEN
MINUTE[0]=SYSTEM_MINUTE : SECOND[0]=SYSTEM_SECOND
FLAG[0]=1 : PORTB.0=1 : PAUSE 150
ENDIF
IF PORTD.1=1 THEN
MINUTE[1]=SYSTEM_MINUTE : SECOND[1]=SYSTEM_SECOND
FLAG[1]=1 : PORTB.1=1 : PAUSE 150
ENDIF
IF PORTD.2=1 THEN
MINUTE[2]=SYSTEM_MINUTE : SECOND[2]=SYSTEM_SECOND
FLAG[2]=1 : PORTB.2=1 : PAUSE 150
ENDIF
۴
www.Ir-micro.com ﺑﺮﻕ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ، ﻭﺏ ﺳﺎﻳﺖ ﺟﺎﻣﻊ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ
IF PORTD.3=1 THEN
MINUTE[3]=SYSTEM_MINUTE : SECOND[3]=SYSTEM_SECOND
FLAG[3]=1 : PORTB.3=1 : PAUSE 150
ENDIF
IF PORTD.4=1 THEN
MINUTE[4]=SYSTEM_MINUTE : SECOND[4]=SYSTEM_SECOND
FLAG[4]=1 : PORTB.4=1 : PAUSE 150
ENDIF
IF PORTD.5=1 THEN
MINUTE[5]=SYSTEM_MINUTE : SECOND[5]=SYSTEM_SECOND
FLAG[5]=1 : PORTB.5=1 : PAUSE 150
ENDIF
IF PORTD.6=1 THEN
MINUTE[6]=SYSTEM_MINUTE : SECOND[6]=SYSTEM_SECOND
FLAG[6]=1 : PORTB.6=1 : PAUSE 150
ENDIF
IF PORTD.7=1 THEN
MINUTE[7]=SYSTEM_MINUTE : SECOND[7]=SYSTEM_SECOND
FLAG[7]=1 : PORTB.7=1 : PAUSE 150
ENDIF
RETURN
INT:
DISABLE
SYSTEM_SECOND=SYSTEM_SECOND+1
IF SYSTEM_SECOND=60 THEN
SYSTEM_SECOND=0
SYSTEM_MINUTE=SYSTEM_MINUTE+1
ENDIF
IF SYSTEM_MINUTE=60 THEN SYSTEM_MINUTE=0
TMR1H=TMR1H+$80
PIR1.0=0
RESUME
ENABLE
DEVICE_0:
TEMP_1=(MINUTE[0]*60)+SECOND[0]
TEMP_2=(SYSTEM_MINUTE*60)+SYSTEM_SECOND
IF TEMP_1 > TEMP_2 THEN TEMP_2=TEMP_2+3600
IF (TEMP_2 - TEMP_1) >= DELAY_0 THEN PORTB.0=0 : FLAG[0]=0
RETURN
DEVICE_1:
TEMP_1=(MINUTE[1]*60)+SECOND[1]
TEMP_2=(SYSTEM_MINUTE*60)+SYSTEM_SECOND
IF TEMP_1 > TEMP_2 THEN TEMP_2=TEMP_2+3600
IF (TEMP_2 - TEMP_1) >= DELAY_1 THEN PORTB.1=0 : FLAG[1]=0
RETURN
DEVICE_2:
TEMP_1=(MINUTE[2]*60)+SECOND[2]
TEMP_2=(SYSTEM_MINUTE*60)+SYSTEM_SECOND
۵
www.Ir-micro.com ﺑﺮﻕ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ، ﻭﺏ ﺳﺎﻳﺖ ﺟﺎﻣﻊ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ
IF TEMP_1 > TEMP_2 THEN TEMP_2=TEMP_2+3600
IF (TEMP_2 - TEMP_1) >= DELAY_2 THEN PORTB.2=0 : FLAG[2]=0
RETURN
DEVICE_3:
TEMP_1=(MINUTE[3]*60)+SECOND[3]
TEMP_2=(SYSTEM_MINUTE*60)+SYSTEM_SECOND
IF TEMP_1 > TEMP_2 THEN TEMP_2=TEMP_2+3600
IF (TEMP_2 - TEMP_1) >= DELAY_3 THEN PORTB.3=0 : FLAG[3]=0
RETURN
DEVICE_4:
TEMP_1=(MINUTE[4]*60)+SECOND[4]
TEMP_2=(SYSTEM_MINUTE*60)+SYSTEM_SECOND
IF TEMP_1 > TEMP_2 THEN TEMP_2=TEMP_2+3600
IF (TEMP_2 - TEMP_1) >= DELAY_4 THEN PORTB.4=0 : FLAG[4]=0
RETURN
DEVICE_5:
TEMP_1=(MINUTE[5]*60)+SECOND[5]
TEMP_2=(SYSTEM_MINUTE*60)+SYSTEM_SECOND
IF TEMP_1 > TEMP_2 THEN TEMP_2=TEMP_2+3600
IF (TEMP_2 - TEMP_1) >= DELAY_5 THEN PORTB.5=0 : FLAG[5]=0
RETURN
DEVICE_6:
TEMP_1=(MINUTE[6]*60)+SECOND[6]
TEMP_2=(SYSTEM_MINUTE*60)+SYSTEM_SECOND
IF TEMP_1 > TEMP_2 THEN TEMP_2=TEMP_2+3600
IF (TEMP_2 - TEMP_1) >= DELAY_6 THEN PORTB.6=0 : FLAG[6]=0
RETURN
DEVICE_7:
TEMP_1=(MINUTE[7]*60)+SECOND[7]
TEMP_2=(SYSTEM_MINUTE*60)+SYSTEM_SECOND
IF TEMP_1 > TEMP_2 THEN TEMP_2=TEMP_2+3600
IF (TEMP_2 - TEMP_1) >= DELAY_7 THEN PORTB.7=0 : FLAG[7]=0
RETURN
۶
www.Ir-micro.com ﺑﺮﻕ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ، ﻭﺏ ﺳﺎﻳﺖ ﺟﺎﻣﻊ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ
ﺗﻬﻴﻪ ﮐﻨﻨﺪﻩ :
ﺣـــﺎﻣــﺪ ﻣــﻈــﺎﻫــﺮﯼ
Hamed.Mazaheri@Gmail.com
۷
www.Ir-micro.com ﻭﺏ ﺳﺎﻳﺖ ﺟﺎﻣﻊ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ،ﺑﺮﻕ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ