Professional Documents
Culture Documents
pic 16f84a درس
pic 16f84a درس
اﻹﺷﻜﺎﻟﯿﺔ :
ﻳﻤﻜﻦ إﻧﺠﺎز اﻟﻮظﺎﺋﻒ اﻟﺤﺴﺎﺑﯿﺔ و اﻟﻤﻨﻄﻘﯿﺔ ﺑﻮاﺳﻄﺔ دارات ﻣﻨﺪﻣﺠﺔ ﺗﻤﺎﺛﻠﯿﺔ أو ﻣﻨﻄﻘﯿﺔ .ﻟﻜﻦ ﻋﻨﺪﻣﺎ ﻳﺼﺒﺢ اﻟﻌﻨﺼﺮ اﻟﺘﻘﻨﻲ
ﻣﻌﻘﺪ و ﻳﺘﻄﻠﺐ إﻧﺠﺎز ﻣﻌﺎﻟﺠﺔ ﻣﻌﻠﻮﻣﺎت ﻛﺜﯿﺮة و ﺑﺴﺮﻋﺔ ،ﻳﺼﺒﺢ ﻣﻦ اﻟﻀﺮوري اﺳﺘﻌﻤﺎل ﻋﻨﺎﺻﺮ ﺗﺘﻤﯿﺰ ﺑﺄﻛﺜﺮ ﻗﺪرة و ﺟﺎھﺰﻳﺔ
ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ھﺬه اﻟﻤﺘﻄﻠﺒﺎت ،ﻟﮫﺬا ﻧﺴﺘﻌﻤﻞ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ.
ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ ﻣﺎ ﺳﺒﻖ ﻓﺈن اﻟﺘﻜﻨﻮﻟﻮﺟﯿﺔ اﻟﻤﺮﺑﻮطﺔ ﺑﺪأت ﺷﻲء ﻓﺸﻲء ﺑﺎﻻﻧﺪﺛﺎر ﻣﻦ اﻟﻤﺤﯿﻂ اﻟﺼﻨﺎﻋﻲ.
ﺗﻌﺮﻳﻒ:
اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ھﻮ ﺟﯿﻞ ﺟﺪﻳﺪ و ﻣﻄﻮر ﻣﻦ اﻟﻤﯿﻜﺮوﻣﻌﺎﻟﺞ ﺣﯿﺚ أن ﺟﻤﯿﻊ ﻣﻠﺤﻘﺎت اﻟﻤﻌﺎﻟﺞ )ذاﻛﺮات ،ﺳﺠﻼت ،اﻟﺦ (...ﺗﻢ
وﺿﻌﮫﺎ ﻓﻲ ﺷﺮﻳﺤﺔ واﺣﺪة وﻣﻦ ھﻨﺎ ﺑﻨﺎء دارة ﺗﺤﺘﻮي ﻋﻠﻰ ﻣﯿﻜﺮوﻣﺮاﻗﺐ ﺗﻜﻮن ﺑﺴﯿﻄﺔ وﺻﻐﯿﺮة وﻟﯿﺴﺖ ﻣﻌﻘﺪة.
اﻟﻌﻨﺼﺮ اﻟﻤﻄﺮوح ﻗﯿﺪ اﻟﺪراﺳﺔ ﺧﺎص ﺑﺎﻟﺸﺮﻛﺔ MICROCHIPأﻻ و ھﻮ.PIC16F84A :
اﻟﻜﻠﻤﺔ PICھﻲ ﻋﻼﻣﺔ ﺳﺠﻠﺔ ﻣﻦ اﺑﺘﻜﺎر 16 ،MICROCHIPﺗﻌﻨﻲ أن اﻟﻌﻨﺼﺮ ﻣﻦ اﻟﻌﺎﺋﻠﺔ اﻟﻮﺳﻄﻰ ):F (Mid-range:14bit
اﻟﺬاﻛﺮة اﻟﻤﺴﺘﻌﻤﻠﺔ ﻣﻦ ﻧﻮع :84A .Flashھﻮ اﻟﺮﻗﻢ اﻟﺘﻌﺮﻳﻔﻲ ﻟﻠﻌﻨﺼﺮ.
اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﺒﯿﻦ اﻟﻤﺨﻄﻂ اﻟﻨﻤﻮذﺟﻲ ﻟﻠﻤﻜﻮﻧﺎت اﻷﺳﺎﺳﯿﺔ اﻟﺨﺎص ﺑﺎﻟﻌﺎﺋﻠﺔ اﻟﻮﺳﻄﻰ ). PIC16 (Mid-range
ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ
ﻣﻨﺎﻓﺬ
د/خ
ﻓﻚ اﻟﺸﻔﺮة
و اﻟﺘﺤﻜﻢ
ﻋﻨﺎﺻﺮ أﺧﺮى
ﻣﺤﯿﻄﺔ
ﺗﻮﻟﯿﺪ اﺷﺎرة
اﻟﺴﺎﻋﺔ ﺳﺠﻞ اﻟﻌﻤﻞ W
-اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ -1-
اﻟﻮﺣﺪة اﻟﺤﺴﺎﺑﯿﺔ و اﻟﻤﻨﻄﻘﯿﺔ . UAL 8 bit : -
ﺳﺠﻞ اﻟﻌﻤﻞ .W 8 bit : -
ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﻧﻮع.FLASH 1k mots de 14 bit: -
ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ.14 bit : -
ﻣﻜﺪس ذو 8ﻣﺴﺘﻮﻳﺎت. -
ﺳﺠﻞ اﻟﺘﻌﻠﯿﻤﺔ.14 bit : -
ذاﻛﺮة RAM :ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﺴﺠﻼت اﻟﺨﺎﺻﺔ ) (SFRﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ ﻣﻮﻗﻊ ﺑﻪ 68 octetﻟﻼﺳﺘﻌﻤﺎل اﻟﻌﺎم ،و ھﻲ -
ﻣﻨﻔﺼﻠﺔ إﻟﻰ ﺟﺰﺋﯿﻦ ) bank0و .( bank1
ذاﻛﺮة ، EEPROM (64 octet) :ﻟﻠﻜﺘﺎﺑﺔ و اﻟﻘﺮاءة .ﺣﯿﺚ أﻧﮫﺎ ﻻ ﺗﻔﻘﺪ ﻣﺤﺘﻮاھﺎ ﺑﺎﻧﻘﻄﺎع اﻟﺘﻐﺬﻳﺔ ﻓﮫﻲ ﺟﺪ ﻣﻔﯿﺪة ﻣﻦ -
أﺟﻞ اﻻﺣﺘﻔﺎظ ﺑﺎﻟﻤﻌﻄﯿﺎت اﻟﺪاﺋﻤﺔ.
ﻣﯿﻘﺎﺗﯿﺔ /ﻋﺪاد ذو .8 bit -
ﻣﻨﺎﻓﺬ دﺧﻮل أو ﺧﺮوج ).(PortB , PortA -
إﺷﺎرة ﺳﺎﻋﺔ داﺧﺎﻳﺔ. -
ﻳﺘﻢ ﺗﺤﻤﯿﻞ ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ﺑﻜﻮد ) ﺷﻔﺮة ( اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﻄﻠﻮب ﻣﻦ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﺗﻨﻔﯿﺬه .اﻟﺒﺮﻧﺎﻣﺞ ﻳﻜﻮن ﻋﻠﻰ ﺷﻜﻞ ﻗﺎﺋﻤﺔ ﻣﻦ
اﻟﺘﻌﻠﯿﻤﺎت وﻳﻘﻮم ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ ﺑﺤﻔﻆ ﻋﻨﻮان اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ اﻟﺘﻲ ﻋﻠﯿﮫﺎ اﻟﺪور ﻓﻲ اﻟﺘﻨﻔﯿﺬ أي أﻧﻪ ﻋﻤﻞ ﻛﻤﺆﺷﺮ ﻟﺬاﻛﺮة
اﻟﺒﺮﻧﺎﻣﺞ وﻳﻤﻜﻦ ﻟﻘﯿﻤﺔ ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ أن ﺗﻨﺘﻘﻞ إﻟﻰ اﻟﻤﻜﺪس وﻳﺤﺪث ذﻟﻚ ﻋﻨﺪ ﺗﻨﻔﯿﺬ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ أو ﺣﺪوث ﻣﻘﺎطﻌﺔ ﻛﻤﺎ
ﻓﻲ ﺗﻌﻠﯿﻤﺎت CALLو RETURNو RETFIEو .RETLWﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ ذو 13-bitوﻣﻦ ﺛﻢ ﻓﺈن اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻳﻤﻜﻨﻪ ﻧﻈﺮﻳﺎ
اﻟﻌﻨﻮﻧﺔ ﻣﻦ 0000hإﻟﻰ . 1FFFh
أول ﻣﻮﻗﻊ ﻓﻲ ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ﻳﺴﻤﻰ ) reset vectorﻣﺘﺠﻪ أو ﺷﻌﺎع اﻟﺒﺪاﻳﺔ ( .ﻋﻨﺪ ﺑﺪء ﺗﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻷول ﻣﺮة ) ﻋﻨﺪ
ﺗﻮﺻﯿﻞ اﻟﺘﻐﺬﻳﺔ ﻣﺜﻼ ( ﻓﺈن ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ ﻳﻮﺿﻊ ﻋﻠﻰ اﻟﺼﻔﺮ )ﺗﺼﻔﯿﺮ ( 0000و ﺑﺎﻟﺘﺎﻟﻲ ﻓﺈن أول ﻣﻮﻗﻊ ﺳﻮف ﻳﺸﯿﺮ إﻟﯿﻪ ھﻮ
) reset vectorﻣﺘﺠﻪ اﻟﺒﺪاﻳﺔ ( .و ﻣﻦ ﺛﻢ ﻓﻌﻠﻰ اﻟﻤﺒﺮﻣﺞ أن ﻳﻀﻊ أول ﺗﻌﻠﯿﻤﺔ ﻟﻪ ﻓﻲ ھﺬا اﻟﻤﻮﻗﻊ.
-اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ -2-
2-2اﻟﺬاﻛﺮة : RAM
ﺗﺤﺘﻮي ﻋﻠﻰ 68ﺑﺎﻳﺖ ﻟﻠﻤﻌﻄﯿﺎت وﻋﻠﻰ ﺟﻤﯿﻊ اﻟﺴﺠﻼت اﻟﻼزﻣﺔ
ﻟﺘﺴﯿﯿﺮ اﻟﻨﻈﺎم و اﺳﺘﻌﻤﺎل اﻟﻤﻠﺤﻘﺎت اﻟﺪاﺧﻠﯿﺔ واﻟﻤﻨﺎﻓﺬ.
و ﻛﻤﺎ ﻧﻼﺣﻆ ﻓﮫﻲ ﻣﺮﺗﺒﺔ ﻋﻠﻰ ﺷﻜﻞ ﻣﻨﻄﻘﺘﯿﻦ ) Bank0و .( Bank1
ﻧﺤﻦ ﻛﺒﺸﺮ ﻧﻌﺒﺮ ﻋﻦ أﻓﻜﺎرﻧﺎ ﺑﻄﺮﻳﻘﺔ ﻣﻌﻘﺪة وﻏﺎﻟﺒﺎ ﻣﺎ ﻳﻜﻮن ﺗﻌﺮﻳﻔﮫﺎ ﺑﺄﺷﻜﺎل ﻟﻐﻮﻳﺔ ﻏﯿﺮ ﻣﺤﺪدة اﻟﻤﻌﺎﻟﻢ.
اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻳﻘﺮأ وﻳﻔﮫﻢ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ وﻳﺴﺘﺠﯿﺐ ﺑﺸﻜﻞ دﻗﯿﻖ ﻟﺘﻌﻠﯿﻤﺎت دﻗﯿﻘﺔ .ﻓﮫﻮ ﻣﻨﻄﻘﻲ إﻟﻰ أﻗﺼﻰ اﻟﺤﺪود وﻳﻔﻌﻞ
ﺗﻤﺎﻣﺎ ﻣﺎ ﻳﺆﻣﺮ ﺑﻪ .ﻣﻊ ھﺬا اﻟﻔﺮق اﻟﻠﻐﻮي ﻛﯿﻒ ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺞ ﻛﺘﺎﺑﺔ ﺑﺮاﻣﺞ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ؟
ھﻨﺎك ﺛﻼﺛﺔ طﺮق ﺗﻔﺮض ﻧﻔﺴﮫﺎ ﻟﺴﺪ ھﺬه اﻟﻔﺠﻮة و ھﻲ:
-اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ -4-
ﻳﺠﺐ ﻋﻠﻰ اﻟﻤﺒﺮﻣﺞ اﻟﺘﻔﻜﯿﺮ ﺑﻤﺴﺘﻮى اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻛﻤﺎ ﻟﻮ ﻛﺎن ﻳﻌﻤﻞ ﻣﺒﺎﺷﺮة ﺑﺘﻌﻠﯿﻤﺎﺗﻪ وﻟﻜﻦ ﻋﻠﻰ اﻷﻗﻞ ﻓﺈن اﻟﻤﺒﺮﻣﺞ ﻟﺪﻳﻪ
ﻣﻔﻜﺮات mnemonicsﻻﺳﺘﺨﺪاﻣﮫﺎ أﻓﻀﻞ ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﺑﺸﻔﺮة ﻟﻐﺔ اﻵﻟﺔ.
ﻗﺒﻞ اﻟﺸﺮوع ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﻳﺠﺐ أوﻻ ﻣﻌﺮﻓﺔ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ 16F84Aو ھﻲ ﺑﻌﺪد 35ﺗﻌﻠﯿﻤﺔ.
ﻣﻦ ﺧﻼل وﺛﺎﺋﻖ اﻟﺼﺎﻧﻊ MICROCHIPﻧﻼﺣﻆ أن ﺗﻌﻠﯿﻤﺎت اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ PIC16F84Aﺗﻨﻘﺴﻢ إﻟﻰ 3أﻗﺴﺎم:
Byte-oriented -اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻮﺟﮫﺔ ﻣﻊ ﻣﺤﺘﻮى ﻣﻠﻒ اﻟﺴﺠﻞ Fﺑﻜﺎﻣﻠﻪ )ﺑﻤﻌﻨﻰ اﻟﺨﺎﻧﺎت اﻟﺜﻤﺎﻧﯿﺔ ﻟﻠﺴﺠﻞ .( byte=8 bit
Bit-oriented -اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻮﺟﮫﺔ ﻣﻊ ﻣﺤﺘﻮى ﺧﺎﻧﺔ واﺣﺪة ﻟﻤﻠﻒ اﻟﺴﺠﻞ) Fﻗﺮاءة أو ﻛﺘﺎﺑﺔ ﻷﺣﺪ اﻟﺒﺖ ﻣﻦ ﺑﯿﻦ 8ﺑﺖ(.
Literal and Control -اﻟﺘﻌﻠﯿﻤﺎت ﻋﻠﻰ ﺷﻜﻞ ﻛﻠﻤﺔ ﻣﺒﺎﺷﺮة ) (kﻣﺘﻜﻮﻧﺔ ﻣﻦ 8ﺑﺖ ،ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ ﺗﻌﻠﯿﻤﺎت اﻟﺘﺤﻜﻢ.
ﻧﺘﺤﻮل اﻵن إﻟﻰ ﻣﺠﻤﻮﻋﺔ اﻟﺘﻌﻠﯿﻤﺎت ﻟﻠﻌﺎﺋﻠﺔ PIC 16أن ﻧﺮى أن اﻟﺠﺪول ﻣﻘﺴﻢ إﻟﻰ ﺳﺘﺔ أﻋﻤﺪة وﻛﻞ ﺗﻌﻠﯿﻤﺔ ﻣﻦ ال 35
ﺗﻌﻠﯿﻤﺔ ﺗﻮﺟﺪ ﻓﻲ ﺳﻄﺮ واﺣﺪ.
اﻟﻌﻤﻮد اﻷول:
ﻳﻌﻄﻰ اﻟﺘﻌﻠﯿﻤﺔ ﺑﺸﻜﻠﮫﺎ اﻟﻔﻌﻠﻲ ) ﺳﻤﯿﻨﺎه ﺷﻜﻞ ﻣﻔﻜﺮة ( mnemonicوﻣﻌﮫﺎ اﻟﺸﻔﺮة )اﻟﻜﻮد( اﻟﺘﻲ ﺗﺤﺪد ﻧﻮع اﻟﻤﻌﺎﻣﻞ اﻟﺬي
ﺳﻨﻌﻤﻞ ﻋﻠﯿﻪ ).ﻳﺴﻤﻰ .( operand
-اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ -5-
ﻳﻮﺟﺪ أرﺑﻊ أﻧﻮاع ﻣﻦ ﺷﻔﺮات ھﺬا اﻟﻤﻌﺎﻣﻞ و ھﻲ :
•اﻟﻤﻌﺎﻣﻞ fأي ﻣﻠﻒ fileوﺗﻌﻨﻲ أي ﻣﻮﻗﻊ ﻓﻲ ذاﻛﺮة اﻟﺒﯿﺎﻧﺎت وھﻮ ﻋﺪد ﻣﻜﻮن ﻣﻦ 7ﺧﺎﻧﺎت )ﻳﻤﻜﻦ أن ﻧﻜﻮّن ﻣﻦ اﻟﺴﺒﻊ
ﺧﺎﻧﺎت 128ﻋﺪد ( أي ﻳﻜﻮن ﺳﺠﻞ ﻣﻠﻒ ﻣﻦ إﺟﻤﺎﻟﻲ 128ﺳﺠﻞ-ﻣﻠﻒ .
•اﻟﻤﻌﺎﻣﻞ bأي ﺧﺎﻧﺔ bitواﻟﻤﻄﻠﻮب اﻟﺒﺤﺚ ﻋﻨﮫﺎ ﻓﻲ داﺧﻞ ﻣﻠﻒ ﻣﺤﺪد وھﻮ ﻋﺪد ﻣﻦ 3ﺧﺎﻧﺎت )ﻳﻤﻜﻦ أن ﻧﻜﻮن ﻣﻦ 3
ﺧﺎﻧﺎت 8أﻋﺪاد ،أي ﺗﻜﻮن ﺧﺎﻧﺔ ﻣﻦ إﺟﻤﺎﻟﻲ 8ﺧﺎﻧﺎت(.
•اﻟﻤﻌﺎﻣﻞ dوﻳﻌﻨﻰ اﻟﮫﺪف )أو اﻟﻤﻘﺼﻮد( وھﻮ ﺧﺎﻧﺔ واﺣﺪة ﻓﻘﻂ( ) ( 1-bitﻳﻤﻜﻦ أن ﻧﻜﻮن ﻣﻦ ﺧﺎﻧﺔ واﺣﺪة ﻋﺪدﻳﻦ ﻓﮫﻲ إﻣﺎ
أن ﺗﻜﻮن 0أو .1
•اﻟﻤﻌﺎﻣﻞ kوﻳﻌﻨﻰ ﻗﯿﻤﺔ ﺛﺎﺑﺘﺔ ﻣﺤﺪدة ﺣﺮﻓﯿﺎ literalوھﻮ ﻋﺪد ﻣﻜﻮن ﻣﻦ 8ﺧﺎﻧﺎت إذا ﻛﺎن ﻳﻌﺒﺮ ﻋﻦ ﺑﯿﺎﻧﺎت وﻣﻦ 11ﺧﺎﻧﺔ إذا
ﻛﺎن ﻳﻌﺒﺮ ﻋﻦ ﻋﻨﻮان.
ﻟﻨﺘﻨﺎول اﻵن ﺑﻌﺾ اﻟﺘﻌﻠﯿﻤﺎت ﻣﻦ وﺛﺎﺋﻖ اﻟﺼﺎﻧﻊ ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل و اﻟﺘﻲ ﺳﻨﺴﺘﻐﻠﮫﺎ ﻓﻲ ﺑﺮﻣﺠﺔ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ:
ﻣﻼﺣﻈﺔ :
اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ اﻟﻤﺠﻤﻊ ﻟﯿﺴﺖ ﺣﺴﺎﺳﺔ ﻟﻨﻮع اﻟﺤﺮوف ) ﻛﺒﯿﺮ أم ﺻﻐﯿﺮ (.
اﻟﺘﻌﻠﯿﻤﺔ : clrw
ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﺗﺠﻌﻞ ﻗﯿﻤﺔ اﻟﺴﺠﻞ Wﺻﻔﺮ ) وﻣﻌﻨﻰ ﺷﻜﻞ اﻟﻤﻔﻜﺮة mnemonic :أن clrwﺗﺬﻛﺮﻧﺎ ﺑﻜﻠﻤﺔ clearأي ﻣﺤﻮ
أو ﻣﺴﺢ و اﻟﺤﺮف Wﻳﺬﻛﺮﻧﺎ ﺑﺎﻟﺴﺠﻞ Wوھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺘﻌﻠﯿﻤﺎت ﻻ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﻣﻌﺎﻣﻞ ﺑﮫﺎ.
و اﻟﻌﻤﻮد اﻟﺨﺎﻣﺲ ﻳﺨﺒﺮﻧﺎ ﺑﺄن ﺧﺎﻧﺔ اﻟﺼﻔﺮ Zﻓﻲ ﺳﺠﻞ اﻟﺤﺎﻟﺔ ﺳﻮف ﺗﺘﺄﺛﺮ ﺑﺎﻟﺘﻌﻠﯿﻤﺔ و ﻧﻈﺮا ﻷن ﻧﺘﯿﺠﺔ ھﺬه اﻟﺘﻌﻠﯿﻤﺔ داﺋﻤﺎﺻﻔﺮ
ﻓﺎن Zداﺋﻤﺎ ﺗﻜﻮن . 1 :ﻻ ﺗﺘﺄﺛﺮ أﻳﺔ ﺧﺎﻧﺔ أﺧﺮى ﻣﻦ ﺳﺠﻞ اﻟﺤﺎﻟﺔ .
-اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ -6-
-5ھﯿﻜﻠﺔ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ ﻣﺠﻤﻊ Assemblerاﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ PIC 16F84
1-5اﻟﻤﻌﻠﻮﻣﺎت و اﻹﻋﺪادات:
ھﺬا اﻟﺠﺰء ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ ﺧﺎص ﺑﺎﻟﺘﻌﺮﻳﻒ ﺑﮫﺪف اﻟﺒﺮﻧﺎﻣﺞ و ﻛﺬا ﺻﺎﺣﺒﻪ و ﺗﺎرﻳﺦ اﻧﺠﺎزه اﻟﺦ...
ﻣﻼﺣﻈﺔ :ﻛﻞ ﻣﺎ ھﻮ ﻣﻜﺘﻮب ﺑﻌﺪ اﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮطﺔ ﻳﻌﺘﺒﺮ ﻣﻦ اﻟﺘﻌﻠﯿﻘﺎت و ﻻ ﻳِﺆﺧﺬ ﺑﻌﯿﻦ اﻻﻋﺘﺒﺎر ﻋﻨﺪ ﺗﺤﻮﻳﻞ اﻟﺒﺮﻧﺎﻣﺞ )أي ﻻ
ﻳﺤﻮل إﻟﻰ ﻟﻐﺔ اﻵﻟﺔ(.
***************************************************************************;
; ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ﻋﺒﺎرة ﻋﻦ ﻣﺜﺎل ﻟﺒﺮﻣﺠﺔ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﺑﻠﻐﺔ اﻟﻤﺠﻤﻊ
;
***************************************************************************;
; اﺳﻢ اﻟﺒﺮﻧﺎﻣﺞ :اﻟﺘﺤﻜﻢ ﻓﻲ ﺛﻨﺎﺋﻲ ﺿﻮﺋﻲ ﺑﺎﺳﺘﻌﻤﺎل زر ﺿﺎﻏﻂ
; اﻟﺘﺎرﻳﺦ ................. :
;
***************************************************************************;
اﻟﺘﻌﺮﻳﻒ ﺑﺎﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ اﻟﻤﺴﺘﻌﻤﻞ ﺿﺮوري ﻟﻠﺒﺮﻧﺎﻣﺞ اﻟﺬي ﺳﯿﺤﻮل ﻟﻐﺔ اﻟﻤﺠﻤﻊ إﻟﻰ ﻟﻠﻐﺔ اﻵﻟﺔ و ذﻟﻚ ﻳﺘﻢ ﻋﻦ
طﺮﻳﻖ ﻣﻮﺟﻪ ) (directiveﻟﻐﺔ اﻟﻤﺠﻤﻊ ).(LIST
ﻛﻤﺎ ﻳﻤﻜﻦ إدراج ﻣﻠﻒ إﺿﺎﻓﻲ ﺗﻌﺮف ﺑﻪ ﻣﺨﺘﻠﻒ اﻟﺜﻮاﺑﺖ و اﻻرﻓﺎﻗﺎت ) ﻟﺘﻔﺎدي ﻛﺜﺎﻓﺔ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﻜﺘﻮب(،
اﻟﻤﻮﺟﻪ#include <p16F84A.inc > :
ﺗﮫﯿﺌﺔ ﻛﻠﻤﺔ اﻹﻋﺪادات Configuration Word settings
اﻟﻤﻮﺟﻪ __CONFIGﻳﺴﻤﺢ ﻟﻠﻤﺒﺮﻣﺞ ﺑﺘﻌﺮﻳﻒ ﺑﻌﺾ ﺧﺼﺎﺋﺺ وﺳﻤﺎت اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻋﻨﺪ ﺗﺤﻤﯿﻠﻪ ﺑﺎﻟﺒﺮﻧﺎﻣﺞ .وﺗﻜﻮن
ھﺬه اﻟﺨﺼﺎﺋﺺ ﺛﺎﺑﺘﺔ ﻟﺤﯿﻦ ﺑﺮﻣﺠﺔ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻣﺮة أﺧﺮى ،و ھﻲ ﺗﺨﺘﻠﻒ ﻋﻦ اﻟﻜﻠﻤﺎت اﻷﺧﺮى ﺣﯿﺚ أﻧﮫﺎ ﺗﻜﻮن
ﺟﺰء ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ وﻟﻜﻦ ﻻ ﻳﻤﻜﻦ اﻟﻮﺻﻮل إﻟﯿﮫﺎ ) ﻛﺒﺎﻗﻲ اﻟﻜﻠﻤﺎت( ﺳﻮاء ﻋﻦ طﺮﻳﻖ اﻟﺒﺮﻧﺎﻣﺞ أو أي طﺮﻳﻖ آﺧﺮ طﺎﻟﻤﺎ أن
اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺣﺎﻟﺔ ﺗﺸﻐﯿﻞ .ﻣﻌﺎﻧﻲ ھﺬه اﻟﻜﻠﻤﺎت ﻣﻮﺟﻮدة ﺑﺎﻟﻤﻠﻒ .includeو ھﺬا ﺗﻔﺴﯿﺮ اﻟﺒﻌﺾ ﻣﻨﮫﺎ.
; _CP_ON )ﻻ ﻳﻤﻜﻦ ﻗﺮاءة ﻣﺤﺘﻮى اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ( Protection Code: ON :
; _CP_OFF Protection Code: OFF
; _PWRTE_ON اﻟﻤﺆﻗﺖ ﻋﻨﺪ ﺗﻮﺻﯿﻞ اﻟﻄﺎﻗﺔ ﻓﻲ اﻟﺨﺪﻣﺔ( Timer reset on power on: operational ) reset
; _PWRTE_OFF Timer reset: out of operation
; _WDT_ON )ﻣﺆﻗﺖ اﻟﺤﺮاﺳﺔ ﻓﻲ اﻟﺨﺪﻣﺔ( Watch-dog: operational
; _WDT_OFF Watch-dog: out of operation
; _LP_OSC )ﻣﺬﺑﺬب اﻟﻜﻮارﺗﺰ ﺑﺴﺮﻋﺔ ﻋﺎﻟﯿﺔ( Low speed quartz oscillator
; _XT_OSC Medium speed quartz oscillator
; _HS_OSC High speed quartz oscillator
; _RC_OSC )ﻣﺬﺑﺬب ﺑﺨﻠﯿﺔ RC oscillator (RC
************************************************************************** ;
_CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC ﺗﻌﺮﻳﻒ ﺑﺒﻌﺾ ﺧﺼﺎﺋﺺ اﻟﻨﻈﺎم ;
***************************************************************************
-اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ -7-
اﻟﻤﻮﺟﻪ ORGﻣﺘﺒﻮع ﺑﻌﻨﻮان ،ﻳﺤﺪد ﻋﻨﻮان ﺗﻨﻔﯿﺬ اﻟﺘﻌﻠﯿﻤﺔ اﻟﻤﻮاﻟﯿﺔ و اﻟﺘﻲ ﻳﺠﺐ أن ﺗﻜﻮن 0x0ﻷن ﻋﻨﺪ resetﻓﺈن
اﻟﺒﺮﻧﺎﻣﺞ ﻳﻌﻮد إﻟﻰ اﻟﻌﻨﻮان .0
اﻟﺘﻌﻠﯿﻤﺔ GOTOﺗﺄﻣﺮ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﻟﻘﻔﺰ إﻟﻰ ﻋﻨﻮان اﻟﻜﻠﻤﺔ init
***************************************************************************
2-5ﺗﮫﯿﺌﺔ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ
ﻳﺒﺪأ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ھﺬه اﻟﻤﺮﺣﻠﺔ ﺑﺘﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺎت اﻟﺘﮫﯿﺌﺔ وﺗﺴﻤﻰ initialization
***************************************************************************;
;Initialisation
***************************************************************************;
init
BSF STATUS,5 وﺿﻊ 1ﻓﻲ اﻟﺒﺖ 5ﻟﺴﺠﻞ اﻟﺤﺎﻟﺔ ﻟﻠﺬھﺎب إﻟﻰ اﻟﺒﻨﻚ;1
MOVLW 0x00 وﺿﻊ 00000000ﻓﻲ ﺳﺠﻞ اﻟﻌﻤﻞ ; W
MOVWF TRISB وﺿﻊ ﻣﺤﺘﻮى ﺳﺠﻞ اﻟﻌﻤﻞ ﻓﻲ اﻟﻤﻨﻔﺬ Bﻟﺒﺮﻣﺠﺘﻪ ﻛﻤﻨﻔﺬ ﺧﺮوج ;
MOVLW 0x1F وﺿﻊ 11111ﻓﻲ ﺳﺠﻞ اﻟﻌﻤﻞ ; W
MOVWF TRISA وﺿﻊ ﻣﺤﺘﻮى ﺳﺠﻞ اﻟﻌﻤﻞ ﻓﻲ اﻟﻤﻨﻔﺬ Aﻟﺒﺮﻣﺠﺘﻪ ﻛﻤﻨﻔﺬ دﺧﻮل;
BCF STATUS,5 ﻧﻀﻊ 0ﻓﻲ اﻟﺒﺖ 5ﻟﺴﺠﻞ اﻟﺤﺎﻟﺔ ﻟﻠﻌﻮدة إﻟﻰ اﻟﺒﻨﻚ; 0
GOTO start اﻗﻔﺰ إﻟﻰ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺮﺋﯿﺴﻲ ;
***************************************************************************;
3-5اﻟﺒﺮﻧﺎﻣﺞ اﻟﺮﺋﯿﺴﻲ
ﻧﺼﻞ إﻟﻰ اﻟﺠﺰء اﻟﻨﮫﺎﺋﻲ و ھﻮ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻔﻌﻠﻲ ﻧﻔﺴﻪ.
***************************************************************************;
; اﻟﺒﺮﻧﺎﻣﺞ اﻟﺮﺋﯿﺴﻲ
***************************************************************************;
start
btfss PORTA , 2 اﻓﺤﺺ اﻟﻤﻨﻔﺬ RA2واﻗﻔﺰ إذا ﻛﺎن ﻳﺴﺎوي ; 1
bsf PORTB , 2 ﺿﻊ 1ﻋﻠﻰ RB2إذن ﺗﺸﺘﻌﻞ ; LED
btfsc PORTA , 2 اﻓﺤﺺ اﻟﻤﻨﻔﺬ RA2و اﻗﻔﺰ إذا ﻛﺎن ﻳﺴﺎوي ; 0
bcf PORTB , 2 ﺿﻊ 0ﻋﻠﻰ RB2إذن ﺗﻨﻄﻔﺊ ; LED
***************************************************************************;
اﻟﺒﺮﻧﺎﻣﺞ ﻳﻔﺤﺺ اﻟﻤﺪﺧﻞ RA2ﻋﺒﺮ اﻟﺘﻌﻠﯿﻤﺔ btfssو ﻳﺠﺮي ﻗﻔﺰ ﻋﻠﻰ اﻟﺘﻌﻠﯿﻤﺔ اﻟﻤﻮﻟﯿﺔ ﻣﺎدام RA2ﻓﻲ اﻟﻤﺴﺘﻮى اﻟﻤﻨﻄﻘﻲ
.1اﻟﺘﻌﻠﯿﻤﺔ btfscﺗﻔﺤﺺ ﺑﺪورھﺎ اﻟﻤﺪﺧﻞ RA2و ﺗﺠﺮي ﻗﻔﺰ ﻋﻠﻰ اﻟﺘﻌﻠﯿﻤﺔ اﻟﻤﻮﻟﯿﺔ إذا ﻛﺎن اﻟﻤﺴﺘﻮى اﻟﻤﻨﻄﻘﻲ .0ﺛﻢ
إﻻ ﺗﻀﻊ 0ﻋﻠﻰ اﻟﻤﺨﺮج ) RB2اﻟﺜﺎﺋﻲ اﻟﻀﻮﺋﻲ ﻳﺒﻘﻰ ﻣﻨﻄﻔﺊ( ،ﺛﻢ ﺑﻌﺪ ذﻟﻚ اﻟﺮﺟﻮع إﻟﻰ .start
ﻳﺮﺟﻊ إﻟﻰ . startو ّ
و رﻳﺜﻤﺎ ﻧﻀﻐﻂ ﻋﻠﻰ اﻟﺰر ﻳﺄﺧﺬ RA2اﻟﻘﯿﻤﺔ 0ﻓﯿﻤﺮ اﻟﺒﺮﻧﺎﻣﺞ إﻟﻰ اﻟﺘﻌﻠﯿﻤﺔ اﻟﻤﻮاﻟﯿﺔ ﻟﻪ ﻣﺒﺎﺷﺮة ) (bsf PORTB , 2أي وﺿﻊ
1ﻋﻠﻰ اﻟﻤﻨﻔﺬ RB2و ﺑﺎﻟﺘﺎﻟﻲ ﻳﺸﺘﻌﻞ اﻟﺜﻨﺎﺋﻲ اﻟﻀﻮﺋﻲ .ﺛﻢ ﻳﻌﻮد اﻟﺒﺮﻧﺎﻣﺞ ﻟﻔﺤﺺ اﻟﻤﺪﺧﻞ RA2ﻣﻦ ﺟﺪﻳﺪ ،و ﺳﺘﻤﺮ ﺗﻨﻔﯿﺬ
اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ھﺬا اﻟﻨﺤﻮ .
و ﻳﻨﺘﮫﻲ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﺧﻼل اﻟﻤﻮﺟﻪ .END
-اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ -8-
-6أﻧﺸﻄﺔ:
C1
U1
15pF 16 17
OSC1/CLKIN RA0
X1 15
OSC2/CLKOUT RA1
18 R3
1
C2 RA2
4 2
MCLR RA3 330
3
RA4/T0CKI
15pF 6
RB0/INT
7
RB1
8
RB2
9
RB3
10
RB4
11
VDD RB5
12
RB6
13
RB7
PIC16F84A
R4
330
1-6اﻟﻤﺸﺮوع :1اﻟﺘﺤﻜﻢ ﻓﻲ إﺷﻌﺎل و إطﻔﺎء ﺛﻨﺎﺋﻲ ﺿﻮﺋﻲ LEDﺑﻮاﺳﻄﺔ زر ﺿﺎﻏﻂ . SWﻛﻞ ﺿﻐﻂ ﻣﺘﺠﺪد ﻋﻠﻰ SW
ﻳﻨﺘﺞ ﻋﻨﻪ ﻗﻠﺐ ﺣﺎﻟﺔ اﻟﺜﻨﺎﺋﻲ اﻟﻀﻮﺋﻲ.
2-6اﻟﻤﺸﺮوع :2اﻟﺘﺤﻜﻢ ﻓﻲ إﺷﻌﺎل ﺛﻨﺎﺋﻲ ﺿﻮﺋﻲ LEDﺑﻮاﺳﻄﺔ زر ﺿﺎﻏﻂ .SWاﻟﻀﻐﻂ ﻋﻠﻰ SWﻳﻨﺘﺞ ﻋﻨﻪ إﺷﻌﺎل
اﻟﺜﻨﺎﺋﻲ اﻟﻀﻮﺋﻲ ﻟﻤﺪة ﻣﻌﯿﻨﺔ ) T= 5 sﻧﻔﺲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ(.
ﻣﻼﺣﻈﺔ :ﻳﺠﺐ اﻧﺠﺎز ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻟﻠﺘﺄﺟﯿﻞ ﺑﺎﺳﺘﻌﻤﺎل اﻟﺘﻌﻠﯿﻤﺘﺎن CALLو .RETURN
*********************************************************************;
; SOUS-ROUTINE DE TEMPORISATION *
*********************************************************************;
;--------------------------------------------------------------------------------------------------------
; Cette sous-routine introduit un retard de 500.000 µs.
; Elle ne reçoit aucun paramètre et n'en retourne aucun
;--------------------------------------------------------------------------------------------------------
tempo
movlw 2 ; pour 2 boucles
movwf cmpt3 ; initialiser compteur3
boucle3
-اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ -9-
clrf cmpt2 ; effacer compteur2
boucle2
clrf cmpt1 ; effacer compteur1
boucle1
nop ; perdre 1 cycle *256 *256 *2
decfsz cmpt1 , f ; décrémenter compteur1
goto boucle1 ; si pas 0, boucler
decfsz cmpt2 , f ; si 0, décrémenter compteur 2
goto boucle2 ; si cmpt2 pas 0, recommencer boucle1
decfsz cmpt3 , f ; si 0, décrémenter compteur 3
goto boucle3 ; si cmpt3 pas 0, recommencer boucle2
return ; retour de la sous-routine
2ﺗﻤﺮﻳﻦ
-10- اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ-
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; PROGRAMME
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LOOP BSF PORTB,0 ;Allume la LED, car l’instruction
; « BSF » met à 1 (set).
;Dans le cas présent, elle met à 1 le
;bit zéro du Port B (PORTB,0).
GOTO LOOP ;Le programme se reboucle.
;La LED reste indéfiniment allumée.
END ;Fin du programme.
3ﺗﻤﺮﻳﻦ
b) Fichier à extension .asm
;Titre du programme : PROG2
;Ce programme fait clignoter indéfiniment la LED branchée sur la
;sortie RB0 (bit 0 du Port B).
;Le programme comporte une temporisation (DELAI) pour rendre
;perceptibles les allumages et les extinctions de la LED, sinon les
;transitions auraient lieu à très grande vitesse et notre oeil ne verrait
;pas les clignotements.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; DIRECTIVES
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PROCESSOR 16F84
RADIX HEX
INCLUDE « P16F84.INC »
__CONFIG 3FF1
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; DECLARATIONS DES VARIABLES
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
COMPT1 EQU 0C ;On met la variable COMPT1 à
;l’adresse RAM 0C.
COMPT2 EQU 0D ;On met la variable COMPT2 à
;l’adresse RAM 0D.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; VECTEUR DE RESET
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ORG 00 ;Vecteur de Reset.
GOTO START ;Renvoi à l’adresse EEPROM 05 (hexa)
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; INITIALISATIONS
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
START ORG 05 ;Saut introduit intentionnellement pour faire
;démarrer le programme à l’adresse EEPROM 05.
CLRF PORTB ;Efface les 8 bits du Port B.
BSF STATUS,RP0 ;Met à 1 (set) le bit 5 (RP0) du
;registre d’état (STATUS).
;Autrement dit : sélectionne la
;page 1 du Register File (adresses
;de 80 à 8B) dans laquelle se trouve
;le Registre STATUS (à l’adresse 83).
MOVLW b’00000000’ ;Met la valeur binaire 00000000 dans
;le registre W, matérialisant ainsi notre
;intention d’utiliser les 8 lignes
-11- اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ-
;Port B comme SORTIES.
;La notation b’00000000’ indique que
;la valeur 00000000 est à interpréter
;en tant que chiffre binaire.
MOVWF TRISB ;Port B configuré, mais encore en
;haute impédance (Trhee-state).
BCF STATUS,RP0 ;Retour à la page 0 du Register File.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; PROGRAMME PRINCIPAL
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MAIN BCF PORTB,0 ;LED éteinte car l’instruction
; « BCF » met à 0 (clear).
;Ici, elle met à 0 le bit 0 du
;Port B (PORTB,0).
CALL DELAI ;Appelle le sous-programme de
;retard (DELAI).
BSF PORTB,0 ;LED allumée, car l’instruction
; « BSF » met à 1 (set).
;Ici elle met à 1 le bit 0 du
;Port B (PORTB,0).
CALL DELAI ;On appelle à nouveau le
;sous-programme de retard.
GOTO MAIN ;Retour au programme principal.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; SOUS-PROGRAMME de TEMPORISATION
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DELAI DECFSZ COMPT1,1 ;Décrémente COMPT1et - s’il n’est pas
GOTO DELAI ;à zéro - va à DELAI
MOVLW .255 ;Charge la variable COMPT1 (adresse
MOVWF COMPT1 ;RAM 0C) avec 255 (en décimal).
DECFSZ COMPT2,1 ;Décrémente COMPT2, et s’il n’est pas
GOTO DELAI ;à zéro, va à DELAI
MOVLW .255 ;Recharge COMPT1 avec 255
MOVWF COMPT1
MOVLW .255 ;Recharge COMPT2 avec 255
MOVWF COMPT2
RETURN ;Fin du sous-programme DELAI
END ;Fin du programme.
-12- اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ-