ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻓﺼﻞ ﺍﻭﻝ:
۱
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۲
PIC Basic ﺳﺎﺩﮔﯽ ﻭﺁﺳﺎﻧﯽ ﻣﻬﻤﺘﺮﻳﻦ ﻭﻳﮋﮔﯽ ﻳﮏ ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﺳﻄﺢ ﺑﺎﻻ ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﻣﻮﺟﺐ ﺷـﺪﻩ ﺍﺳـﺖ ﺑﻄﻮﺭ ﮔﺴﺘﺮﺩﻩ ﺍﯼ ﺩﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻫﺎ ﺑﺮﺍﯼ ﮐﺎﺭﻫﺎﯼ ﺑﺰﺭﮒ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ .ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﺳﻄﺢ ﺑﺎﻻ ﺑﺎ ﺑﮑﺎﺭﮔﻴﺮﯼ ﺗﻮﺍﺑﻊ ﺁﻣﺎﺩﻩ ﺯﻣﺎﻥ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﺭﺍ ﮐﻮﺗﺎﻩ ﻣﯽ ﮐﻨﺪ ﻭ ﻫﻤﭽﻨﻴﻦ ﭘﻴﭽﻴﺪﮔﯽ ﺑﺮﻧﺎﻣـﻪ ﺗﻨﻬـﺎ ﺑـﻪ ﻣﻮﺿﻮﻉ ﺍﺻﻠﯽ ﻣﻮﺭﺩ ﻧﻈﺮ ﮐﺎﺭﺑﺮ ﻣﺤﺪﻭﺩ ﻣﯽ ﺷﻮﺩ .ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻣﯽ ﺗﻮﺍﻧﺪ ﺗﻤﺮﮐﺰ ﺑﻴﺸـﺘﺮﯼ ﺑـﺮ ﺭﻭﯼ ﮐـﺎﺭ ﻣﻮﺭﺩ ﻧﻈﺮ ﺧﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﻭ ﺍﺯ ﺍﺗﻼﻑ ﻭﻗﺖ ﺑﺮ ﺭﻭﯼ ﻧﻮﺷﺘﻦ ﮐﺪﻫﺎﯼ ﺟﺎﻧﺒﯽ ﮐﻪ ﺩﺍﺋﻤـﺎ ﺩﺭ ﭘـﺮﻭﮊﻩ ﻫـﺎﯼ ﻣﺨﺘﻠﻒ ﺗﮑﺮﺍﺭ ﻣﯽ ﺷﻮﺩ ﺟﻠﻮﮔﻴﺮﯼ ﮐﻨﺪ .ﻣﺜﻼ ﺩﺭ ﺑﺴﻴﺎﺭﯼ ﺍﺯ ﭘﺮﻭﮊﻫﺎ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺮﺍﯼ ﺍﺭﺳﺎﻝ ﺍﻃﻼﻋﺎﺕ ﺑـﻪ ﻗﻄﻌﻪ ﺩﻳﮕﺮ ﻳﺎ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻧﻴﺎﺯ ﺍﺳﺖ ﻭ ﻳﺎ ﻧﻤﺎﻳﺶ ﭘﻴﻐﺎﻣﯽ ﺑﺮ ﺭﻭﯼ ﻧﻤﺎﻳﺸﮕﺮ LCDﻭﻳﺎ ﺗﻮﻟﻴﺪ ﭘﺎﻟﺲ PWM ﻭ ﻏﻴﺮﻩ ﻧﻴﺎﺯ ﺍﺳﺖ ﮐﻪ ﻫﻤﻪ ﺍﻳﻨﻬﺎ ﺑﺼﻮﺭﺕ ﺁﻣﺎﺩﻩ ﺩﺭ ﻳﮏ ﺯﺑﺎﻥ ﺳﻄﺢ ﺑﺎﻻ ﻣﺎﻧﻨﺪ PIC Basicﻣﻮﺟﻮﺩ ﺍﺳﺖ. ﺑﺮﺍﯼ ﻧﻮﺷﺘﻦ ﻭﮐﺎﻣﭙﺎﻳﻞ ﮐﺮﺩﻥ ﺑﺮﻧﺎﻣﻪ PIC Basicﺍﺯ ﻧﺮﻡ ﺍﻓـﺰﺍﺭﯼ Micro CODE STUDIOﻧﺴـﺨﻪ 1.4ﺷﺮﮐﺖ Mecaniqueﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﮐﻨﻴﻢ .ﺑﺮﻧﺎﻣﻪ ﺧﻮﺩ ﺭﺍ ﺩﺭ ﺍﻳﻦ ﻭﻳﺮﺍﻳﺸﮕﺮ ﻣﯽ ﻧﻮﻳﺴﻴﻢ ﻭ ﺑﺎﭘﺴﻮﻧﺪ .BASﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﻴﻢ .ﺑﺎ ﮐﺎﻣﭙﺎﻳﻞ ﺍﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺩﻭ ﻣﺮﺣﻠﻪ ﭘﺸﺖ ﺳﺮ ﻫﻢ ﺭﻭﯼ ﻣﯽ ﺩﻫﺪ ،ﻣﺮﺣﻠﻪ ﻳـﮏ ﮐﺎﻣﭙﺎﻳﻠﺮ ﻓﺎﻳﻞ BASﺭﺍ ﺑﻪ ﮐﺪ ﺍﺳﻤﺒﻠﯽ ﺗﺒﺪﻳﻞ ﻣﯽ ﮐﻨﺪ ﻭ ﺑﺎ ﻫﻤﺎﻥ ﺍﺳﻢ ﻭ ﭘﺴـﻮﻧﺪ .ASMﺫﺧﻴـﺮﻩ ﻣـﯽ ﮐﻨﺪ ﻭ ﺩﺭ ﻣﺮﺣﻠﻪ ﺑﻌﺪ ﻓﺎﻳﻞ ASMﺗﻮﺳﻂ ﺍﺳﻤﺒﻠﺮ ﺑﻪ ﮐـﺪ HEXﺗﺒـﺪﻳﻞ ﻣـﯽ ﺷـﻮﺩ ﻭﺑـﺮﺍﯼ ﺭﻳﺨـﺘﻦ ﺩﺭ ﺣﺎﻓﻈﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺁﻣﺎﺩﻩ ﻣﯽ ﺷﻮﺩ .ﻧﺮﻡ ﺍﻓﺰﺍﺭ Micro CODE STUDIOﺍﺯ ﻃﺮﻳﻖ ﻧﺮﻡ ﺍﻓﺰﺍﺭ EPIC Winﮐﺪ HEXﺭﺍ ﺩﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻣﯽ ﺭﻳﺰﺩ .ﺩﺭ ﺯﻳﺮ ،ﺑﺮﻧﺎﻣﻪ BLINKﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ.
ﺷﮑﻞ (1-1.ﺑﺮﻧﺎﻣﻪ BLINKﺑﻪ ﺯﺑﺎﻥ ﺑﻴﺴﻴﮏ
۳
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﮑﻞ (1-2.ﺗﺒﺪﻳﻞ ﺑﻪ ﻓﺎﻳﻞ ، HEXﺑﺮﻧﺎﻣﻪ
BLINK
.۲-۱ﻋﻨﺎﺻﺮ ﭘﺎﻳﻪ ﺯﺑﺎﻥ PIC BASIC
.۱ -۱-۱ﺷﻨﺎﺳﻪ ﻫﺎ ﺷﻨﺎﺳﻪ ﻫﺎ ﺑﺮﺍﯼ ﻧﺎﻣﻴﺪﻥ ﻳﮑﯽ ﺍﺯ ﻋﻨﺎﺻﺮ PIC BASICﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ .ﺷﻨﺎﺳﻪ ﻫﺎ ﻋﻼﻭﻩ ﺑﺮ ﺍﺳـﺘﻔﺎﺩﻩ ﺍﺯ ﺣﺮﻭﻑ ،ﺍﺯ ﺍﻋﺪﺍﺩ ﻧﻴﺰ ﻣﯽ ﺗﻮﺍﻧﺪ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﺑﺎ ﺍﻳﻦ ﻣﺤـﺪﻭﺩﻳﺖ ﮐـﻪ ﺩﺭﺍﺑﺘـﺪﺍﯼ ﮐﻠﻤـﻪ ﺁﻭﺭﺩﻩ ﻧﺸـﻮﺩ. ﺷﻨﺎﺳﻪ ﺑﻪ ﮐﻮﭼﮑﯽ ﻳﺎ ﺑﺰﺭﮔﯽ ﺣﺮﻑ ﺣﺴﺎﺱ ﻧﻴﺴﺖ ﻭ ﻃﻮﻝ ﺁﻥ ﺣﺪﺍﮐﺜﺮ ۳۲ﮐﺎﺭﮐﺘﺮ ﻣﯽ ﺑﺎﺷﺪ. Symbol Tester = PORTA.0 Symbol LED_0 = PORTB.0
.۱ -۱-۲ﺑﺮﭼﺴﺒﻬﺎ ﺑﺮﺍﯼ ﻣﺸﺨﺺ ﮐﺮﺩﻥ ﺧﻄﯽ ﮐﻪ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺁﻧﺠﺎ ﺟﻬﺶ ﻣﯽ ﮐﻨﺪ ﺑﮑﺎﺭ ﻣﯽ ﺭﻭﺩ
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
.۱ -۱-۳
۴
ﺛﺎﺑﺘﻬﺎ Name_constants con value_constants
ﺑﺎ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻣﯽ ﺗﻮﺍﻥ ﺑﻪ ﻣﻘﺎﺩﻳﺮ ﺛﺎﺑﺘﯽ ﮐﻪ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﮐﺎﺭﺑﺮﺩ ﺧﺎﺻﯽ ﺩﺍﺭﻧﺪ ﺍﺳﻢ ﺩﺍﺩ ﺗﺎ ﺑﺮﻧﺎﻣﻪ ﺑـﺎﺯﺧﻮﺍﻧﯽ ﺭﺍﺣﺘﺘﺮﯼ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ
ﺛﺎﺑﺘﻬﺎ ﻣﯽ ﺗﻮﺍﻧﻨﺪ ﺩﺳﻴﻤﺎﻝ ،ﻫﮕﺰﺍﺩﺳﻴﻤﺎﻝ ﻭ ﻳﺎ ﺑﺎﻳﻨﺮﯼ ﺑﺎﺷﺪ .ﺛﺎﺑﺘﻬﺎﯼ ﺩﺳﻴﻤﺎﻝ ﺑﺪﻭﻥ ﭘﺸﻮﻧﺪ ﻧﻮﺷﺘﻪ ﻣﯽ ﺷﻮﺩ ﻭ ﺛﺎﺑﺘﻬﺎﯼ ﻫﮕﺰﺍ ﺩﺳﻴﻤﺎﻝ ﺑﺎ ﭘﻴﺸﻮﻧﺪ $ﻭﺑﺎﻳﻨﺮﯼ ﺑﺎ %ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﻧﺪ.
.۱ -۱-۴
ﻣﺘﻐﻴﺮﻫﺎ Name_variable var Type_variable
ﻣﺘﻐﻴﺮﻫﺎ ﺩﺭ ﻣﻮﻗﻌﻴﺘﻬﺎﯼ RAMﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺫﺧﻴﺮﻩ ﻣﯽ ﺷﻮﻧﺪ ﻭ ﺑﻪ ﺍﻳﻦ ﻣﻌﻨﯽ ﺍﺳﺖ ﮐﻪ ﺗﻌﺪﺍﺩ ﻣﺘﻐﻴﺮﻫﺎ ﺑﻪ ﺍﻧﺪﺍﺯﻩ RAMﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻣﻮﺭﺩ ﻧﻈﺮ ﺑﺴﺘﮕﯽ ﺩﺍﺭﺩ .ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﺑﺎ ﮐﻠﻤﻪ VARﺻﻮﺭﺕ ﻣﯽ ﮔﻴـﺮﺩ. PIC BASICﻣﺘﻐﻴﺮﻫـﺎﯼ ﺍﺯ ﻧــﻮﻉ ۰) bitﻭ ۰ ) byte ، ( ۱ﺗـﺎ ( ۲۵۵ﻭ ۰ ) wordﺗــﺎ ( ۶۵۵۳۵ﺭﺍ ﭘﺸﺘﻴﺒﺎﻧﯽ ﻣﯽ ﮐﻨﺪ.
.۱ -۱-۵ﺁﺭﺍﻳﻪ ﻫﺎ ]Name_sequence var type_element [number of the elements ﻣﺘﻐﻴﺮ ﺁﺭﺍﻳﻪ ﺍﯼ ﺍﺯ ﺗﻌﺪﺍﺩﯼ ﻣﺘﻐﻴﺮ ﻣﺘﻮﺍﻟﯽ ﺗﺸﮑﻴﻞ ﺷﺪﻩ ﺍﺳﺖ ﮐﻪ ﺑﺎ ﺍﺳﻢ Type_elementﻧﺸـﺎﻥ ﺩﺍﺩﻩ
ﻣﯽ ﺷﻮﺩ .ﺍﻳﻦ ﻣﺘﻐﻴﺮ ﻣﯽ ﺗﻮﺍﻧﺪ ﺑﻴﺘﯽ ﻳﺎ ﺑﺎﻳﺘﯽ ﻭ ﻳﺎ ﮐﻠﻤﻪ ﺑﺎﺷﺪ .ﺗﻌﺪﺍﺩ ﻋﻨﺎﺻﺮ ﺁﺭﺍﻳﻪ ﺩﺭ ﺩﺍﺧـﻞ"] [" ﻧﺸـﺎﻥ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﻧﺪ .ﻫﺮ ﻋﻨﺼﺮ ﺑﺎ ﻳﮏ ﺷﺎﺧﺺ ﻣﺸﺨﺺ ﻣﯽ ﺷﻮﺩ ﮐﻪ ﺍﻭﻟﻴﻦ ﻋﻨﺼـﺮ ﺑـﺎ ﺷـﺎﺧﺺ ﺻـﻔﺮ ﻗﺎﺑـﻞ ﺩﺳﺘﺮﺳﯽ ﺍﺳﺖ ﻭﺗﻌﺪﺍﺩ ﺍﻳﻦ ﺷﺎﺧﺼﻬﺎ ﺑﺴﺘﮕﯽ ﺑﻪ ﺣﺎﻓﻈﻪ RAMﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺩﺍﺭﺩ .ﻣﻘﺪﺍﺭ ﻣﺎﮐﺰﻳﻤﻢ ﺁﺭﺍﻳﻪ ﺩﺭ ﺟﺪﻭﻝ ﺯﻳﺮ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ.
۵
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺍﻧﺪﺍﺯﻩ ﺁﺭﺍﻳﻪ ﺗﻌﺪﺍﺩ ﻣﺎﮐﺰﻳﻤﻢ ﻋﻨﺎﺻﺮ
ﻧﻮﻉ ﻋﻨﺎﺻﺮ ﺁﺭﺍﻳﻪ
256
BIT
*96
BYTE
*48
WORD
* ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﻧﻮﻉ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ
ﺟﺪﻭﻝ ۱ -۱
۱۰ﺍﻟﻤﺎﻥ ﭘﺸﺖ ﺳﺮﻫﻢ ﺍﺯ ﻧﻮﻉ ) byteﺁﺭﺍﻳﻪ ۱۰
ﺍﻟﻤﺎﻧﻪ('
]Sequence1 var byte[10
] Sequence1[0ﺍﻭﻟﻴﻦ ﻋﻨﺼﺮ ﺁﺭﺍﻳﻪ ﺭﺍ ﺩﺭ ﺑﺮ ﺩﺍﺭﺩ ﻭ ] Sequence1[9ﺁﺧﺮﻳﻦ ﻋﻨﺼﺮ ﺭﺍ ﺩﺭ ﺑﺮ ﺩﺍﺭﺩ. .۱ -۱-۶
ﺍﺻﻼﺡ ﮐﻨﻨﺪﻩ ﻫﺎ new_name var old_name
ﺑﻮﺳﻴﻠﻪ ﺍﺻﻼﺡ ﮐﻨﻨﺪﻩ ﻫﺎ ﺍﻳﻦ ﺍﻣﮑﺎﻥ ﺍﻳﺠﺎﺩ ﻣﯽ ﺷﻮﺩ ﮐﻪ ﺍﺳﻢ ﺟﺪﻳﺪﯼ ﺑﺮﺍﯼ ﻣﺘﻐﻴﺮ ﺍﺯ ﻗﺒﻞ ﺗﻌﺮﻳـﻒ ﺷـﺪﻩ ﺍﻧﺘﺨﺎﺏ ﮐﻨﻴﻢ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﻨﺪﺭﺕ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ.
.۱ -۱-۷
ﺳﻤﺒﻠﻬﺎ symbol old_name = new_name
ﺳﻤﺒﻠﻬﺎ ﺷﺒﻴﻪ ﺍﺻﻼﺡ ﮐﻨﻨﺪﻩ ﻫﺎ ﺍﺳﻢ ﺟﺪﻳﺪﯼ ﺍﺯ ﻳﮏ ﻣﺘﻐﻴﺮ ﻳﺎ ﻳﮏ ﺛﺎﺑﺖ ﺭﺍ ﺑﻪ ﻳﮏ ﺍﺳﻢ ﻗـﺪﻳﻤﯽ ﻧﺴـﺒﺖ ﻣﯽ ﺩﻫﻨﺪ.
ﺩﺳﺘﻮﺭ INCLUDE
.۱ -۱-۸ ﺩﺳﺘﻮﺭ INCLUDEﺑﺮﺍﯼ ﻭﺍﺭﺩ ﮐﺮﺩﻥ ﻳﮏ ﺑﺨﺶ ﺍﺯ ﻓﺎﻳﻞ BASICﺑﮑﺎﺭ ﻣﯽ ﺭﻭﺩ .ﺩﺭ ﺍﻳﻦ ﻓﺎﻳـﻞ ﻣﻤﮑـﻦ ﺍﺳﺖ ﭼﻨﺪﻳﻦ ﺗﻌﺮﻳﻒ ﺍﺯ ﻣﺘﻐﻴﺮﻫﺎ ﻭ ﻳﺎ ﺯﻳﺮﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺑﺎﺷﺪ ﮐﻪ ﺩﺭ ﻗﺴﻤﺘﻬﺎﯼ ﻣﺨﺘﻠـﻒ ﺑﺮﻧﺎﻣـﻪ ﺑﮑﺎﺭ ﺭﻓﺘﻪ ﺑﺎﺷﺪ .ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻭ ﻣﺘﻐﻴﺮﻫﺎﯼ ﻓﺎﻳﻞ ﺍﻟﺤﺎﻗﯽ ﺷﺒﻴﻪ ﺍﻳﻦ ﺍﺳﺖ ﮐﻪ ﺍﻳﻦ ﺯﻳﺮﺑﺮﻧﺎﻣـﻪ ﻫﺎ ﻭ ﻣﺘﻐﻴﺮﻫﺎ ﺭﺍ ﺧﻮﺩﺗﺎﻥ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﺍﻳﺪ.
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۶
ﺗﻮﺿﻴﺤﺎﺕ .۱ -۱-۹ ﺗﻮﺿﻴﺤﺎﺕ ﺑﺮﺍﯼ ﺑﻬﺘﺮ ﻓﻬﻤﻴﺪﻥ ﺑﺮﻧﺎﻣﻪ ﺑﮑﺎﺭ ﺑﺮﺩﻩ ﻣﯽ ﺷﻮﺩ .ﻭ ﺑﺮﺍﯼ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺁﻥ ﺍﺯ ﻋﻼﻣﺖ " ' " ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﮐﻨﻴﻢ .۱ -۱-۱۰ﺧﻂ ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﺩﺳﺘﻮﺭﺍﺕ ﺑﻴﺸﺘﺮ ﺑﺮﺍﯼ ﻣﺘﺮﺍﮐﻢ ﮐﺮﺩﻥ ﻭ ﺩﻳﺪ ﺑﻴﺸﺘﺮ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﻣﯽ ﺗﻮﺍﻥ ﺩﺳﺘﻮﺭﺍﺕ ﺭﺍ ﺩﺳﺘﻪ ﺑﻨﺪﯼ ﮐﺮﺩ ﻭﻫﺮ ﺩﺳـﺘﻪ ﺭﺍ ﺩﺭ ﻳﮏ ﺧﻂ ﺟﺎﯼ ﺩﺍﺩ .ﻭﺑﺎ ﻋﻼﻣﺖ " " :ﺩﺳﺘﻮﺭﺍﺕ ﺩﺭ ﻳﮏ ﺧﻂ ﺍﺯ ﻳﮑﺪﻳﮕﺮ ﺟﺪﺍ ﻣﯽ ﺷﻮﻧﺪ. B2 = B0 B0 = B1 B1 = B2
ﺳﻪ ﺩﺳﺘﻮﺭ ﺑﺎﻻ ﻣﯽ ﺗﻮﺍﻧﻨﺪ ﺩﺭ ﻳﮏ ﺧﻂ ﻗﺮﺍﺭ ﺑﮕﻴﺮﻧﺪ. B2 = B0 : B0 = B1 : B1 = B2
.۱ -۱-۱۱ﺍﻧﺘﻘﺎﻝ ﻳﮏ ﺩﺳﺘﻮﺭ ﺑﻪ ﺧﻂ ﺩﻳﮕﺮ ﮔﺎﻫﯽ ﺍﺗﻔﺎﻕ ﻣﯽ ﺍﻓﺘﺪ ﮐﻪ ﻳﮏ ﺩﺳﺘﻮﺭ ﺑﻴﺸﺘﺮ ﺍﺯ ﺍﻧﺪﺍﺯﻩ ﻳﮏ ﺧﻂ ﻧﻴﺎﺯ ﺩﺍﺭﺩ ﻭ ﻳـﺎ ﺑـﺮﺍﯼ ﺭﻭﻳـﺖ ﺑﻬﺘـﺮ ﻻﺯﻡ ﺍﺳﺖ ﺩﻧﺒﺎﻟﻪ ﺩﺳﺘﻮﺭ ﺩﺭ ﺧﻂ ﺑﻌﺪﯼ ﺑﺎﺷﺪ ﺑﺮﺍﯼ ﺍﻳـﻦ ﮐـﺎﺭ ﺍﺯ ﻋﻼﻣـﺖ " _ " ﺍﺳـﺘﻔﺎﺩﻩ ﻣـﯽ ﮐﻨـﻴﻢ .ﺑـﺮﺍﯼ ﺩﺳﺘﻮﺭﺍﺕ brunch ، lookupﻭ soundﺑﻴﺸﺘﺮ ﻣﻤﮑﻦ ﺍﺳﺖ ﺍﻳﻦ ﺣﺎﻟﺖ ﭘﻴﺶ ﺑﻴﺎﻳﺪ. _lookup KeyPress,["1","4","7","*","2","5","8","0","3", "6","9","#","N"],var1
.۱ -۱-۱۲
ﺗﻌﺮﻳﻒ ) ( DEFINE DEFINE the value parameter
ﺩﺳﺘﻮﺭﺍﺕ ﺯﺑﺎﻥ PIC BASICﺩﺍﺭﺍﯼ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ ﻫﺴﺘﻨﺪ ﮐﻪ ﺍﺯ ﭘﻴﺶ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺳﺖ ﻭ ﻣﯽ ﺗﻮﺍﻥ ﺑـﺎ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ ﺍﺯ ﭘﻴﺶ ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺁﻧﻬﺎ ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﺍﺩ .ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﻓﺮﮐﺎﻧﺲ ﺍﺳﻴﻼﺗﻮﺭ ﺍﺯ ﭘﻴﺶ
۷
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺗﻌﺮﻳﻒ ﺷﺪﻩ ۴ﻣﮕﺎ ﻫﺮﺗﺰ ﻣﯽ ﺑﺎﺷﺪ ﺩﺭ ﻧﺘﻴﺠﻪ ﺑﺴﻴﺎﺭﯼ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﮐﻪ ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﮐﻼﮎ ﺍﺳـﻴﻼﺗﻮﺭ ﻣـﯽ ﺑﺎﺷﻨﺪ ﺧﻮﺩ ﺭﺍ ﺑﺎ ﻓﺮﮐﺎﻧﺲ ۴ﻣﮕﺎ ﻫﺮﺗﺰ ﺗﻨﻈﻴﻢ ﻣﯽ ﮐﻨﻨﺪ ﻭ ﺍﮔﺮ ﺍﺳﻴﻼﺗﻮﺭ ۱۲ﻣﮕﺎ ﻫﺮﺗﺰ ﻗﺮﺍﺭ ﺩﺍﺩﻩ ﺷﻮﺩ ﮐﺎﺭ ﺍﻳﻦ ﺩﺳﺘﻮﺭﺍﺕ ﺍﺯ ﺣﺎﻟﺖ ﺗﻨﻈﻴﻢ ﺷﺪﻩ ﺩﺭ ﻣﯽ ﺁﻳﺪ .ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺮﺍﺣﺘـﯽ ﻓﺮﮐـﺎﻧﺲ ﺍﺳـﻴﻼﺗﻮﺭ ﺭﺍ ﺗﻌﻴﻴﻦ ﻣﯽ ﮐﻨﻴﻢ .ﺑﻪ ﺟﺪﻭﻝ ۲-۲ﻣﺮﺍﺟﻌﻪ ﮐﻨﻴﺪ. .۱ -۱-۱۳ ﻗﺒﻞ ﺍﺯ ﻭﺍﺭﺩ ﮐﺮﺩﻥ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻭﻗﻔﻪ ،ﻻﺯﻡ ﺍﺳﺖ ﮐﻪ ﻭﻗﻔﻪ ﻫﺎ ﻏﻴﺮ ﻓﻌﺎﻝ ﺷﻮﻧﺪ ﺗﺎ ﺍﺯ ﻭﻗﻔﻪ ﺟﺪﻳﺪ ﺟﻠﻮﮔﻴﺮﯼ ﺷﻮﺩ .ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺩﺳﺘﻮﺭ DISABLEﺑﻴﺖ GIEﺭﺍ ﺍﺯ ﺭﺟﻴﺴﺘﺮ INTCONﺑﺎﺯﻧﺸﺎﻧﺪﻩ ﻣﯽ ﮐﻨﺪ. Desable ﻏﻴﺮ ﻓﻌﺎﻝ ﮐﺮﺩﻥ ﺍﻳﻨﺘﺮﺍﭘﺘﻬﺎ ' DISABLE
Myint: led = 1 …. Resume Enable
.۱ -۱-۱۴ ﺑﻌﺪ ﺍﺯ ﺍﺗﻤﺎﻡ ﺍﺟﺮﺍﯼ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻭﻗﻔﻪ ،ﻭﻗﻔﻪ ﺑﺎﻳﺴﺘﯽ ﺩﻭﺑﺎﺭﻩ ﻓﻌﺎﻝ ﺷﻮﺩ ﮐﻪ ﺑﺎ ﺩﺳﺘﻮﺭ ENABLEﺻـﻮﺭﺕ ﻣﯽ ﮔﻴﺮﺩ .ﺩﺭ ﻭﺍﻗﻊ ﺑﻴﺖ GIEﻧﺸﺎﻧﺪﻩ ﻣﯽ ﺷﻮﺩ. ENABLE
.۱ -۱-۱۵
ON INTERRUPT On interrupt LABEL
ﺑﺎ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺮ ﭼﺴﺐ ﻣﮑﺎﻧﯽ ﺭﺍ ﮐﻪ ﻫﻨﮕﺎﻡ ﺭﻭﯼ ﺩﺍﺩﻥ ﻭﻗﻔﻪ ﺑﻪ ﺁﻧﺠﺎ ﭘﺮﺵ ﺻﻮﺭﺕ ﻣﯽ ﮔﻴﺮﺩ ﺭﺍ ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ .ﺑﺮﭼﺴﺐ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻭﻗﻔﻪ ﻗﺮﺍﺭ ﺩﺍﺭﺩ.
DEFINE ﮊﻭﭘﻴﻦﺍﺯ ﺩﺳﺘﻮﺭ ﺍﺳﺘﻔﺎﺩﻩ ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ
۸ ﭘﺎﺭﺍﻣﺘﺮﻫﺎ I2C_HOLD
ﺗﻮﺿﻴﺤﺎﺕ
1
I2C_INTERNAL
I2C_SCLOUT
1
1
ﺍﻳﻦ ﺣﺎﻟﺖ ﺭﻭﯼ ﮐﺪﺍﻡ ﺩﺳﺘﻮﺭ ﺻﻮﺭﺕ ﻣﯽ ﻳﺮﺩ
pause 12C transfer while the tact is on a low level
I2COUT, I2COUT
internal EEPROM in series 16Cexxx and 12Cxxx of the PIC microcontroller
I2COUT, I2COUT
serial tact is a bipolar at the place of an open collector
I2CWRITE, I2CREAD
I2C_SLOW
1
for the tact > BMHz OSC with the devices of a standard velocity
I2CWRITE, I2CREAD
LCD_DREG
PORTD
LCD data port
LCDOUT, LCDIN
Initial bit of a data 0 or 4
LCDOUT, LCDIN
RS (Register select) port
LCDOUT, LCDIN
RS (Register select) pin
LCDOUT, LCDIN
enable port
LCDOUT, LCDIN
enable bit
LCDOUT, LCDIN
read/write port
LCDOUT, LCDIN
read/write bit
LCDOUT, LCDIN
No of LCD lines
LCDOUT, LCDIN
LCD_DBIT
0
LCD_RSREG
PORTD
LCD_RSBIT
4
LCD_EREG LCD_EBIT
PORTD 3
LCD_RWREG
PORTD
LCD_RWBIT LCD_LINES
2 2
LCD_INSTRUCTIONUS
LCD_DATAUS
OSC
the time of delay of 2000 instruction in microseconds (us)
the time of delay of data in LCDOUT, LCDIN microseconds
50
tact of the oscillator in all instructions of the serial MHz: 3(3.58) 4 8 10 12 16 transfer and next pause 20 25 32 33 40
4
OSCCAL_1K
1
setting of OSCCAL for PIC12C671/CE673 microcontrollers
OSCCAL_2K
1
the number of data bits
SER2_BITS
LCDOUT, LCDIN
8
SHIFT_PAUSEUS BUTTON_PAUSE CHAR_PACING
50
the slowing of the tact of transfer
SHIFTOUT, SHIFTIN
instruction LFSR in 18Cxxx microcontrollers
LFSR
10
BUTTON
1000
SEROUT, SERIN
HSER_BAUD
2400
HSEROUT, HSERIN
HSER_SPBRG
25
HSEROUT, HSERIN 1-2
ﺟﺪﻭﻝ
۹
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
RESUME .۱ -۱-۱۶ ﺑﺎﺯﮔﺸﺖ ﺍﺯ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻭﻗﻔﻪ ﺭﺍ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺻﻠﯽ ﺑﺮ ﻋﻬﺪﻩ ﺩﺍﺭﺩ
.۱-۲ﻋﻤﻠﮕﺮﻫﺎ .۱ -۲-۱ﻋﻤﻠﮕﺮﻫﺎﯼ ﺭﻳﺎﺿﯽ ﻋﻤﻠﮕﺮﻫﺎﯼ ﺭﻳﺎﺿﯽ ﺑﺎ ﺩﻗﺖ ۱۶ﺑﻴﺘﯽ ﺑﺎ ﻣﻘﺎﺩﻳﺮ ﺑﺪﻭﻥ ﻋﻼﻣﺖ ) ۰ﺗﺎ ( ۶۵۵۳۵ﮐﺎﺭ ﻣﯽ ﮐﻨﻨﺪ. )A = (B + C) * (D - E
ﺟﺪﻭﻝ ﺯﻳﺮ ﻋﻤﻠﮕﺮﻫﺎﯼ ﺭﻳﺎﺿﯽ ﮐﻪ PIC BASICﭘﺸﺘﻴﺒﺎﻧﯽ ﻣﯽ ﮐﻨﺪ ﺭﺍ ﻧﺸﺎﻥ ﻣﯽ ﺩﻫﺪ. ﺷﺮح ﻋﻤﻠﮕﺮﻫﺎ ﺷﺮﺡ
ﻋﻤﻠﮕﺮ
ﺷﺮﺡ
ﻋﻤﻠﮕﺮ
ﻗﺪﺭ ﻣﻄﻠﻖ ﻳﮏ ﻋﺪﺩ
ABS
ﺟﻤﻊ
+
ﮐﺴﯿﻨﻮس ﯾﮏ زاوﯾﻪ
COS
ﺗﻔﺮﻳﻖ
-
ﺩﻳﮑﺪ ﮐﺮﺩﻥ ﺑﻴﺘﯽ
DCD
ﺿﺮﺏ
*
ﻣﻘﺪﺍﺭ ﻳﮏ ﺭﻗﻢ ﺍﺯ ﻳﮏ ﻋﺪﺩ ﺩﺳﻴﻤﺎﻝ
DIG
ﻧﺘﺎﻳﺞ ﺩﺭ ۱۶ﺑﻴﺖ ﺑﺎﻻ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ
**
ﻣﺎﮐﺰﻳﻤﻢ ﺩﻭ ﻋﺪﺩ
MAX
ﻧﺘﺎﻳﺞ ﺩﺭ ۱۶ﺑﻴﺖ ﺑﺎﻻ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ
*/
ﻣﻴﻨﻴﻤﻢ ﺩﻭﻋﺪﺩ
MIN
ﺗﻘﺴﻴﻢ
/
ﮐﺪﻳﻨﮓ ﺑﺮ ﺍﺳﺎﺱ ﺣﻖ ﺗﻘﺪﻡ
NCD
ﺑﺎﻗﻴﻤﺎﻧﺪﻩ
//
ﺑﺮﮔﺮﺩﺍﻧﺪﻥ ﺑﻴﺖ
REV
ﺷﻴﻔﺖ ﺑﻪ ﭼﭗ
<<
ﺳﻴﻨﻮﺱ ﻳﮏ ﺯﺍﻭﻳﻪ
SIN
ﺷﻴﻔﺖ ﺑﻪ ﺭﺍﺳﺖ
>>
ﺭﻳﺸﻪ ﺩﻭﻡ ﻳﮏ ﻋﺪﺩ
SQR
ﺍﻧﺘﻘﺎﻝ ﻣﻘﺪﺍﺭ
=
ﺟﺪﻭﻝ (۱-۳
ﻧﮑﺎﺕ ﻭ ﻣﺜﺎﻟﻬﺎ: ﺿﺮﺏ PIC BASIC :ﺍﺯ ﺿﺮﺏ ﺍﻋﺪﺍﺩ ﺑﻄﻮﺭ ﮐﺎﻣﻞ ﭘﺸﺘﻴﺒﺎﻧﯽ ﻧﻤﯽ ﮐﻨﺪ ﺑﻠﮑﻪ ﻣﻘﺪﺍﺭ ﺣﺎﺻﻞ ﺭﺍ ﺩﺭ ﺩﻭ × ۱۶ﺑﻴﺘﯽ ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﺪ
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۱۰
× ﺗﻘﺴﻴﻢ :ﺩﺭ PIC BASICﺗﻘﺴﻴﻢ ﺑﺼﻮﺭﺕ ۱۶ﺑﻴﺘﯽ ﺍﻧﺠﺎﻡ ﻣﯽ ﮔﻴﺮﺩ ﻭ ﻫﻤﭽﻨﻴﻦ ﻣـﯽ ﺗـﻮﺍﻥ ﺑﺎﻗﻴﻤﺎﻧـﺪﻩ ﺗﻘﺴﻴﻢ ﺭﺍ ﺟﺪﺍﮔﺎﻧﻪ ﺑﺪﺳﺖ ﺁﻭﺭﺩ .ﺩﺭ ﻣﺜﺎﻝ ﺯﻳﺮ ﺍﻳﻦ ﺩﻭ ﺣﺎﻟﺖ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ.
ﺷﻴﻔﺖ ﺩﺍﺩﻥ :ﻋﻤﻠﮕﺮ ﺷﻴﻔﺖ ﻣﯽ ﺗﻮﺍﻧﺪ ﺗﻌﺪﺍﺩ ۰ﺗﺎ ۱۵ﺷﻴﻔﺖ ﺑﻪ ﭼـﭗ ﻭ ﻳـﺎ ﺭﺍﺳـﺖ ﺭﺍ ﭘﺸـﺘﻴﺒﺎﻧﯽ × ﮐﻨﺪ.
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
×
۱۱
ﻗﺪﺭ ﻣﻄﻠﻖ :ﺍﮔﺮ ﻳﮏ BYTEﺑﻴﺸﺘﺮ ﺍﺯ ) 127ﺑﻴﺖ MSBﺁﻥ ﻳﮏ ( ﺑﺎﺷـﺪ ABSﻣﻘـﺪﺍﺭ – 256
valueﺭﺍ ﺑﺮ ﻣﯽ ﮔﺮﺩﺍﻧﺪ .ﺍﮔﺮ ﻳﮏ WORDﺑﺰﺭﮔﺘﺮ ﺍﺯ ) 32767ﺑﻴﺖ MSBﺁﻥ ﻳﮏ ﺍﺳـﺖ ( ﺑﺎﺷـﺪ ، ABSﻣﻘﺪﺍﺭ 65535 – valueﺭﺍ ﺑﺮ ﻣﯽ ﮔﺮﺩﺍﻧﺪ. B1 = ABS B0
COSﻭ : SINﺯﺍﻭﻳﻪ ۰ﺗﺎ ۳۵۹ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﻳﻦ ﻋﻤﻠﮕﺮ ﺑﺼﻮﺭﺕ ﻳﮏ ﻋـﺪﺩ ۰ﺗـﺎ ۲۵۵ﺗـﺎﻣﻴﻦ ﻣـﯽ × ﺷﻮﺩ ﻭﺑﺮﺍﯼ ﺍﻳﻦ ﺗﺒﺪﻳﻞ ﻣﯽ ﺗﻮﺍﻥ ﺍﺯ ﻳﮏ lookup tableﺍﺳﺘﻔﺎﺩﻩ ﮐﻨﻴﻢ.
: DCDﺍﻳﻦ ﻋﻤﻠﮕﺮ ﻣﻘﺪﺍﺭ ۰ﺗﺎ ۱۵ﺭﺍ ﺗﺒﺪﻳﻞ ﺑﻪ ﺷﻤﺎﺭﻩ ﺑﻴﺖ ﻣﯽ ﮐﻨﻨﺪ .ﺍﮔـﺮ ﻣﻘـﺪﺍﺭ ﺻـﻔﺮ ﺭﺍ ﻗـﺮﺍﺭ × ﺩﻫﻴﻢ ﺑﻴﺖ ﺻﻔﺮﻡ ﻳﮏ ﻣﯽ ﺷﻮﺩ ﻭ ﺑﻘﻴﻪ ﺻﻔﺮ ﻣﯽ ﺷﻮﻧﺪ.
: DIGﺗﻌﺪﺍﺩ ﺭﻗﻤﻬﺎﯼ ﮐﻪ ﻧﺸﺎﻥ ﻣﯽ ﺩﻫﻨﺪ ﺑﻴﻦ ۰ﺗﺎ ۳ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﻋﺪﺩ ۰ﺁﺧﺮﻳﻦ ﺭﻗﻢ ﺍﺯ ﺳـﻤﺖ × ﺭﺍﺳﺖ ﻣﯽ ﺑﺎﺷﺪ.
۱۲
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
×
ﺗﻌﻴﻴﻦ ﻣﻘﺪﺍﺭ ﻣﺎﮐﺰﻳﻤﻢ ﻭ ﻣﻴﻨﻴﻤﻢ :ﺑﺮﺍﯼ ﻣﺤﺪﻭﺩ ﮐﺮﺩﻥ ﻣﻘﺎﺩﻳﺮ ﺑﻪ ﻳﮏ ﻋﺪﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ B1 = B0 MAX 100
ﻣﺤﺘﻮﺍﯼ B1ﻣﻘﺪﺍﺭ ﺑﺰﺭﮔﺘﺮ ﺑﻴﻦ B0ﻭ ۱۰۰ﻣﯽ ﺑﺎﺷﺪ ) B1ﻣﻘﺪﺍﺭﯼ ﺑﻴﻦ ۱۰۰ﻭ ۲۵۵ﻣﯽ ﺑﺎﺷﺪ( B1 = B0 MIN 100
ﻣﺤﺘﻮﺍﯼ B1ﻣﻘﺪﺍﺭ ﮐﻮﭼﮑﺘﺮ ﺑﻴﻦ B0ﻭ ۱۰۰ﻣﯽ ﺑﺎﺷﺪ ) B1ﻣﻘﺪﺍﺭﯼ ﺑﻴﻦ ۱۰۰ﻭ ۰ﻣﯽ ﺑﺎﺷﺪ( ×
: NCDﺷﻤﺎﺭﻩ ﺍﻭﻟﻴﻦ ﺑﻴﺘﯽ ﮐﻪ ﺍﺯ ﺳﻤﺖ ﭼﭗ ﻳﮏ ﺍﺳﺖ ﺭﺍ ﻣﯽ ﺩﻫﺪ
: REVﺗﻌﺪﺍﺩ ﺑﻴﺘﻬﺎﯼ ﮐﻪ ﻣﯽ ﺗﻮﺍﻧﻨﺪ ﻳﮏ ﺷﻮﻧﺪ ۱ﺗﺎ ۱۶ﻣﯽ ﺑﺎﺷﺪ ﻭ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻋـﺪﺩ ﻣـﻮﺭﺩ ﻧﻈـﺮ × ﺑﻴﺘﻬﺎﯼ ﭘﺎﻳﻴﻨﺘﺮ ﻣﻌﮑﻮﺱ ﻣﯽ ﺷﻮﻧﺪ.
×
: SQRﺭﻳﺸﻪ ﺩﻭﻡ ﻋﺪﺩ ﻣﻮﺭﺩ ﻧﻈﺮ ﺩﺭ ﻳﮏ ﺑﺎﻳﺖ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ.
۱۳
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
.۱ -۲-۲
ﻋﻤﻠﮕﺮﻫﺎﯼ ﺑﻴﺘﯽ
ﻋﻤﻠﮕﺮ ﻫﺎﯼ ﺑﻴﺘﯽ ﻋﻤﻠﮕﺮﻫﺎ
ﺗﻮﺿﻴﺢ ANDﻣﻨﻄﻘﯽ ﺭﻭﯼ ﺑﻴﺘﻬﺎ
&
ORﻣﻨﻄﻘﯽ ﺭﻭﯼ ﺑﻴﺘﻬﺎ
|
XORﻣﻨﻄﻘﯽ ﺭﻭﯼ ﺑﻴﺘﻬﺎ
^
NOTﻣﻨﻄﻘﯽ ﺭﻭﯼ ﺑﻴﺘﻬﺎ
~
NANDﻣﻨﻄﻘﯽ ﺭﻭﯼ ﺑﻴﺘﻬﺎ
&/
NORﻣﻨﻄﻘﯽ ﺭﻭﯼ ﺑﻴﺘﻬﺎ
|/
NXORﻣﻨﻄﻘﯽ ﺭﻭﯼ ﺑﻴﺘﻬﺎ
^/
ﺟﺪﻭﻝ ۱-۴
.۱ -۲-۳
ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻘﺎﻳﺴﻪ ﺍﯼ
ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻘﺎﻳﺴﻪ ﺍﯼ ﺗﻮﺿﻴﺢ ﺗﺴﺎﻭﯼ
ﻋﻤﻠﮕﺮ == = or
ﻧﺎﻣﺴﺎﻭﯼ
|=! <> or
ﮐﻮﭼﮑﺘﺮ ﺍﺯ
<
ﺑﺰﺭﮔﺘﺮ ﺍﺯ
>
ﮐﻮﭼﮑﺘﺮ ﺍﺯ
=<
ﺑﺰﺭﮔﺘﺮﺍﺯ
=>
ﺟﺪﻭﻝ ۱-۵
۱۴
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
.۱ -۲-۴
ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻨﻄﻘﯽ ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻨﻄﻘﯽ ﺷﺮﺡ
ﻋﻤﻠﮕﺮ
ANDﻣﻨﻄﻘﯽ
&& AND or
ORﻣﻨﻄﻘﯽ
|| OR or
XORﻣﻨﻄﻘﯽ
^^ XOR or
NOTﻣﻨﻄﻘﯽ
NOT
NANDﻣﻨﻄﻘﯽ
NOT AND
NORﻣﻨﻄﻘﯽ
NOT OR
NXORﻣﻨﻄﻘﯽ
NOT XOR
ﺟﺪﻭﻝ ۱-۶
۱۵
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺩﺳﺘﻮﺭﺍﺕ PICBasic
(۱ (۲ (۳ (۴
.۱ -۳ ﺩﺳﺘﻮﺭﺍﺕ ﺑﻪ ﭼﻬﺎﺭ ﺑﺨﺶ ﺗﻘﺴﻴﻢ ﻣﯽ ﺷﻮﻧﺪ ﺩﺳﺘﻮﺭﻫﺎﯼ ﺷﺎﺧﻪ ﺍﯼ ) ﻣﺎﻧﻨﺪ ( IF ﺩﺳﺘﻮﺭﻫﺎﯼ ﺗﮑﺮﺍﺭﮐﻨﻨﺪﻩ ) FOR … NEXTﻭ ( WHILE … WEND ﺩﺳﺘﻮﺭﻫﺎﯼ ﭘﺮﺵ ﺑﻪ ﺧﻂ ) ( GOTOﻳﺎ ﻳﮏ ﺯﻳﺮﺑﺮﻧﺎﻣـﻪ ) ، CALL ، BRANCHL ، BRANCH ( RETURN ، GOSUB ﺩﺳﺘﻮﺭﻫﺎﯼ ﺩﺳﺘﻴﺎﺑﯽ ﺑﻪ ﻭﺳﺎﻳﻞ ﺟﺎﻧﺒﯽ ) ﻣﺜﻼ ﺍﺭﺗﺒﺎﻁ ﺑﺎ (LCDﺑﺎ ﺍﻳﻦ ﺩﺳﺘﻮﺭﺍﺕ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻓﮑﺮ ﺧﻮﺩ ﺭﺍ ﺑﺮ ﺭﻭﯼ ﻣﺎﻫﻴﺖ ﺍﺻﻠﯽ ﺑﺮﻧﺎﻣﻪ ﺧﻮﺩ ﻣﺘﻤﺮﮐﺰ ﻣﯽ ﮐﻨﺪ ﻭ ﺍﺯ ﺍﺗﻼﻑ ﻭﻗﺖ ﺧﻮﺩ ﺑﺮ ﺭﻭﯼ ﻣـﻮﺍﺭﺩﯼ ﻫﻤﭽـﻮﻥ ﺍﺭﺗﺒﺎﻁ ﺑﺎ LCDﺟﻠﻮﮔﻴﺮﯼ ﻣﯽ ﮐﻨﺪ . ﺩﺳﺘﻮﺭﺍﺕ ﺑﻪ ﺗﺮﺗﻴﺐ ﺣﺮﻭﻑ ﺍﻟﻔﺒﺎ ﻻﺗﻴﻦ : : @.۱ -۳-۱ﻭﺍﺭﺩ ﮐﺮﺩﻥ ﻳﮏ ﺧﻂ ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﮐﺪ ﺍﺳﻤﺒﻠﯽ ﺗﺮﮐﻴﺐ: @ assembler's instruction
ﺷﺮﺡ: ﺍﮔﺮ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺧﻂ ﺍﺯ ﻋﻼﻣﺖ @ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﮐﺪ ﺍﺳﻤﺒﻠﯽ ﺭﺍ ﺩﺭ ﺗﺮﮐﻴﺐ ﺑﺮ ﻧﺎﻣﻪ PicBasicﻣﯽ ﺗﻮﺍﻥ ﻧﻮﺷﺖ .ﺩﺳﺘﻮﺭ @ ﺑﺮﺍﯼ ﺍﻟﺤﺎﻕ ﮐﺘﺎﺑﺨﺎﻧﻪ ﻫﺎﯼ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺑﻪ ﺯﺑﺎﻥ ﺍﺳﻤﺒﻠﯽ ﻧﻴﺰ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ .ﺗﻮﺟﻪ ﮐﻨﻴﺪ ﺩﺭ ﺻﻮﺭﺕ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻣﺘﻐﻴﺮﻫﺎﯼ ﺩﺭﻭﻥ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﺍﻳﻦ ﻗﺴﻤﺖ ﻗﺒﻞ ﺍﺯ ﻧـﺎﻡ ﻣﺘﻐﻴـﺮ ﺍﺯ ﺧـﻂ ﺯﻳـﺮ ) ﺩﺷﺖ ( ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ. ﺩﺭ ﻣﺜﺎﻝ ﺯﻳﺮ ﻣﺘﻐﻴﺮ B0ﺩﺭ ﺩﺳﺘﻮﺭ @ ﺑﺼﻮﺭﺕ _B0ﺑﮑﺎﺭ ﺑﺮﺩﻩ ﻣﯽ ﺷﻮﺩ. ﻣﺜﺎﻝ : byte ﻧﺸﺎﻧﻪ ﮔﺬﺍﺭﯼ ﺑﻴﺖ ﻫﻔﺘﻢ ﺍﺯ ﻣﺘﻐﻴﺮ ' B0
bsf
_B0,7
Loop
.۱ -۳-۲ ﺗﺮﮐﻴﺐ :
B0 var Main: @ Loop: goto End
ASM … ENDASMﻭﺍﺭﺩ ﮐﺮﺩﻥ ﻳﮏ ﺑﻠﻮﮎ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﺍﺳﻤﺒﻠﯽ ASM /
ﺩﺳﺘﻮﺭﺍﺕ ﺍﺳﻤﺒﻠﯽ / ENDASM
۱۶
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﺮﺡ : ﺩﺳﺘﻮﺭﺍﺕ ﺑﻴﻦ ASMﻭ ENDASMﺍﺯ ﻧﻮﻉ ﺍﺳﻤﺒﻠﯽ ﻣﯽ ﺑﺎﺷﺪ .ﺣﺪﺍﮐﺜﺮ ﮐﺪ ﺍﺳﻤﺒﻠﯽ ﻧﻮﺷﺘﻪ ﺷـﺪﻩ ﺑـﻪ ﻣﻘﺪﺍﺭ ﺣﺎﻓﻈﻪ ﻗﺎﺑﻞ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﺁﻥ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻭﺍﺑﺴﺘﻪ ﺍﺳﺖ .ﻣﺜﻼ ﺩﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟـﺮ PIC16F877 ﮐﺪ ﺍﺳﻤﺒﻠﺮ ﺣﺪﺍﮐﺜﺮ 8Kﻣﯽ ﺑﺎﺷﺪ. ﻣﺜﺎﻝ : Main: asm ﻧﺸﺎﻧﺪﻥ ' RA0
ﺑﺎﺯ ﻧﺸﺎﻧﺪﻥ ' RB0
PORTA,0
bsf
PORTB,3
bcf endasm Loop: goto Loop end
.۱ -۳-۳ ﺗﺮﮐﻴﺐ :
ADCINﺩﺭﻳﺎﻓﺖ ﻣﻘﺎﺩﻳﺮ ﺍﺯ ﻭﺭﻭﺩﯼ ﻣﺒﺪﻝ A/D ADCIN channel, variable
ﺷﺮﺡ :
ADCINﺗﺒﺪﻳﻞ ﺁﻧﺎﻟﻮﮒ ﺑﻪ ﺩﻳﺠﻴﺘﺎﻝ ) ( A/Dﺭﺍ ﺍﺯ ﻳﮏ ﺳﻴﮕﻨﺎﻝ ﺁﻧـﺎﻟﻮﮒ ﻭﺭﻭﺩﯼ ﺩﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮﻫـﺎﯼ ﮐﻪ ﻣﺒﺪﻝ A/Dﺩﺍﺭﻧﺪ ،ﺍﻧﺠﺎﻡ ﺩﻫﺪ )ﻣﺎﻧﻨﺪ ( PIC16F877ﻣﻘﺪﺍﺭ ﺧﻮﺍﻧﺪﻩ ﺷـﺪﻩ ﺩﺭ ﺩﺍﺧـﻞ ﻣﺘﻐﻴـﺮ ﺑﮑـﺎﺭ ﺭﻓﺘـﻪ ﺫﺧﻴــﺮﻩ ﻣــﯽ ﺷـﻮﺩ .ﻗﺒــﻞ ﺍﺯ ﺍﺳــﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺳـﺘﻮﺭ ADCINﺭﺟﻴﺴــﺘﺮ TRISﻣﺮﺑﻮﻃــﻪ ﺑﺎﻳﺴــﺘﯽ ﻣﻘﺪﺍﺭﺩﻫﯽ ﺍﻭﻟﻴﻪ ﺷﻮﺩ ﺗﺎ ﭘﺎﻳﻪ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﺑﻄﻮﺭ ﻣﺸـﺨﺺ ﺑﺼـﻮﺭﺕ ﻭﺭﻭﺩﯼ ﺩﺭ ﺁﻳـﺪ .ﺑﻌـﻼﻭﻩ ﺍﻳﻨﮑـﻪ ﺍﺯ ﺭﺟﻴﺴﺘﺮ ADCON1ﺑﺮﺍﯼ ﻣﺸﺨﺺ ﮐﺮﺩﻥ ﺍﻳﻨﮑﻪ ﭘﻴﻨﻬﺎﯼ ﻭﺭﻭﺩﯼ ﺑﻪ ﺣﺎﻟﺖ ﺁﻧﺎﻟﻮﮒ ﺑﺎﺷﺪ ﻳـﺎ ﺩﻳﺠﻴﺘـﺎﻝ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ .ﺑﺮﺍﯼ ﺗﻨﻈﻴﻢ A/Dﻋـﻼﻭﻩ ﺑـﺮ ﺍﺳـﺘﻔﺎﺩﻩ ﺍﺯ DEFINEﻣـﯽ ﺗـﻮﺍﻥ ﺑﺼـﻮﺭﺕ ﻣﺴـﺘﻘﻴﻢ ﺭﺟﻴﺴﺘﺮﻫﺎﯼ ﻣﺮﺑﻮﻁ ﺑﻪ A/Dﺭﺍ ﻣﻘﺪﺍﺭ ﺩﻫﯽ ﮐﺮﺩ. ﻣﺜﺎﻝ : DEFINE ADC_BITS 8 ﻧﺘﺎﻳﺞ ﺗﺒﺪﻳﻞ ﺷﺪﻩ ۸،۱۰ﻳﺎ ۱۲ﺑﻴﺘﯽ ﻣﯽ ﺑﺎﺷﺪ ' DEFINE ADC_CLOCK 3 ﮐﻼﮎ ﻣﺒﺪﻝ ﺁﻧﺎﻟﻮﮒ ﺑﻪ ﺩﻳﺠﻴﺘﺎﻝ ' DEFINE ADC_SAMPLEUS 10 ﺯﻣﺎﻧﺒﻨﺪﯼ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﯼ ﻣﻮﺭﺩ ﻧﻈﺮ ' ﻫﻤﻪ ﭘﻴﻨﻬﺎﯼ ﭘﻮﺭﺕ Aﻭﺭﻭﺩﯼ ﻣﯽ ﺑﺎﺷﻨﺪ '
ﭘﻮﺭﺕ Aﺩﺭ ﺣﺎﻟﺖ ﻭﺭﻭﺩﯼ ﺁﻧﺎﻟﻮﮒ ﺍﺳﺖ '
ﺧﻮﺍﻧﺪﻥ ﮐﺎﻧﺎﻝ ۰ﻭ ﺫﺧﻴﺮﻩ ﻧﺘﺎﻳﺞ ﺩﺍﺧﻞ ﻣﺘﻐﻴﺮ' B0
B0 var byte Main : TRISA = $FF ADCON1 = 0 adcin 0, B0 Loop : goto Loop end
۱۷
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
.۱ -۳-۴ ﺗﺮﮐﻴﺐ :
BRANCHﭘﺮﻳﺪﻥ ﺑﻪ ﺑﺮﭼﺴﺐ ﻣﺸﺨﺺ ﺷﺪﻩ ﺗﻮﺳﻂ ﺷﺎﺧﺺ ]}BRANCH index, [label1 {label...
ﺷﺮﺡ : ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﻘﺪﺍﺭ ﺷﺎﺧﺺ ﭘﺮﺵ ﺑﻪ ﺑﺮﭼﺴﺐ ﻫﻢ ﻧﻈﻴﺮ ﺁﻥ ﺍﻧﺠﺎﻡ ﻣﯽ ﮔﻴﺮﺩ .ﻣﺜﻼ ﺍﮔﺮ ﺷﺎﺧﺺ ﺻﻔﺮ ﺑﺎﺷﺪ ﭘﺮﺵ ﺑﻪ ﺍﻭﻟﻴﻦ ﺑﺮﭼﺴﺐ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻪ ﺩﺭ ﺑﺮﺍﮐﺖ ﺻﻮﺭﺕ ﻣﯽ ﮔﻴﺮﺩ ﻭ ﺍﮔﺮ ۱ﺑﺎﺷﺪ ﭘﺮﺵ ﺑﻪ ﺩﻭﻣﻴﻦ ﺑﺮﭼﺴﺐ ﺻﻮﺭﺕ ﻣﯽ ﮔﻴﺮﺩ ﻭ ﺍﮔﺮ ﺷﺎﺧﺺ ﺑﺮﺍﺑﺮ ﺗﻌﺪﺍﺩ ﺑﺮﭼﺴﺒﻬﺎ ﻳﺎ ﺑﻴﺸﺘﺮ ﺍﺯ ﺁﻥ ﺑﺎﺷﺪ ﻫـﻴﭻ ﭘﺮﺷـﯽ ﺻـﻮﺭﺕ ﻧﻤـﯽ ﮔﻴﺮﺩ ﻭﺩﺳﺘﻮﺭ ﺑﻌﺪﯼ ﺍﺟﺮﺍ ﻣﯽ ﺷﻮﺩ. ﺩﺭ ﺿﻤﻦ ﺷﺎﺧﺺ ﻳﮏ ﻣﺘﻐﻴﺮ ﻳﮏ ﺑﺎﻳﺘﯽ ﺍﺳﺖ ﻭ ﺣﺪﺍﮐﺜﺮ ﺑﺮﺍﯼ ۲۵۵ﺑﺮﭼﺴﺐ ﺍﻳـﻦ ﺩﺳـﺘﻮﺭ ﻗﺎﺑـﻞ ﺍﺟـﺮﺍ ﺍﺳﺖ).ﺑﺮﺍﯼ ۲۵۶ 18CXXXﺑﺮﭼﺴﺐ ( ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ IF … THENﻧﻴﺰ ﺷﺒﻴﻪ ﺩﺳﺘﻮﺭ BRANCHﻋﻤﻞ ﮐﺮﺩ. lab1 lab2 lab3
B0 = 0 then B0 = 1 then B0 = 2 then
If If If
ﻣﺜﺎﻝ: byte ] B0,[ lab1 , lab2 , lab3 Loop
.۱ -۳-۵ ﺗﺮﮐﻴﺐ :
B0 var Branch Loop: goto Lab1: Lab2: Lab3: end
BRANCHLﭘﺮﺷﯽ ﺑﻠﻨﺪ ﺑﻪ ﺑﺮﭼﺴﺐ ﻧﻈﻴﺮ ﺷﺎﺧﺺ ]}BRANCHL index, [ label1 {label...
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﮐﺎﻣﻼ ﺷﺒﻴﻪ ﺩﺳﺘﻮﺭ BRANCHﻣﯽ ﺑﺎﺷﺪ ﺗﻨﻬﺎ ﺗﻔـﺎﻭﺕ ﺁﻥ ﺍﻳـﻦ ﺍﺳـﺖ ﮐـﻪ BRANCHL ﭘﺮﺵ ﺑﻪ ﻣﻮﻗﻌﻴﺘﻬﺎﯼ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻪ ﺩﺭ ﮐﺪ ﺳﮕﻤﻨﺘﻬﺎﯼ ﺩﻳﮕﺮ ﺭﺍ ﻧﻴﺰ ﻣﺤﻘﻖ ﺑﺴﺎﺯﺩ . ﮐﺪ ﺑﺪﺳﺖ ﺁﻣﺪﻩ ﺍﺯ BRANCHLﺗﻘﺮﻳﺒﺎ ﺩﻭ ﺑﺮﺍﺑﺮ ﺑﺰﺭﮔﺘﺮ ﺍﺯ ﮐﺪ BRANCHﻣﯽ ﺑﺎﺷﺪ .ﺍﮔﺮ ﭘﺮﺷﻬﺎ ﺗﻨﻬﺎ ﻗﺮﺍﺭ ﺍﺳﺖ ﺩﺭ ﻳﮏ ﮐﺪ ﺳﮕﻤﻨﺖ ﺭﻭﯼ ﺑﺪﻫﺪ ﻭ ﻳﺎ ﮐﺪ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﻳﮏ ﮐﺪ ﺳﮕﻤﻨﺖ ﻣﯽ ﺑﺎﺷﺪ ﻭ ﻳـﺎ ﺣﺎﻓﻈـﻪ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻣﻮﺭﺩ ﻧﻈﺮ ﮐﻤﺘﺮ ﺍﺯ ﻳﮏ ﮐـﺪ ﺳـﮕﻤﻨﺖ ) ﮐﻤﺘـﺮ ﺍﺯ ۲ﮐﻴﻠـﻮ ﺑﺎﻳـﺖ ( ﺑﺎﺷـﺪ ﺑﻬﺘـﺮ ﺍﺳـﺖ ﺍﺯ BRANCHﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﺯﻳﺮﺍ ﺣﺎﻓﻈﻪ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﺑﺮﺍﯼ ﮐﺪﻫﺎﯼ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﮐﺎﻫﺶ ﻣﯽ ﺩﻫﺪ. ۱۲۷ﺑﺮﭼﺴﺐ ) ۲۵۶ﺗﺎ ﺑﺮﺍﯼ ( 18CXXXﻣﯽ ﺗﻮﺍﻥ ﺑﺎ ﺩﺳﺘﻮﺭ BRANCHLﺁﺩﺭﺱ ﺩﻫﯽ ﮐﺮﺩ. ﻣﺜﺎﻝ: ] B0 , [ Lab1 , Lab2 , Lab3
B0 var byte Main: branchl
۱۸
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
Loop: goto Loop Lab1: / / Lab2:/ / Lab3:/ / end
.۱ -۳-۶ ﺗﺮﮐﻴﺐ :
: BUTTONﺧﻮﺍﻧﺪﻥ ﺣﺎﻟﺖ ﺩﮐﻤﻪ ﺭﻭﯼ ﭘﻴﻦ ﻭﺭﻭﺩﯼ BUTTON Pin, State, Delay, Speed, Variable, Action, Label
ﺷﺮﺡ : ﺩﺳﺘﻮﺭ BUTTONﺗﻤﺎﺱ ﻟﺮﺯﺍﻥ ﻧﺎﺷﯽ ﺍﺯ ﻓﺸﺮﺩﻥ ﺩﮐﻤـﻪ ﺭﺍ ﺣـﺬﻑ ﻣـﯽ ﮐﻨـﺪ ) (Debouncingﺍﻳـﻦ ﺣﺎﻟﺖ ﺭﺍ ﺗﻮﺳﻂ ﺗﺎﺧﻴﺮ ﺩﺭﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﻫﺮ ﺑﺎﺭ ﺗﮑﺮﺍﺭ ﺍﻧﺠﺎﻡ ﻣﯽ ﺩﻫـﺪ ﺗـﺎﺧﻴﺮ Debouncingﭘـﻴﺶ ﻓـﺮﺽ ۱۰ﻣﻴﻠــﯽ ﺛﺎﻧﻴـﻪ ﻣــﯽ ﺑﺎﺷــﺪ ﮐـﻪ ﺑــﺮﺍﯼ ﺗﻐﻴﻴــﺮ ﺁﻥ ﺍﺯ DEFINE BUTTON_PAUSE ) TIME(msﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﮐﻨﻴﻢ .ﻣﺜﻼ ﺩﮐﻤﻪ ﺑﺎ ﺗﺎﺧﻴﺮ ۵۰ Debouncingﻣﻴﻠﯽ ﺛﺎﻧﻴـﻪ ﺑﺼـﻮﺭﺕ ﺯﻳـﺮ ﺗﻌﻴﻴﻦ ﻣﯽ ﺷﻮﺩ . DEFINE BUTTON_PAUSE 50
ﺗﻜﺮﺍﺭ ﺧﻮﺩﮐﺎﺭ ﮐﻪ ﺗﻮﺳﻂ Speedﺗﻌﻴﻴﻦ ﻣﯽ ﺷﻮﺩ ﺩﺭ ﺣﻘﻴﻘـﺖ ﻣـﺪﺕ ﻓﺸـﺮﺩﻩ ﻧﮕـﻪ ﺩﺍﺷـﺘﻦ ﮐﻠﻴـﺪ ﺭﺍ ﺗﻌﻴﻴﻦ ﻣﯽ ﮐﻨﺪ .ﺩﺳﺘﻮﺭ BUTTONﻣﻌﻤﻮﻻ ﺩﺭ ﻳﮏ ﺣﻠﻘﻪ ﺑﻪ ﮐﺎﺭ ﻣﯽ ﺭﻭﺩ ﺗﺎ ﺯﺩﻩ ﺷﺪﻥ ﮐﻠﻴـﺪ ﺭﺍ ﭼـﮏ ﮐﻨﺪ . : pinﺷﻤﺎﺭﻩ ﭘﺎﻳﻪ ﺭﺍ ﻧﺸﺎﻥ ﻣﯽ ﺩﻫﺪ ﮐﻪ ﻣﻤﮑﻦ ﺍﺳﺖ ﻳﮏ ﻋﺪﺩ ﺑﻴﻦ ۰ﺗﺎ ۱۵ﻳﺎ ﻳﮏ ﻣﺘﻐﻴﺮ ﮐﻪ ﻣﻘـﺪﺍﺭﺵ ﺑﻴﻦ ۰ﺗﺎ ۱۵ﻣﯽ ﺑﺎﺷﺪ ﻳﺎ ﺍﺳﻢ ﭘﻴﻦ ) ﻣﺎﻧﻨﺪ ( PORTA.0ﺑﺎﺷﺪ . : Stateﻭﺿﻌﻴﺖ ﭘﺎﻳﻪ ﺑﻪ ﻫﻨﮕﺎﻡ ﻓﺸﺎﺭ ﺩﺍﺩﻥ ﮐﻠﻴﺪ ) ۰ﻳﺎ ( ۱ : Delayﻣﻴﺰﺍﻥ ﺗﺎﺧﻴﺮ ﻗﺒﻞ ﺍﺯ ﺷﺮﻭﻉ ﺗﮑﺮﺍﺭ ﺧﻮﺩﮐﺎﺭ ) ۰ﺗﺎ ( ۲۵۵ : Speedﻧﺮﺥ ﺗﮑﺮﺍﺭ ﺧﻮﺩﮐﺎﺭ ) ۰ﺗﺎ ( ۲۵۵ : Variableﻣﺘﻐﻴﺮ ﻳﮏ ﺑﺎﻳﺘﯽ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺑﺮﺍﯼ ﺗﺎﺧﻴﺮ ﺗﮑﺮﺍﺭ .ﻗﺒﻞ ﺍﺯ ﺍﺳﺘﻔﺎﺩﻩ ﺑﺎﻳﺪ ﺑﺎ ﻋـﺪﺩ ﺻـﻔﺮ ﻣﻘـﺪﺍﺭ ﺩﻫﯽ ﺍﻭﻟﻴﻪ ﺷﺪﻩ ﺑﺎﺷﺪ. : Actionﻭﺿﻌﻴﺖ ﭘﺎﻳﻪ ﺑﺮﺍﯼ ﺍﺟﺮﺍﯼ ﻓﺮﻣﺎﻥ . GOTO " : "۰ﺍﮔﺮ ﻓﺸﺎﺭ ﺩﺍﺩﻩ ﻧﺸﺪﻩ ﺑﺎﺷﺪ. " : "۱ﺍﮔﺮ ﻓﺸﺎﺭ ﺩﺍﺩﻩ ﺷﺪﻩ ﺑﺎﺷﺪ. : Lableﻧﻘﻄﻪ ﺍﯼ ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﺻﻮﺭﺕ ﺻﺤﻴﺢ ﺑﻮﺩﻥ ، Actionﺑﺎﻳﺪ ﺍﺯ ﺁﻧﺠﺎ ﺍﺩﺍﻣﻪ ﭘﻴﺪﺍ ﮐﻨﺪ.
۱۹
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻣﺜﺎﻝ : DEFINE BUTTON_PAUSE 50 TRISA = 0 TRISB = 255 B0 var byte Main: B0 = 0 Button PORTB.0 , 0 , 100 , 10 , B0 , 1 , Led Goto Main Led: Toggle PORTA.0 Goto Main End
: CALL .۱ -۳-۷ﻓﺮﺍﺧﻮﺍﻧﯽ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎﯼ ﺍﺳﻤﺒﻠﯽ ﺗﺮﮐﻴﺐ : CALL label
ﺷﺮﺡ : ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﻧﺎﻡ labelﺭﺍ ﺩﺭ ﺯﺑﺎﻥ ﺍﺳﻤﺒﻠﯽ ﻓﺮﺍﺧﻮﺍﻧﯽ ﻣﯽ ﮐﻨﺪ. ﻣﺜﺎﻝ: ﺩﺭ ﺍﻳﻦ ﻣﺜﺎﻝ ﻓﺎﻳﻞ " "init.asmﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺍﻟﺤﺎﻕ ﺷﺪﻩ ﺍﺳﺖ. @ include ""init.asm Main: Call init_sys Loop: Goto Loop End
: CLEAR .۱ -۳-۸ﻣﻘﺪﺍﺭ ﻫﻤﻪ ﻣﺘﻐﻴﺮﻫﺎ ﺭﺍ ﺑﻪ ﺻﻔﺮ ﺗﻐﻴﻴﺮ ﺩﺍﺩﻥ ﺗﺮﮐﻴﺐ : CLEAR
ﺷﺮﺡ : ﺑﺎ ﺩﺳﺘﻮﺭ CLEARﺗﻤﺎﻡ ﺭﺟﻴﺴﺘﺮﻫﺎﯼ RAMﺩﺭ ﻫﻤﻪ ﺩﻳﺘﺎ ﺑﺎﻧﮑﻬﺎ ﺑﻪ ﺻﻔﺮ ﺗﻐﻴﻴﺮ ﻣﯽ ﻳﺎﺑﺪ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ، ﺑﺮﺍﯼ ﺍﻳﻨﮑﻪ ﺗﻤﺎﻡ ﻣﺘﻐﻴﺮﻫﺎ ﺭﺍ ﺑﻄﻮﺭ ﻫﻤﺰﻣﺎﻥ ﺻﻔﺮ ﮐﻨﻴﻢ ﻣﻨﺎﺳﺐ ﺍﺳﺖ. ﻣﺜﺎﻝ : Clear Main: Goto Main End
۲۰
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
: CLEARWDT .۱ -۳-۹ﺑﺎﺯ ﻧﺸﺎﻧﺪﻥ ﺗﺎﻳﻤﺮ ) Watchdogﺳﮓ ﻧﮕﻬﺒﺎﻥ ( ﺗﺮﮐﻴﺐ : CLEARWDT
ﺗﻮﺿﻴﺢ : ﺑﺎﺯ ﻧﺸﺎﻧﺪﻥ ﺗـﺎﻳﻤﺮ Watchdogﺭﺍ ﺑﺮﻋﻬـﺪﻩ ﺩﺍﺭﺩ .ﺍﻳـﻦ ﺩﺳـﺘﻮﺭ ﻣـﯽ ﺗﻮﺍﻧـﺪ ﺑﻌـﺪ ﺍﺯ ﺭﺍﻩ ﺍﻧـﺪﺍﺯﯼ ﺗـﺎﻳﻤﺮ ، Watchdogﺍﺯ ﻫﻨﮓ ﺷﺪﻥ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺟﻠﻮﮔﻴﺮﯼ ﮐﻨﺪ. ﻣﺜﺎﻝ : Clearwdt Main: Goto Main End
: COUNT .۱ -۳-۱۰ﺷﻤﺮﺩﻥ ﭘﺎﻟﺴﻬﺎﯼ ﺭﻭﯼ ﭘﻴﻦ ﻭﺭﻭﺩﯼ ﺗﺮﮐﻴﺐ : COUNT Pin , Period , No_Impulses
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺗﻌﺪﺍﺩ ﺿﺮﺑﻪ ﻫﺎﯼ ﺭﻭﯼ ﭘﻴﻦ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﺩﺭ ﻣـﺪﺕ ﺯﻣـﺎﻥ ﺗﻌﺮﻳـﻒ ﺷـﺪﻩ ) ( Periodﻣـﯽ ﺷﻤﺮﺩ ﻭ ﺩﺭ ﻣﺘﻐﻴﺮ No_Impulseﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﺪ .ﭘﻴﻦ ﺑﻄﻮﺭ ﺍﺗﻮﻣﺎﺗﻴﮏ ﺑﺼﻮﺭﺕ ﻭﺭﻭﺩﯼ ﻃﺮﺍﺣﯽ ﻣـﯽ ﺷﻮﺩ Period .ﺑﺮ ﺣﺴﺐ ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ﺗﻌﺮﻳﻒ ﻣﯽ ﺷﻮﺩ .ﺍﮔﺮ ﺍﺳـﻴﻼﺗﻮﺭ ۴ﻣﮕـﺎﻫﺮﺗﺰ ﺑﺎﺷـﺪ ،ﭼـﮏ ﮐـﺮﺩﻥ ﻭﺿﻌﻴﺖ ﭘﻴﻦ ﻫﺮ ۲۰ﻣﻴﮑﺮﻭ ﺛﺎﻧﻴﻪ ﺍﻧﺠﺎﻡ ﻣﯽ ﮔﻴﺮﺩ .ﺍﮔﺮ ﺧﻮﺍﺳﺘﻪ ﺑﺎﺷﻴﻢ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ ﺩﻳﮕـﺮﯼ ﮐـﺎﺭ ﮐﻨـﻴﻢ ﺑﺎﻳﺪ ﺍﺯ DEFINE OSCﺍﺳﺘﻔﺎﺩﻩ ﮐﻨﻴﻢ . Pinﻣﻤﮑﻦ ﺍﺳﺖ ﻳﮏ ﻋﺪﺩ ﺑﻴﻦ ۰ﺗﺎ ۱۵ﻳﺎ ﻳﮏ ﻣﺘﻐﻴﺮ ﮐﻪ ﻣﻘﺪﺍﺭﺵ ﺑﻴﻦ ۰ﺗﺎ ۱۵ﺍﺳﺖ ﻳﺎ ﺍﺳـﻢ ﭘـﻴﻦ ) ﻣﺎﻧﻨﺪ ( PORTA.0ﺑﺎﺷﺪ. ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﻣﺎ ﺑﻪ ﺁﺳﺎﻧﯽ ﻓﺮﮐﺎﻧﺲ ﻳﮏ ﺳﻴﮕﻨﺎﻝ ﺭﺍ ﺑﺼﻮﺭﺕ ﺳﺎﺩﻩ ﺍﯼ ﺍﺯ ﺭﻭﯼ ﺗﻌﺪﺍﺩ ﺍﻳﻤﭙﺎﻟﺴﻬﺎ ﻣﺤﺎﺳﺒﻪ ﻣﯽ ﮐﻨﻴﻢ .ﺑﺎﻻﺗﺮﻳﻦ ﻓﺮﮐﺎﻧﺲ ﻗﺎﺑﻞ ﻣﺤﺎﺳﺒﻪ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ ۴ﻣﮕﺎﻫﺮﺗﺰ ﻫﺴـﺖ ۲۵ﮐﻴﻠـﻮ ﻫﺮﺗـﺰ ﺍﺳـﺖ ﻭ ﺍﮔـﺮ ﺍﺳﻴﻼﺗﻮﺭ ۲۰ﻣﮕﺎﻫﺮﺗﺰ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﺗﺎ ۱۲۵ﮐﻴﻠﻮﻫﺮﺗﺰ ﺭﺍ ﻣﯽ ﺗﻮﺍﻥ ﻣﺤﺎﺳﺒﻪ ﮐﺮﺩ . ﻣﺜﺎﻝ : W0 var byte TRISA = $FF Main: ﺷﻤﺮﺩﻥ ﺿﺮﺑﻪ ﻫﺎ ﺩﺭ ﻳﮏ ﺛﺎﻧﻴﻪ' Count PORTA.0,1000,W0 PORTB = W0 Goto Main End
۲۱
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
: DATA .۱ -۳-۱۱ﻧﻮﺷﺘﻦ ﺩﺭ EEPROMﺩﺍﺧﻠﯽ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺗﺮﮐﻴﺐ : …{Lable} DATA {@PoCadr},constant, constant,
ﺷﺮﺡ :
DATAﻣﻘﺎﺩﻳﺮ ﺛﺎﺑﺖ ﺭﺍ ﺩﺭ ﺩﺍﺧﻞ EEPROMﺩﺍﺧﻠﯽ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﻧﻮﺷﺘﻦ ﮐﺪ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﺪ .ﺍﮔﺮ ﺁﺩﺭﺱ ﺩﺭ ﺩﺳﺘﻮﺭ ﻣﻮﺭﺩ ﻧﻈﺮ ﺣﺬﻑ ﺷﺪﻩ ﺑﺎﺷﺪ ﺛﺎﺑﺘﻬﺎ ﺍﺯ ﺁﺩﺭﺱ ﺻﻔﺮ ﺫﺧﻴﺮﻩ ﻣﯽ ﺷﻮﺩ . ﺛﺎﺑﺖ ﻣﻤﮑﻦ ﺍﺳﺖ ﺍﺯ ﻧﻮﻉ INTEGERﻳﺎ STRINGﺑﺎﺷـﺪ ﻳـﮏ ﺛﺎﺑـﺖ STRINGﺑﺼـﻮﺭﺕ ﺑﺎﻳﺘﻬـﺎﯼ ﻣﺘﻮﺍﻟﯽ ﺍﺯ ﻣﻘﺎﺩﻳﺮ ﮐﺪ ASCIIﺫﺧﻴﺮﻩ ﻣﯽ ﺷﻮﺩ .ﺍﮔﺮ ﻻﺯﻡ ﺑﺎﺷﺪ ﮐﻪ ﻳﮏ ﻋﺪﺩ ﺩﻭ ﺑﺎﻳﺘﯽ ﺩﺭEEPROM ﺫﺧﻴﺮﻩ ﺷﻮﺩ ﺑﺎﻳﺴﺘﯽ ﺍﺯ ﮐﻠﻤﻪ " "WORDﻗﺒﻞ ﺍﺯ ﺛﺎﺑﺖ ﺍﺳﺘﻔﺎﺩﻩ ﮐﺮﺩ ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ،ﺗﻨﻬـﺎ ﺑﺎﻳـﺖ ﺑـﺎ ﺍﺭﺯﺵ ﮐﻤﺘﺮ ﺫﺧﻴﺮﻩ ﻣﯽ ﺷﻮﺩ .ﺩﺳﺘﻮﺭ DATAﺗﻨﻬﺎ ﺩﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻫﺎﯼ PICﮐﻪ ﺩﺍﺭﺍﯼ EEPROM ﺩﺍﺧﻠﯽ ﻣﯽ ﺑﺎﺷﺪ ﻣﺎﻧﻨﺪ PIC16F84ﻳﺎ ﺳﺮﯼ 16F87Xﻗﺎﺑﻞ ﺍﺟﺮﺍ ﺍﺳﺖ. DATAﺗﻨﻬﺎ ﻳﮏ ﻣﺮﺗﺒﻪ ﺩﺭ ﻓﻀﺎﯼ ﺣﺎﻓﻈﻪ EEPROMﻣﯽ ﺗﻮﺍﻧﺪ ﺫﺧﻴﺮﻩ ﺷﻮﺩ ﻭ ﺁﻥ ﻫﻢ ﺩﺭ ﺯﻣﺎﻥ ﺑﺮﻧﺎﻣﻪ ﺭﻳﺰﯼ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻣﯽ ﺑﺎﺷﺪ ﻭ ﻧﻪ ﻫﺮ ﺯﻣﺎﻧﯽ ﮐﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺟﺮﺍ ﻣﯽ ﺷـﻮﺩ .ﺩﺳـﺘﻮﺭ WRITEﺑـﺮﺍﯼ ﻗـﺮﺍﺭ ﺩﺍﺩﻥ ﻣﻘﺎﺩﻳﺮ ﺑﺮ ﺭﻭﯼ EEPROMﺩﺍﺧﻠﯽ ﺩﺭ ﻫﻨﮕﺎﻡ ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ) ( RUNTIMEﻣﯽ ﺗﻮﺍﻧﺪ ﺍﺳـﺘﻔﺎﺩﻩ ﺷﻮﺩ. ﻣﺜﺎﻝ : @5,1,2,3
data
ﻧﻮﺷﺘﻦ ﻣﻘﺪﺍﺭﻫﺎﯼ ۲ ، ۱ﻭ ۳ﺭﻭﯼ ﻣﻮﻗﻌﻴﺘﻬﺎﯼ ۶ ، ۵ﻭ ۷ﺣﺎﻓﻈﻪ EEPROM data word $1234 ﻧﻮﺷﺘﻦ ﻣﻘﺪﺍﺭﻫﺎﯼ $12ﻭ $34ﺩﺭ ﻣﻮﻗﻌﻴﺘﻬﺎﯼ ۰ﻭ ۱ﺣﺎﻓﻈﻪ EEPROM )Data (4),0(10 ﭘﺮﻳﺪﻥ ﺑﻪ ﻣﻮﻗﻌﻴﺖ ﭼﻬﺎﺭﻡ ﻭ ﺫﺧﻴﺮﻩ 10 0s
: DTMFOUT .۱ -۳-۱۲ﺗﻮﻟﻴﺪ ﮐﺮﺩﻥ ﺳﻴﮕﻨﺎﻝ ﺻﺪﺍ )ﺗﻮﻥ( ﺷﻤﺎﺭﮔﻴﺮﯼ ﺭﻭﯼ ﭘﻴﻦ ﺧﺮﻭﺟﯽ ﺗﺮﮐﻴﺐ : ]}…DTMFOUT PIN , {ONMS,OFFMS,}[TONE{,TONE
ﺷﺮﺡ : ﺩﺳﺘﻮﺭ DTMFOUTﺗﻮﻥ ﺷﻤﺎﺭﮔﻴﺮﯼ ﺭﺍ ) ﻣﺜﻼ ﺑﺮﺍﯼ ﺗﻠﻔﻨﻬﺎ ( ﺗﻮﻟﻴـﺪ ﻣـﯽ ﮐﻨـﺪ .ﭘـﺎﺭﺍﻣﺘﺮ ONMS ﻣﺪﺕ ﺯﻣﺎﻥ ﻫﺮ ﺷﻤﺎﺭﮔﻴﺮﯼ ﺭﺍ ﻧﺸﺎﻥ ﻣﯽ ﺩﻫﺪ .ﻭ OFFMSﻣﺪﺕ ﻗﻄـﻊ ﺑـﻴﻦ ﺩﻭ ﺻـﺪﺍﯼ ﭘـﯽ ﺩﺭﭘـﯽ ﺭﺍ ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ .ﺍﮔﺮ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ ﻓﻮﻕ ﻣﻘﺪﺍﺭﮔﺬﺍﺭﯼ ﻧﺸﻮﻧﺪ ۲۰۰ ONMSﻣﻴﻠـﯽ ﺛﺎﻧﻴـﻪ ﻭ OFFMS ۵۰ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ﻣﻘﺪﺍﺭ ﮔﺬﺍﺭﯼ ﻣﯽ ﺷﻮﻧﺪ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺮﺍﯼ ۱۶ﺷﻤﺎﺭﻩ ﺻﺪﺍ ﺗﻮﻟﻴﺪ ﻣـﯽ ﮐﻨـﺪ ﮐـﻪ ﺑـﺮﺍﯼ ﺷﻤﺎﺭﻫﻬﺎﯼ ۰ﺗﺎ ۹ﺻﺪﺍﻳﯽ ﻣﻄﺎﺑﻖ ﺑﺎ ﺻﺪﺍﯼ ﺷﻤﺎﺭﮔﻴﺮ ﺗﻠﻔﻦ ﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﺪ ﻭ ﺻﺪﺍﯼ ۱۰ﻫﻤﺎﻥ ﺻـﺪﺍﯼ ﮐﻠﻴﺪ * ﺑﺮ ﺭﻭﯼ ﮐﻴﺒﻮﺭﺩ) ( key boardﺗﻠﻔﻦ ﻣﯽ ﺑﺎﺷﺪ ﻭ ۱۱ﻫﻤﺎﻥ ﺻﺪﺍﯼ ﮐﻠﻴﺪ #ﺭﺍ ﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨـﺪ ﻭ ۱۲ﺗﺎ ۱۵ﺻﺪﺍﯼ ﻣﺸﺎﺑﻪ ﮐﻠﻴﺪﻫﺎﯼ Aﺗﺎ Dﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﻨﺪ .
۲۲
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﮑﻞ (1-3.ﻓﻴﻠﺘﺮ ﺑﺮﺍﯼ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﺷﮑﻞ ﺳﻴﻨﻮﺳﯽ
ﺑﺮﺍﯼ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﺷﮑﻞ ﺳﻴﻨﻮﺳﯽ ﺩﺭ ﺧﺮﻭﺟﯽ ﻳﮏ ﻓﻴﻠﺘﺮ ﻣﻨﺎﺳﺐ )ﺗﻄﺒﻴﻘـﯽ( ﺍﺣﺘﻴـﺎﺝ ﻣـﯽ ﺑﺎﺷـﺪ ﺗـﺎ ﺗﻌﺪﺍﺩﯼ ﺍﺯ ﻫﺎﺭﻣﻮﻧﻴﻬﺎ ﺭﺍ ﺍﺯ ﺑﻴﻦ ﺑﺒﺮﺩ ﻭﺳﻴﻨﻮﺳﯽ ﺭﺍ ﺻﺎﻓﺘﺮ ﮐﻨﺪ . DTMFOUTﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ ۲۰ﻣﮕﺎﻫﺮﺗﺰ ﺑﻬﺘﺮ ﮐﺎﺭ ﻣﯽ ﮐﻨﺪ ﺍﻟﺒﺘﻪ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ ۴ﻣﮕﺎﻫﺮﺗﺰ ﻧﻴـﺰ ﮐـﺎﺭ ﻣـﯽ ﮐﻨﺪ ﻭﻟﯽ ﻓﻴﻠﺘﺮ ﮐﺮﺩﻥ ﺁﻥ ﻭ ﺗﺒـﺪﻳﻞ ﺁﻥ ﺑـﻪ ﺳﻴﻨﻮﺳـﯽ ﺳـﺨﺘﺘﺮ ﺍﺳـﺖ .ﺩﺳـﺘﻮﺭ DTMFOUTﺍﺯ ﺗـﺎﺑﻊ FREQOUTﺑﺮﺍﯼ ﺗﻮﻟﻴﺪ ﺻﺪﺍﯼ ﺷﻤﺎﺭﮔﻴﺮﯼ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﮐﻨﺪ FREQOUT .ﺻـﺪﺍﯼ ﻣـﻮﺭﺩ ﻧﻈـﺮ ﺭﺍ ﺑﺼﻮﺭﺕ ﻣﺪﻭﻻﺳﻴﻮﻥ ﭘﻬﻨﺎﯼ ﭘﺎﻟﺲ ﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﺪ. ﻣﺜﺎﻝ : TRISB = $FF Main: ]Dtmfout PORTB.1,[2,1,2 goto Loop End
.۱ -۳-۱۳ ﺗﺮﮐﻴﺐ:
Loop:
:EEPROMﻣﺠﻤﻮﻋﻪ ﺛﺎﺑﺘﻬﺎﯼ ﺍﻭﻟﻴﻪ ﺑﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺳﯽ EEPROM }EEPROM {@location, } constant {, constant
ﺷﺮﺡ : ﻣﺠﻤﻮﻋﻪ ﺍﯼ ﺍﺯ ﺛﺎﺑﺘﻬﺎ ﺭﺍ ﺩﺭ EEPROMﺩﺍﺧﻠﯽ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﺪ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺗﻨﻬﺎ ﺩﺭ ﺍﺑﺘﺪﺍ ﻭ ﻳﺎ ﺍﻧﺘﻬﺎﯼ ﺑﺮﻧﺎﻣﻪ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ ﻭ ﺑﺮﺍﯼ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﺩﺭ ﻭﺳﻂ ﺑﺮﻧﺎﻣﻪ ﻭ ﺩﺭﺣﺎﻝ ﺍﺟﺮﺍ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ WRITEﻭ READﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ. ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺩﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮﻫﺎﯼ ﮐﻪ ﺑﺎ I2Cﺑﺎ EEPROMﺧﺎﺭﺟﯽ ﺍﺭﺗﺒﺎﻁ ﺑﺮﻗﺮﺍﺭ ﻣﯽ ﮐﻨﻨﺪ ﻗﺎﺑﻞ ﺍﺟﺮﺍ ﻧﻴﺴﺖ . ﻣﺜﺎﻝ :
۲۳
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
EEPROM @5,1,2,3
ﻣﻘﺎﺩﻳﺮ ۲ ، ۱ﻭ ۳ﺭﺍ ﺩﺭ ﻣﻮﻗﻌﻴﺘﻬﺎﯼ ۶ ، ۵ﻭ EEPROM ۷ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﺪ. EEPROM @5,1,2,3
ﻣﻘﺎﺩﻳﺮ $12ﻭ $34ﺭﺍ ﺩﺭ ﻣﻮﻗﻌﻴﺘﻬﺎﯼ ۰ﻭ EEPROM ۱ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﺪ. : END .۱ -۳-۱۴ﻧﺸﺎﻧﻪ ﮔﺬﺍﺭﯼ ﭘﺎﻳﺎﻥ ﺑﺮﻧﺎﻣﻪ ﺗﺮﮐﻴﺐ : END
ﺷﺮﺡ : ﺍﺯ ﺍﺟﺮﺍﯼ ﺑﻴﺸﺘﺮ ﺑﺮﻧﺎﻣﻪ ﺟﻠﻮﮔﻴﺮﯼ ﻣﯽ ﮐﻨﺪ ﻭ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺑﻪ ﺣﺎﻟﺖ ﮐﻢ ﻣﺼﺮﻑ ﺩﺭ ﻣﯽ ﺁﻭﺭﺩ ﺷﺒﻴﻪ ﺩﺳـﺘﻮﺭ SLEEPﮐﻪ ﺩﺭ ﻳﮏ ﺣﻠﻘﻪ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻪ ﺍﺳﺖ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺩﺭ ﺍﻧﺘﻬﺎﯼ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﻣﯽ ﺷﻮﺩ. : FOR … NEXT .۱ -۳-۱۵ﺗﮑﺮﺍﺭ ﮐﺮﺩﻥ ﻳﮏ ﻗﺴﻤﺖ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺗﺮﮐﻴﺐ : } FOR Index = Start TO End {Step {-} Inc { instructions, } instructions }NEXT {Index
ﺷﺮﺡ :
" "Indexﻣﺘﻐﻴﺮﯼ ﺍﺳﺖ ﮐﻪ ﺑﺮﺍﯼ ﮐﻨﺘﺮﻝ ﭼﮕﻮﻧﮕﯽ ﺗﻌﺪﺍﺩ ﺑﺎﺭﻫﺎﯼ ﮐﻪ ﺣﻠﻘﻪ ﺍﺟﺮﺍ ﻣﯽ ﺷﻮﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ .ﺍﮔﺮ ﭘﺎﺭﺍ ﻣﺘﺮ stepﺍﺳﺘﻔﺎﺩﻩ ﻧﺸﻮﺩ ﻣﺘﻐﻴﺮ ﻳﮑﯽ ﻳﮑﯽ ﺍﻓﺰﺍﻳﺶ ﻣﯽ ﻳﺎﺑﺪ) (index = index + 1
: FREQOUT .۱ -۳-۱۶ﺗﻮﻟﻴﺪ ﺳﻴﮕﻨﺎﻝ ﺑﺎ ﻓﺮﮐﺎﻧﺲ ﻣﺸﺨﺺ ﺭﻭﯼ ﭘﻴﻦ ﺧﺮﻭﺟﯽ ﺗﺮﮐﻴﺐ : FREQOUT Pin, Onms, Freq1, Freq2
ﺷﺮﺡ :
FREQOUTﺳﻴﮕﻨﺎﻝ PWMﺑﺎ ﺭﻧﺞ ﻓﺮﮐﺎﻧﺴـﯽ ﺍﺯ ۰ﺗـﺎ ۳۲۷۶۷ﻫﺮﺗـﺰ ﺭﻭﯼ ﭘـﻴﻦ ﺗﻌﺮﻳـﻒ ﺷـﺪﻩ ﺩﺭ ﭘﺎﺭﺍﻣﺘﺮ " " pinﻭ ﺑﺎ ﻣﺪﺕ ﺯﻣﺎﻥ " " onmsﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﺪ FREQOUT .ﺑﺎ ﺍﺳـﻴﻼﺗﻮﺭ 20MHZﺑﻬﺘـﺮ ﮐﺎﺭ ﻣﯽ ﮐﻨﺪ "onms" .ﻣﺪﺕ ﺯﻣﺎﻥ ﺳﻴﮕﻨﺎﻝ ﺑﺮ ﺣﺴﺐ ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ﺭﺍ ﻧﺸﺎﻥ ﻣﯽ ﺩﻫﺪ.
ﺷﮑﻞ ( 1-4.ﻓﻴﻠﺘﺮ ﺑﺮﺍﯼ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﺷﮑﻞ ﺳﻴﻨﻮﺳﯽ
۲۴
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺑﺮﺍﯼ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﺳﻴﮕﻨﺎﻝ ﺳﻴﻨﻮﺳﯽ ﻣﻄﻠﻮﺏ ﺩﺭ ﺧﻮﺭﺟﯽ ﻧﺼﺐ ﻳﮏ ﻓﻴﻠﺘﺮ ﻻﺯﻡ ﺍﺳﺖ. ﻣﺜﺎﻝ : freqout PORTB.1,2000,1000 ﺳﻴﮕﻨﺎﻝ ﺑﺎ ﻓﺮﮐﺎﻧﺲ 1000HZﺩﺭ ﻣﺪﺕ ۲ﺛﺎﻧﻴﻪ ﺩﺭ ﭘﻴﻦ 1ﭘﻮﺭﺕ Bﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﺪ. : GOSUB .۱ -۳-۱۷ﻓﺮﺍﺧﻮﺍﻧﯽ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎﯼ BASIC
ﺗﺮﮐﻴﺐ :
GOSUB label
ﺷﺮﺡ : ﺑﺎ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﺍﯼ ﮐﻪ ﺑﻴﻦ " " labelﻭ ﺩﺳﺘﻮﺭ RETURNﻗﺮﺍﺭﺩﺍﺭﺩ ﻣﯽ ﺭﻭﺩ .ﺯﻳـﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻣﯽ ﺗﻮﺍﻧﻨﺪ ﺗﻮﺩﺭﺗﻮ ﺑﺎﺷﻨﺪ .ﺍﻳﻦ ﺣﺎﻟﺖ ﺗﺎ ﭼﻬﺎﺭ ﺳﻄﺢ ﻣﯽ ﺗﻮﺍﻧﺪ ﻋﻤﻖ ﺩﺍﺷـﺘﻪ ﺑﺎﺷـﺪ ﻭ ﺩﻟﻴـﻞ ﺁﻥ ﻣﺤﺪﻭﺩ ﺑﻮﺩﻥ ﭘﺸﺘﻪ ﻣﯽ ﺑﺎﺷﺪ. ﻣﺜﺎﻝ : Main : ﻓﺮﺍﺧﻮﺍﻧﯽ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ' Blink
gosub Blink Loop: goto Loop
ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ' Blink
Blink: PORTB = $FF Pause 1000 PORTB = $00 Pause 1000 Return End
: GOTO .۱ -۳-۱۸ﺍﺩﺍﻣﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺯ ﺑﺮﭼﺴﺐ ﻣﺸﺨﺺ ﺷﺪﻩ ﺗﺮﮐﻴﺐ : GOTO label
ﺷﺮﺡ : ﺍﻳﻦ ﺑﺮ ﻧﺎﻣﻪ ﭘﺮﺵ ﺑﻪ ﻫﺮ ﺟﺎﻳﯽ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﻣﻤﮑﻦ ﻣﯽ ﺳﺎﺯﺩ .ﺗﮑﺮﺍﺭ ﺯﻳﺎﺩ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺗﻮﺻﻴﻪ ﻧﻤﯽ ﺷﻮﺩ ﺯﻳﺮﺍ ﻗﺎﺑﻞ ﻓﻬﻢ ﺑﻮﺩﻥ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﮐﻤﺘﺮ ﻣﯽ ﮐﻨﺪ. : HIGH .۱ -۳-۱۹ﻧﺸﺎﻧﺪﻥ ﻳﮏ ﻣﻨﻄﻘﯽ ﺭﻭﯼ ﭘﻴﻦ ﺧﺮﻭﺟﯽ ﺗﺮﮐﻴﺐ : HIGH Pin
۲۵
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﺮﺡ : ﭘﻴﻦ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﺑﻪ ﺳﻄﺢ ﺑﺎﻻ ﻣﯽ ﺁﻭﺭﺩ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﻄﻮﺭ ﺧﻮﺩﮐﺎﺭ ﭘﻴﻦ ﺭﺍ ﺩﺭ ﮔﺮﺍﻳﺶ ﺧﺮﻭﺟﯽ ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﺪ .ﭘﻴﻦ ﻣﻤﮑﻦ ﺍﺳﺖ ﻳﮏ ﻋﺪﺩ ﺛﺎﺑﺖ ﺑﻴﻦ ۰ﺗﺎ ۱۵ﻳﺎ ﻳﮏ ﻋﺪﺩ ﻣﺘﻐﻴﺮ ﮐﻪ ﻣﺤﺘﻮﺍﯼ ﺁﻥ ﺑﻴﻦ ۰ﺗﺎ ۱۵ﻭ ﻳﺎ ﺍﺳﻢ ﭘﻮﺭﺕ ﺑﺎﺷﺪ.ﺍﮔﺮ ﭘﻴﻦ ﻣﻮﺭﺩ ﻧﻈﺮ ﺩﺭ ﮔﺮﺍﻳﺶ ﺧﺮﻭﺟﯽ ﺑﺎﺷﺪ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻋﺒﺎﺭﺕ ﺯﻳﺮ ﻣﻨﺎﺳﺒﺘﺮ ﺍﺳـﺖ . PORTB.0 = 1. ﻣﺜﺎﻝ :
: HESERIN .۱ -۳-۲۰ ﺳﺨﺖ ﺍﻓﺰﺍﺭ ﻭﺭﻭﺩﯼ ﺁﺳﻨﮑﺮﻭﻥ ﺗﺮﮐﻴﺐ : ])HSERIN {Error,}{Timeout, Label,}[Modifier(,...
ﺷﺮﺡ :
HSERINﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺑﺼﻮﺭﺕ ﺳﺮﻳﺎﻝ ﺩﺭﻳﺎﻓﺖ ﻣﯽ ﮐﻨﺪ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑـﺎ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮﻫـﺎﯼ ﮐـﻪ ﺩﺍﺭﺍﯼ ﻭﺍﺣﺪ ﺳﺨﺖ ﺍﻓﺰﺍﺭﯼ ﺍﺭﺗﺒﺎﻁ ﺳـﺮﻳﺎﻝ ) ﺳـﺨﺖ ﺍﻓـﺰﺍﺭ ( USARTﻣـﯽ ﺑﺎﺷـﻨﺪ ،ﺑﮑـﺎﺭ ﻣـﯽ ﺭﻭﺩ )ﻣﺎﻧﻨـﺪ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ .( 16F877ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ ﺍﻧﺘﻘﺎﻝ ﺳﺮﻳﺎﻝ ﺑﺎ ﺩﺳﺘﻮﺭ DEFINEﺗﻌﻴﻴﻦ ﻣﯽ ﺷﻮﺩ.
ﻋﻤﻠﮑﺮﺩ HSERINﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ 4MHZﺍﺯ ﭘﻴﺶ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺳﺖ ﻭﺑﺮﺍﯼ ﮐﺎﺭ ﮐﺮﺩﻥ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭﻫﺎﯼ ﺩﻳﮕﺮ ﺑﺎﻳﺴﺘﯽ ﺍﺯ ﺩﺳﺘﻮﺭ ﺍﺳﻴﻼﺗﻮﺭ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺗﻌﺮﻳﻒ ﮐﺮﺩ. ﺍﺻﻼﺡ ﮐﻨﻨﺪﻩ
ﭼﮕﻮﻧﮕﯽ ﮐﺎﺭﮐﺮﺩ ﮔﺮﻓﺘﻦ ﺭﻗﻤﻬﺎﯼ ﺑﺎﻳﻨﺮﯼ
}BIN{1..16
ﮔﺮﻓﺘﻦ ﺭﻗﻤﻬﺎﯼ ﺩﺳﻴﻤﺎﻝ
}DEC{1..5
ﮔﺮﻓﺘﻦ ﺭﻗﻤﻬﺎﯼ ﻫﮕﺰﺍ ﺩﺳﻴﻤﺎﻝ
}HEX{1..4
ﻧﮕﺮﻓﺘﻦ ﮐﺮﮐﺘﺮ ﺑﻌﺪ ﺍﺯ ﮐﺮﮐﺘﺮ nﺍﻡ
SKIP n
ﮔﺮﻓﺘﻦ ﻣﺘﻮﺍﻟﯽ nﮐﺮﮐﺘﺮ ﺗﺎ ﺯﻣﺎﻧﯽ ﮐﻪ ﮐﺮﮐﺘﺮ ) cﺍﺧﺘﻴﺎﺭﯼ( ﺑﻴﺎﻳﺪ
}STR ArrayVar\n{\c
ﺍﻧﺘﻈﺎﺭ ﺑﺮﺍﯼ ﮐﺮﮐﺘﺮ ﻫﺎﯼ ﻣﺘﻮﺍﻟﯽ
) ( WAIT
ﺍﻧﺘﻈﺎﺭ ﺑﺮﺍﯼ ﺭﺷﺘﻪ
}WAITSTR ArrayVar{\n ﺗﻌﻴﻴﻦ ﻓﺮﮐﺎﻧﺲ ﻣﻮﺭﺩ ﻧﻈﺮ ‘
DEFINE OSC tact
۲۶
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ " " Time outﻭ " " Labelﻣﻮﺟﺐ ﻣﯽ ﺷﻮﻧﺪ ﮐﻪ ﺍﮔﺮ ﻫﻴﭻ ﮐﺮﮐﺘﺮﯼ ﺩﺭﻳﺎﻓﺖ ﻧﺸﺪ ﺑﺮﻧﺎﻣـﻪ ﺑﻌﺪ ﺍﺯ ﺯﻣﺎﻥ" ) " Time outﺑﺮ ﺣﺴﺐ ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ( ﺍﺯ ﺑﺮﭼﺴﺐ Labelﺍﺩﺍﻣﻪ ﻣﯽ ﻳﺎﺑـﺪ .ﻗﺎﻟـﺐ ﺑﻨـﺪﯼ ﺍﻃﻼﻋﺎﺕ ﺳﺮﻳﺎﻝ ﻣﯽ ﺗﻮﺍﻧﺪ ۸ ) 8N1ﺑﻴﺖ ﺍﻃﻼﻋﺎﺕ ﺑﺪﻭﻥ ﺑﻴﺖ ﺗﻮﺍﺯﻥ ﻭﺑﺎ ﺗﻨﻬﺎ ﻳﮏ ﺑﻴﺖ ﺗﻮﻗﻒ ( ﻭ 7E1 ) ۷ﺑﻴﺖ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ،ﺑﻴﺖ ﺗﻮﺍﺯﻥ ﻭ ﻳﮏ ﺑﻴﺖ ﺗﻮﻗﻒ ( ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﮐﻪ ﺑﺎ ﺩﺳﺘﻮﺭ DEFINEﺗﻌﻴﻴﻦ ﻣﯽ ﺷﻮﺩ. ﭼﮏ ﮐﺮﺩﻥ DEFINE HSER_EVEN 1 ‘ parity ﭼﮏ ﮐﺮﺩﻥ DEFINE HSER_ODD 1 ‘ Non_parity
ﺑﺮﻧﺎﻣﻪ ﻣﻤﮑﻦ ﺍﺳﺖ ﺩﺍﺭﺍﯼ ﻳﮏ ﺑﺮﭼﺴﺐ " "Errorﺑﺎﺷﺪ ﮐﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺧﻄﺎ ﻭ ﺩﺭﺳﺖ ﻧﺒﻮﺩﻥ ﭘﺮﻳﺘﯽ ﺑـﻪ ﺁﻥ ﺑﺮﭼﺴﺐ ﻣﯽ ﭘﺮﺩ .ﺍﺻﻼﺡ ﮐﻨﻨﺪﻩ ﻫﺎ ﺩﺭ ﺟﺪﻭﻝ ﺯﻳﺮ ﺁﻣﺪﻩ ﺍﺳﺖ. ﻣﺜﺎﻝ:
: HPWM .۱ -۳-۲۱ﺗﻮﻟﻴﺪ ﮐﺮﺩﻥ ﺳﻴﮕﻨﺎﻝ PWMﺭﻭﯼ ﭘﻴﻦ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺗﺮﮐﻴﺐ : HPWM Channel,Relation_on_off, Frequency
ﺷﺮﺡ : ﺍﻳﻦ ﻓﺮﻣﺎﻥ ﺍﺯ ﺳﺨﺖ ﺍﻓﺰﺍﺭ PWMﺭﻭﯼ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻫﺎﯼ ﮐﻪ ﺩﺍﺭﺍﯼ ﺍﻳﻦ ﺍﻣﮑﺎﻥ ﻫﺴﺘﻨﺪ ﺍﺳﺘﻔﺎﺩﻩ ﮐـﺮﺩﻩ ﺍﺳﺖ ﻭ ﺳﻴﮕﻨﺎﻝ PWMﺭﺍ ﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﺪ. ﭘﺎﺭﺍﻣﺘﺮ " "channelﮐﺎﻧﺎﻝ PWMﺭﺍ ﺗﻌﺮﻳﻒ ﻣﯽ ﮐﻨﺪ ﺗﻌﺪﺍﺩ ﺍﻳﻦ ﮐﺎﻧﺎﻟﻬﺎ ﺑﺴﺘﮕﯽ ﺑﻪ ﻧـﻮﻉ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟـﺮ ﺩﺍﺭﺩ ﻭ ﺑﻴﻦ ۱ﺗﺎ ۳ﮐﺎﻧﺎﻝ ﺍﺳﺖ .ﺑﺮﺍﯼ ﺩﻭ ﮐﺎﻧﺎﻟﻪ ﻫﺎ ﻫﻨﮕﺎﻡ ﺭﺍﻩ ﺍﻧﺪﺍﺯﯼ ﻫﺮ ﺩﻭ ﮐﺎﻧﺎﻝ ﻓﺮﮐﺎﻧﺲ ﺁﻧﻬﺎ ﺑﺎﻳﺴﺘﯽ ﻳﮑﺴﺎﻥ ﺑﺎﺷﺪ Relation_on_off .ﻧﺴﺒﺖ ﺑﻴﻦ ﺳﻴﮕﻨﺎﻝ onﻭ offﺭﺍ ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ ﻭ ﻣﻘـﺪﺍﺭ ﺻـﻔﺮ ﺳﻴﮕﻨﺎﻝ ﺧﺎﻣﻮﺵ ﺭﺍ ﺭﻭﯼ ﭘﻴﻦ ﻣﯽ ﻓﺮﺳﺘﺪ ﻭ ﻣﻘـﺪﺍﺭ ۲۵۵ﺳـﻴﮕﻨﺎﻝ ﻫﻤﻴﺸـﻪ ﺭﻭﺷـﻦ ﺭﺍ ﺭﻭﯼ ﭘـﻴﻦ ﻣـﯽ ﻓﺮﺳﺘﺪ .ﭘﺎﺭﺍﻣﺘﺮ " "Frequencyﻓﺮﮐﺎﻧﺲ ﺳﻴﮕﻨﺎﻝ PWMﺭﺍ ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ ) .ﮐﻤﺘﺮﻳﻦ ﻓﺮﮐﺎﻧﺲ ﺩﺭ ﺍﺳــﻴﻼﺗﻮﺭ 245HZ ، 4MHZﻭ ﺑـﺎﻻﺗﺮﻳﻦ ﻓﺮﮐــﺎﻧﺲ ﻣﻤﮑــﻦ ﺩﺭ ﺍﺳــﻴﻼﺗﻮﺭ ﺳــﺮﻳﻊ ۳۲۷۶۷ﻫﺮﺗــﺰ ﺍﺳــﺖ (. HPWMﺑﻄﻮﺭ ﭘﻴﻮﺳﺘﻪ ﺩﺭ ﺯﻣﺎﻥ ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﮐﺎﺭ ﻣﯽ ﮐﻨﺪ .ﺗﻌﺪﺍﺩﯼ ﺍﺯ ﻗﻄﻌﺎﺕ ﻣﻤﮑﻦ ﺍﺳـﺖ ﭘﻴﻨﻬـﺎﯼ ﭼﻨﺪ ﮐﺎﺭ ﮐﻪ HPWMﺭﺍ ﺩﺍﺭﻧﺪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ DEFINE .ﺍﺟﺎﺯﻩ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﭘﻴﻨﻬﺎ ﺭﺍ ﺩﺭ ﺍﻳﻦ ﺭﺍﺳـﺘﺎ ﻣﯽ ﺩﻫﺪ. 'Hpwm 1 pin port 'Hpwm 1 pin bit
DEFINE CCP1_REG PORTC DEFINE CCP1_BIT 2
۲۷
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
DEFINE CCP2_REG PORTC 'Hpwm 2 pin port DEFINE CCP2_BIT 1 'Hpwm 2 pin bit ﺗﻌﺮﻳﻔﻬﺎﯼ ﺯﻳﺮ ﻧﺸﺎﻥ ﻣﯽ ﺩﻫﻨﺪ ﮐﻪ ﺗﺎﻳﻤﺮ ۱ﻳﺎ ۲ﺑﺮﺍﯼ ﺗﻮﻟﻴﺪ PWMﺭﻭﯼ ﮐﺎﻧﺎﻝ ۲ﻳﺎ ۳ﺻﻮﺭﺕ ﺑﮕﻴﺮﺩ.
ﺍﻧﺘﺨﺎﺏ ﺗﺎﻳﻤﺮ
ﻣﺜﺎﻝ :
ﺑﺮﺍﯼ 'Hpwm 2
DEFINE HPWM2_TIMER 1
'Hpwm 3
DEFINE HPWM3_TIMER 1
ﺍﻧﺘﺨﺎﺏ ﺗﺎﻳﻤﺮ ﺑﺮﺍﯼ
ﮐﺎﻧﺎﻝ ﺩﻭﻡ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﻳﻤﺮ' ۱ ‘ 25% PWM on 1kHz
DEFINE HPWM2_TIMER 1 hpwm 2, 64, 1000
: HSEROUT .۱ -۳-۲۲ﺳﺨﺖ ﺍﻓﺰﺍﺭ ﺧﺮﻭﺟﯽ ﺁﺳﻨﮑﺮﻭﻥ ﺗﺮﮐﻴﺐ : ]}HSEROUT [Item{,Item...
ﺷﺮﺡ :
HSEROUTﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺍﺯ ﻃﺮﻳﻖ ﺳﺨﺖ ﺍﻓﺰﺍﺭ USARTﺑﻪ ﺻﻮﺭﺕ ﺳﺮﻳﺎﻝ ﻣﯽ ﻓﺮﺳﺘﺪ .ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ ﺍﻧﺘﻘﺎﻝ ﺑﻮﺳﻴﻠﻪ DEFINEﺗﻌﺮﻳﻒ ﻣﯽ ﺷﻮﺩ. ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﻣﻘﺪﺍﺭ ﻣﻨﺎﺳﺐ ﺩﺭ ﺭﺟﻴﺴﺘﺮ ﺩﺭﻳﺎﻓﺖ ‘ DEFINE HSER_RCSTA 90h ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﻣﻘﺪﺍﺭ ﻣﻨﺎﺳﺐ ﺩﺭ ﺭﺟﻴﺴﺘﺮ ﺍﻧﺘﺸﺎﺭ ‘ DEFINE HSER_TXSTA 20h ﺳﺮﻋﺖ ﺍﻧﺘﻘﺎﻝ)DEFINE HSER_BAUD 2400 ‘ (Baud rate ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﻣﻘﺪﺍﺭ ﻣﻨﺎﺳﺐ ﺑﻄﻮﺭ ﻣﺴﺘﻘﻴﻢ ﺩﺭDEFINE HSER_SPBRG 25 ‘ SPBRG
ﺍﻳﻦ ﺳﺮﻋﺘﻬﺎﯼ ﺍﻧﺘﻘﺎﻝ ﮐﻪ ﺗﻌﺮﻳﻒ ﺷﺪ ﺑﺮﺍﯼ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮﯼ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ 4MHZﻣـﯽ ﺑﺎﺷـﺪ ﻭﺑـﺮﺍﯼ ﺩﻳﮕـﺮ ﺍﺳﻴﻼﺗﻮﺭﻫﺎ ﺑﺎﻳﺴﺘﯽ ﺗﻌﺮﻳﻒ ﺩﺭﺍﺑﺘﺪﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺻﻮﺭﺕ ﺑﮕﻴﺮﺩ .ﻗﺎﻟﺐ ﺑﻨﺪﯼ ﻫـﺎﯼ ﻣﺨﺘﻠـﻒ ﻧﻴـﺰ ﺑـﺎ ﺩﺳـﺘﻮﺭ DEFINEﺗﻌﺮﻳﻒ ﻣﯽ ﺷﻮﺩ. ﭼﮏ ﮐﺮﺩﻥ DEFINE HSER_EVEN 1 ‘parity DEFINE HSER_ODD 1 ﭼﮏ ﮐﺮﺩﻥ ‘Non_ parity ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ
ﺍﺻﻼﺡ ﮐﻨﻨﺪﻩ ﻫﺎ
ﻣﻘﺪﺍﺭ binary
}{I}{S} BIN{1..16
ﻣﻘﺪﺍﺭ decimal
}{I}{S} DEC{1..5
ﻣﻘﺪﺍﺭ hexadecimal
}{I}{S} HEX{1..4
ﮐﺮﮐﺘﺮ n ،cﺑﺎﺭ ﺗﮑﺮﺍﺭ ﻣﯽ ﺷﻮﺩ
REP c/n
nﮐﺮﮐﺘﺮ ﺭﺷﺘﻪ
}STR ArrayVar {\n ﺟﺪﻭﻝ
ﻣﺜﺎﻝ :
۱-۷ B0 var byte B0 = 4
۲۸
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
Main : ﻓﺮﺳﺘﺎﺩﻥ ﻣﻘﺪﺍﺭ ﺩﺳﻴﻤﺎﻝ ﺍﺯ ﻣﺘﻐﻴﺮ B0ﻭ ﻣﻘﺪﺍﺭ ‘۱۰
]hserout [dec B0, 10 Loop: goto Loop End
: I2CREAD .۱ -۳-۲۳ﺧﻮﺍﻧﺪﻥ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﻭﺳﺎﻳﻞ ﺟﺎﻧﺒﯽ I2C
ﺗﺮﮐﻴﺐ :
} I2CREAD Data,Frequency,Control_byte,{Address,}[Variable{,Variable...}]{,Label
ﺷﺮﺡ : ﺍﻃﻼﻋــﺎﺕ ﺁﺩﺭﺱ ﻭﮐﻨﺘــﺮﻝ ﺍﺭﺳــﺎﻝ ﺷــﺪﻩ ﺍﺯ ﺧــﻂ I2Cﺩﺭ ﻣﺘﻐﻴــﺮ " "Variableﺫﺧﻴــﺮﻩ ﻣــﯽ ﺷـﻮﺩ . I2CREADﻭ I2CWRITEﺑﺮﺍﯼ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺑﺮ ﺭﻭﯼ ﻭﺍﺣﺪﻫﺎﯼ ﺟﺎﻧﺒﯽ ﺍﺳﺘﻔﺎﺩﻩ ﻣـﯽ ﺷﻮﺩ .ﺍﻳﻦ ﺩﺳﺘﻮﺭﻫﺎ ﻣﯽ ﺗﻮﺍﻧﻨﺪ ﺍﺭﺗﺒﺎﻁ ﺑﺎ ﻭﺳﺎﻳﻞ ﮐﻪ ﺩﺍﺭﺍﯼ ﺧﻂ ﺍﺭﺗﺒﺎﻃﯽ I2Cﻫﺴﺘﻨﺪ ﺍﺭﺗﺒﺎﻁ ﺑﺮﻗﺮﺍﺭ ﮐﻨﺪ ﺍﺯ ﻗﺒﻴﻞ ﺳﻨﺴﻮﺭﻫﺎﯼ ﺩﻣﺎ A/D ،ﻫﺎ EEPROM ،ﻫﺎﯼ ﺳﺮﻳﺎﻝ ﻭ ﻏﻴﺮﻩ. ۷ﺑﻴﺖ ﺑﺎﻻﺗﺮ ﮐﺪ ﮐﻨﺘﺮﻟﯽ ﺑﺮﺍﯼ ﺍﻧﺘﺨﺎﺏ ﭼﻴﭗ ﻣﻮﺭﺩ ﻧﻈﺮ ﺑﮑﺎﺭ ﻣﯽ ﺭﻭﺩ ﺑﻴﺖ ﭘﺎﻳﻴﻨﺘﺮ ) (LSBﺭﻭﺵ ﺟﺎﺭﯼ ) ﺧﻮﺍﻧﺪﻥ ﻳﺎ ﻧﻮﺷﺘﻦ ( ﺭﺍ ﺗﻌﻴﻴﻦ ﻣﯽ ﮐﻨﺪ .ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﺑﺮﺍﯼ ﺍﺭﺗﺒﺎﻁ ﺑﺎ EEPROMﺳﺮﻳﺎﻝ ، 24LC01B ﺁﺩﺭﺱ ﺩﺭﺧﻮﺍﺳﺘﯽ ۸ﺑﻴﺖ ﺍﺳﺖ ﮐﻪ ﮐﺪ ﮐﻨﺘﺮﻟﯽ %1010ﺍﺳﺖ ﻭﺍﻧﺘﺨﺎﺏ ﭼﻴﭗ ﺩﺭ ﺍﻳﻨﺠﺎ ﺑﮑﺎﺭ ﻧﻤﯽ ﺁﻳـﺪ ﭘﺲ ﺑﻴﺖ ﮐﻨﺘﺮﻭﻟﯽ ﻣﻤﮑﻦ ﺍﺳﺖ %10100000ﺑﺎﺷﺪ. ﻗﺎﻟﺐ ﺑﻨﺪﯼ ﭼﻨﺪﻳﻦ EEPROMﺳﺮﻳﺎﻝ ﺩﺭ ﺯﻳﺮ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ. ﺍﻧﺪﺍﺯﻩ ﺁﺩﺭﺱ
ﮐﻠﻤﻪ ﮐﻨﺘﺮﻟﯽ
ﻇﺮﻓﻴﺖ
1 byte 1 byte 1 byte 1 byte 1 byte 2 bytes 2 bytes
%1010xxx0 %1010xxx0 %1010xxb0 %1010xbb0 %1010bbb0 %1010ddd0 %1010ddd0
128 bytes 256 bytes 512 bytes 1K bytes 2K bytes 4K bytes 8K bytes
ﺟﺪﻭﻝ ۱-۸
EEPROM 24LC01B 24LC02B 24LC04B 24LC08B 24LC16B 24LC32B 24LC65 اﻧﺘﺨﺎب ﺑﻠﻮک = bbb ﺑﯿﺘﻬﺎی اﻧﺘﺨﺎب وﺳﯿﻠﻪ = ddd ﺑﺪون اﺛﺮ = xxx
ﺍﮔﺮ ﺍﻃﻼﻋﺎﺕ ﺩﻭ ﺑﺎﻳﺘﯽ ) (WORDﺩﺭﻳﺎﻓﺖ ﺷﻮﺩ ﺍﺑﺘﺪﺍ ﺑﺎﻳﺖ ﺑﺎﻻﺗﺮ ﺩﺭﻳﺎﻓﺖ ﻣﯽ ﺷﻮﺩ ﻭﺑﻌﺪ ﺑﺎﻳﺖ ﭘﺎﻳﻴﻨﺘﺮ. ﺑﺮﺍﯼ ﺩﺭﻳﺎﻓﺖ ﺭﺷﺘﻪ STR ،ﺑﻌﺪ ﺍﺳﻢ ﺭﺷﺘﻪ ﻣﯽ ﺁﻳﺪ ﻭﺗﻌﺪﺍﺩ ﮐﺮﮐﺘﺮﻫﺎ ﺑﻌﺪ ﺍﺯ \ ﻣﯽ ﺁﻳﺪ. ]a var byte[8 ]I2CREAD PORTC.4, PORTC.3, $a0, 0, [STR a\8
ﺍﮔﺮ ﺍﺯ ﺑﺮ ﭼﺴﺐ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ،ﺩﺭﺻﻮﺭﺕ ﺩﺭﻳﺎﻓﺖ ﻧﮑـﺮﺩﻥ ﭼﻴـﺰﯼ ﺑـﺮ ﺭﻭﯼ ﻣـﺪﺍﺭ ﻭﺍﺳـﻂ I2Cﺑـﻪ ﺁﻥ ﺑﺮﭼﺴﺐ ﻣﯽ ﭘﺮﺩ .ﺳﺮﻋﺖ ﺍﻧﺘﻘﺎﻝ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ 100KHZﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ 8MHZﺑﺪﺳﺖ ﻣﯽ ﺁﻳﺪ ﻭ
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۲۹
ﺑﺮﺍﯼ ﺳﺮﻋﺘﻬﺎﯼ ﺑﺎﻻﺗﺮ ) ( 400KHZﺍﺯ ﺍﺳﻴﻼﺗﻮﺭ 20MHZﺍﺳـﺘﻔﺎﺩﻩ ﻣـﯽ ﺷـﻮﺩ .ﺍﮔـﺮ ﺍﺯ ﺍﺳـﻴﻼﺗﻮﺭ ﮐﻨـﺪﺗﺮ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﺑﺎﻳﺴﺘﯽ ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ﺯﻳﺮ ﺑﺮﺍﯼ ﺗﻌﺮﻳﻒ ﺁﻥ ﺑﮑﺎﺭ ﺭﻭﺩ. DEFINE I2C_SLOW 1
ﻣﺜﺎﻝ : B0 var byte addr var byte cont con %10100000 ﺁﺩﺭﺱ ﮐﻨﺘﺮﻟﯽ‘ EEPROM addr = 17 ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﺁﺩﺭﺱ ۱۷ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ ‘ Main: ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﺍﻃﻼﻋﺎﺕ ﺩﺭ I2CREAD PORTA.0, PORTA.1, cont, addr, [B0] ‘B0 Loop: goto Loop End : I2CWRITE .۱ -۳-۲۴ﻧﻮﺷﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺑﺮ ﺭﻭﯼ ﻭﺳﺎﻳﻞ ﺟﺎﻧﺒﯽ I2C
ﺗﺮﮐﻴﺐ :
} I2CWRITE Data, Frequency, Control_byte, {Address,} [Vari {, Vari...}]{,Label
ﺷﺮﺡ :
I2CWRITEﺍﻃﻼﻋﺎﺕ ﮐﻨﺘﺮﻝ ﻭ ﺁﺩﺭﺱ ﺭﺍ ﺗﻮﺳﻂ ﻣﺪﺍﺭ ﻭﺍﺳﻂ I2Cﻣﯽ ﻓﺮﺳـﺘﺪ .ﺍﮔـﺮ ﻭﺳـﻴﻠﻪ ﺟـﺎﻧﺒﯽ EEPROMﺳﺮﻳﺎﻝ ﺑﺎﺷﺪ ،ﺍﻧﺘﻈﺎﺭ ۱۰ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ﺑﺮﺍﯼ ﭘﺎﻳﺎﻥ ﮔﺮﻓﺘﻦ ﻧﻮﺷﺘﻦ ﻻﺯﻡ ﺍﺳﺖ.ﺍﮔﺮ ﻗﺒﻞ ﺍﺯ ﺍﻳﻦ ﺍﻧﺘﻈﺎﺭ ﺍﻃﻼﻋﺎﺗﯽ ﺭﺍ ﺑﻔﺮﺳﺘﻴﻢ ﺍﺯ ﻧﻮﺷﺘﻦ ﺁﻥ ﺟﻠﻮﮔﻴﺮﯼ ﻣﯽ ﺷﻮﺩ.ﺍﻧﺪﺍﺯﻩ ﺁﺩﺭﺱ ۱ﻳﺎ ۲ﺑﺎﻳـﺖ ﻣـﯽ ﺑﺎﺷـﺪ ) ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﻭﺳﻴﻠﻪ ﺍﯼ ﮐﻪ ﻣﺘﺼﻞ ﺷﺪﻩ ﺍﺳﺖ ( .ﺍﮔﺮ ﻣﺎ ﺍﺯ ﻭﺳﺎﻳﻞ ﺑﺪﻭﻥ ﺗﺎﺧﻴﺮ ﺍﺳﺘﻔﺎﺩﻩ ﮐﻨﻴﻢ ﻭ ﺩﻭﺑﺎﻳـﺖ ) ( WORDﺭﺍ ﺑﻪ ﺳﻮﯼ ﺁﻥ ﺑﻔﺮﺳﺘﻴﻢ ﺍﺑﺘﺪﺍ ﺑﺎﻳﺖ ﺑﺎﻻﺗﺮ ﻭ ﺳﭙﺲ ﺑﺎﻳﺖ ﭘﺎﻳﻴﻨﺘﺮ ﻓﺮﺳﺘﺎﺩﻩ ﻣﯽ ﺷـﻮﺩ .ﺑـﺮﺍﯼ ﺍﻧﺘﻘﺎﻝ ﺭﺷﺘﻪ STR ،ﻗﺒﻞ ﺍﺯ ﺍﺳﻢ ﺭﺷﺘﻪ ﻣﯽ ﺁﻳﺪ ﻭ ﺗﻌﺪﺍﺩ ﮐﺮﮐﺘﺮﻫﺎ ﺑﻌﺪ ﺍﺯ "\" ﻣﯽ ﺁﻳﺪ. ]a var byte[8 ]I2CWRITE PORTC.4, PORTC.3, $a0, 0, [STR a\8
ﺍﮔﺮ ﺳﻴﮕﻨﺎﻝ ﭘﺎﺳﺨﯽ ﺭﻭﯼ ﻣﺪﺍﺭ ﻭﺍﺳﻂ I2Cﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺑﺮﭼﺴـﺐ ﺍﺧﺘﻴـﺎﺭﯼ ﺧﻮﺍﻫـﺪ ﭘﺮﻳﺪ .ﺳﺮﻋﺖ ﺍﻧﺘﻘﺎﻝ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ 100KHZﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﺑـﺎ ﺍﺳـﻴﻼﺗﻮﺭ 8MHZﺑﺪﺳـﺖ ﻣـﯽ ﺁﻳـﺪ ﻭ ﺑـﺮﺍﯼ ﺳﺮﻋﺘﻬﺎﯼ ﺑﺎﻻﺗﺮ ) ( 400KHZﺍﺯ ﺍﺳﻴﻼﺗﻮﺭ 20MHZﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ .ﺍﮔﺮ ﺍﺯ ﺍﺳـﻴﻼﺗﻮﺭ ﮐﻨـﺪﺗﺮ ﺍﺳـﺘﻔﺎﺩﻩ ﺷﻮﺩ ﺑﺎﻳﺴﺘﯽ ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ﺯﻳﺮ ﺑﺮﺍﯼ ﺗﻌﺮﻳﻒ ﺁﻥ ﺑﮑﺎﺭ ﺭﻭﺩ. DEFINE I2C_SLOW 1
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۳۰
ﺑﺮﺍﯼ ﺩﺍﺷﺘﻦ ﮐﻼﮎ ﻣﺪﺍﺭ ﻭﺍﺳﻂ I2Cﺩﻭ ﻗﻄﺒﯽ ) (Bipolarﻭ ﻧﻪ ﻳﮏ open collectorﺩﺳﺘﻮﺭ ﺍﻟﻌﻤـﻞ DEFINEﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ. DEFINE I2C_SCLOUT
ﺑﺮﺍﯼ ﻋﻤﻠﮑﺮﺩ ﻭﺍﺣﺪﻫﺎﯼ ﺟﺎﻧﺒﯽ ﺩﺍﺭﺍﯼ ﺍﺭﺗﺒﺎﻁ I2Cﺑﺎﻳﺴﺘﯽ ﺭﺍﻫﻨﻤﺎ ﻭ ﻣﺸﺨﺼﺎﺕ ﺳﺎﺯﻧﺪﻩ ﺧﻮﺍﻧﺪﻩ ﺷﻮﺩ ﺗﺎ ﺑﻴﺘﻬﺎﯼ ﮐﻨﺘﺮﻟﯽ ﻭ ﺗﺎﺧﻴﺮﻫﺎ ﻣﻨﺎﺳﺐ ﺑﺪﺳﺖ ﺁﻳﺪ. ﻣﺜﺎﻝ :
ﻣﻘﺪﺍﺭ ۶ﺩﺭ ﺁﺩﺭﺱ ۱۷ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ ‘
ﻣﻘﺪﺍﺭ B0ﺩﺭ ﺁﺩﺭﺱ ۱ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ ‘
B0 var byte addr var byte cont con %10100000 ﺁﺩﺭﺱ ﮐﻨﺘﺮﻟﯽ ‘ EEPROM Main: addr = 17 ﺍﻃﻼﻋﺎﺕ ﺩﺭ ﺁﺩﺭﺱ ۱۷ﺭﻳﺨﺘﻪ ﻣﯽ ﺷﻮﺩ ‘ ]i2cwrite PORTA.0, PORTA.1, cont, addr, [6 pause 10 ﺍﻧﺘﻈﺎﺭ ۱۰ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ﺗﺎ ﻧﻮﺷﺘﻦ ﺗﻤﺎﻡ ﺷﻮﺩ ‘ addr = 1 ﺍﻃﻼﻋﺎﺕ ﺩﺭ ﺁﺩﺭﺱ ۱ﺭﻳﺨﺘﻪ ﻣﯽ ﺷﻮﺩ ‘ B0 = 23 ]i2cwrite PORTA.0, PORTA.1, cont, addr, [B0 pause 10 ﺍﻧﺘﻈﺎﺭ ۱۰ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ﺗﺎ ﻧﻮﺷﺘﻦ ﺗﻤﺎﻡ ﺷﻮﺩ ‘ Loop: goto Loop End
: INPUT .۱ -۳-۲۵ﺑﺮﮔﺰﻳﺪﻥ ﭘﻴﻦ I/Oﺩﺭ ﮔﺮﺍﻳﺶ ﻭﺭﻭﺩﯼ ﺗﺮﮐﻴﺐ : INPUT Pin
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﮔﺮﺍﻳﺶ ﻭﺭﻭﺩﯼ ﻳﮏ ﭘﻴﻦ ﺭﺍ ﺗﻌﻴﻴﻦ ﻣﯽ ﮐﻨﺪ ﻣﺎ ﻣﯽ ﺗﻮﺍﻧﻴﻢ ﻫﻤﻪ ﭘﻴﻨﻬـﺎ ﻭﻳـﺎ ﻳـﮏ ﭘـﻴﻦ ﺭﺍ ﺍﺯ ﻃﺮﻳﻖ ﻣﻘﺪﺍﺭ ﮔﺬﺍﺭﯼ ﺩﺭ TRISﺑﺪﺳﺖ ﺁﻭﺭﻳﻢ ﻣﺜﺎﻝ : TRISB = %11111111 TRISA.1 = 1
: IF … THEN … ELSE .۱ -۳-۲۶ﮔﺰﻳﻨﺶ ﻳﮏ ﻗﺴﻤﺖ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺗﺮﮐﻴﺐ : IF Expression1 { AND / OR Expression2} THEN Label }{instructions ELSE }{instructions ENDIF
۳۱
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﺮﺡ :ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻳﮑﯽ ﺍﺯ ﺩﻭ ﺍﻣﮑﺎﻥ ﻣﺴﻴﺮ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻣﯽ ﮐﻨﺪ .
ﺷﮑﻞ( 1-5.
ﺩﺳﺘﻮﺭ IFﺩﺳﺘﻮﺭ ﺍﺻﻠﯽ ﺷﺎﺧﻪ ﮔﺰﻳﻨﯽ ﺩﺭ PIC BASICﻭ ﺁﻥ ﻣـﯽ ﺗﻮﺍﻧـﺪ ﺑـﻪ ﭼﻨـﺪﻳﻦ ﻃﺮﻳـﻖ ﺑـﺮﺍﯼ ﺍﻧﻌﻄﺎﻑ ﭘﺬﻳﺮﯼ ﺩﺭ ﻓﻬﻢ ﺳﺎﺧﺖ ﻳﮏ ﺗﺼﻤﻴﻢ ﻣﻨﻄﻘﯽ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ . ﻣﺜﺎﻝ ﺑﺮﺍﯼ ﺷﮑﻞ ﺳﺎﺩﻩ ﺍﻳﻦ ﺩﺳﺘﻮﺭ : w var byte Main : IF PORTB.0=0 THEN Add goto Main Add : W=W+1 End
ﺷﮑﻞ ﭘﻴﭽﻴﺪﻩ ﺗﺮ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ELSEﻣﯽ ﺑﺎﺷﺪ.
ﺷﮑﻞ (1-6.
۳۲
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻣﺜﺎﻝ : w var byte Main : IF (PORTB = $F0) && (PORTA.0 = 1) THEN Add ELSE Subtract ENDIF goto Main Add : W=W+1 Subtract : W=W-1 End
ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ ﺭﺍ ﻣﯽ ﺗﻮﺍﻥ ﺑﺼﻮﺭﺕ ﺯﻳﺮ ﻧﻴﺰ ﻧﻮﺷﺖ : w var byte Main : IF PORTB.0=0 THEN W=W+1 ELSE W=W-1 ENDIF goto Main End
.۱ -۳-۲۷ ﺗﺮﮐﻴﺐ :
: LCDOUTﻧﻮﺷﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺑﺮ ﺭﻭﯼ ﻧﻤﺎﻳﺸﮕﺮ LCD }LCDOUT Data {, Data...
ﺷﺮﺡ :
LCDOUTﺍﻃﻼﻋــﺎﺕ ﺭﺍ ﺑــﻪ ( Liquid Crystal Display ) LCDﻣــﯽ ﻓﺮﺳــﺘﺪPIC BASIC .
ﻣﺪﻟﻬﺎﯼ ﮔﻮﻧﺎﮔﻮﻥ LCDﮐﻪ ﮐﻨﺘﺮﻟـﺮ Hitachi 44780ﺭﺍ ﺩﺍﺭﻧـﺪ ﻭ ﻳـﺎ ﺷـﺒﻴﻪ ﺁﻥ ﻋﻤـﻞ ﻣـﯽ ﮐﻨﻨـﺪ ﺭﺍ ﭘﺸﺘﻴﺒﺎﻧﯽ ﻣﯽ ﮐﻨﺪ LCD .ﻣﻌﻤﻮﻻ ۱۴ﻳﺎ ۱۶ﭘﺎﻳﻪ ﺩﺍﺭﺩ ﮐﻪ ﺑﻪ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻣﺘﺼﻞ ﻣﯽ ﺷﻮﻧﺪ .ﺍﮔﺮ ﮐﺮﮐﺘﺮ " " #ﻗﺒﻞ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ﻓﺮﺳﺘﺎﺩﻩ ﺷﻮﺩ ﻣﻘﺪﺍﺭ ASCIIﻫﺮ ﻳﮏ ﺍﺯ ﺍﻃﻼﻋـﺎﺕ ﺭﺍ ﻣـﯽ ﻓﺮﺳـﺘﺪLCDOUT . ﺍﺻﻼﺡ ﮐﻨﻨﺪﻩ ﻫﺎﯼ ﺩﺭ ﺟﺪﻭﻝ ﺯﻳﺮ ﺁﻣﺪﻩ ﺍﺳﺖ . ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ
ﺍﺻﻼﺡ ﮐﻨﻨﺪﻩ ﻫﺎ
ﻣﻘﺪﺍﺭ binary
}{I}{S} BIN{1..16
ﻣﻘﺪﺍﺭ decimal
}{I}{S} DEC{1..5
ﻣﻘﺪﺍﺭ hexadecimal
}{I}{S} HEX{1..4
ﮐﺮﮐﺘﺮ n ،cﺑﺎﺭ ﺗﮑﺮﺍﺭ ﻣﯽ ﺷﻮﺩ
REP c/n
nﮐﺮﮐﺘﺮ ﺭﺷﺘﻪ
}STR ArrayVar {\n
ﺟﺪﻭﻝ ۱-۹
۳۳
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻧﻤﺎﻳﺸﮕﺮ LCDﻣﯽ ﺗﻮﺍﻧﺪ ﺑﺎ ﺑﺎﺱ ۴ﺑﻴﺘﯽ ﻳﺎ ۸ﺑﻴﺘﯽ ﺑﻪ ﻳﮏ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻣﺘﺼﻞ ﺷﻮﺩ .ﺍﮔﺮ ﺍﺯ ﺑﺎﺱ ۸ﺑﻴﺘﯽ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﻫﻤﻪ ۸ﺑﻴﺖ ﺑﺎﻳﺴﺘﯽ ﺑﻪ ﻳﮏ ﭘﻮﺭﺕ ﻭﺻﻞ ﺷﻮﻧﺪ .ﻭﻗﺘﯽ ﺩﺭ ﺣﺎﻟﺖ ﺑﺎﺱ ۴ﺑﻴﺘﯽ ﻫﺮ ۴ﺑﻴﺖ ﻣﯽ ﺗﻮﺍﻧﺪ ﻳﺎ ﺑﻪ ۴ﺑﻴﺖ ﭘﺎﻳﻴﻦ ﻭ ﻳﺎ ﺑﺎﻻﯼ ﭘﻮﺭﺕ ﻣﺘﺼـﻞ ﺷـﻮﺩ .ﺍﮔـﺮ ﺍﺯ LCDﺗﻨﻬـﺎ ﺑـﺮﺍﯼ ﻧﻤـﺎﻳﺶ ﺍﺳـﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ ﺑﺎﻳﺴﺘﯽ ﺧﻂ R/Wﺑﻪ ﺯﻣﻴﻦ ﻣﺘﺼﻞ ﺷﻮﺩ ﺩﺭ ﺣﺎﻟﺖ ﭘﻴﺶ ﻓﺮﺽ ﭘﺎﻳـﻪ ﻫـﺎﯼ LCDﺩﺭ ﺣﺎﻟـﺖ ۴ﺑﻴﺘﯽ ) ( DB7 – DB4ﺑﻪ RA0-RA3ﻣﺘﺼﻞ ﻣﯽ ﺷﻮﻧﺪ .ﺑﻴﺖ RSﺑـﻪ RA4ﻣﺘﺼـﻞ ﻣـﯽ ﺷـﻮﺩ ﻭ ﭘﻴﻦ Eﺑﻪ RB3ﻭﺻﻞ ﻣﯽ ﺷﻮﺩ .ﺩﺭﺍﻳﻦ ﺣﺎﻟﺖ ۲ * ۱۶ ، LCDﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﯽ ﺷﻮﺩ ﺑﺮﺍﯼ ﺗﻐﻴﻴﺮ ﺩﺭ ﻫﺮ ﻳﮏ ﺍﺯ ﻭﺿﻌﻴﺘﻬﺎ ﺑﺎﻻ ﺑﺎﻳﺴﺘﯽ ﺍﺯ ﺩﺳﺘﻮﺭ DEFINEﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ . ﺍﻧﺘﺨﺎﺏ ﭘﻮﺭﺕ‘ ﺍﻧﺘﺨﺎﺏ ۰ﻳﺎ ۴ﺩﺭ ﺣﺎﻟﺖ ﺑﺎﺱ ۴ﺑﻴﺘﯽ‘
ﺍﻧﺘﺨﺎﺏ ﭘﻮﺭﺕ ﺑﺮﺍﯼ ﺍﺗﺼﺎﻝ ﭘﻴﻦ ‘RS ﺍﻧﺘﺨﺎﺏ ﺑﻴﺖ ﺑﺮﺍﯼ ‘RS ﺍﻧﺘﺨﺎﺏ ﭘﻮﺭﺕ ﺑﺮﺍﯼ ﺍﺗﺼﺎﻝ ﭘﻴﻦ ‘ E ﺍﻧﺘﺨﺎﺏ ﺑﻴﺖ ﺑﺮﺍﯼ ‘ E
ﺍﻧﺘﺨﺎﺏ ﺑﺎﺱ ۴ﺑﻴﺘﯽ ﻳﺎ ۸ﺑﻴﺘﯽ ‘ ﺗﻌﻴﻴﻦ ﺗﻌﺪﺍﺩ ﺧﻄﻬﺎﯼ ‘LCD ﺗﺎﺧﻴﺮ ﺍﺭﺳﺎﻝ ﺩﺳﺘﻮﺭ ﺑﺮﺣﺴﺐ ﻣﻴﮑﺮﻭ ﺛﺎﻧﻴﻪ ‘ ﺗﺎﺧﻴﺮ ﺍﺭﺳﺎﻝ ﺍﻃﻼﻋﺎﺕ ﺑﺮﺣﺴﺐ ﻣﻴﮑﺮﻭ ﺛﺎﻧﻴﻪ‘
PORTB
DEFINE LCD_DREG
DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 1 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 0 DEFINE LCD_BITS 4 DEFINE LCD_LINES 2 DEFINE LCD_COMMANDS 2000 DEFINE LCD_DATAUS 50
ﺗﻌﺮﻳﻔﻬﺎﯼ ﺑﺎﻻ ،ﻣﻌﺮﻓﯽ ﻣﯽ ﮐﻨﻨﺪ ۲ LCDﺧﻄﯽ ﺭﺍ ﺑﺎ ﺑﺎﺱ ۴ﺑﻴﺘﯽ ﮐﻪ ﺑﻪ ۴ﺑﻴﺖ ﺑﺎﻻﯼ ﭘﻮﺭﺕ Bﻣﺘﺼﻞ ﺍﺳﺖ ﻭ ﭘﺎﻳﻪ ﺍﻧﺘﺨﺎﺏ ﺭﺟﻴﺴﺘﺮ ) (RSﺑﻪ PORTB.1ﻭ ﭘﺎﻳﻪ ﻓﻌﺎﻝ ﺳﺎﺯﯼ ﺑﻪ PORTB.0ﻣﺘﺼﻞ ﺍﺳﺖ. ﻫﺮ ﮐﻨﺘﺮﻟﺮ LCDﺩﺍﺭﺍﯼ ﺩﺳﺘﻮﺭﺍﺕ ﻣﻌﻴﻨﯽ ﺍﺳﺖ .ﺍﻳﻦ ﺩﺳﺘﻮﺭﺍﺕ ﺑﺼـﻮﺭﺕ LCDOUT $FE, $Kod ﻓﺮﺳﺘﺎﺩﻩ ﻣﯽ ﺷﻮﻧﺪ .ﺍﻳﻦ ﺩﺳﺘﻮﺭﺍﺕ ﺩﺭ ﺟﺪﻭﻝ ﺯﻳﺮ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ. ﻋﻤﻠﮑﺮﺩ
ﺩﺳﺘﻮﺭﺍﺕ
ﭘﺎﮎ ﮐﺮﺩﻥ ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ
$FE, 1
ﺷﺮﻭﻉ ﺍﺯ ﺍﺑﺘﺪﺍﯼ ﺧﻂ ﺍﻭﻝ
$FE, 2
ﺧﺎﻣﻮﺵ ﮐﺮﺩﻥ ﻣﮑﺎﻥ ﻧﻤﺎ
$FE, $0C
ﺭﻭﺷﻦ ﮐﺮﺩﻥ ﻣﮑﺎﻥ ﻧﻤﺎﯼ ﺍﺯ ﻧﻮﻉ ﺧﻂ ﺯﻳﺮ) _ (
$FE, $0E
ﺭﻭﺷﻦ ﮐﺮﺩﻥ ﻣﮑﺎﻥ ﻧﻤﺎﯼ ﺍﺯ ﻧﻮﻉ ﺧﺎﻟﯽ
$FE, $0F
ﺷﻴﻔﺖ ﻣﮑﺎﻥ ﻧﻤﺎ ﺑﻪ ﭼﭗ
$FE, $10
ﺷﻴﻔﺖ ﻣﮑﺎﻥ ﻧﻤﺎ ﺑﻪ ﭼﭗ
$FE, $14
ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﻣﮑﺎﻥ ﻧﻤﺎ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺧﻂ ﺩﻭﻡ
$FE, $C0
ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﻣﮑﺎﻥ ﻧﻤﺎ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺧﻂ ﺳﻮﻡ
$FE, $94
ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﻣﮑﺎﻥ ﻧﻤﺎ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺧﻂ ﭼﻬﺎﺭﻡ
$FE, $D4
۳۴
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻣﺜﺎﻝ :
ﭘﺎﮎ ﮐﺮﺩﻥ ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﻭ ﻧﻮﺷﺘﻦ ”‘ “Hello
ﺭﻓﺘﻦ ﺑﻪ ﺧﻂ ﺩﻭﻡ ‘ ﻧﻤﻨﺎﻳﺶ ﻣﻘﺪﺍﺭ ‘ B0 ﻧﻤﺎﻳﺶ ﮐﺪ ﺍﺳﮑﯽ ﻣﺘﻐﻴﺮ‘ B1
B0 var byte B1 var byte Main: ”lcdout $FE, 1, “Hello lcdout $FE, $C0 lcdout B0 lcdout #B1 Loop: goto Loop End
: LOOKDOWN .۱ -۳-۲۸ﺟﺴﺘﺠﻮ ﮐﺮﺩﻥ ﺟﺪﻭﻝ ﺛﺎﺑﺘﻬﺎ ﺗﺮﮐﻴﺐ : LOOKDOWN Value, [Const {, Const...}], Var
ﺷﺮﺡ : ﺩﺳﺘﻮﺭ LOOKDOWNﻭﺟﻮﺩ ﻣﻘﺪﺍﺭ ﻣﻌﻴﻨﯽ ﺭﺍ ﺩﺭ ﻓﻬﺮﺳﺘﯽ ﺍﺯ ﺛﺎﺑﺘﻬﺎ ﺟﺴﺘﺠﻮ ﻣﯽ ﮐﻨﺪ ﺍﮔﺮ valueﺩﺭ ﻓﻬﺮﺳﺖ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﺷﺎﺧﺺ ﺍﺧﺘﺼﺎﺹ ﺩﺍﺩﻩ ﺷﺪﻩ ﺑﻪ ﺛﺎﺑﺖ ) ﺷﻤﺎﺭﻩ ﺛﺎﺑﺖ ( ﺩﺭ Varﺫﺧﻴﺮﻩ ﻣـﯽ ﺷﻮﺩ .ﺍﮔﺮ ﺛﺎﺑﺖ ﺍﻭﻟﯽ ﺑﺎ ﻣﻘﺪﺍﺭ valueﻳﮑﯽ ﺑﺎﺷﺪ ﻣﻘﺪﺍﺭ ۰ﺩﺭ Varﺫﺧﻴﺮﻩ ﻣﯽ ﺷﻮﺩ .ﻭﺍﮔﺮ ﺛﺎﺑﺖ ﺩﻭﻣﯽ ﺍﺯ ﻓﻬﺮﺳﺖ ﺟﻮﺭ ﺷﻮﺩ ﻣﻘﺪﺍﺭ ۱ﺫﺧﻴﺮﻩ ﻣﯽ ﺷﻮﺩ ﻭ ﻏﻴﺮﻩ . ...ﺍﮔﺮ ﻣﻘﺪﺍﺭ valueﺩﺭ ﻓﻬﺮﺳـﺖ ﻧﺒﺎﺷـﺪ ﻣﻘـﺪﺍﺭ Varﺗﻐﻴﻴﺮ ﻧﻤﯽ ﮐﻨﺪ .ﻓﻬﺮﺳﺖ ﺛﺎﺑﺘﻬﺎ ﻣﯽ ﺗﻮﺍﻧﺪ ﻫﻢ ﻋﺪﺩﯼ ﻭ ﻫﻢ ﮐﺎﺭﮐﺘﺮﯼ ﺑﺎﺷﺪ .ﻫـﺮ ﮐﺮﮐﺘـﺮ ﺭﺷـﺘﻪ ﺭﺍ ﺑﺼﻮﺭﺕ ﻳﮏ ﻣﻘﺪﺍﺭ ASCIIﺭﻓﺘﺎﺭ ﻣﯽ ﮐﻨﺪ .ﺗﻌﺪﺍﺩ ﻣﺠـﺎﺯ ﺛﺎﺑﺘﻬـﺎ ۲۵۵ﺗـﺎ ) ۲۵۶ﺗـﺎ ﺑـﺮﺍﯼ (18CXXX ﺛﺎﺑﺖ ﺩﺭ ﻓﻬﺮﺳﺖ ﻣﯽ ﺑﺎﺷﺪ. ﻣﺜﺎﻝ : B0 var byte B1 var byte B0=$f Main: lookdown B0, (“01234567890ABCDEF”), B1 PORTB=B1 loop: goto loop End
: LOOKUP .۱ -۳-۲۹ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﻣﻘﺪﺍﺭﯼ ﺍﺯ ﺟﺪﻭﻝ ﺛﺎﺑﺘﻬﺎ ﺗﺮﮐﻴﺐ : LOOKUP Index, ( Constant {, Constant}), Var
ﺷﺮﺡ :
LOOKUPﺑﺮﺍﯼ ﺧﻮﺍﻧﺪﻥ ﻣﻘﺪﺍﺭﯼ ﺍﺯ ﺟﺪﻭﻝ ﺛﺎﺑﺘﻬﺎ ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﻣﻘﺪﺍﺭ Indexﺍﺳـﺘﻔﺎﺩﻩ ﻣـﯽ ﺷـﻮﺩ .ﺍﮔـﺮ Indexﺑﺮﺍﺑﺮ ﺻﻔﺮ ﺑﺎﺷﺪ ،ﺩﺭ Varﻣﻘﺪﺍﺭ ﺛﺎﺑﺖ ﺍﻭﻟﯽ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ ﻭ ﺍﮔﺮ Indexﺑﺮﺍﺑﺮ ﻳﮏ ﺑﺎﺷﺪ Var
۳۵
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻣﻘﺪﺍﺭ ﺛﺎﺑﺖ ﺩﻭﻣﯽ ﺭﺍ ﺩﺭ ﺧﻮﺩ ﺟﺎﯼ ﻣﯽ ﺩﻫﺪ ﻭ ﻏﻴﺮﻩ .ﻭﺍﮔﺮ ﻣﻘﺪﺍﺭ Indexﺍﺯ ﺗﻌﺪﺍﺩ ﺛﺎﺑﺘﻬﺎ ﺑﻴﺸﺘﺮ ﺑﺎﺷـﺪ ، Varﺑﺪﻭﻥ ﺗﻐﻴﻴﺮ ﻣﯽ ﻣﺎﻧﺪ .ﺗﻌﺪﺍﺩ ۲۵۶ ) ۲۵۵ﺗﺎ ﺑﺮﺍﯼ (18CXXXﺛﺎﺑﺖ ﺩﺭ ﻓﻬﺮﺳﺖ ﻣﯽ ﺗﻮﺍﻧـﺪ ﻗـﺮﺍﺭ ﺑﮕﻴﺮﺩ. ﻣﺜﺎﻝ : ﺑﺮﻧﺎﻣﻪ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ lookupﺑﺮﺍﯼ ﺭﻗﻤﻬﺎﯼ ﺭﻭﯼ ﻧﻤﺎﻳﺸﮕﺮ ﺳﻮﻥ ﺳـﮕﻤﻨﺖ ) (seven segmentﺭﺍ ﻧﺸﺎﻥ ﻣﯽ ﺩﻫﺪ. Digit var byte ﻣﺘﻐﻴﺮ digitﺑﺮﺍﯼ ﺭﻗﻤﻬﺎ‘ Mask var byte ﻣﺘﻐﻴﺮ Maskﺑﺮﺍﯼ ﺗﺒﺪﻳﻞ ﺷﺪﻩ ﻫﺎ ‘ Main: for i=0 to 9 Digit=i _Lookup Digit, [$3F, $06, $5B, $4F, $66, $6D, $7D, $07, $7F, $6F], Mask ﻓﺮﺳﺘﺎﺩﻥ ﻣﻘﺪﺍﺭ ﺗﺒﺪﻳﻞ ﺷﺪﻩ ﺭﻗﻢ ﺑﻪ ﭘﻮﺭﺕ ‘ B
PORTB=Mask
ﺗﺎﺧﻴﺮ ﺑﺮﺍﯼ ﺩﻳﺪ ﻥ ﻣﻘﺪﺍﺭ ﺧﺮﻭﺟﯽ ‘
pause 500 ﺍﻓﺰﺍﻳﺶ ‘j ﺗﮑﺮﺍﺭ ﺩﻭﺑﺎﺭﻩ ﺑﺮﻧﺎﻣﻪ ‘
next i goto Main end
: LOW .۱ -۳-۳۰ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﺻﻔﺮ ﻣﻨﻄﻘﯽ ﺩﺭ ﭘﻴﻦ ﺧﺮﻭﺟﯽ ﺗﺮﮐﻴﺐ : LOW Pin
ﺷﺮﺡ : ﺗﻐﻴﻴﺮ ﭘﻴﻦ ﻣﻮﺭﺩ ﻧﻈﺮ ﺑﻪ ﺻﻔﺮ .ﭘﻴﻨﻬﺎ ﺑﺼﻮﺭﺕ ﺧﻮﺩﮐﺎﺭ ﺩﺭ ﮔﺮﺍﻳﺶ ﺧﺮﻭﺟﯽ ﻗﺮﺍﺭ ﻣـﯽ ﮔﻴـﺮﺩ .ﻣـﯽ ﺗـﻮﺍﻥ ﻣﻘﺪﺍﺭ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﻣﺴﺘﻘﻴﻢ ﺩﺭ ﺭﺟﻴﺴﺘﺮ ﻗﺮﺍﺭ ﺩﺍﺩ ).ﺍﻟﺒﺘﻪ ﺑﺎﻳﺴﺘﯽ ﭘﻮﺭﺕ ﻣﻮﺭﺩ ﻧﻈﺮ ﺩﺭ ﮔﺮﺍﻳﺶ ﺧﺮﻭﺟـﯽ ﻗﺮﺍﺭ ﮔﻴﺮﺩ( . 7
LOW
ﻭ ﻳﺎ TRISB.7 = 0 PORTB.7 = 0
: NAP .۱ -۳-۳۱ﺧﺎﻣﻮﺵ ﮐﺮﺩﻥ ﺑﺮﺍﯼ ﻳﮏ ﺩﻭﺭﻩ ﺯﻣﺎﻧﯽ ﮐﻮﺗﺎﻩ ﺗﺮﮐﻴﺐ : NAP period
۳۶
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺭﺍ ﺑﺮﺍﯼ ﻳﮏ ﺩﻭﺭﻩ ﺯﻣﺎﻧﯽ ﺩﺭ ﺣﺎﻟﺖ ﺗﻮﺍﻥ ﮐﻢ ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﺪ .ﺩﺭ ﺍﻳﻦ ﻣﺪﺕ ﺍﻧﺮﮊﯼ ﻣﺼﺮﻓﯽ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟـﺮ ﺑـﻪ ﮐﻤﺘـﺮﻳﻦ ﺣﺎﻟـﺖ ﺧـﻮﺩ ﻣـﯽ ﺭﺳـﺪ.ﺍﻳـﻦ ﺩﻭﺭﻩ ﺯﻣـﺎﻧﯽ ﺑـﺎ ﺍﺳـﺘﻔﺎﺩﻩ ﺍﺯ ﺗـﺎﻳﻤﺮ WatchDogﺗﺎﻣﻴﻦ ﻣﯽ ﺷﻮﺩ ﻭ ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﺗﺮﺍﺷﻪ ﻭ ﺩﻣﺎ ﻣﯽ ﺑﺎﺷﺪ. Period 0 1 2 3 4 5 6 7
]Delay [ms 18 36 72 144 288 576 1152 2304
ﺟﺪﻭﻝ ۱-۱۰
ﻣﺜﺎﻝ: Main: ‘ take a nap for 2.304 seconds
nap 7 Loop: goto Loop End
: OUTPUT .۱ -۳-۳۲ﮔﻤﺎﺷﺘﻦ ﭘﻴﻦ I/Oﺩﺭ ﮔﺮﺍﻳﺶ ﺧﺮﻭﺟﯽ ﺗﺮﮐﻴﺐ : OUTPUT pin
ﺷﺮﺡ : ﭘﻴﻦ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﺑﺼﻮﺭﺕ ﺧﺮﻭﺟﯽ ﭘﻴﮑﺮﺑﻨﺪﯼ ﻣﯽ ﮐﻨﺪ OUTPUT PORTB.7
ﺷﺒﻴﻪ ﺑﻪ : TRISB.7 = 0
.۱ -۳-۳۳ ﺗﺮﮐﻴﺐ :
: OWINﺩﺭﻳﺎﻓﺖ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﻃﺮﻳﻖ ﺍﺭﺗﺒﺎﻁ ﻳﮏ ﺳﻴﻢ ]OWIN Pin, Mode, [Var1, Var2...
ﺷﺮﺡ : ﭘﺎﺭﺍﻣﺘﺮ " " Pinﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ ﭘﻴﻨﯽ ﺍﺳﺖ ﮐﻪ ﺍﺭﺗﺒﺎﻁ ﻳﮏ ﺳﻴﻤﻪ ﺭﺍ ﺑﺎ ﻭﺳﻴﻠﻪ ﺩﻳﮕﺮ ﻣـﯽ ﺧﻮﺍﻫـﺪ ﺑﺮﻗـﺮﺍﺭ ﮐﻨﺪ .ﭘﺎﺭﺍﻣﺘﺮ " " Modeﻣﻘﺪﺍﺭ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ ﺍﺭﺗﺒﺎﻁ ﺭﺍ ﺩﺭ ﺧﻮﺩ ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﺪ.
۳۷
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺑﻴﺖ ""Mode
ﭼﮕﻮﻧﮕﯽ ﻋﻤﻠﮑﺮﺩ
ﻓﺮﺳﺘﺎﺩﻥ ﺳﻴﮕﻨﺎﻝ ﺭﻳﺴﺖ ﻗﺒﻞ ﺍﺯ ﺍﺭﺳﺎﻝ ﺍﻃﻼﻋﺎﺕ = 1
0
ﻓﺮﺳﺘﺎﺩﻥ ﺳﻴﮕﻨﺎﻝ ﺭﻳﺴﺖ ﺑﻌﺪ ﺍﺯ ﺍﺭﺳﺎﻝ ﺍﻃﻼﻋﺎﺕ = 1
1
0 = 8-bit data 1= 1-bit data
2
ﺟﺪﻭﻝ ۱-۱۱
ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ " "Var1ﻭ " "Var2ﻣﺘﻐﻴﺮﻫﺎﯼ ﺷﺎﻣﻞ ﺍﻃﻼﻋﺎﺕ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﻣﯽ ﺑﺎﺷﻨﺪ. ﻣﺜﺎﻝ: ﺧﻮﺍﻧﺪﻥ ﺩﻣﺎ ‘ ﻧﺸﺎﻥ ﺩﺍﺩﻥ ﺩﻣﺎﺭﻭﯼ ﭘﻮﺭﺕ
‘B
Temperature var byte Main: ]OWIN PORTC.0, 0, [Temperature PORTB=Temperature goto Main End
: OWOUT .۱ -۳-۳۴ﺍﺭﺳﺎﻝ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﻃﺮﻳﻖ ﻳﮏ ﺳﻴﻢ ) (One_Wire Comunication ﺗﺮﮐﻴﺐ : ]OWOUT Pin, Mode, [Var1, Var2...
ﺷﺮﺡ : ﭘﺎﺭﺍﻣﺘﺮ " " Pinﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ ﭘﻴﻨﯽ ﺍﺳﺖ ﮐﻪ ﺍﺭﺗﺒﺎﻁ ﻳﮏ ﺳﻴﻤﻪ ﺭﺍ ﺑﺎ ﻭﺳﻴﻠﻪ ﺩﻳﮕﺮ ﻣـﯽ ﺧﻮﺍﻫـﺪ ﺑﺮﻗـﺮﺍﺭ ﮐﻨﺪ .ﭘﺎﺭﺍﻣﺘﺮ " " Modeﻣﻘﺪﺍﺭ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﯼ ﺍﺭﺗﺒﺎﻁ ﺭﺍ ﺩﺭ ﺧﻮﺩ ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﺪ. ﺑﻴﺖ ""Mode
ﭼﮕﻮﻧﮕﯽ ﻋﻤﻠﮑﺮﺩ
ﻓﺮﺳﺘﺎﺩﻥ ﺳﻴﮕﻨﺎﻝ ﺭﻳﺴﺖ ﻗﺒﻞ ﺍﺯ ﺍﺭﺳﺎﻝ ﺍﻃﻼﻋﺎﺕ = 1
0
ﻓﺮﺳﺘﺎﺩﻥ ﺳﻴﮕﻨﺎﻝ ﺭﻳﺴﺖ ﺑﻌﺪ ﺍﺯ ﺍﺭﺳﺎﻝ ﺍﻃﻼﻋﺎﺕ = 1
1
0 = 8-bit data 1= 1-bit data
2
ﺟﺪﻭﻝ ۱-۱۲
ﻣﺜﺎﻝ : ﻓﺮﺳﺘﺎﺩﻥ ﺳﻴﮕﻨﺎﻝ ﺭﻳﺴﺖ ﺑﻌﺪ ﺍﺯ ﺩﻭ ﻣﻘﺪﺍﺭ ‘
: PAUSE .۱ -۳-۳۵ ﺗﺮﮐﻴﺐ :
Main : ]OWOUT PORTC.0, 1, [$CC, $BE goto Main End
ﺗﺎﺧﻴﺮ ﺑﺮﺣﺴﺐ ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ )PAUSE Period (in miliseconds
۳۸
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﻪ ﺍﻧﺪﺍﺯﻩ Periodﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ﺗﺎﺧﻴﺮ ﺍﻳﺠﺎﺩ ﻣﯽ ﮐﻨﺪ Period .ﻳﮏ ﻣﻘﺪﺍﺭ ۱۶ﺑﻴﺘﯽ ﺍﺳـﺖ ﻭ ﺣﺪﺍﮐﺜﺮ ﺗﺎﺧﻴﺮ ۶۵۵۳۵ﻣﻴﻠـﯽ ﺛﺎﻧﻴـﻪ ﻣـﯽ ﺑﺎﺷـﺪ .ﺑـﺮﺧﻼﻑ ﺩﺳـﺘﻮﺭﻫﺎﯼ NAPﻭ ، SLEEPﺩﺳـﺘﻮﺭ PAUSEﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺭﺍ ﺩﺭ ﺣﺎﻟﺖ ﺗﻮﺍﻥ ﮐﻢ ﻗﺮﺍﺭ ﻧﻤﯽ ﺩﻫﺪ .ﺑﻨﺎﺑﺮﺍﻳﻦ ﺍﻳـﻦ ﺩﺳـﺘﻮﺭ ﺗـﻮﺍﻥ ﺑﻴﺸـﺘﺮﯼ ﺭﺍ ﻣﺼﺮﻑ ﻣﯽ ﮐﻨﺪ ﻭﻟﯽ ﺯﻣﺎﻥ ﺩﻗﻴﻘﺘﺮﯼ ﺭﺍ ﺑﻪ ﻣﺎ ﻣﯽ ﺩﻫﺪ ).ﺩﻗﺖ ﺁﻥ ﺑﻪ ﮐﻼﮎ ﺍﺳﻴﻼﺗﻮﺭ ﺑﺴﺘﮕﯽ ﺩﺍﺭﺩ ( ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ ﺍﺯ ﭘﻴﺶ ﺗﻌﺮﻳﻒ ﺷﺪﻩ 4MHZﮐﺎﺭ ﻣﯽ ﮐﻨﺪ ﻭ ﺍﺳﻴﻼﺗﻮﺭﻫﺎﯼ ﺩﻳﮕﺮ ﺑﺎ ﺩﺳﺘﻮﺭ DEFINE ﺑﺎﻳﺴﺘﯽ ﺗﻌﺮﻳﻒ ﺑﺸﻮﻧﺪ. ﻣﺜﺎﻝ : TRISB = 0 Main: PORTB = 255 ﺗﺎﺧﻴﺮ ۱ﺛﺎﻧﻴﻪ ﺍﯼ ‘ pause 1000 PORTB = 0 ﺗﺎﺧﻴﺮ ۲ﺛﺎﻧﻴﻪ ﺍﯼ ‘ pause 2000 goto Main End
: PAUSEUS .۱ -۳-۳۶ﺗﺎﺧﻴﺮ ﺑﺮﺣﺴﺐ ﻣﻴﮑﺮﻭﺛﺎﻧﻴﻪ ﺗﺮﮐﻴﺐ : )PAUSEUS Period (in miliseconds
ﺷﺮﺡ :
PAUSEUSﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺑﺮﺍﯼ Periodﻣﻴﮑﺮﻭﺛﺎﻧﻴﻪ ﻣﺘﻮﻗﻒ ﻣـﯽ ﮐﻨـﺪ۱۶ Period .ﺑﻴﺘـﯽ ) ( WORD ﻣﯽ ﺑﺎﺷﺪ ﻭ ﺑﻴﺸﺘﺮﻳﻦ ﺗﺎﺧﻴﺮ 65535μsﺍﺳﺖ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ ﺍﺯ ﭘﻴﺶ ﺗﻌﺮﻳﻒ ﺷـﺪﻩ 4MHZﮐـﺎﺭ ﻣﯽ ﮐﻨﺪ ﻭ ﺍﺳﻴﻼﺗﻮﺭﻫﺎﯼ ﺩﻳﮕﺮ ﺑﺎ ﺩﺳﺘﻮﺭ DEFINEﺑﺎﻳﺴﺘﯽ ﺗﻌﺮﻳﻒ ﺑﺸﻮﻧﺪ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺎ ﺻﺮﻑ ﺍﻧـﺮﮊﯼ ﺑﻴﺸﺘﺮ ﺯﻣﺎﻥ ﺩﻗﻴﻘﺘﺮﯼ ﺭﺍ ﻣﯽ ﺩﻫﺪ .ﮐﻤﺘﺮﻳﻦ ﺗﺎﺧﻴﺮ ﺑﺎ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﻪ ﻓﺮﮐﺎﻧﺲ ﺍﺳﻴﻼﺗﻮﺭ ﺑﺴﺘﮕﯽ ﺩﺍﺭﺩ. Minimal delay 20 us 24 us 12 us 8 us 7 us 5 us 3 us ﺟﺪﻭﻝ ۱ -۱۳
ﻣﺜﺎﻝ :
OSC )3 (3.58 4 8 10 12 16 20
۳۹
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
TRISB = 0 Main: PORTB = 255 pauseus 100 PORTB = 0 goto Main
pauseus 3450 End
: POT .۱ -۳-۳۷ﺑﺮﮔﺮﺩﺍﻧﺪﻥ ﻣﻘﺪﺍﺭ ﻣﻘﺎﻭﻣﺖ ﻣﺘﺼﻞ ﺑﻪ ﭘﻴﻦ ﺗﺮﮐﻴﺐ : POT Pin, Scale, Var
ﺷﺮﺡ : ﺩﺳﺘﻮﺭ POTﻣﻘﺪﺍﺭ ﭘﺘﺎﻧﺴﻴﻮﻣﺘﺮﯼ ﺭﺍ ﮐﻪ ﺭﻭﯼ ﭘﻴﻦ ﻣﻮﺭﺩﻧﻈﺮ ﻗﺮﺍﺭ ﮔﺮﻓﺘـﻪ ﻣﺤﺎﺳـﺒﻪ ﻣـﯽ ﮐﻨـﺪ .ﻣﻘـﺪﺍﺭ ﻣﻘﺎﻭﻣﺖ ﻣﯽ ﺗﻮﺍﻧﺪ ﺑﺎ RCﻫﺎﯼ ﻣﺨﺘﻠﻒ ﭘﺎﻳﺪﺍﺭ ﻣﺤﺎﺳﺒﻪ ﺷﻮﺩ .ﻣﻘﺎﻭﻣﺖ ﺑﺎ ﺯﻣﺎﻥ ﺗﺨﻠﻴﻪ ﺧﺎﺯﻥ ﺩﺭ ﻣﻘﺎﻭﻣﺖ ﻣﺤﺎﺳﺒﻪ ﻣﯽ ﺷﻮﺩ. Scaleﺑﺮﺍﯼ ﺗﻨﻈﻴﻢ ﺗﻐﻴﻴﺮﺍﺕ ﺿﺮﻳﺐ ﺛﺎﺑﺖ ﺷﺒﮑﻪ RCﺑﻪ ﮐﺎﺭ ﻣﯽ ﺭﻭﺩ ﺑﺮﺍﯼ ﺿﺮﺍﻳﺐ ﺛﺎﺑﺖ ﺑﺰﺭﮒ ، RC ﻣﻘﺪﺍﺭ Scaleﺭﺍ 1ﺍﻧﺘﺨﺎﺏ ﻣﯽ ﮐﻨﻴﻢ ﻭ ﺑﺮﺍﯼ ﺿﺮﺍﻳﺐ ﺛﺎﺑـﺖ ﮐﻮﭼـﮏ Scaleﺭﺍ ﺭﻭﯼ ﺣـﺪﺍﮐﺜﺮ ﻣﻘـﺪﺍﺭ ﺧﻮﺩ ۲۵۵ﻗﺮﺍﺭ ﻣﯽ ﺩﻫﻴﻢ .ﺍﮔﺮ ﻣﻘﺪﺍﺭ Scaleﺩﺭﺳﺖ ﺍﻧﺘﺨﺎﺏ ﺷﺪﻩ ﺑﺎﺷﺪ ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴـﺮ Varﺩﺭ ﺣـﺎﻟﺘﯽ ﮐﻪ ﻣﻘﺪﺍﺭ ﻣﻘﺎﻭﻣﺖ ﺣﺪﺍﻗﻞ ﺍﺳﺖ ﺻﻔﺮ ﻣﯽ ﺷﻮﺩ ﻭ ﻫﻨﮕﺎﻣﯽ ﮐﻪ ﺣﺪﺍﮐﺜﺮ ﻣﻘﺎﻭﻣﺖ ﺭﺍ ﺩﺍﺭﻳﻢ ۲۵۵ﻣﯽ ﺷﻮﺩ. ) ﻣﺘﺎﺳﻔﺎﻧﻪ Scaleﺑﺎﻳﺴﺘﯽ ﺑﺼﻮﺭﺕ ﺗﺠﺮﺑﯽ ﺑﺪﺳﺖ ﺁﻳﺪ ( ﺍﻧﻮﺍﻉ ﻣﺒﺪﻟﻬﺎﯼ ﻣﻘﺎﻭﻣﺘﯽ ﻭﺟﻮﺩ ﺩﺍﺭﻧﺪ ﮐﻪ ﻣﯽ ﺗﻮﺍﻧﻨﺪ ﺗﻮﺳﻂ ﺩﺳﺘﻮﺭ POTﺁﻧﻬﺎ ﺭﺍ ﺧﻮﺍﻧﺪ .ﺍﻳﻦ ﻣﺒﺪﻟﻬﺎ ﻭﻟﺘﺎﮊ ﺭﺍ ﺍﻧﺪﺍﺯﻩ ﻧﻤﯽ ﮔﻴﺮﻧﺪ ﺑﻠﮑﻪ ﻣﻘﺎﻭﻣﺖ ﺭﺍ ﺍﻧﺪﺍﺯﻩ ﻣﯽ ﮔﻴﺮﻧﺪ. ﻣﺜﺎﻝ : ﺑﺮﺍﯼ ﺗﻨﻈﻴﻢ Scaleﻣﯽ ﺗﻮﺍﻥ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﮐﺮﺩ:
ﺧﻮﺍﻧﺪﻥ ﻣﻘﺪﺍﺭ ﭘﺘﺎﻧﺴﻴﻮﻣﺘﺮ ﺭﻭﯼ ﭘﻴﻦ ‘ RA0 ﻧﺸﺎﻥ ﺩﺍﺩﻥ ﻣﻘﺪﺍﺭ ﻣﻘﻴﺎﺱ ﻳﺮﻭﯼ ﭘﻮﺭﺕ‘ B
B0 var byte skala var byte Main : FOR skala=1 TO 255 pot PORTA.0, scale, B0 IF B0>253 Then Over NEXT skala Over : PORTB=scale goto Main End
: PULSIN .۱ -۳-۳۸ﻣﺤﺎﺳﺒﻪ ﻋﺮﺽ ﭘﺎﻟﺲ ﺭﻭﯼ ﭘﺎﻳﻪ ﻭﺭﻭﺩﯼ ﺗﺮﮐﻴﺐ : PULSIN Pin, Level, Var
۴۰
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻋﺮﺽ ﭘﺎﻟﺲ ﺭﺍ ﺑﺎ ﺩﻗﺖ ) 10μSﻭﻗﺘﯽ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ 4MHZﮐﺎﺭ ﻣﯽ ﮐﻨﺪ( ﺭﻭﯼ ﭘﻴﻦ ﻣﻮﺭﺩ ﻧﻈﺮ ﻣﺤﺎﺳﺒﻪ ﻣﯽ ﮐﻨﺪ ﻭ ﺍﮔﺮ ﻣﺘﻐﻴﺮ ، Levelﺻﻔﺮ ﺑﺎﺷﺪ ﻗﺴﻤﺖ ﭘﺎﻳﻴﻦ ﻋﺮﺽ ﭘﺎﻟﺲ ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﯼ ﻣﯽ ﺷﻮﺩ ﻭ ﺍﮔﺮ ﻳﮏ ﺑﺎﺷﺪ ﻗﺴﻤﺖ ﺑﺎﻻﯼ ﭘﺎﻟﺲ ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﯼ ﻣﯽ ﺷـﻮﺩ.ﻣﻘـﺪﺍﺭ ﺍﻧـﺪﺍﺯﻩ ﮔﻴـﺮﯼ ﺷـﺪﻩ ﺩﺭ ﻣﺘﻐﻴـﺮ Var ﺫﺧﻴﺮﻩ ﻣﯽ ﺷﻮﺩ .ﺯﻣﺎﻥ ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﯼ ﻣﯽ ﺗﻮﺍﻧﺪ ﺍﺯ ۱۰ﺗﺎ ۶۵۵۳۵ﻣﻴﮑﺮﻭ ﺛﺎﻧﻴـﻪ ﻃـﻮﻝ ﺑﮑﺸـﺪ ) .ﻣﺘﻐﻴـﺮ ۱۶ﺑﻴﺘﯽ ﺍﺳﺖ ( ﺍﮔﺮ ﻣﺘﻐﻴﺮ ۸ﺑﻴﺘـﯽ ﺑﺎﺷـﺪ ۸ﺑﻴـﺖ ﭘـﺎﻳﻴﻦ ﺍﺯ ﻣﺘﻐﻴـﺮ ۱۶ﺑﻴﺘـﯽ WORDﺍﺳـﺘﻔﺎﺩﻩ ﻣـﯽ ﺷﻮﺩ.ﻗﺪﺭﺕ ﺗﻔﮑﻴﮏ ﺑﻪ ﻓﺮﮐﺎﻧﺲ ﺍﺳﻴﻼﺗﻮﺭ ﺑﺴﺘﮕﯽ ﺩﺍﺭﺩ ﻭﺑﺮﺍﯼ ﺍﺳﻴﻼﺗﻮﺭ 4MHZﺣـﺪ ﺗﻔﮑﻴـﮏ 10μSﻣـﯽ ﺑﺎﺷﺪ .ﻭﻗﺘﯽ ﺍﺯ ﺍﺳﻴﻼﺗﻮﺭ 20 MHZﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ ،ﺣﺪ ﺗﻔﮑﻴﮏ 2μSﻣﯽ ﺷﻮﺩ. ﻣﺜﺎﻝ : ﻣﺤﺎﺳﺒﻪ ﺍﻳﻤﭙﺎﻟﺴﻬﺎﯼ ﻳﮏ ﺭﻭﯼ ﭘﻴﻦ
‘RB0
W0 var word Main : pulsin PORTB.0, 1, W0 goto Main End
: PULSOUT .۱ -۳-۳۹ﺗﻮﻟﻴﺪ ﮐﺮﺩﻥ ﭘﺎﻟﺲ ﺩﺭ ﭘﻴﻦ ﺧﺮﻭﺟﯽ ﺗﺮﮐﻴﺐ : PULSOUT Pin, Period
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﭘﺎﻟﺲ ﺑﺎ ﺣﺪ ﺗﻔﮑﻴﮏ ۱۰ﻣﻴﮑﺮﻭﺛﺎﻧﻴﻪ ﺭﺍ ﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﺪ .ﭘﺎﻟﺲ ﺑﺎ ﺗﻐﻴﻴﺮ ﻭﺿﻌﻴﺖ ﻳﮏ ﭘﻴﻦ ﺑﻪ ﺣﺎﻟﺖ ﺩﻳﮕﺮ ﺗﻮﻟﻴﺪ ﻣﯽ ﺷﻮﺩ .ﭘﻴﻦ ﺑﺼﻮﺭﺕ ﺧﻮﺩﮐﺎﺭ ﺩﺭ ﮔﺮﺍﻳﺶ ﻭﺭﻭﺩﯼ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ. ﻣﺜﺎﻝ : Main : ﺗﻮﻟﻴﺪ ﺍﻳﻤﭙﺎﻟﺴﻬﺎ ﺭﻭﯼ ﭘﻴﻦ ‘ RB7
pulsout PORTB.7, 100 goto Main End
: PWM .۱ -۳-۴۰ﺗﻮﻟﻴﺪ ﺳﻴﮕﻨﺎﻝ PWMﺭﻭﯼ ﭘﻴﻦ ﺗﺮﮐﻴﺐ : PWM Pin, Ratio, Cycle
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﭘﺎﻟﺴﻬﺎﯼ ( Pulse_width Modulation ) PWMﺑﺮﺍﯼ ﭘﻴﻦ ﻣﺸﺨﺺ ﺷﺪﻩ ﻣﯽ ﻓﺮﺳﺘﺪ . ﺍﻳﻦ ﺳﻴﮑﻞ ﺑﺮﺍﯼ ﺗﻌﺪﺍﺩ ﺑﺎﺭﻫﺎﯼ ﮐﻪ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺑﺎ ﭘﺎﺭﺍﻣﺘﺮ Cycleﺧﻮﺩﺵ ﺭﺍ ﺗﮑﺮﺍﺭ ﻣﯽ ﮐﻨﺪ .ﻣﺪﺕ ﺩﻭﺭﻩ
ﺷﮑﻞ ( 1-7.
PWM
۴۱
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺑﻪ ﺍﺳﻴﻼﺗﻮﺭ ﺑﺴﺘﮕﯽ ﺩﺍﺭﺩ .ﺩﺭ ﺣﺎﻟﺘﯽ ﮐﻪ ﺍﺳﻴﻼﺗﻮﺭ 4MHZﺍﺳﺖ ﻣـﺪﺕ ﺩﻭﺭﻩ ﺗﻨـﺎﻭﺏ 5mSﺍﺳـﺖ .ﻭﻗﺘـﯽ ﺍﺳﻴﻼﺗﻮﺭ 8MHZﺑﺎﺷﺪ ﺍﻳﻦ ﺩﻭﺭﻩ ﺗﻨﺎﻭﺏ ﺑﻪ 1mSﻣﯽ ﺭﺳﺪ .ﺑﺎ ﺩﺳﺘﻮﺭ PWMﺑﻪ ﺳﺎﺩﮔﯽ ﺑﺎ ﻳﮏ ﻣﺪﺍﺭ RC ﻣﯽ ﺗﻮﺍﻥ ﻭﻟﺘﺎﮊ DCﺗﻮﻟﻴﺪ ﮐﺮﺩ ﻭ ﺩﺭ ﻭﺍﻗﻊ ﻳﮏ ﻣﺒﺪﻝ D/Aﺳﺎﺩﻩ ﺳﺎﺧﺘﻪ ﻣﯽ ﺷﻮﺩ. ﻣﺜﺎﻝ : Main : ﻓﺮﺳﺘﺎﺩﻥ ﺳﻴﮕﻨﺎﻝ %۵۰ PWMﺭﻭﯼ ﭘﻴﻦpwm PORTB.7, 127, 100 ‘ RB7 goto Main End
: RANDOM .۱ -۳-۴۱ﺗﻮﻟﻴﺪ ﻋﺪﺩ ﺗﺼﺎﺩﻓﯽ ﺗﺮﮐﻴﺐ : RANDOM Variable
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻋﺪﺩ ﺗﺼﺎﺩﻓﯽ ﺭﺍ ﺩﺭ ﻳﮏ ﻣﺘﻐﻴﺮ ۱۶ﺑﻴﺘﯽ ﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﺪ).ﺗﻨﻬﺎ ﺻﻔﺮ ﺭﺍ ﺗﻮﻟﻴﺪ ﻧﻤﯽ ﮐﻨﺪ( ﻣﺜﺎﻝ : ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﻣﻘﺪﺍﺭ ﺭﺍﻧﺪﻡ ﺩﺭ ﻣﺘﻐﻴﺮ ‘ W0 ﻧﻤﺎﻳﺶ ﻣﻘﺪﺍﺭ ﺭﺍﻧﺪﻡ ﺩﺭ ‘ LCD
W0 var word Main : random W0 lcdoout #W0 goto Main End
: RCTIME .۱ -۳-۴۲ﻣﺤﺎﺳﺒﻪ ﭘﺎﻟﺲ ﺭﻭﯼ ﭘﻴﻦ ) ﻣﺸﺎﺑﻪ (PULSIN ﺗﺮﮐﻴﺐ : RCTIME Pin, State, Variable
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻣﺪﺕ ﺯﻣﺎﻥ ﺭﺍ ﮐﻪ ﭘﻴﻦ ﺩﺭ ﻳﮏ ﺣﺎﻟﺖ ﻣﻌﻴﻨﯽ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ ،ﺍﻧـﺪﺍﺯﻩ ﻣـﯽ ﮔﻴـﺮﺩ .ﺍﮔـﺮ ﭘـﻴﻦ ﺑﺪﻭﻥ ﺗﻐﻴﻴﺮ ﺑﻤﺎﻧﺪ ﻣﺘﻐﻴﺮ Variableﺻﻔﺮ ﻣﯽ ﺷﻮﺩ RCTIME .ﺑـﺮﺍﯼ ﺧﻮﺍﻧـﺪﻥ ﭘﺘﺎﻧﺴـﻴﻤﺮ ﺑـﺎ ﻋﻨﺎﺻـﺮ ﻣﻘﺎﻭﻣﺘﯽ ﺩﻳﮕﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ .ﺣﺪ ﺗﻔﮑﻴﮏ ﺑﻪ ﻓﺮﮐﺎﻧﺲ ﺍﺳﻴﻼﺗﻮﺭ ﺑﺴﺘﮕﯽ ﺩﺍﺭﺩ .ﻭﺑﺮﺍﯼ ﺍﺳﻴﻼﺗﻮﺭ 4MHZ ﺣﺪ ﺗﻔﮑﻴﮏ 10μSﻣﯽ ﺑﺎﺷﺪ .ﻭﻗﺘﯽ ﺍﺯ ﺍﺳﻴﻼﺗﻮﺭ 20 MHZﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ ،ﺣﺪ ﺗﻔﮑﻴﮏ 2μSﻣﯽ ﺷﻮﺩ ﻣﺜﺎﻝ : ﺗﺨﻠﻴﻪ ﺧﺎﺯﻥ ‘ ﺗﺨﻠﻴﻪ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ۱۰ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ‘ ﻣﺤﺎﺳﺒﻪ ﻣﺪﺕ ﺷﺎﺭﮊ ﺷﺪﻥ ‘ ﻧﻤﺎﻳﺶ ﻣﻘﺪﺍﺭ W0ﺭﻭﯼ ‘ LCD
W0 var word Main : low PORTA.0 pause 10 rctime PORTA.0, 0, W0 lcdout #W0 goto Main End
۴۲
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
: READ .۱ -۳-۴۳ﺧﻮﺍﻧﺪﻥ ﻳﮏ ﺑﺎﻳﺖ ﺍﺯ ﺍﻃﻼﻋﺎﺕ EEPROM
ﺗﺮﮐﻴﺐ :
READ Address, Variable
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺍﺯ ﺣﺎﻓﻈﻪ EEPROMﺩﺍﺧﻠﯽ ﺍﺯ ﺁﺩﺭﺱ ﻣﺸﺨﺺ ﺷﺪﻩ ﻣﯽ ﺧﻮﺍﻧﺪ ﻭ ﻧﺘﺎﻳﺞ ﺭﺍ ﺩﺭ Variableﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﺪ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺗﻨﻬﺎ ﺑﺎ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮﻫﺎﯼ ﮐﻪ ﺩﺍﺭﺍﯼ EEPROMﺩﺍﺧﻠﯽ ﺍﺳﺖ ﺍﺟﺮﺍ ﻣﯽ ﺷﻮﻧﺪ .ﺍﺯ ﺩﺳﺘﻮﺭ I2CREADﺑﺮﺍﯼ EEPROMﻫﺎﯼ ﺧﺎﺭﺟﯽ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ. B0 var byte W var word Main : READ 5, B0 ﺧﻮﺍﻧﺪﻥ ﻣﻘﺪﺍﺭ ﺁﺩﺭﺱ ۵ﻭ ﺭﻳﺨﺘﻦ ﺩﺭ ﻣﺘﻐﻴﺮ ‘B0 ﺧﻮﺍﻧﺪﻥ ﻳﮏ ﻣﻘﺪﺍﺭ ۱۶ﺑﻴﺘﯽ ﺍﺯ ﺁﺩﺭﺱ ۶ﻭ READ 6, W.BYTE0 ‘ ۷ READ 7, W.BYTE1 Loop: goto Loop End
: READCODE .۱ -۳-۴۴ﺧﻮﺍﻧﺪﻥ ۲ﺑﺎﻳﺖ ) ( WORDﺍﺯ ﮐﺪ ﺑﺮﻧﺎﻣﻪ ﺗﺮﮐﻴﺐ : READ Address, Variable
ﺷﺮﺡ :ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﮐﺪ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺍﺯ ﺁﺩﺭﺱ ﺩﺍﺩﻩ ﺷﺪﻩ ﻣﯽ ﺧﻮﺍﻧـﺪ ﻭ ﻧﺘﻴﺠـﻪ ﺭﺍ ﺩﺭ ﻣﺘﻐﻴـﺮ ۱۶ﺑﻴﺘـﯽ ﻣـﯽ ﮔﺬﺍﺭﺩ .ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻫﺎﯼ PIC16F87Xﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﮐﺪ ﺑﺮﻧﺎﻣـﻪ ﺭﺍ ﺩﺭ ﺣـﺎﻝ ﺍﺟـﺮﺍ ﺍﺟـﺎﺯﻩ ﻣـﯽ ﺩﻫﻨﺪ. ﻣﺜﺎﻝ : ﺧﻮﺍﻧﺪﻥ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﺣﺎﻓﻈﻪ ﻓﻠﺶ ﺩﺭ ﺁﺩﺭﺱ ۱۰۰ﻭ ﺭﻳﺨﺘﻦ ﺩﺭﻣﺘﻐﻴﺮ
‘ W0
Wo var word Main : readcode 100, W0 Loop : goto Loop End
: REVERSE .۱ -۳-۴۵ﺗﻐﻴﺮ ﮔﺮﺍﻳﺶ ﭘﻴﻦ ﺗﺮﮐﻴﺐ : REVERSE Pin
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﮔﺮﺍﻳﺶ ﭘﻴﻦ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﻭﺍﺭﻭﻧﻪ ﻣﯽ ﮐﻨﺪ .ﺍﮔﺮ ﭘﻴﻨﯽ ﺩﺭ ﮔﺮﺍﻳﺶ ﻭﺭﻭﺩﯼ ﺑﺎﺷﺪ ﺑﺎ ﺍﻳﻦ ﺩﺳـﺘﻮﺭ ﺩﺭ ﮔﺮﺍﻳﺶ ﺧﺮﻭﺟﯽ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ.
۴۳
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
: SERIN .۱ -۳-۴۶ﻭﺭﻭﺩﯼ ﺳﺮﻳﺎﻝ ﺁﺳﻨﮑﺮﻭﻥ ﺗﺮﮐﻴﺐ : }SERIN Pin, Mode, {Timeout, Label}, {[Qual...], }{Item...
ﺷﺮﺡ :
SERINﻣﻘﺎﺩﻳﺮﯼ ﺭﺍ ﺑﺎ ﻗﺎﻟﺐ ﺑﻨﺪﯼ ﺁﺳﻨﮑﺮﻭﻥ ) ۸ﺑﻴﺖ ﺑﺪﻭﻥ ﺑﻴﺖ ﺗﻮﺍﺯﻥ ﻭﻳـﮏ ﺑﻴـﺖ ﺗﻮﻗـﻒ ( ﺍﺯ ﭘـﻴﻦ ﻣﺸﺨﺺ ﺷﺪﻩ ﺩﺭﻳﺎﻓﺖ ﻭ ﺩﺭ ﻣﺘﻐﻴﺮ ﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﺪ .ﺑﺠﺎﯼ ﻣﻘﺪﺍﺭ ﻋﺪﺩﯼ ﺗﻨﻈﻴﻤﯽ ۰ﺗـﺎ ( Mode ) ۱۵ ﻣﯽ ﺗﻮﺍﻥ ﻳﮏ ﺍﺳﻢ ﺍﺯ ﮐﺘﺎﺑﺨﺎﻧﻪ " "modedefs.incﺭﺍ ﻗﺮﺍﺭ ﺩﺍﺩ ) .ﺟﺪﻭﻝ ( ۲-۱۴ ﺩﺳﺘﻮﺭ SERINﻣﯽ ﺗﻮﺍﻧﺪ ﺩﺍﺭﺍﯼ ﺑﺮﭼﺴﺐ ) ﭘﺎﺭﺍﻣﺘﺮ ( Labelﻧﻴﺰ ﺑﺎﺷﺪ ﮐﻪ ﺩﺭ ﺻﻮﺭﺕ ﺩﺭﻳﺎﻓﺖ ﻧﮑـﺮﺩﻥ ﺍﻃﻼﻋﺎﺗﯽ ﺩﺭ ﺯﻣﺎﻥ ﻣﻌﻴﻦ ﺑﺮﻧﺎﻣﻪ ﺑـﻪ ﺁﻥ ﺑﺮﭼﺴـﺐ ﻣـﯽ ﭘـﺮﺩ ) .ﺣﺎﻟـﺖ ﺍﺯ ﭘـﻴﺶ ﺗﻌﺮﻳـﻒ ﺷـﺪﻩ ﭘـﺎﺭﺍﻣﺘﺮ 1mS ، Timeoutﺍﺳﺖ( ﺍﮔﺮ ﻣﻘﺪﺍﺭﯼ ﻳﺎ ﮐﺮﮐﺘﺮﯼ ﺩﺍﺧﻞ ﺑﺮﺍﮐﺖ " ] [ " ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﻗﺒﻞ ﺍﺯ ﺩﺭﻳﺎﻓﺖ ﺍﻃﻼﻋـﺎﺕ ﺍﺻـﻠﯽ ﺑﺎﻳﺴﺘﯽ ﻣﻘﺪﺍﺭ ﻗﻴﺪﮔﺬﺍﺭﯼ ﺷﺪﻩ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﮐﻨﺪ .ﻗﻴﺪﮔﺬﺍﺭ ﻣﯽ ﺗﻮﺍﻧﺪ ﻳﮏ ﻣﻘﺪﺍﺭ ﺛﺎﺑﺖ ﻳﺎ ﻳﮏ ﻣﺘﻐﻴـﺮ ﻭ ﻳـﺎ ﻳﮏ ﺭﺷﺘﻪ ﺑﺎﺷﺪ .ﺍﮔﺮ ﻋﻼﻣﺖ " "#ﻗﺒﻞ ﺍﺯ ﻣﺘﻐﻴﺮ ﻗﺮﺍﺭ ﮔﻴﺮﺩ ﻣﻘﺪﺍﺭ ﺩﺳﻴﻤﺎﻝ ﺩﺭﻳﺎﻓﺘﯽ ﺑـﻪ ASCIIﺗﺒـﺪﻳﻞ ﻣﯽ ﺷﻮﺩ ﻭﻧﺘﻴﺠﻪ ﺭﺍ ﺩﺭ ﻣﺘﻐﻴﺮ ﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﺪ.
State
True
Inverted
Baud rate
Mode number
Mode
2400
0
T2400
1200
1
T1200
9600
2
T9600
300
3
T300
2400
4
N2400
1200
5
N1200
9600
6
N9600
300
7
N300
ﺟﺪﻭﻝ ۱-۱۴
ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ 4MHZﺩﺭﺳﺖ ﮐﺎﺭ ﻣﯽ ﮐﻨﺪ ﻭﺑﺮﺍﯼ ﺍﻳﻨﮑﻪ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭﻫﺎﯼ ﺩﻳﮕﺮ ﺩﺭﺳﺖ ﮐﺎﺭ ﮐﻨـﺪ ﺑﺎﻳﺴﺘﯽ ﻓﺮﮐﺎﻧﺲ ﺍﺳﻴﻼﺗﻮﺭ ﺑﺎ ﺩﺳﺘﻮﺭ DEFINEﺗﻌﺮﻳﻒ ﺷﻮﺩ. ﻣﺜﺎﻝ : " Include " modedefs.inc B0 var byte Main : ﺍﻧﺘﻈﺎﺭ ﺑﺮﺍﯼ ﺭﺳﻴﺪﻥ ﮐﺮﮐﺘﺮ " "Aﺭﻭﯼ ﭘﻴﻦ RB0ﻭ ﺳﭙﺲ ﺩﺭﻳﺎﻓﺖ ﮐﺮﮐﺘﺮﻫﺎﯼ ﺑﻌﺪﯼ‘
serin PORTB.0, N2400, ["A"], B0
۴۴
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
variable B0 ﻧﻤﺎﻳﺶ ﻣﺤﺘﻮﺍﯼ B0ﺭﻭﯼ lcdout B0 ‘ LCD Loop : goto Loop End
.۱ -۳-۴۷ ﺗﺮﮐﻴﺐ :
: SEROUTﺧﺮﻭﺟﯽ ﺳﺮﻳﺎﻝ ﺁﺳﻨﮑﺮﻭﻥ ]}SEROUT Pin, Mode, [Item{, Item...
ﺷﺮﺡ : ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺑﺎ ﻗﺎﻟﺐ ﺑﻨﺪﯼ ﺁﺳﻨﮑﺮﻭﻥ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ 8N1ﺍﺯﻃﺮﻳﻖ ﭘﻴﻦ ﻣﺸﺨﺺ ﺷﺪﻩ ﻣﯽ ﻓﺮﺳﺘﺪ .ﻣـﺪﻫﺎﯼ ﺍﻧﺘﻘﺎﻝ ) " ( "Modeﺑﻪ ﺍﻳﻦ ﺷﺮﺡ ﻣﯽ ﺑﺎﺷﻨﺪ. ﺑﺠﺎﯼ ﻣﻘﺪﺍﺭ ﻋﺪﺩﯼ ﺗﻨﻈﻴﻤﯽ ۰ﺗﺎ ( Mode ) ۱۵ﻣﯽ ﺗﻮﺍﻥ ﻳﮏ ﺍﺳﻢ ﺍﺯ ﮐﺘﺎﺑﺨﺎﻧﻪ ""modedefs.inc ﺭﺍ ﻗﺮﺍﺭ ﺩﺍﺩ. State
Driven True
Driven Inverted
Open True
Open Inverted
Baud Rate 2400
Mode number 0
Mode T2400
1200
1
T1200
9600
2
T9600
300
3
T300
2400
4
N2400
1200
5
N1200
9600
6
N9600
300
7
N300
2400
8
OT2400
1200
9
OT1200
9600
10
OT9600
300
11
OT300
2400
12
ON2400
1200
13
ON1200
9600
14
ON9600
300
15
ON300
ﺟﺪﻭﻝ ۱-۱۵
ﺍﮔﺮ ﻋﻼﻣﺖ " "#ﻗﺒﻞ ﺍﺯ ﻣﺘﻐﻴﺮ SEROUTﻗﺮﺍﺭ ﮔﻴﺮﺩ ﻣﻘﺪﺍﺭ ﺩﺳﻴﻤﺎﻝ ﺑﻪ ﮐﺪ ASCIIﺗﺒﺪﻳﻞ ﻣﯽ ﺷـﻮﺩ ﻣﺜﻼ ﺍﮔﺮ Bﺑﺮﺍﺑﺮ ۳۴ﺑﺎﺷﺪ ﺁﻧﮕﺎﻩ #Bﺩﺭ ﺍﻳﻦ ﺩﺳﺘﻮﺭ " "۳ﻭ " " ۴ﺭﺍ ﻣﯽ ﻓﺮﺳﺘﺪ .ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑـﺎ ﺍﺳـﻴﻼﺗﻮﺭ 4MHZﺩﺭﺳﺖ ﮐﺎﺭ ﻣﯽ ﮐﻨﺪ ﻭﺑﺮﺍﯼ ﺍﻳﻨﮑﻪ ﺑﺎ ﺍﺳﻴﻼﺗﻮﺭﻫﺎﯼ ﺩﻳﮕـﺮ ﺩﺭﺳـﺖ ﮐـﺎﺭ ﮐﻨـﺪ ﺑﺎﻳﺴـﺘﯽ ﻓﺮﮐـﺎﻧﺲ ﺍﺳﻴﻼﺗﻮﺭ ﺑﺎ ﺩﺳﺘﻮﺭ DEFINEﺗﻌﺮﻳﻒ ﺷﻮﺩ.ﺗﺎﺧﻴﺮ ﺑﻌﺪ ﺍﺯ ﻓﺮﺳﺘﺎﺩﻥ ﻫﺮ ﻣﻘﺪﺍﺭ ﺑﺎ DEFINEﺗﻌﺮﻳﻒ ﻣـﯽ ﺷﻮﺩ ﮐﻪ ﺯﻣﺎﻥ ۱ﺗﺎ ۶۵۵۳۵ﻣﻴﮑﺮﻭ ﺛﺎﻧﻴﻪ ﺭﺍ ﺩﺭ ﺑﺮ ﻣﯽ ﮔﻴﺮﺩ. ۱ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ ﺗﺎﺧﻴﺮ ﺑﻴﻦ ﺩﻭ ﮐﺮﮐﺘﺮ ‘ DEFINE CHAR_PACING 1000
ﻣﺜﺎﻝ :
۴۵
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻓﺮﺳﺘﺎﺩﻥ ﻣﻘﺪﺍﺭ ﮐﺪ ﺍﺳﮑﯽ B0ﻭ ﻋﺪﺩ ﺛﺎﺑﺖ ۱۳ﺑﺎ
‘RA0
B0 var byte Main: B0 = 25 ]serout PORTA.3, N2400, [#B0, 13 Loop : goto Loop End
: SHIFTIN .۱ -۳-۴۸ﻭﺭﻭﺩﯼ ﺳﺮﻳﺎﻝ ﺳﻨﮑﺮﻭﻥ ﺗﺮﮐﻴﺐ : ]SHIFTIN DataPin, ClockPin, Mode, [Var{\Bits}...
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﻴﺘﻬﺎﯼ ﺩﺭﻳﺎﻓﺘﯽ ﺍﺯ ﭘﻴﻦ ﻣﺸﺨﺼﯽ ﺭﺍ ﺑﺼﻮﺭﺕ ﺳﻨﮑﺮﻭﻥ ﺑﺎ ﺳﻴﮕﻨﺎﻝ ﻓﺮﮐﺎﻧﺴﯽ " "ClockPinﺩﺭﻳﺎﻓﺖ ﻣﯽ ﮐﻨﺪ ﻭ ﺁﻧﻬﺎ ﺭﺍ ﺩﺭ ﻣﺘﻐﻴﺮﯼ ﺫﺧﻴﺮﻩ ﻣﯽ ﮐﻨﺪ "Var\Bits" .ﻣﻘﺪﺍﺭ ﺑﻴﺘﻬﺎ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﺷﺪﻩ ﺭﺍ ﺑﺼﻮﺭﺕ ﺩﻟﺨﻮﺍﻩ ﺗﻌﻴﻴﻦ ﻣﯽ ﮐﻨﺪ ﻣﻘﺪﺍﺭ ﭘﻴﺶ ﻓﺮﺽ ﺁﻥ ۸ﻣﯽ ﺑﺎﺷﺪ .ﺑـﺎ ﺗﻮﺟـﻪ ﺑـﻪ ﺷـﻴﻔﺖ ﺩﺍﺩﻥ ﻣﺴﺘﻘﻴﻢ ) ﺍﺯ MSBﺑﻪ ( LSBﻣﺪﻫﺎﯼ ﺍﻧﺘﻘﺎﻝ ﮔﻮﻧﺎﮔﻮﻥ ﻣﯽ ﺗﻮﺍﻧﺪ ﺗﻌﺮﻳﻒ ﺷﻮﺩ .ﺑﺮﺍﯼ ﺍﺳـﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﻣﺪﻫﺎ ﺑﺎﻳﺴﺘﯽ ﮐﺘﺎﺑﺨﺎﻧﻪ " "modedefs.BASﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺍﻟﺤﺎﻕ ﮐﻨﻴﺪ. ﻋﻤﻠﮑﺮﺩ
Mode number
""Mode
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﺑﺎﻻﺗﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﭘﻴﺶ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﺻﻔﺮ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
0
MSBPRE
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﭘﺎﻳﻴﻨﺘﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﭘﻴﺶ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﺻﻔﺮ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
1
LSBPRE
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﺑﺎﻻﺗﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﺑﻌﺪ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﺻﻔﺮ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
2
MSBPOST
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﭘﺎﻳﻴﻨﺘﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﺑﻌﺪ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﺻﻔﺮ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ
3
LSBPOST
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﺑﺎﻻﺗﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﭘﻴﺶ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﻳﮏ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
4
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﭘﺎﻳﻴﻨﺘﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﭘﻴﺶ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﻳﮏ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
5
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﺑﺎﻻﺗﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﺑﻌﺪ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﻳﮏ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
6
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﭘﺎﻳﻴﻨﺘﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﺑﻌﺪ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﻳﮏ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
7
ﺟﺪﻭﻝ 1-16
ﻓﺮﮐﺎﻧﺲ ﺷﻴﻔﺖ ﺣﺪﻭﺩ ﺗﺎﺧﻴﺮ ﺍﺿﺎﻓﯽ ﺭﺍ ﺑﺮﺍﯼ ﺁﻫﺴﺘﻪ ﮐﺮﺩﻥ ﮐﻼﮎ ﺗﻌﺮﻳﻒ ﻣﯽ ﮐﻨﻴﻢ. KHZ
50ﺍﺳﺖ ﮐﻪ ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﺍﺳـﻴﻼﺗﻮﺭ ﻣـﯽ ﺑﺎﺷـﺪ .ﺑـﺎ ﺍﺳـﺘﻔﺎﺩﻩ ﺍﺯ DEFINE
DEFINE SHIFT_PAUSEUS 100 ‘ Slowing down the clock for additional 100ms
۴۶
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻣﺜﺎﻝ : ]shiftin Data, Clock, MSBPRE, [RxData
: SHIFTOUT .۱ -۳-۴۹ﺧﺮﻭﺟﯽ ﺳﺮﻳﺎﻝ ﺳﻨﮑﺮﻭﻥ ﺗﺮﮐﻴﺐ : ]SHIFTOUT DataPin, ClockPin, Mode, [Var{\Bits}...
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﻴﺘﻬﺎ ﺭﺍ ﺍﺯ ﻃﺮﻳﻖ ﭘﻴﻦ ﻣﺸﺨﺼﯽ ﺑﺼـﻮﺭﺕ ﺳـﻨﮑﺮﻭﻥ ﺑـﺎ ﺳـﻴﮕﻨﺎﻝ ﻓﺮﮐﺎﻧﺴـﯽ ""ClockPin ﺍﺭﺳﺎﻝ ﻣﯽ ﮐﻨﺪ "Var\Bits" .ﻣﻘﺪﺍﺭ ﺑﻴﺘﻬﺎ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﺷﺪﻩ ﺭﺍ ﺗﻌﻴﻴﻦ ﻣﯽ ﮐﻨﺪ. ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺷﻴﻔﺖ ﺩﺍﺩﻥ ﻣﺴﺘﻘﻴﻢ ) ﺍﺯ MSBﺑﻪ ( LSBﻣﺪﻫﺎﯼ ﺍﻧﺘﻘﺎﻝ ﮔﻮﻧﺎﮔﻮﻥ ﻣﯽ ﺗﻮﺍﻧﺪ ﺗﻌﺮﻳﻒ ﺷﻮﺩ. ﺑﺮﺍﯼ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﻣﺪﻫﺎ ﺑﺎﻳﺴﺘﯽ ﮐﺘﺎﺑﺨﺎﻧﻪ " "modedefs.BASﺭﺍ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺍﻟﺤﺎﻕ ﮐﻨﻴﺪ ﻋﻤﻠﮑﺮد
Mode number
""Mode
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﺑﺎﻻﺗﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﭘﻴﺶ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﺻﻔﺮ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
0
LSBFIRST
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﭘﺎﻳﻴﻨﺘﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﭘﻴﺶ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﺻﻔﺮ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
1
MSBFIRST
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﺑﺎﻻﺗﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﭘﻴﺶ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﻳﮏ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
4
ﺍﺑﺘﺪﺍ ﺑﻴﺖ ﭘﺎﻳﻴﻨﺘﺮ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﻣﯽ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﭘﻴﺶ ﺍﺯ ﮐﻼﮎ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﯽ ﺷﻮﺩ .ﮐﻼﮎ ﺭﻭﯼ ﻳﮏ ﻣﻨﻄﻘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﻣﯽ ﺷﻮﺩ.
5
ﺟﺪﻭﻝ
ﻣﺜﺎﻝ :
۱-۱۷
B0 var byte B1 var byte W0 var byte Main : ]shiftout PORTA.0, PORTA.1, MSBFIRST, [B0, B1 ﻓﺮﺳﺘﺎﺩﻥ ﻣﺤﺘﻮﺍﯼ B0ﻭ B1ﺑﺼﻮﺭﺕ ﺷﻴﻔﺖ ﺩﺍﺩﻥ ﺑﻪ ﺧﺮﻭﺟﯽ ﺑﻄﻮﺭﯼ ﮐﻪ ﺍﻭﻟﻴﻦ ﺑﻴﺖ ﺷﻴﻔﺖ ﺩﺍﺩﻩ ﺷﺪﻩ ﺑﻴﺖ MSBﻣﯽ ﺑﺎﺷﺪ‘
]shiftout PORTA.0, PORTA.1, MSBFIRST, [W0\4 ﻓﺮﺳﺘﺎﺩﻥ ﭼﻬﺎﺭ ﺑﻴﺖ ﺍﺯ ﻣﺘﻐﻴﺮ W0ﺑﻄﻮﺭﻳﮑﻪ ﺍﻭﻟﻴﻦ ﺑﻴﺖ ﺍﻧﺘﻘﺎﻝ ﻳﺎﻓﺘﻪ ﺑﻴﺖ MSBﻣﯽ ﺑﺎﺷﺪ‘.
Loop : goto Loop End
: SLEEP .۱ -۳-۵۰ﺧﺎﻣﻮﺵ ﮐﺮﺩﻥ ﭘﺮﺩﺍﺯﻧﺪﻩ ﺑﺮﺍﯼ ﻳﮏ ﭘﺮﻳﻮﺩ ﺯﻣﺎﻧﯽ ﻣﻌﻴﻦ ﺗﺮﮐﻴﺐ : SLEEP Period
۴۷
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺭﺍ ﺑﻪ ﺣﺎﻟﺖ ﮐﻢ ﻣﺼﺮﻑ ﺑﺮﺍﯼ Periodﺛﺎﻧﻴﻪ ﻗـﺮﺍﺭ ﻣـﯽ ﺩﻫﻨـﺪ Period .ﻳـﮏ ﻣﻘﺪﺍﺭ ۱۶ﺑﻴﺘﯽ ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﺣﺪﺍﮐﺜﺮ ۶۵۵۳۵ﺛﺎﻧﻴﻪ ) ﺣﺪﻭﺩ ۱۸ﺳـﺎﻋﺖ ( ﺗـﺎﺧﻴﺮ ﺭﺍ ﺍﻳﺠـﺎﺩ ﻣـﯽ ﮐﻨـﺪ. ﺩﺳﺘﻮﺭ SLEEPﺍﺯ ﺗﺎﻳﻤﺮ WDTﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﮐﻨﺪ ﮐﻪ ﺑﻌﻠـﺖ ﺍﺳـﺘﻔﺎﺩﻩ ﮐـﺮﺩﻥ ﺍﺯ RCﺩﺍﺧﻠـﯽ ﺩﻗـﺖ ﮐﻤﺘﺮﯼ ﻧﺴﺒﺖ ﺑﻪ ﮐﻼﮎ ﺍﺳﻴﻼﺗﻮﺭ ﺩﺍﺭﺩ. : SOUND .۱ -۳-۵۱ﺗﻮﻟﻴﺪ ﮐﺮﺩﻥ ﺻﺪﺍ ﻳﺎ ﻧﻮﻳﺰ ﺳﻔﻴﺪ ﺭﻭﯼ ﻳﮏ ﭘﻴﻦ ﻣﺸﺨﺺ ﺗﺮﮐﻴﺐ : )}SOUND Pin, (Note, Duration{, Note, Duration
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺻﺪﺍ ﻭ ﻧﻮﻳﺰ ﺭﻭﯼ ﭘﻴﻦ ﻣﺸﺨﺼﯽ ﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﺪ .ﺑﺮﺍﯼ Note = 0ﺻﺪﺍﯼ ﻭﺟﻮﺩ ﻧـﺪﺍﺭﺩ .ﺍﮔـﺮ Noteﻣﻘﺪﺍﺭﯼ ﺑﻴﻦ ۱ﺗﺎ ۱۲۷ﺑﺎﺷﺪ ﺻﺪﺍ ﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨﺪ ﻭ ﺍﮔﺮ ﺑﻴﻦ ۱۲۸ﺗﺎ ۲۵۵ﺑﺎﺷﺪ ﻧﻮﻳﺰ ﺗﻮﻟﻴﺪ ﻣﯽ ﮐﻨـﺪ Note = 1 .ﺩﺍﺭﺍﯼ ﻓﺮﮐـﺎﻧﺲ 78.74HZﻭ Note = 127ﺩﺍﺭﺍﯼ ﻓﺮﮐـﺎﻧﺲ 10KHZﻣـﯽ ﺑﺎﺷـﺪ. Durationﻣﻘﺪﺍﺭﯼ ﺑﻴﻦ ۰ﺗﺎ ۲۵۵ﻣﻴﺒﺎﺷﺪ ﮐﻪ ﻣﺪﺕ ﺯﻣﺎﻥ ﺗﻮﻟﻴﺪ ﺻﺪﺍ ﺭﺍ ﺗﻌﻴﻴﻦ ﻣﯽ ﮐﻨﺪ .ﻫﺮﻳﮏ ﻭﺍﺣﺪ ﺍﻓﺰﺍﻳﺶ ﺍﻳﻦ ﻣﺘﻐﻴﺮ ﺗﻘﺮﻳﺒﺎ ﻣﻌﺎﺩﻝ 12mSﻣﯽ ﺑﺎﺷﺪ. ﺳﻴﮕﻨﺎﻝ ﺧﺮﻭﺟﯽ ،ﻳﮏ ﻣﻮﺝ ﻣﺮﺑﻌﯽ ﺑﺎ ﺳﻄﺢ ﻭﻟﺘﺎﮊ TTLﻣﯽ ﺑﺎﺷﺪ .ﻳﮏ ﺑﻠﻨﺪﮔﻮ ﮐﻮﭼﮏ ﺑﻪ ﻫﻤﺮﺍﻩ ﺧﺎﺯﻥ ﻣﺴﺘﻘﻴﻤﺎ ﻣﯽ ﺗﻮﺍﻧﺪ ﺗﻮﺳﻂ ﭘﺎﻳﻪ ﺗﻮﻟﻴﺪ ﺳﻴﮕﻨﺎﻝ ﺭﺍﻩ ﺍﻧﺪﺍﺯﯼ ﺷﻮﺩ .ﺑﻠﻨﺪﮔﻮﻫﺎﯼ ﮐﺮﻳﺴﺘﺎﻟﯽ ) (Piezoﺑﻪ ﻃﻮﺭ ﻣﺴﺘﻘﻴﻢ ﺭﺍﻩ ﺍﻧﺪﺍﺯﯼ ﻣﯽ ﺷﻮﻧﺪ. ﻣﺜﺎﻝ : ﻓﺮﺳﺘﺎﺩﻥ ۲ﺻﺪﺍﯼ ﻣﺘﻮﺍﻟﯽ ﺑﻪ ﺧﺮﻭﺟﯽ ‘ )sound PORTB.7, (100, 10, 50, 10
: STOP .۱ -۳-۵۲ﺗﻮﻗﻒ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﺣﺎﻝ ﺍﺟﺮﺍ ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺮﻧﺎﻣﻪ ﺍﺟﺮﺍﯼ ﺭﺍ ﺑﻮﺳﻴﻠﻪ ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﺩﺭ ﺣﻠﻘﻪ ﺑـﯽ ﻧﻬﺎﻳـﺖ ﻣﺘﻮﻗـﻒ ﻣـﯽ ﮐﻨـﺪ .ﺍﻳـﻦ ﺩﺳـﺘﻮﺭ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺭﺍ ﺑﻪ ﺣﺎﻟﺖ ﺗﻮﺍﻥ ﮐﻢ ﻧﻤﯽ ﺑﺮﺩ. : SWAP .۱ -۳-۵۳ﻣﺒﺎﺩﻟﻪ ﻣﻘﺎﺩﻳﺮ ﺩﻭ ﻣﺘﻐﻴﺮ ﺗﺮﮐﻴﺐ : SWAP Variable1, Variable1
۴۸
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺎ ﺍﻧﻮﺍﻉ ﻣﺘﻐﻴﺮﻫﺎ ) ( word ، byte ، bitﺍﺳـﺘﻔﺎﺩﻩ ﻣـﯽ ﺷـﻮﺩ SWAP .ﺑـﺎ ﺭﺷـﺘﻪ ﻫـﺎ ﻧﻴـﺰ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ ﻭﻟﯽ ﺑﺎﻳﺴﺘﯽ ﺷﺎﺧﺺ ﺁﻧﻬﺎ ﻳﮑﺴﺎﻥ ﺑﺎﺷﺪ. ﻣﺜﺎﻝ : B0 var byte B1 var byte temp var byte Main : temp = B0 B0 = B1 B1 = temp ﺭﺍﻩ ﻗﺪﻳﻤﯽ ﺍﻧﺠﺎﻡ ﺁﻥ ‘ ...ﻭ ﺭﺍﻩ ﺁﺳﺎﻧﺘﺮ ﺁﻥ ‘ swap B0, B1 Loop : goto Loop End
: TOGGLE .۱ -۳-۵۴ﻭﺍﺭﻭﻥ ﮐﺮﺩﻥ ﻭﺿﻌﻴﺖ ﭘﻴﻦ ﺗﺮﮐﻴﺐ : TOGGLE Pin
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻭﺿﻌﻴﺖ ﭘﻴﻦ ﺭﺍ ﻭﺍﺭﻭﻥ ﻣﯽ ﮐﻨﺪ .ﺩﺭ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﭘﻴﻦ ﺑﺼﻮﺭﺕ ﺧﻮﺩﮐﺎﺭ ﺩﺭ ﮔﺮﺍﻳﺶ ﺧﺮﻭﺟـﯽ ﻗﺮﺍﺭ ﻣﯽ ﮔﻴﺮﺩ. ﻣﺜﺎﻝ : Main : low PORTB.0 toggle PORTB.0 Loop : goto Loop End
: WRITE .۱ -۳-۵۵ﻧﻮﺷﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺩﺭ EEPROMﺩﺍﺧﻠﯽ ﺗﺮﮐﻴﺐ : WRITE Address, Value
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ Valueﺭﺍ ﺩﺭ ﺁﺩﺭﺱ ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺩﺭ EEPROMﺩﺍﺧﻠﯽ ﻣﯽ ﺭﻳﺰﺩ .ﺍﮔﺮ ﻣﺘﻐﻴﺮ ﺩﻭ ﺑﺎﻳﺘﯽ ﺭﺍ ﺧﻮﺍﺳﺘﻪ ﺑﺎﺷﻴﻢ ﺫﺧﻴﺮﻩ ﮐﻨﻴﻢ ﺑﺎﻳﺴﺘﯽ ﻫﺮ ﺑﺎﻳﺖ ﺭﺍ ﺟﺪﺍ ﮔﺎﻧﻪ ﺫﺧﻴﺮﻩ ﮐﺮﺩ. WRITE Address, Variable.BYTE0 WRITE Address, Variable.BYTE1
۴۹
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺍﮔﺮ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺍﺯ ﻭﻗﻔﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﺷﻮﺩ ﻗﺒﻞ ﺍﺯ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﮐﻠﻴﻪ ﻭﻗﻔﻪ ﻫـﺎ ) ﺑـﺎ ﺩﺳـﺘﻮﺭ ( DISABLE ﻏﻴﺮ ﻓﻌﺎﻝ ﺷﻮﻧﺪ. ﻣﺜﺎﻝ : B0 var byte Main : B0 = $EA ﻧﻮﺷﺘﻦ ﻣﻘﺪﺍﺭ $EAﺩﺭ ﻣﻮﻗﻌﻴﺖ ۵ﺣﺎﻓﻈﻪ write 5, B0 ‘EEPROM Loop : goto Loop End
: WRITECODE .۱ -۳-۵۶ﻧﻮﺷﺘﻦ ﺩﻭﺑﺎﻳﺖ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ﺑﺮ ﺭﻭﯼ ﺣﺎﻓﻈﻪ ﺑﺮﻧﺎﻣﻪ ﺗﺮﮐﻴﺐ : WRITECODE Address, Value
ﺷﺮﺡ : ﺍﻳﻦ ﺩﺳﺘﻮﺭ " " Valueﺭﺍ ﺩﺭ ﺁﺩﺭﺱ ﻣﻌﻴﻨﯽ ﺑﻪ ﺣﺎﻓﻈﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺿﺎﻓﻪ ﻣـﯽ ﮐﻨـﺪ .ﺍﻳـﻦ ﺩﺳـﺘﻮﺭ ﺗﻨﻬـﺎ ﺑـﺎ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮﻫﺎﯼ PICﮐﻪ ﺩﺍﺭﺍﯼ ﺣﺎﻓﻈﻪ FLASHﻣﯽ ﺑﺎﺷﻨﺪ ) ﻣﺎﻧﻨﺪ ،( PIC16F87Xﺑﮑﺎﺭ ﻣﯽ ﺭﻭﺩ. ﻭﻗﻔﻪ ﻫﺎ ﻣﻮﻗﻊ ﺑﮑﺎﺭﮔﻴﺮﯼ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﺎﻳﺴﺘﯽ ﻏﻴﺮ ﻓﻌﺎﻝ ﺑﺎﺷﻨﺪ. ﻣﺜﺎﻝ : W0 var byte Main : W0 = $12FE ﻧﻮﺷﺘﻦ ﻣﻘﺪﺍﺭ $12FEﺩﺭ ﻣﻮﻗﻌﻴﺖ ۱۰۰ﺣﺎﻓﻈﻪ FLASHﺑﺮﻧﺎﻣﻪ‘ writecode 100, W0 Loop : goto Loop End
: WHILE – WEND .۱ -۳-۵۷ﺍﺟﺮﺍﯼ ﻗﺴﻤﺘﯽ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺗﺎ ﻭﻗﺘﯽ ﮐﻪ ﺷﺮﻁ ﺑﺮﻗﺮﺍﺭ ﺍﺳﺖ ﺗﺮﮐﻴﺐ : WHILE Condition Instructions... WEND
ﺷﺮﺡ : ﻫﺪﻑ ﺍﺯ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﻗﺴﻤﺘﯽ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺑﻴﻦ WHILEﻭ WENDﺗﺎ ﻣﻮﻗﻌﯽ ﮐﻪ ﺷﺮﻁ ﺑﺮﻗـﺮﺍﺭ ﺍﺳﺖ ﻭﺑﻌﺪ ﺍﺯ ﺁﻥ ﺍﺯ ﺣﻠﻘﻪ ﺧﺎﺭﺝ ﻣﯽ ﺷﻮﺩ.
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۵۰
ﻣﺜﺎﻝ : i Var byte Main : i=1 WHILE i< 10 ﺩﺭ ﺩﻫﻤﻴﻦ ﺗﮑﺮﺍﺭ ﺑﺮﻧﺎﻣﻪ ﻣﺘﻮﻗﻒ ﻣﯽ ﺷﻮﺩ ﻭ ﭘﻮﺭﺕ Bﻣﻘﺪﺍﺭ ۹ﺭﺍ ﻧﺸﺎﻥ ﻣﯽ ﺩﻩﺩ‘ i=i+1 PORTB = i Pause 1000 WEND goto Main End
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻓﺼﻞ
ﺩﻭﻡ :
۵۱
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻣﺪﺍﺭ ﺭﺍﻩ ﺍﻧﺪﺍﺯ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮﻫﺎﯼ ) PICﺑﺮﺍﯼ ﻧﻤﻮﻧﻪ ( PIC 16F877
۵۲
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻣﺜﺎﻝ : ۱ﺭﺍﻩ ﺍﻧﺪﺍﺯﯼ LCD
۵۳
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۵۴
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﻣﺜﺎﻝ : ۲ﺍﺭﺗﺒﺎﻁ ﺳﺮﻳﺎﻝ ﺑﺎ ﮐﺎﻣﭙﻴﻮﺗﺮ
۵۵
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۵۶
۵۷
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺑﻌﻨﻮﺍﻥ ﻭﺭﻭﺩﯼ ﺁﻧﺎﻟﻮﮒ ﻭA ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭘﻮﺭﺕ:۳ ﻣﺜﺎﻝ ﻧﺸﺎﻥ ﺩﺍﺩﻥ ﻣﻘﺎﺩﻳﺮ ﺗﺒﺪﻳﻞ ﺷﺪﻩ ﺍﺯ ﺁﻧﺎﻟﻮﮒ ﺑﻪ ﺩﻳﺠﻴﺘﺎﻝ
'================== Define LCD pins ================ Define LCD_DREG Define LCD_DBIT
PORTD 4
Define LCD_RSREG
PORTE
Define LCD_RSBIT
0
Define LCD_EREG
PORTE
Define LCD_EBIT
1
'================== Allocate variables =============== x
var
byte
y
var
byte
z
var
byte
ADCON1 = 4
' Set PortA 0, 1, 3 to A/D inputs
Low PORTE.2
' LCD R/W line low (W)
Pause 100
' Wait for LCD to start
Goto
' Skip subroutines
mainloop
' =============Subroutine to read a/d convertor ========== getad: Pauseus 50
ADCON0.2 = 1
' Wait for channel to setup
' Start conversion
۵۸
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
Pauseus 50
' Wait for conversion
Return
'============== Subroutine to get pot x value =========== getx: ADCON0 = $41
' Set A/D to Fosc/8, Channel 0, On
Gosub getad x = ADRESH Return '=============== Subroutine to get pot y value ============= gety: ADCON0 = $49
' Set A/D to Fosc/8, Channel 1, On
Gosub getad y = ADRESH Return '================ Subroutine to get pot z value ============ getz: ADCON0 = $59
' Set A/D to Fosc/8, Channel 3, On
Gosub getad z = ADRESH Return ' ================Main program ===================== mainloop: Gosub getx
' Get x value
Gosub gety
' Get y value
Gosub getz
' Get z value
Lcdout $fe, 1, "x=", #x, " y=", #y, " z=", #z ' Send to LCD Pause 100
Goto
End
mainloop
' Do it about 10 times a second
' Do it forever
۵۹
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺳﺎﺧﺖ ﮐﻴﺒﻮﺭﺩ ﺳﺮﻳﺎﻝ: ۴ﻣﺜﺎﻝ
INCLUDE "modedefs.bas"
col
VAR
BYTE
' Keypad column
row
VAR
BYTE
' Keypad row
key
VAR
BYTE
' Key value
baud
VAR
PortA.0
' Baud select pin
serpin
VAR
PortA.1
' Serial output pin
CMCON
=
7
' PortA = digital I/O
VRCON
=
0
' Voltage reference disabled
TRISA
=
%00000001' PortA.0 = baud select pin
OPTION_REG.7 =
0
' Enable PORTB pull-ups
loop: GOSUB getkey
'Get key from keypad
send: IF baud = 1 THEN fast'If baud = 1 then N9600,else N2400 SEROUT serpin,N2400,[key]'Send key value out PortA.1 GOTO loop
۶۰
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
fast: SEROUT serpin,N9600,[key] GOTO loop
'Do it forever
PAUSE 50
'Debounce key-input
getkey:
getkeyu:' Wait for all keys up PORTB = 0
' All output-pins low
TRISB = $f0
' Bottom 4-pins out, top 4-pins in
IF ((PORTB >> 4) != $f) THEN getkeyu 'If keys down, loop PAUSE 50
' Debounce key-input
getkeyp:' Wait for keypress FOR row = 0 TO 3 PORTB = 0
' 4 rows in keypad ' All output-pins low
TRISB = (DCD row) ^ $ff ' Set one row pin to output col = PORTB >> 4
' Read columns
IF col != $f THEN gotkey' If any keydown, exit NEXT row GOTO getkeyp
' No keys down, go look again
gotkey: ' Change row and column to key number 1 - 16 key = (row * 4) + (NCD (col ^ $f)) 'NOTE: for 12-key keypad, change to key = (row * 3) RETURN
END
' Subroutine over
۶۱
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
MicriCode Studio ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﯼ ﺩﻣﺎ ﻭ ﻧﻤﺎﻳﺶ ﺁﻥ ﺩﺭ ﭘﻨﺠﺮﻩ ﺍﺭﺗﺒﺎﻁ ﺳﺮﻳﺎﻝ: ۵ ﻣﺜﺎﻝ
DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE
loader_used 1 debug_mode 0 debug_reg portc debug_bit 6 debug_baud 9600 osc 4
' ' ' ' ' '
Boot loader is being used Debug sending True serial data Debug Port = PortC Debug.bit = PortC.6 Default baud rate = 9600 We're using a 4 MHz oscillator
۶۲
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
DEFINE ADC_BITS 8 ' Set A/D for 8-bit operation DEFINE ADC_CLOCK 1 ' Set A/D clock Fosc/8 DEFINE ADC_SAMPLEUS 50 ' Set A/D sampling time @ 50 uS samples VAR WORD ' Multiple A/D sample accumulator sample VAR BYTE ' Holds number of samples to take temp VAR BYTE ' Temperature storage samples = 0 ' Clear samples accumulator on power-up TRISA = %11111111 ' Set PORTA to all input ADCON1 = %00000011 ' Set PORTA.0,1,2,5 = A/D, PortA.3 = +Vref PAUSE 500 ' Wait .5 second loop: FOR sample = 1 TO 20 ' Take 20 samples ADCIN 0, temp ' Read channel 0 into temp variable samples = samples + temp ' Accumulate 20 samples PAUSE 250 ' Wait approximately 1/4 seconds per loop NEXT sample temp = samples/20 DEBUG "Temperature is: ",DEC temp," Deg F",10,13 samples = 0 ' Clear old sample accumulator GOTO loop ' Do it forever
END
ﻧﻤﺎﻳﺶ ﻧﺘﺎﻳﺞ ﺣﺎﺻﻞ ﺍﺭﺳﺎﻝ ﺷﺪﻩ ﺍﺯ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ ﺍﺯ ﻃﺮﻳﻖ ﭘﻨﺠﺮﻩ ﺍﺭﺗﺒﺎﻁ ﺳﺮﻳﺎﻝ ﻧﺮﻡ ﺍﻓﺰﺍﺭ MicroCode Stodio
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺿﻤﻴﻤﻪ :
ﻣﺸﺨﺼﺎﺕ ﻭ ﻗﺎﺑﻠﻴﺘﻬﺎﯼ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ PIC16F877
ﺍﻳﻦ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ ﺩﺍﺭﺍ ۴۰ﭘﺎﻳﻪ ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﺩﺭ ﺷﮑﻞ ﺯﻳﺮ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ. ﻣﺸﺨﺼﺎﺕ ﺩﺍﺧﻠﯽ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ : oﻋﻤﻠﮑﺮﺩ ﺑﺎﻻﯼ CPU ، RISC
oﺗﻨﻬﺎ ۳۵ﺩﺳﺘﻮﺭ ﺑﺮﺍﯼ ﻳﺎﺩﮔﻴﺮﯼ ﺩﺍﺭﺩ oﻫﻤﻪ ﺩﺳﺘﻮﺭﺍﺕ ﺩﺭ ﻳﮏ ﺳﻴﮑﻞ ﺍﺟﺮﺍ ﻣﯽ ﺷﻮﻧﺪ ﺑﺠﺰ ﺩﺳﺘﻮﺭﺍﺕ ﮔﺰﻳﻨﺸﯽ oﺳﺮﻋﺖ ﻋﻤﻠﮑﺮﺩ ﺁﻥ ﺍﺯ DCﺗﺎ 20MHZﻣﯽ ﺑﺎﺷﺪ oﺣﺎﻓﻈﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﺁﻥ ﺍﺯ ﻧﻮﻉ FLASHﺍﺳﺖ ) ۸ K * ۱۴ﮐﻠﻤﻪ ( ﺣﺎﻓﻈﻪ ۳۶۸ * ۸ RAMﺑﺎﻳﺖ ﺣﺎﻓﻈﻪ ۲۵۶ * ۸ EEPROMﺑﺎﻳﺖ oﻗﺎﺑﻠﻴﺖ ﻭﻗﻔﻪ ) ۱۴ﻣﻨﺒﻊ ( oﻫﺸﺖ ﺳﻄﺢ ﺑﺮﺍﯼ ﭘﺸﺘﻪ oﻣﺪﻫﺎﯼ ﺁﺩﺭﺱ ﺩﻫﯽ ﻣﺴﺘﻘﻴﻢ ،ﻏﻴﺮ ﻣﺴﺘﻘﻴﻢ ﻭ ﻧﺴﺒﯽ oﺭﻳﺴﺖ ﺷﺪﻥ ﺩﺭ ﻫﻨﮕﺎﻡ ﻭﺻﻞ ﺷﺪﻥ ﻣﻨﺒﻊ ﺗﻐﺬﻳﻪ ) ( POR oﺗﺎﻳﻤﺮ ﺭﻭﺷﻦ ﻧﮕﻬﺪﺍﺭ ) ( PWRTﻭ ﺗﺎﻳﻤﺮ ﺷﺮﻭﻉ ﺑﻪ ﮐﺎﺭ ﺍﺳﻴﻼﺗﻮﺭ ) ( OSC oﺗﺎﻳﻤﺮ ( WDT ) Watchdogﺑﺎ ﺍﺳﻴﻼﺗﻮﺭ RCﻣﺠﺰﺍ ﺑﺮ ﺭﻭﯼ ﺗﺮﺍﺷﻪ oﻣﺪ SLEEPﺑﺮﺍﯼ ﮐﻢ ﻣﺼﺮﻑ ﮐﺮﺩﻥ ﺍﻧﺮﮊﯼ oﻗﺎﺑﻞ ﺍﻧﺘﺨﺎﺏ ﺑﻮﺩﻥ ﺍﺳﻴﻼﺗﻮﺭ oﻗﺎﺑﻠﻴﺖ ﺑﺮﻧﺎﻣﻪ ﺭﻳﺰﯼ ﺩﺭﻭﻥ ﻣﺪﺍﺭ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻭ ﭘﺎﻳﻪ ) ( ICSP
۶۳
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
۶۴
oﻗﺎﺑﻠﻴﺖ ﺑﺮﻧﺎﻣﻪ ﺭﻳﺰﯼ ﺩﺭﻭﻥ ﻣﺪﺍﺭ ﺑﺎ ﻭﻟﺘﺎﮊ ۵ﻭﻟﺖ oﺧﻮﺍﻧﺪﻥ ﻭﻧﻮﺷﺘﻦ ﺣﺎﻓﻈﻪ ﺑﺮﻧﺎﻣﻪ ﺭﻳﺰﯼ oﻋﻤﻠﮑﺮﺩ ﺩﺭ ﻭﻟﺘﺎﮊﻫﺎﯼ ﺑﻴﻦ ۲ﺗﺎ ۵,۵ﻭﻟﺖ oﺟﺮﻳﺎﻥ Sinkﻭ ۲۵ Sourceﻣﻴﻠﯽ ﺁﻣﭙﺮ oﻣﺼﺮﻑ ﺗﻮﺍﻥ ﮐﻢ <2mA typical @ 5V, 4 MHz 20mA typical @ 3V, 32 kHz<1mA typical standby current -
ﻣﺸﺨﺼﺎﺕ ﺟﺎﻧﺒﯽ oﺗﺎﻳﻤﺮ : ۰ﺗﺎﻳﻤﺮ ﻭ ﻳﺎ ﺷﻤﺎﺭﻧﺪﻩ ۸ﺑﻴﺘﯽ ﺑﺎ ۸ﺑﻴﺖ prescaler
oﺗﺎﻳﻤﺮ : ۱ﺗﺎﻳﻤﺮ ﻭ ﻳﺎ ﺷﻤﺎﺭﻧﺪﻩ ۱۶ﺑﻴﺘﯽ ﺑﺎ prescalerﻣﯽ ﺗﻮﺍﻧـﺪ ﺩﺭ ﺣﺎﻟـﺖ sleepﺑـﺎ ﮐـﻼﮎ ﻳـﺎ ﮐﺮﻳﺴﺘﺎﻝ ﺧﺎﺭﺟﯽ ﮐﺎﺭ ﮐﻨﺪ oﺗﺎﻳﻤﺮ : ۲ﺗﺎﻳﻤﺮ ﻭ ﻳﺎ ﺷﻤﺎﺭﻧﺪﻩ ۸ﺑﻴﺘﯽ ﺑﺎ ﺭﺟﻴﺴﺘﺮ ۸ﺑﻴﺘﯽ prescalerﻭ postscaler
oﺩﻭ Captureﻭ ﻣﻘﺎﻳﺴﻪ ﮐﻨﻨﺪﻩ ﻭ ﻣﻮﻟﺪ ( CCP ) PWM ۱۶ Captureﺑﻴﺘﯽ ﺍﺳﺖ ﺑﺎ ﺣﺪ ﺗﻔﮑﻴﮏ ۱۲,۵ﻧﺎﻧﻮﺛﺎﻧﻴﻪ ﻣﻘﺎﻳﺴﻪ ﮐﻨﻨﺪﻩ ۱۶ﺑﻴﺘﯽ ﺍﺳﺖ ﺑﺎ ﺣﺪ ﺗﻔﮑﻴﮏ ۲۰۰ﻧﺎﻧﻮﺛﺎﻧﻴﻪ PWMﺑﺎ ﺣﺪﺗﻔﮑﻴﮏ ۱۰ﺑﻴﺖ oﻣﺒﺪﻝ A/Dﭼﻨﺪ ﮐﺎﻧﺎﻟﻪ ﺑﺎ ﺩﻗﺖ ۱۰ﺑﻴﺖ oﭘﻮﺭﺕ Slaveﻣﻮﺍﺯﯼ ) ( PSPﺑﺎ ۸ﺑﻴﺖ ﭘﻬﻨﺎ ﺑﺎ ﭘﺎﻳﻪ ﻫﺎﯼ ﮐﻨﺘﺮﻟﯽ WR ، RDﻭ CSﺧﺎﺭﺟﯽ oﺁﺷﮑﺎﺭ ﺳﺎﺯﯼ ﮐﺎﻫﺶ ﻭﻟﺘﺎﮊ ﻣﻨﺒﻊ ﺑﺮﺍﯼ ﺭﻳﺴﺖ ﮐﺮﺩﻥ ) ( BOR
۶۵
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﭘﺎﻳﻪ ﻫﺎﯼ ﭼﻨﺪ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮPIC
ﺷﮑﻞ (1-1ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ
PIC16F877
۶۶
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺷﮑﻞ (2-2ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ
PIC16F876 / 873
ﺷﮑﻞ (3-3ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ
PIC16F62X
۶۷
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺟﺪﻭﻝ ﺩﺳﺘﻮﺭﺍﺕ ﺑﻴﺴﻴﮏ : ﺭﺩﻳﻒ
ﺩﺳﺘﻮﺭ
ﺗﺸﺮﻳﺢ
۱
@
ﻭﺍﺭﺩ ﮐﺮﺩﻥ ﻳﮏ ﺧﻂ ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﮐﺪ ﺍﺳﻤﺒﻠﯽ
۲
… ASM ENDASM ADCIN
ﻭﺍﺭﺩ ﮐﺮﺩﻥ ﻳﮏ ﺑﻠﻮﮎ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﺍﺳﻤﺒﻠﯽ
۴
BRANCH
ﭘﺮﻳﺪﻥ ﺑﻪ ﺑﺮﭼﺴﺐ ﻣﺸﺨﺺ ﺷﺪﻩ ﺗﻮﺳﻂ ﺷﺎﺧﺺ
۵
BRANCHL
ﭘﺮﺷﯽ ﺑﻠﻨﺪ ﺑﻪ ﺑﺮﭼﺴﺐ ﻧﻈﻴﺮ ﺷﺎﺧﺺ
۶
BUTTON
ﺧﻮﺍﻧﺪﻥ ﺣﺎﻟﺖ ﺩﮐﻤﻪ ﺭﻭﯼ ﭘﻴﻦ ﻭﺭﻭﺩﯼ
۷
CALL
ﻓﺮﺍﺧﻮﺍﻧﯽ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎﯼ ﺍﺳﻤﺒﻠﯽ
۸
CLEAR
ﻣﻘﺪﺍﺭ ﻫﻤﻪ ﻣﺘﻐﻴﺮﻫﺎ ﺭﺍ ﺑﻪ ﺻﻔﺮ ﺗﻐﻴﻴﺮ ﺩﺍﺩﻥ
۹
CLEARWDT
ﺑﺎﺯ ﻧﺸﺎﻧﺪﻥ ﺗﺎﻳﻤﺮ Watchdog
۱۰
COUNT
ﺷﻤﺮﺩﻥ ﭘﺎﻟﺴﻬﺎﯼ ﺭﻭﯼ ﭘﻴﻦ ﻭﺭﻭﺩﯼ
۱۱
DATA
ﻧﻮﺷﺘﻦ ﺩﺭ EEPROMﺩﺍﺧﻠﯽ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺑﺮﻧﺎﻣﻪ
۱۲
DTMFOUT
ﺗﻮﻟﻴﺪ ﮐﺮﺩﻥ ﺳﻴﮕﻨﺎﻝ ﺻﺪﺍ )ﺗﻮﻥ( ﺷﻤﺎﺭﮔﻴﺮﯼ ﺭﻭﯼ ﭘﻴﻦ ﺧﺮﻭﺟﯽ
۱۳
EEPROM
ﻣﺠﻤﻮﻋﻪ ﺛﺎﺑﺘﻬﺎﯼ ﺍﻭﻟﻴﻪ ﺑﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺳﯽ EEPROM
۱۴
END
ﻧﺸﺎﻧﻪ ﮔﺬﺍﺭﯼ ﭘﺎﻳﺎﻥ ﺑﺮﻧﺎﻣﻪ
۱۵
FOR … NEXT
ﺗﮑﺮﺍﺭ ﮐﺮﺩﻥ ﻳﮏ ﻗﺴﻤﺖ ﺍﺯ ﺑﺮﻧﺎﻣﻪ
۱۶
FREQOUT
ﺗﻮﻟﻴﺪ ﺳﻴﮕﻨﺎﻝ ﺑﺎ ﻓﺮﮐﺎﻧﺲ ﻣﺸﺨﺺ ﺭﻭﯼ ﭘﻴﻦ ﺧﺮﻭﺟﯽ
۱۷
GOSUB
ﻓﺮﺍﺧﻮﺍﻧﯽ ﺯﻳﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎﯼ BASIC
۱۸
GOTO
ﺍﺩﺍﻣﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺯ ﺑﺮﭼﺴﺐ ﻣﺸﺨﺺ ﺷﺪﻩ
۱۹
HIGH
ﻧﺸﺎﻧﺪﻥ ﻳﮏ ﻣﻨﻄﻘﯽ ﺭﻭﯼ ﭘﻴﻦ ﺧﺮﻭﺟﯽ
۲۰
HESERIN
ﺳﺨﺖ ﺍﻓﺰﺍﺭ ﻭﺭﻭﺩﯼ ﺁﺳﻨﮑﺮﻭﻥ
۲۱
HPWM
ﺗﻮﻟﻴﺪ ﮐﺮﺩﻥ ﺳﻴﮕﻨﺎﻝ PWMﺭﻭﯼ ﭘﻴﻦ ﻣﻴﮑﺮﻭﮐﻨﺘﺮﻟﺮ
۲۲
HSEROUT
ﺳﺨﺖ ﺍﻓﺰﺍﺭ ﺧﺮﻭﺟﯽ ﺁﺳﻨﮑﺮﻭﻥ
۲۳
I2CREAD
ﺧﻮﺍﻧﺪﻥ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﻭﺳﺎﻳﻞ ﺟﺎﻧﺒﯽ I2C
۲۴
I2CWRITE
ﻧﻮﺷﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺑﺮ ﺭﻭﯼ ﻭﺳﺎﻳﻞ ﺟﺎﻧﺒﯽ I2C
۲۵
INPUT
ﺑﺮﮔﺰﻳﺪﻥ ﭘﻴﻦ I/Oﺩﺭ ﮔﺮﺍﻳﺶ ﻭﺭﻭﺩﯼ
۲۶ ۲۷
IF … THEN … ELSE LCDOUT
ﮔﺰﻳﻨﺶ ﻳﮏ ﻗﺴﻤﺖ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺑﺮ ﺭﻭﯼ ﻧﻤﺎﻳﺸﮕﺮ LCD
۲۸
LOOKDOWN
ﺟﺴﺘﺠﻮ ﮐﺮﺩﻥ ﺟﺪﻭﻝ ﺛﺎﺑﺘﻬﺎ
۳
ﺩﺭﻳﺎﻓﺖ ﻣﻘﺎﺩﻳﺮ ﺍﺯ ﻭﺭﻭﺩﯼ ﻣﺒﺪﻝ A/D
۶۸
ﮔﺮﻭﻩ ﻣﻬﻨﺪﺳﯽ ﺍﻟﮑﺘﺮﻭﻧﻴﮏ ﻭ ﮐﺎﻣﭙﻴﻮﺗﺮ ﮊﻭﭘﻴﻦ
ﺭﺩﻳﻒ
ﺩﺳﺘﻮﺭ LOOKUP
ﺁﻭﺭﺩﻥ ﻣﻘﺪﺍﺭﯼ ﺍﺯ ﺟﺪﻭﻝ ﺛﺎﺑﺘﻬﺎ
۳۰
LOW
ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﺻﻔﺮ ﻣﻨﻄﻘﯽ ﺩﺭ ﭘﻴﻦ ﺧﺮﻭﺟﯽ
۳۱
NAP
ﺧﺎﻣﻮﺵ ﮐﺮﺩﻥ ﺑﺮﺍﯼ ﻳﮏ ﺩﻭﺭﻩ ﺯﻣﺎﻧﯽ ﮐﻮﺗﺎﻩ
۳۲
OUTPUT
ﮔﻤﺎﺷﺘﻦ ﭘﻴﻦ I/Oﺩﺭ ﮔﺮﺍﻳﺶ ﺧﺮﻭﺟﯽ
۳۳
OWIN
ﺩﺭﻳﺎﻓﺖ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﻃﺮﻳﻖ ﺍﺭﺗﺒﺎﻁ ﻳﮏ ﺳﻴﻢ
۳۴
OWOUT
ﺍﺭﺳﺎﻝ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﻃﺮﻳﻖ ﻳﮏ ﺳﻴﻢ
۳۵
PAUSE
ﺗﺎﺧﻴﺮ ﺑﺮﺣﺴﺐ ﻣﻴﻠﯽ ﺛﺎﻧﻴﻪ
۳۶
PAUSEUS
ﺗﺎﺧﻴﺮ ﺑﺮﺣﺴﺐ ﻣﻴﮑﺮﻭﺛﺎﻧﻴﻪ
۳۷
POT
ﺑﺮﮔﺮﺩﺍﻧﺪﻥ ﻣﻘﺪﺍﺭ ﻣﻘﺎﻭﻣﺖ ﻣﺘﺼﻞ ﺑﻪ ﭘﻴﻦ
۳۸
PULSIN
ﻣﺤﺎﺳﺒﻪ ﻋﺮﺽ ﭘﺎﻟﺲ ﺭﻭﯼ ﭘﺎﻳﻪ ﻭﺭﻭﺩﯼ
۳۹
PULSOUT
ﺗﻮﻟﻴﺪ ﮐﺮﺩﻥ ﭘﺎﻟﺲ ﺩﺭ ﭘﻴﻦ ﺧﺮﻭﺟﯽ
۴۰
PWM
ﺗﻮﻟﻴﺪ ﺳﻴﮕﻨﺎﻝ PWMﺭﻭﯼ ﭘﻴﻦ
۴۱
RANDOM
ﺗﻮﻟﻴﺪ ﻋﺪﺩ ﺗﺼﺎﺩﻓﯽ
۴۲
RCTIME
ﻣﺤﺎﺳﺒﻪ ﭘﺎﻟﺲ ﺭﻭﯼ ﭘﻴﻦ
۴۳
READ
ﺧﻮﺍﻧﺪﻥ ﻳﮏ ﺑﺎﻳﺖ ﺍﺯ ﺍﻃﻼﻋﺎﺕ EEPROM
۴۴
READCODE
ﺧﻮﺍﻧﺪﻥ ۲ﺑﺎﻳﺖ ) ( WORDﺍﺯ ﮐﺪ ﺑﺮﻧﺎﻣﻪ
۴۵
REVERSE
ﺗﻐﻴﺮ ﮔﺮﺍﻳﺶ ﭘﻴﻦ
۴۶
SERIN
ﻭﺭﻭﺩﯼ ﺳﺮﻳﺎﻝ ﺁﺳﻨﮑﺮﻭﻥ
۴۷
SEROUT
ﺧﺮﻭﺟﯽ ﺳﺮﻳﺎﻝ ﺁﺳﻨﮑﺮﻭﻥ
۴۸
SHIFTIN
ﻭﺭﻭﺩﯼ ﺳﺮﻳﺎﻝ ﺳﻨﮑﺮﻭﻥ
۴۹
SHIFTOUT
ﺧﺮﻭﺟﯽ ﺳﺮﻳﺎﻝ ﺳﻨﮑﺮﻭﻥ
۵۰
SLEEP
ﺧﺎﻣﻮﺵ ﮐﺮﺩﻥ ﭘﺮﺩﺍﺯﻧﺪﻩ ﺑﺮﺍﯼ ﻳﮏ ﭘﺮﻳﻮﺩ ﺯﻣﺎﻧﯽ ﻣﻌﻴﻦ
۵۱
SOUND
ﺗﻮﻟﻴﺪ ﮐﺮﺩﻥ ﺻﺪﺍ ﻳﺎ ﻧﻮﻳﺰ ﺳﻔﻴﺪ ﺭﻭﯼ ﻳﮏ ﭘﻴﻦ ﻣﺸﺨﺺ
۵۲
STOP
ﺗﻮﻗﻒ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﺣﺎﻝ ﺍﺟﺮﺍ
۵۳
SWAP
ﻣﺒﺎﺩﻟﻪ ﻣﻘﺎﺩﻳﺮ ﺩﻭ ﻣﺘﻐﻴﺮ
۵۴
TOGGLE
ﻭﺍﺭﻭﻥ ﮐﺮﺩﻥ ﻭﺿﻌﻴﺖ ﭘﻴﻦ
۵۵
WRITE
ﻧﻮﺷﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺩﺭ EEPROMﺩﺍﺧﻠﯽ
۵۶
WRITECODE
ﻧﻮﺷﺘﻦ ﺩﻭﺑﺎﻳﺖ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ﺑﺮ ﺭﻭﯼ ﺣﺎﻓﻈﻪ ﺑﺮﻧﺎﻣﻪ
۵۷
– WHILE WEND
ﺍﺟﺮﺍﯼ ﻗﺴﻤﺘﯽ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺗﺎ ﻭﻗﺘﯽ ﮐﻪ ﺷﺮﻁ ﺑﺮﻗﺮﺍﺭ ﺍﺳﺖ
۲۹
ﺗﺸﺮﻳﺢ