Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

‫اﻟﺪارات اﻟﻤﻨﻄﻘﯿﺔ اﻟﻤﺒﺮﻣﺠﺔ ﻋﻠﻰ ﺷﻜﻞ‬

‫اﻟﻌﺎم اﻟﺪراﺳﻲ ‪12/11 :‬‬ ‫اﻟﺸﻌﺒﺔ ‪ :‬ھــ ك‬


‫دارة ﻣﻨﺪﻣﺠﺔ )اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ‪(PIC16f84A :‬‬

‫اﻹﺷﻜﺎﻟﯿﺔ ‪:‬‬
‫ﻳﻤﻜﻦ إﻧﺠﺎز اﻟﻮظﺎﺋﻒ اﻟﺤﺴﺎﺑﯿﺔ و اﻟﻤﻨﻄﻘﯿﺔ ﺑﻮاﺳﻄﺔ دارات ﻣﻨﺪﻣﺠﺔ ﺗﻤﺎﺛﻠﯿﺔ أو ﻣﻨﻄﻘﯿﺔ‪ .‬ﻟﻜﻦ ﻋﻨﺪﻣﺎ ﻳﺼﺒﺢ اﻟﻌﻨﺼﺮ اﻟﺘﻘﻨﻲ‬
‫ﻣﻌﻘﺪ و ﻳﺘﻄﻠﺐ إﻧﺠﺎز ﻣﻌﺎﻟﺠﺔ ﻣﻌﻠﻮﻣﺎت ﻛﺜﯿﺮة و ﺑﺴﺮﻋﺔ‪ ،‬ﻳﺼﺒﺢ ﻣﻦ اﻟﻀﺮوري اﺳﺘﻌﻤﺎل ﻋﻨﺎﺻﺮ ﺗﺘﻤﯿﺰ ﺑﺄﻛﺜﺮ ﻗﺪرة و ﺟﺎھﺰﻳﺔ‬
‫ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ھﺬه اﻟﻤﺘﻄﻠﺒﺎت‪ ،‬ﻟﮫﺬا ﻧﺴﺘﻌﻤﻞ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ‪.‬‬
‫ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ ﻣﺎ ﺳﺒﻖ ﻓﺈن اﻟﺘﻜﻨﻮﻟﻮﺟﯿﺔ اﻟﻤﺮﺑﻮطﺔ ﺑﺪأت ﺷﻲء ﻓﺸﻲء ﺑﺎﻻﻧﺪﺛﺎر ﻣﻦ اﻟﻤﺤﯿﻂ اﻟﺼﻨﺎﻋﻲ‪.‬‬

‫ﺗﻌﺮﻳﻒ‪:‬‬
‫اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ھﻮ ﺟﯿﻞ ﺟﺪﻳﺪ و ﻣﻄﻮر ﻣﻦ اﻟﻤﯿﻜﺮوﻣﻌﺎﻟﺞ ﺣﯿﺚ أن ﺟﻤﯿﻊ ﻣﻠﺤﻘﺎت اﻟﻤﻌﺎﻟﺞ )ذاﻛﺮات‪ ،‬ﺳﺠﻼت‪ ،‬اﻟﺦ‪ (...‬ﺗﻢ‬
‫وﺿﻌﮫﺎ ﻓﻲ ﺷﺮﻳﺤﺔ واﺣﺪة وﻣﻦ ھﻨﺎ ﺑﻨﺎء دارة ﺗﺤﺘﻮي ﻋﻠﻰ ﻣﯿﻜﺮوﻣﺮاﻗﺐ ﺗﻜﻮن ﺑﺴﯿﻄﺔ وﺻﻐﯿﺮة وﻟﯿﺴﺖ ﻣﻌﻘﺪة‪.‬‬
‫اﻟﻌﻨﺼﺮ اﻟﻤﻄﺮوح ﻗﯿﺪ اﻟﺪراﺳﺔ ﺧﺎص ﺑﺎﻟﺸﺮﻛﺔ ‪ MICROCHIP‬أﻻ و ھﻮ‪.PIC16F84A :‬‬
‫اﻟﻜﻠﻤﺔ ‪ PIC‬ھﻲ ﻋﻼﻣﺔ ﺳﺠﻠﺔ ﻣﻦ اﺑﺘﻜﺎر ‪ 16 ،MICROCHIP‬ﺗﻌﻨﻲ أن اﻟﻌﻨﺼﺮ ﻣﻦ اﻟﻌﺎﺋﻠﺔ اﻟﻮﺳﻄﻰ )‪:F (Mid-range:14bit‬‬
‫اﻟﺬاﻛﺮة اﻟﻤﺴﺘﻌﻤﻠﺔ ﻣﻦ ﻧﻮع ‪ :84A .Flash‬ھﻮ اﻟﺮﻗﻢ اﻟﺘﻌﺮﻳﻔﻲ ﻟﻠﻌﻨﺼﺮ‪.‬‬

‫‪ -1‬اﻟﮫﯿﻜﻠﺔ اﻟﻘﺎﻋﺪﻳﺔ ﻟﻠﻤﯿﻜﺮوﻣﺮاﻗﺐ ‪: PIC16F84A‬‬

‫‪ 1-1‬ﺗﺤﺪﻳﺪ أرﺟﻞ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ‪:PIC16F84A‬‬


‫‪-‬‬
‫اﻷرﺟﻞ‪ RA0, RA1, RA2, RA3, & RA4 :‬ﻋﺒﺮة ﻋﻦ ﻣﻨﺎﻓﺬ ‪.PORTA‬‬
‫اﻟﺮﺟﻞ‪ MCLR :‬ﻣﺪﺧﻞ ﻳﺴﺘﻌﻤﻞ ﻣﻦ أﺟﻞ إﻋﺎدة اﻟﺘﺸﻐﯿﻞ‪. RESET :‬‬ ‫‪-‬‬
‫‪ VSS‬و ‪ VDD‬ھﻤﺎ ﻋﻠﻰ اﻟﺘﺮﺗﯿﺐ رﺟﻠﻲ اﻟﺘﻐﺬﻳﺔ )‪ (5V‬و اﻟﻜﺘﻠﺔ‪.‬‬ ‫‪-‬‬
‫‪ OSC1/CLKIN‬و ‪ OSC2/CLKOUT‬ھﻤﺎ ﻋﺒﺎرة ﻋﻦ رﺟﻠﻲ ﺗﻮﺻﯿﻞ‬ ‫‪-‬‬
‫دارة اﻟﻤﺬﺑﺬب اﻟﺨﺎرﺟﻲ )ﻛﺮﻳﺴﺘﺎل أو ﺧﻠﯿﺔ ‪.(RC‬‬
‫اﻷرﺟﻞ‪ RB0/INT, RB1,........., RB7 :‬ﻋﺒﺮة ﻋﻦ ﻣﻨﺎﻓﺬ ‪ ،PORTB‬ﻛﻢ‬ ‫‪-‬‬
‫ﻳﻤﻜﻦ اﺳﺘﻌﻤﺎل اﻟﻤﻨﻔﺬ ‪ RB0/INT‬ﻛﻤﺪﺧﻞ ﻟﻠﻤﻘﺎطﻌﺔ )‪.(Interruption‬‬

‫اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﺒﯿﻦ اﻟﻤﺨﻄﻂ اﻟﻨﻤﻮذﺟﻲ ﻟﻠﻤﻜﻮﻧﺎت اﻷﺳﺎﺳﯿﺔ اﻟﺨﺎص ﺑﺎﻟﻌﺎﺋﻠﺔ اﻟﻮﺳﻄﻰ )‪. PIC16 (Mid-range‬‬

‫ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ‬

‫ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ‬ ‫ﻣﻜﺪس‪1‬‬ ‫‪RAM‬‬ ‫ﻣﯿﻘﺎﺗﯿﮫ‪/‬‬


‫ﺳﺠﻼت ﻣﻠﻒ‬ ‫ﻋﺪاد‬
‫ﻣﻜﺪس‪n‬‬
‫ﺳﺠﻞ اﻟﺘﻌﻠﯿﻤﺔ‬

‫ﻣﻨﺎﻓﺬ‬
‫د‪/‬خ‬

‫ﻓﻚ اﻟﺸﻔﺮة‬
‫و اﻟﺘﺤﻜﻢ‬
‫ﻋﻨﺎﺻﺮ أﺧﺮى‬
‫ﻣﺤﯿﻄﺔ‬
‫ﺗﻮﻟﯿﺪ اﺷﺎرة‬
‫اﻟﺴﺎﻋﺔ‬ ‫ﺳﺠﻞ اﻟﻌﻤﻞ ‪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‬‬ ‫‪-‬‬
‫إﺷﺎرة ﺳﺎﻋﺔ داﺧﺎﻳﺔ‪.‬‬ ‫‪-‬‬

‫‪ 2-1‬ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ و اﻟﻤﻜﺪس و ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ‪:‬‬


‫ﻳﻘﻮم ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ )‪ (program counter‬ﺑﻌﻨﻮﻧﺔ ﺣﯿﺰ ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ﺳﻮاء أﻛﺎﻧﺖ ذاﻛﺮة ‪ EPROM‬أو ‪.Flash/EEPROM‬‬
‫و ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ھﺬه اﻟﻌﺎﺋﻠﺔ ھﻮ ﺳﺠﻞ طﻮﻟﻪ ‪.13 bits‬‬

‫ﻳﺘﻢ ﺗﺤﻤﯿﻞ ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ﺑﻜﻮد ) ﺷﻔﺮة ( اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﻄﻠﻮب ﻣﻦ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﺗﻨﻔﯿﺬه‪ .‬اﻟﺒﺮﻧﺎﻣﺞ ﻳﻜﻮن ﻋﻠﻰ ﺷﻜﻞ ﻗﺎﺋﻤﺔ ﻣﻦ‬
‫اﻟﺘﻌﻠﯿﻤﺎت وﻳﻘﻮم ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ ﺑﺤﻔﻆ ﻋﻨﻮان اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ اﻟﺘﻲ ﻋﻠﯿﮫﺎ اﻟﺪور ﻓﻲ اﻟﺘﻨﻔﯿﺬ أي أﻧﻪ ﻋﻤﻞ ﻛﻤﺆﺷﺮ ﻟﺬاﻛﺮة‬
‫اﻟﺒﺮﻧﺎﻣﺞ وﻳﻤﻜﻦ ﻟﻘﯿﻤﺔ ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ أن ﺗﻨﺘﻘﻞ إﻟﻰ اﻟﻤﻜﺪس وﻳﺤﺪث ذﻟﻚ ﻋﻨﺪ ﺗﻨﻔﯿﺬ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ أو ﺣﺪوث ﻣﻘﺎطﻌﺔ ﻛﻤﺎ‬
‫ﻓﻲ ﺗﻌﻠﯿﻤﺎت ‪ CALL‬و ‪ RETURN‬و ‪ RETFIE‬و ‪ .RETLW‬ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ ذو ‪ 13-bit‬وﻣﻦ ﺛﻢ ﻓﺈن اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻳﻤﻜﻨﻪ ﻧﻈﺮﻳﺎ‬
‫اﻟﻌﻨﻮﻧﺔ ﻣﻦ ‪ 0000h‬إﻟﻰ ‪. 1FFFh‬‬

‫أول ﻣﻮﻗﻊ ﻓﻲ ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ﻳﺴﻤﻰ ) ‪ reset vector‬ﻣﺘﺠﻪ أو ﺷﻌﺎع اﻟﺒﺪاﻳﺔ (‪ .‬ﻋﻨﺪ ﺑﺪء ﺗﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻷول ﻣﺮة ) ﻋﻨﺪ‬
‫ﺗﻮﺻﯿﻞ اﻟﺘﻐﺬﻳﺔ ﻣﺜﻼ ( ﻓﺈن ﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ ﻳﻮﺿﻊ ﻋﻠﻰ اﻟﺼﻔﺮ )ﺗﺼﻔﯿﺮ ‪ ( 0000‬و ﺑﺎﻟﺘﺎﻟﻲ ﻓﺈن أول ﻣﻮﻗﻊ ﺳﻮف ﻳﺸﯿﺮ إﻟﯿﻪ ھﻮ‬
‫) ‪ reset vector‬ﻣﺘﺠﻪ اﻟﺒﺪاﻳﺔ (‪ .‬و ﻣﻦ ﺛﻢ ﻓﻌﻠﻰ اﻟﻤﺒﺮﻣﺞ أن ﻳﻀﻊ أول ﺗﻌﻠﯿﻤﺔ ﻟﻪ ﻓﻲ ھﺬا اﻟﻤﻮﻗﻊ‪.‬‬

‫‪ -2‬ﺗﻨﻈﯿﻢ ذاﻛﺮة اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ‪:PIC 16F84A‬‬

‫‪ 1-2‬ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ‪: FLASH‬‬


‫ﺗﺤﺘﻮي ﻋﻠﻰ أواﻣﺮ وﺗﻌﻠﯿﻤﺎت اﻟﺒﺮﻧﺎﻣﺞ وأﻳﻀﺎ ﻣﺆﺷﺮ اﻟﻮﺿﻊ ﻓﻲ اﻟﺼﻔﺮ و‬
‫ﻣﺆﺷﺮ اﻟﻤﻘﺎطﻌﺔ ‪.INTERRUPTION‬‬

‫ﻓﻲ اﻟﺤﺎﻻت اﻟﺘﻲ ﻳﻜﻮن ﻓﯿﮫﺎ‪:‬‬

‫‪  RESET‬اﻟـﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻳﺒﺪأ ﻣﻦ ﺟﺪﻳﺪ ﻣﻦ اﻟﻤﻮﺿﻊ ‪0000h‬‬ ‫‪-‬‬

‫و ﻳﺴﻤﻰ ﻣﺆﺷﺮ اﻟﻮﺿﻊ ﻓﻲ اﻟﺼﻔﺮ‪.‬‬

‫‪  INTERRUPTION -‬اﻟـﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻳﺬھﺐ إﻟﻰ اﻟﻤﻮﺿﻊ ‪0004h‬‬


‫و ﻳﺴﻤﻰ ﻣﺆﺷﺮ اﻟﻤﻘﺎطﻌﺔ‪.‬‬

‫‪ -‬اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ‪-2-‬‬
‫‪ 2-2‬اﻟﺬاﻛﺮة ‪: RAM‬‬
‫ﺗﺤﺘﻮي ﻋﻠﻰ ‪ 68‬ﺑﺎﻳﺖ ﻟﻠﻤﻌﻄﯿﺎت وﻋﻠﻰ ﺟﻤﯿﻊ اﻟﺴﺠﻼت اﻟﻼزﻣﺔ‬
‫ﻟﺘﺴﯿﯿﺮ اﻟﻨﻈﺎم و اﺳﺘﻌﻤﺎل اﻟﻤﻠﺤﻘﺎت اﻟﺪاﺧﻠﯿﺔ واﻟﻤﻨﺎﻓﺬ‪.‬‬
‫و ﻛﻤﺎ ﻧﻼﺣﻆ ﻓﮫﻲ ﻣﺮﺗﺒﺔ ﻋﻠﻰ ﺷﻜﻞ ﻣﻨﻄﻘﺘﯿﻦ ) ‪ Bank0‬و ‪.( Bank1‬‬

‫ﺗﺘﻜﻮن اﻟﺠﮫﺔ اﻟﻌﻠﻮﻳﺔ ﻣﻦ ‪ 24‬ﻣﻮﻗﻊ )ذو ‪ (8 bit‬ﺧﺎص ﺑﺎﻟﺴﺠﻼت‬


‫اﻟﺨﺎﺻﺔ‪ 12 ،‬ﻣﻨﮫﺎ ﻓﻲ ﺻﻔﺤﺔ ‪ BANK 0‬ذات اﻟﻌﻨﺎوﻳﻦ ﻣﻦ ‪ 00h‬إﻟﻰ‬
‫‪ 0Bh‬و ‪ 12‬ﻓﻲ ﺻﻔﺤﺔ ‪ BANK 1‬ذات اﻟﻌﻨﺎوﻳﻦ ﻣﻦ ‪ 80h‬إﻟﻰ ‪.8Bh‬‬

‫ﻛﻤﺎ ﺗﺘﻜﻮن اﻟﺠﮫﺔ اﻟﺴﻔﻠﯿﺔ ﻣﻦ ‪ 68‬ﺧﺎﻧﺔ ﻣﻌﻨﻮﻧﺔ ﻣﻦ ‪ 0Ch‬إﻟﻰ ‪4Fh‬‬


‫وﺗﺪﻋﻰ ﺳﺠﻼت اﻻﺳﺘﻌﻤﺎل اﻟﻌﺎم‪ ،‬و ھﻲ ﻣﻨﺪﻣﺠﺔ ﻓﻲ اﻟﺼﻔﺤﺘﯿﻦ‪.‬‬

‫اﻟﻤﺴﺎﺣﺔ اﻟﻤﺘﺒﻘﯿﺔ ﺑﺎﻟﻠﻮن اﻟﺮﻣﺎدي ﻏﯿﺮ ﻣﺴﺘﻌﻤﻠﺔ‪.‬‬

‫‪ 3-2‬ذاﻛﺮة اﻟﻤﻌﻄﯿﺎت ‪:‬‬


‫وھﻲ ﻣﻦ ﻧﻮع ‪ EEPROM‬ذات ‪ 64‬ﺑﺎﻳﺖ ﻣﻌﻨﻮﻧﺔ ﻣﻦ ‪ 00‬إﻟﻰ ‪ 3F‬ﺗﺨﺰن‬
‫ﺑﮫﺎ اﻟﻤﻌﻄﯿﺎت اﻟﺘﻲ ﻻ ﻳﺮاد ﻓﻘﺪاﻧﮫﺎ ﺑﺎﻧﻘﻄﺎع اﻟﺘﻐﺬﻳﺔ‪.‬‬

‫أھﻢ اﻟﺴﺠﻼت اﻷﺳﺎﺳﯿﺔ‪.‬‬ ‫‪-3‬‬


‫‪ 1-3‬ﺳﺠﻞ اﻟﺤﺎﻟﺔ )‪:(Status Register‬‬

‫‪ 7‬و ‪ RP1 ) 6‬و ‪ (IRP‬ﻣﺜﺒﺘﺎن ﻓﻲ ‪.0‬‬ ‫‪ -‬اﻟﺒﺖ‬


‫‪ (RP0) 5‬ﻳﺴﺘﻌﻤﻞ ﻟﻼﻧﺘﻘﺎل ﻣﻦ و إﻟﻰ اﻟﻜﻮﻣﺘﯿﻦ ‪ 0‬و ‪.(Bank1 ; Bank0 ) 1‬‬ ‫‪ -‬اﻟﺒﺖ‬
‫‪ :(T0) 4‬ﺧﺎﻧﺔ اﻟﻤﮫﻠﺔ اﻟﺰﻣﻨﯿﺔ و =‪ 1‬ﻋﻨﺪ ﺗﻮﺻﯿﻞ اﻟﺘﻐﺬﻳﺔ أو ﻋﻦ طﺮﻳﻖ اﻟﺘﻌﻠﯿﻤﺘﯿﻦ ‪ CLRWDT‬و ‪. SLEEP‬‬ ‫‪ -‬اﻟﺒﺖ‬
‫‪ : (PD) 3‬ﺧﺎﻧﺔ اﻧﺨﻔﺎض اﻟﻄﺎﻗﺔ و =‪ 1‬ﻋﻨﺪ ﺗﻮﺻﯿﻞ اﻟﺘﻐﺬﻳﺔ أو ﻋﻦ طﺮﻳﻖ اﻟﺘﻌﻠﯿﻤﺔ ‪. CLRWDT‬‬ ‫‪ -‬اﻟﺒﺖ‬
‫‪ ،2‬و =‪ 1‬ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻧﺘﯿﺠﺔ ﻋﻤﻠﯿﺔ ﺣﺴﺎﺑﯿﺔ أو ﻣﻨﻄﻘﯿﺔ ﺗﺴﺎوي ‪ ،0‬و = ‪ 0‬إذا ﻟﻢ ﺗﻜﻦ ﻛﺬﻟﻚ‪.‬‬ ‫‪ -‬اﻟﺒﺖ‬
‫‪ (C) 0‬ﺧﺎﻧﺔ اﻻﺣﺘﻔﻆ و =‪ 1‬إذا ﻧﺘﺞ ﺗﺠﺎوز ﻟﻠﺨﺎﻧﺔ اﻷﻛﺜﺮ أھﻤﯿﺔ )‪ (8‬ﻋﻨﺪ إﺟﺮاء ﻋﻤﻠﯿﺎت اﻟﺠﻤﻊ و اﻟﻄﺮح و =‪ 0‬ﻋﺪا ذﻟﻚ‪.‬‬ ‫‪ -‬اﻟﺒﺖ‬
‫‪ (DC)1‬ﺧﺎﻧﺔ ﻧﺼﻒ اﻻﺣﺘﻔﺎظ و =‪ 1‬إذا ﻧﺘﺞ ﺗﺠﺎوز ﻟﻠﺨﺎﻧﺔ ‪ 4‬ﻋﻨﺪ إﺟﺮاء ﻋﻤﻠﯿﺎت اﻟﺠﻤﻊ و اﻟﻄﺮح و = ‪ 0‬ﻋﺪا ذﻟﻚ‪.‬‬ ‫‪ -‬اﻟﺒﺖ‬

‫‪ 2-3‬ﺳﺠﻞ اﻟﺘﮫﯿﺌﺔ ) ‪ (TRISA‬و ﺳﺠﻞ اﻟﻤﻨﻔﺬ )‪:(PORTA‬‬


‫دور اﻟﺴﺠﻞ ‪ TRISA‬ھﻮ إﻋﺪاد اﺗﺠﺎه ﻛﻞ ﺑﺖ )ﺧﻂ( اﻟﺨﺎص ﺑﺎﻟﻤﻨﻔﺬ ‪ ، (PORTA) A‬ﺑﺤﯿﺚ ﻳﺒﺮﻣﺞ ﻛﻞ ﺑﺖ ﻛﻤﺪﺧﻞ إذا أﻋﻄﻲ‬
‫اﻟﻘﯿﻤﺔ ‪ 1‬و ﻣﺨﺮج إذا أﻋﻄﻲ اﻟﻘﯿﻤﺔ ‪.0‬‬
‫أ ّﻣﺎ اﻟﺴﺤﻞ ‪ PORTA‬ﻓﻜﻞ ﺑﺖ ﺧﺎص ﺑﻪ ﻳﻤﺜﻞ ﺻﻮرة اﻟﻤﻨﻔﺬ ‪ ،RAx‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﺸﻜﻞ اﻟﻤﻮاﻟﻲ‪:‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻛﻞ ﻣﻦ ھﺬان اﻟﺴﺠﻼن ﻳﺤﺘﻮي ﻋﻞ ‪ 5‬ﺑﺖ ﻓﻘﻂ‪.‬‬


‫‪ -‬اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ‪-3-‬‬
‫‪ 3-3‬ﺳﺠﻞ اﻟﺘﮫﯿﺌﺔ ) ‪ (TRISB‬و ﺳﺠﻞ اﻟﻤﻨﻔﺬ )‪:(PORTB‬‬
‫دور اﻟﺴﺠﻞ ‪ TRISB‬ھﻮ إﻋﺪاد اﺗﺠﺎه ﻛﻞ ﺑﺖ )ﺧﻂ( اﻟﺨﺎص ﺑﺎﻟﻤﻨﻔﺬ ‪ ، (PORTB) B‬ﺑﺤﯿﺚ ﻳﺒﺮﻣﺞ ﻛﻞ ﺑﺖ ﻛﻤﺪﺧﻞ إذا‬
‫أﻋﻄﻲ اﻟﻘﯿﻤﺔ ‪ 1‬و ﻛﻤﺨﺮج إذا أﻋﻄﻲ اﻟﻘﯿﻤﺔ ‪.0‬‬
‫أ ّﻣﺎ اﻟﺴﺤﻞ ‪ PORTB‬ﻓﻜﻞ ﺑﺖ ﺧﺎص ﺑﻪ ﻳﻤﺜﻞ ﺻﻮرة اﻟﻤﻨﻔﺬ ‪ ،RBx‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﺸﻜﻞ اﻟﻤﻮاﻟﻲ‪:‬‬

‫ﻳﻤﻜﻦ اﺳﺘﻌﻤﺎل اﻟﺒﺖ ‪ 0‬ﻛﻤﺪﺧﻞ ﻟﺘﻨﻔﯿﺬ ﻣﻘﺎطﻌﺔ ﺧﺎرﺟﯿﺔ )‪.(INT‬‬

‫‪ 4-3‬ﺳﺠﻞ اﻟﻌﻤﻞ )‪:(W Register‬‬


‫ﻳﺴﺘﻌﻤﻞ ھﺬا اﻟﺴﺠﻞ ﻛﻮﺳﯿﻂ ﻳﻠﺠﺄ إﻟﯿﻪ ﻓﻲ ﻣﻌﻈﻢ إﺟﺮاءات اﻟﺒﺮﻣﺠﺔ‪.‬‬
‫‪ 5-3‬ﺳﺠﻞ اﻹﻋﺪادات )‪:(Configuration Register‬‬
‫ﻣﻮﻗﻊ ﺳﺠﻞ اﻹﻋﺪادت ب اﻟﻌﻨﻮان ‪ 2007h‬ﻣﻦ ذاﻛﺮة اﻟﺒﺮﻧﺎﻣﺞ ﺧﯿﺚ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ھﺬه اﻟﻌﺪادات ﻋﺒﺮ اﻟﺒﺮﻣﺠﺔ ﻛﻤﺎ ﺳﻨﺮى ذﻟﻚ‬
‫ﻻﺣﻘﺎ‪.‬‬

‫‪ -4‬أﺳﺎﺳﯿﺎت اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﺮ )اﻟﻤﺠﻤﻊ(‬

‫‪ -1‬ﻣﺸﻜﻠﺔ اﻟﺒﺮﻣﺠﺔ واﻟﺘﻮاﻓﻖ )إﻳﺠﺎد اﻟﺤﻞ اﻟﻮﺳﻂ(‬


‫ﻣﺸﻜﻠﺔ اﻟﺒﺮﻣﺠﺔ ﻣﻠﺨﺼﺔ ﻋﻠﻰ اﻟﻨﺤﻮ اﻟﺘﺎﻟﻲ‪:‬‬

‫ﻧﺤﻦ ﻛﺒﺸﺮ ﻧﻌﺒﺮ ﻋﻦ أﻓﻜﺎرﻧﺎ ﺑﻄﺮﻳﻘﺔ ﻣﻌﻘﺪة وﻏﺎﻟﺒﺎ ﻣﺎ ﻳﻜﻮن ﺗﻌﺮﻳﻔﮫﺎ ﺑﺄﺷﻜﺎل ﻟﻐﻮﻳﺔ ﻏﯿﺮ ﻣﺤﺪدة اﻟﻤﻌﺎﻟﻢ‪.‬‬
‫اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻳﻘﺮأ وﻳﻔﮫﻢ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ وﻳﺴﺘﺠﯿﺐ ﺑﺸﻜﻞ دﻗﯿﻖ ﻟﺘﻌﻠﯿﻤﺎت دﻗﯿﻘﺔ ‪ .‬ﻓﮫﻮ ﻣﻨﻄﻘﻲ إﻟﻰ أﻗﺼﻰ اﻟﺤﺪود وﻳﻔﻌﻞ‬
‫ﺗﻤﺎﻣﺎ ﻣﺎ ﻳﺆﻣﺮ ﺑﻪ‪ .‬ﻣﻊ ھﺬا اﻟﻔﺮق اﻟﻠﻐﻮي ﻛﯿﻒ ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺞ ﻛﺘﺎﺑﺔ ﺑﺮاﻣﺞ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ؟‬
‫ھﻨﺎك ﺛﻼﺛﺔ طﺮق ﺗﻔﺮض ﻧﻔﺴﮫﺎ ﻟﺴﺪ ھﺬه اﻟﻔﺠﻮة و ھﻲ‪:‬‬

‫‪ 1-‬أن ﻳﺘﻌﻠﻢ اﻹﻧﺴﺎن ﻟﻐﺔ اﻵﻟﺔ‪.‬‬


‫و ھﺬا ﻣﺎ ﻛﺎن ﻳﺴﺘﺨﺪﻣﻪ اﻟﻤﺒﺮﻣﺠﯿﻦ ﻓﯿﻤﺎ ﻣﻀﻰ‪.‬‬
‫ﺑﻤﺸﻘﺔ ﻳﻜﺘﺐ ﻛﻞ ﺗﻌﻠﯿﻤﺔ ﺑﺸﻔﺮة اﻟﻜﻮد اﻟﺜﻨﺎﺋﯿﺔ ﺣﺘﻰ ﻳﺴﺘﻄﯿﻊ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ﻣﻦ ﻗﺮاءﺗﮫﺎ ‪.‬‬
‫وھﺬا ﺑﻄﻲء ﻟﻠﻐﺎﻳﺔ وﻣﻤﻞ و ﻋﺮﺿﺔ ﻟﻸﺧﻄﺎء وﻟﻜﻦ ﻋﻠﻰ اﻷﻗﻞ ﻓﺎن اﻟﻤﺒﺮﻣﺞ ﻳﺴﺘﺠﯿﺐ ﻣﺒﺎﺷﺮة ﻟﺤﺎﺟﺎت وﻗﺪرات اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ‪.‬‬

‫‪ 2-‬اﺳﺘﺨﺪام ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ذات اﻟﻤﺴﺘﻮى اﻟﻤﺮﺗﻔﻊ‪.‬‬


‫وھﺬا ﻛﻤﺎ ﻟﻮ ﻛﻨﺎ ﺑﻄﺮﻳﻘﺔ ﻣﺎ ﻧﻄﻠﺐ ﻣﻦ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ )اﻟﻜﻮﻣﺒﯿﻮﺗﺮ( ﺗﻌﻠﻢ ﻟﻐﺘﻨﺎ ‪.‬‬
‫ﻓﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ذات اﻟﻤﺴﺘﻮى اﻟﻤﺮﺗﻔﻊ ﺗﻜﺘﺐ اﻟﺘﻌﻠﯿﻤﺎت ﺑﺸﻜﻞ ﻳﺮﺗﺒﻂ ﺑﺈدراﻛﻨﺎ ﻟﻠﻐﺘﻨﺎ‪ .‬ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻧﺤﺘﺎج إﻟﻰ ﺑﺮﻧﺎﻣﺞ‬
‫آﺧﺮ وھﻮ إﻣﺎ ﻣﺠﻤﻊ ‪ compiler‬أو )ﻣﺘﺮﺟﻢ( ‪ interpreter‬ﻳﻘﻮم ﺑﺘﺤﻮﻳﻞ ﺑﺮﻧﺎﻣﺠﻨﺎ إﻟﻰ ﻛﻮد ﻟﻐﺔ اﻵﻟﺔ اﻟﺬي ﻳﻔﮫﻤﮫﺎ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ‪.‬‬
‫ﺑﮫﺬه اﻟﻄﺮﻳﻘﺔ ﻳﺴﺘﻤﺘﻊ اﻟﻤﺒﺮﻣﺞ ﺑﻮﻗﺘﻪ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﻛﻤﺎ ﻳﻜﺘﺐ ﺑﺮاﻣﺞ ﻣﺘﻄﻮرة‪ .‬واﻟﻨﺘﯿﺠﺔ إن اﻟﻤﺒﺮﻣﺞ ﻳﻨﻔﺼﻞ ﻋﻦ إﻣﻜﺎﻧﯿﺎت‬
‫اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ وﻗﺪ ﻳﺆدي إﻟﻰ ﺑﺮﻧﺎﻣﺞ ﻏﯿﺮ ﻓﻌﺎل ﻧﺴﺒﯿﺎ ﻣﻦ ﺣﯿﺚ اﺳﺘﺨﺪام اﻟﺬاﻛﺮة وﺳﺮﻋﺔ اﻟﺘﻨﻔﯿﺬ ‪.‬‬

‫‪ 3-‬اﺳﺘﺨﺪام ﻟﻐﺔ اﻷﺳﻤﺒﻠﺮ )اﻟﻤﺠﻤﻊ(‪ .‬و ھﺬا ھﻮ اﻟﻮﺿﻊ اﻟﻮﺳﻂ ‪.‬‬


‫ﺣﯿﺚ ﻛﻞ ﺗﻌﻠﯿﻤﺔ ﻣﻦ ﻣﺠﻤﻮﻋﺔ اﻟﺘﻌﻠﯿﻤﺎت ﺗﻌﻄﻰ ﺗﺬﻛﯿﺮ )ﻣﻔﻜﺮة = ‪ (mnemonic‬ﺗﻌﺒﺮ ﺑﺼﻔﺔ ﻣﺨﺘﺼﺮة ﻋﻦ ﻣﺪﻟﻮل اﻟﺘﻌﻠﯿﻤﺔ‪.‬‬
‫ﻋﻨﺪﺋﺬ ﻳﻜﺘﺐ اﻟﻤﺒﺮﻣﺞ اﻟﺒﺮﻧﺎﻣﺞ ﻣﺴﺘﺨﺪﻣﺎ اﻟﺘﻌﻠﯿﻤﺎت ﺑﺎﻟﻤﻔﻜﺮات ‪.‬‬

‫‪ -‬اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ‪-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‬ﺧﺎﻧﺔ إذا‬
‫ﻛﺎن ﻳﻌﺒﺮ ﻋﻦ ﻋﻨﻮان‪.‬‬

‫اﻟﻌﻤﻮد اﻟﺜﺎﻧﻰ‪ :‬ﻳﻠﺨﺺ ﻋﻤﻞ )وﺻﻒ ﻟﻮظﯿﻔﺔ( اﻟﺘﻌﻠﯿﻤﺔ ‪.‬‬

‫اﻟﻌﻤﻮد اﻟﺜﺎﻟﺚ ‪:‬‬


‫ﻳﺒﯿﻦ ﻋﺪد دورات اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﻲ ﺗﺄﺧﺬھﺎ اﻟﺘﻌﻠﯿﻤﺔ ﻓﻲ اﻟﺘﻨﻔﯿﺬ‪.‬‬

‫اﻟﻌﻤﻮد اﻟﺮاﺑﻊ ‪:‬‬


‫ﻳﻌﻄﻰ ﺷﻔﺮة )ﻛﻮد( اﻟﻌﻤﻠﯿﺔ و اﻟﻤﺴﻤﻰ ‪ opcode‬ﻟﻜﻞ ﺗﻌﻠﯿﻤﺔ واﻟﻤﻜﻮن ﻣﻦ ‪14‬ﺧﺎﻧﺔ وھﺬا ھﻮ اﻟﻜﻮد اﻟﺬي ﻳﻨﺘﺠﻪ ﺑﺮﻧﺎﻣﺞ‬
‫اﻷﺳﻤﺒﻠﺮ ﻋﻨﺪﻣﺎ ﻳﺤﻮل اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﺷﻔﺮة ﻟﻐﺔ اﻟﻤﺠﻤﻊ إﻟﻰ ﺷﻔﺮة ﻟﻐﺔ اﻵﻟﺔ و ﻣﻦ اﻟﻤﻔﯿﺪ ﻣﻼﺣﻈﺔ ﺷﻔﺮات اﻟﻤﻌﺎﻣﻼت‬
‫‪ operand‬اﻟﻤﺬﻛﻮرة ﺑﻌﺎﻟﯿﺔ وﻛﯿﻔﯿﺔ ﺗﻀﻤﯿﻨﮫﺎ ﻓﻲ ﻛﻮد اﻟﻌﻤﻠﯿﺔ‪.‬‬

‫اﻟﻌﻤﻮد اﻟﺨﺎﻣﺲ ‪:‬‬


‫ﻳﺒﯿﻦ أي اﻟﺨﺎﻧﺎت ﻓﻲ ﺳﺠﻞ اﻟﺤﺎﻟﺔ ‪ Status‬ﺳﺘﺘﺄﺛﺮ ﺑﺎﻟﺘﻌﻠﯿﻤﺔ ‪.‬‬

‫ﻟﻨﺘﻨﺎول اﻵن ﺑﻌﺾ اﻟﺘﻌﻠﯿﻤﺎت ﻣﻦ وﺛﺎﺋﻖ اﻟﺼﺎﻧﻊ ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل و اﻟﺘﻲ ﺳﻨﺴﺘﻐﻠﮫﺎ ﻓﻲ ﺑﺮﻣﺠﺔ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ‪:‬‬

‫ﻣﻼﺣﻈﺔ ‪:‬‬
‫اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ اﻟﻤﺠﻤﻊ ﻟﯿﺴﺖ ﺣﺴﺎﺳﺔ ﻟﻨﻮع اﻟﺤﺮوف ) ﻛﺒﯿﺮ أم ﺻﻐﯿﺮ (‪.‬‬
‫اﻟﺘﻌﻠﯿﻤﺔ ‪: clrw‬‬
‫ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﺗﺠﻌﻞ ﻗﯿﻤﺔ اﻟﺴﺠﻞ ‪ W‬ﺻﻔﺮ ) وﻣﻌﻨﻰ ﺷﻜﻞ اﻟﻤﻔﻜﺮة ‪ mnemonic :‬أن ‪ clrw‬ﺗﺬﻛﺮﻧﺎ ﺑﻜﻠﻤﺔ ‪ clear‬أي ﻣﺤﻮ‬
‫أو ﻣﺴﺢ و اﻟﺤﺮف ‪ W‬ﻳﺬﻛﺮﻧﺎ ﺑﺎﻟﺴﺠﻞ ‪ W‬وھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺘﻌﻠﯿﻤﺎت ﻻ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﻣﻌﺎﻣﻞ ﺑﮫﺎ‪.‬‬
‫و اﻟﻌﻤﻮد اﻟﺨﺎﻣﺲ ﻳﺨﺒﺮﻧﺎ ﺑﺄن ﺧﺎﻧﺔ اﻟﺼﻔﺮ ‪ Z‬ﻓﻲ ﺳﺠﻞ اﻟﺤﺎﻟﺔ ﺳﻮف ﺗﺘﺄﺛﺮ ﺑﺎﻟﺘﻌﻠﯿﻤﺔ و ﻧﻈﺮا ﻷن ﻧﺘﯿﺠﺔ ھﺬه اﻟﺘﻌﻠﯿﻤﺔ داﺋﻤﺎﺻﻔﺮ‬
‫ﻓﺎن ‪ Z‬داﺋﻤﺎ ﺗﻜﻮن ‪ . 1 :‬ﻻ ﺗﺘﺄﺛﺮ أﻳﺔ ﺧﺎﻧﺔ أﺧﺮى ﻣﻦ ﺳﺠﻞ اﻟﺤﺎﻟﺔ ‪.‬‬

‫اﻟﺘﻌﻠﯿﻤﺔ ‪:clrf f‬‬


‫ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﺗﻤﺴﺢ ) ﺗﺼﻔﺮ( اﻟﻘﯿﻤﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ ﻣﻮﻗﻊ ﻣﻦ ﻣﻮاﻗﻊ اﻟﺬاﻛﺮة و اﻟﺬي ﻧﺮﻣﺰ ﻟﻪ ﺑﺎﻟﺮﻣﺰ ‪ f ,‬اﻟﻤﺒﺮﻣﺞ ھﻮ اﻟﺬي‬
‫ﻳﺤﺪد ﻗﯿﻤﺔ ‪.f‬‬
‫ﻣﺮة ﺛﺎﻧﯿﺔ ﻷن اﻟﻨﺘﯿﺠﺔ ھﻲ ﺻﻔﺮ ﻓﺈن ﺧﺎﻧﺔ اﻟﺼﻔﺮ ‪ Z‬ﻓﻲ ﺳﺠﻞ اﻟﺤﺎﻟﺔ ﺳﺘﺘﺄﺛﺮ ﻛﻤﺎ ﺳﺒﻖ ‪.‬‬

‫اﻟﺘﻌﻠﯿﻤﺔ ‪: addwf f,d‬‬


‫ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﺗﻀﯿﻒ )ﺗﺠﻤﻊ( ﻣﺤﺘﻮﻳﺎت اﻟﺴﺠﻞ ‪ W‬إﻟﻰ ﻣﺤﺘﻮﻳﺎت ﻣﻮﻗﻊ اﻟﺬاﻛﺮة اﻟﺬي ﻳﺮﻣﺰ ﻟﻪ ﺑﺎﻟﺤﺮف ‪ f ,‬و اﻟﻤﺒﺮﻣﺞ ھﻮ‬
‫اﻟﺬي ﻳﺤﺪد ﻗﯿﻤﺔ ‪.f‬‬
‫ھﻨﺎك اﺧﺘﯿﺎر ﻓﻲ ﻣﻜﺎن وﺿﻊ اﻟﻨﺘﯿﺠﺔ وھﺬا ﻳﺘﺤﺪد ﺑﻘﯿﻤﺔ ﺧﺎﻧﺔ اﻟﻤﻌﺎﻣﻞ ‪ d‬اﻟﮫﺪف ‪.‬‬
‫و ﻧﻈﺮا ﻷن اﻟﻨﺘﯿﺠﺔ ﻗﺪ ﺗﺄﺧﺬ ﻗﯿﻢ ﻣﺨﺘﻠﻔﺔ )ﻛﻨﺘﯿﺠﺔ ﻟﻌﻤﻠﯿﺔ اﻟﺠﻤﻊ( ﻓﺈن ﺟﻤﯿﻊ ﺧﺎﻧﺎت ﺷﻔﺮة اﻟﺤﺎﻟﺔ اﻟﺜﻼﺛﺔ ﺑﺴﺠﻞ اﻟﺤﺎﻟﺔ ﺳﻮف‬
‫ﺗﺘﺎﺛﺮ ﺑﺎﻟﺘﻌﻠﯿﻤﺔ )ﺧﺎﻧﺔ اﻟﺼﻔﺮ ‪ Z‬وﺧﺎﻧﺔ اﻟﺤﻤﻞ ‪ C‬وﺧﺎﻧﺔ ﻧﺼﻒ اﻟﺤﻤﻞ ‪.( DC‬‬

‫اﻟﺘﻌﻠﯿﻤﺔ ‪: bcf f,b‬‬


‫ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﺗﻤﺴﺢ )ﺗﺼﻔﺮ( ﺧﺎﻧﺔ واﺣﺪة ‪ bit‬ﻓﻲ ﻣﻮﻗﻊ ذاﻛﺮة وﻛﻞ ﻣﻦ اﻟﺨﺎﻧﺔ واﻟﻤﻮﻗﻊ ﻳﺤﺪد ﺑﻤﻌﺮﻓﺔ اﻟﻤﺒﺮﻣﺞ ‪.‬‬
‫رﻗﻢ اﻟﺨﺎﻧﺔ ‪ b‬ﻳﺎﺧﺬ ﻗﯿﻤﺔﻣﻦ ‪ 0‬اﻟﻰ ‪ 7‬ﻟﺘﺤﺪﻳﺪ ﺧﺎﻧﺔ ﻣﻦ اﻟﺜﻤﺎﻧﻲ ﺧﺎﻧﺎت ﻓﻲ ﻣﻮﻗﻊ اﻟﺬاﻛﺮة‪.‬‬
‫ﻻ ﻳﺘﺎﺛﺮ أي ﻋﻠﻢ ﻣﻦ أﻋﻼم ﺳﺠﻞ اﻟﺤﺎﻟﺔ ﺣﺘﻰ ﻟﻮ ﺗﺨﯿﻠﻨﺎ أن ﻧﺘﯿﺠﺔ اﻟﺘﻌﻠﯿﻤﺔ ﺗﺠﻌﻞ ﻣﻮﻗﻊ اﻟﺬاﻛﺮة ﺻﻔﺮا ‪.‬‬

‫اﻟﺘﻌﻠﯿﻤﺔ ‪: addlw k‬‬


‫ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﺗﻀﯿﻒ )ﺗﺠﻤﻊ( ﻗﯿﻤﺔ ﺛﺎﺑﺖ ﻣﺤﺪد ﺣﺮﻓﯿﺎ ‪ literal‬واﻟﺬي ﻗﯿﻤﺘﻪ ھﻲ ‪ k‬واﻟﺘﻲ ﻳﺠﺐ ﻋﻠﻰ اﻟﻤﺒﺮﻣﺞ ﺗﺤﺪﻳﺪھﺎ إﻟﻰ‬
‫اﻟﻘﯿﻤﺔ اﻟﻤﺤﻔﻮظﺔ ﻓﻲ اﻟﺴﺠﻞ ‪W‬‬
‫واﻟﻨﺘﯿﺠﺔ ﺗﺤﻔﻆ ﻓﻲ اﻟﺴﺠﻞ ‪ W‬ﻓﻼ ﻳﻮﺟﺪ ھﻨﺎ اﺧﺘﯿﺎر ‪.‬‬
‫وﻛﻤﺎ ﻓﻲ اﻟﺘﻌﻠﯿﻤﺔ ‪ addwf‬ﻓﺈن ﺟﻤﯿﻊ ﺧﺎﻧﺎت اﻟﺤﺎﻟﺔ ﺑﺴﺠﻞ اﻟﺤﺎﻟﺔ ﺗﺘﺄﺛﺮ ﺑﮫﺬه اﻟﺘﻌﻠﯿﻤﺔ‪.‬‬

‫‪ -‬اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ‪-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‬‬

‫************************************************************************** ;‬

‫‪LIST p=16F84A‬‬ ‫ﺗﻌﺮﻳﻒ ﺑﺎﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ;‬

‫>‪#include <p16f84a.inc‬‬ ‫ﺗﻌﺮﻳﻒ اﻟﺜﻮاﺑﺖ اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ;‬

‫‪_CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC‬‬ ‫ﺗﻌﺮﻳﻒ ﺑﺒﻌﺾ ﺧﺼﺎﺋﺺ اﻟﻨﻈﺎم ;‬

‫***************************************************************************‬

‫ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻓﺈن اﻹﻋﺪادات ھﻲ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬


‫ﺷﻔﺮة اﻟﺤﻤﺎﻳﺔ ﻓ ّﻌﺎﻟﺔ‪ ،‬ﻣﺆﻗﺖ اﻟﺤﺮاﺳﺔ ﺧﺎرج اﻟﺨﺪﻣﺔ‪ reset ،‬اﻟﻤﺆﻗﺖ ﻋﻨﺪ ﺗﻮﺻﯿﻞ اﻟﻄﺎﻗﺔ ﺧﺎرج اﻟﺨﺪﻣﺔ‪ ،‬و اﻟﻤﺬﺑﺬب ذو اﻟﻜﻮارﺗﺰ‬
‫ﺑﺴﺮﻋﺔ ﻣﺘﻮﺳﻄﺔ ھﻮ اﻟﻤﺴﺘﻌﻤﻞ‪.‬‬

‫‪ -‬اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ ‪-7-‬‬
‫‪ ‬اﻟﻤﻮﺟﻪ ‪ ORG‬ﻣﺘﺒﻮع ﺑﻌﻨﻮان‪ ،‬ﻳﺤﺪد ﻋﻨﻮان ﺗﻨﻔﯿﺬ اﻟﺘﻌﻠﯿﻤﺔ اﻟﻤﻮاﻟﯿﺔ و اﻟﺘﻲ ﻳﺠﺐ أن ﺗﻜﻮن ‪ 0x0‬ﻷن ﻋﻨﺪ ‪ reset‬ﻓﺈن‬
‫اﻟﺒﺮﻧﺎﻣﺞ ﻳﻌﻮد إﻟﻰ اﻟﻌﻨﻮان ‪.0‬‬
‫‪ ‬اﻟﺘﻌﻠﯿﻤﺔ ‪ GOTO‬ﺗﺄﻣﺮ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﻟﻘﻔﺰ إﻟﻰ ﻋﻨﻮان اﻟﻜﻠﻤﺔ ‪init‬‬

‫***************************إﻋﺎدة اﻟﺘﺸﻐﯿﻞ ﺑﻌﺪ ‪;***************************** reset‬‬

‫‪ORG‬‬ ‫‪0x000‬‬ ‫ﻋﻨﻮان اﻻﻧﻄﻼق ﺑﻌﺪ ‪; reset‬‬


‫‪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‬‬

‫‪goto‬‬ ‫‪start‬‬ ‫ارﺟﻊ إﻟﻰ ‪;start‬‬

‫‪END‬‬ ‫ﻣﻮﺟﻪ ﻧﮫﺎﻳﺔ اﻟﺒﺮﻧﺎﻣﺞ ;‬

‫***************************************************************************;‬
‫اﻟﺒﺮﻧﺎﻣﺞ ﻳﻔﺤﺺ اﻟﻤﺪﺧﻞ ‪ 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‬‬

‫ﻤﺎزة )‪(Clignotant‬‬ ‫‪ 3-6‬اﻟﻤﺸﺮوع ‪ :3‬اﻟﻐ ّ‬


‫اﻟﻀﻐﻂ ﻋﻠﻰ زر ﺿﺎﻏﻂ ‪ SW‬ﻳﻨﺘﺞ ﻋﻨﻪ إﺷﻌﺎل اﻟﺜﻨﺎﺋﻲ اﻟﻀﻮﺋﻲ ‪ LED‬ﻟﻤﺪة ﻣﻌﯿﻨﺔ ‪ T= 2s‬و إطﻔﺎﺋﻪ ﻟﻤﺪة ‪ T’= 2s‬ﺑﺼﻔﺔ‬
‫ﻣﺴﺘﻤﺮة)ﻧﻔﺲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ(‪.‬‬

‫*********************************************************************;‬
‫;‬ ‫‪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‫ﺗﻤﺮﻳﻦ‬

b) Fichier à extension .asm


;Titre du programme : PROG1
;Ce programme allume la LED branchée sur la
;sortie RB0 (bit 0 du Port B) et la laisse
;indéfiniment allumée.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; DIRECTIVES
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PROCESSOR 16F84
RADIX HEX
INCLUDE « P16F84.INC »
__CONFIG 3FF1
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; VECTEUR de RESET
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ORG 00 ;Vecteur de Reset.
GOTO START ;Renvoi à l’adresse EEPROM 05 (hexa)
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; INITIALISATIONS
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
START ORG 05 ;Saut introduit pour passer au-dessus
;des 5 premières adresses de la mémoire
;EEPROM (00 – 01 – 02 – 03 et 04).
CLRF PORTB ;Initialise le 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 du
;Port B comme SORTIES.
MOVWF TRISB ;Port B configuré, mais encore en
;haute impédance (Trhee-state).
BCF STATUS,RP0 ;Retour à la page 0 du Register File.

-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- ‫ اﻟﻤﯿﻜﺮوﻣﺮاﻗﺐ‬-

You might also like