Telechargé par houssin ait alè

microcontroleur

publicité
‫‪16F84‬‬
‫‪ 1‬‬
‫‪ ‬‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻋﺒﺎﺭﺓ ﻋﻥ ﻗﻁﻌﺔ ﺍﻟﻴﻜﺘﺭﻭﻨﻴﺔ ﺭﻗﻤﻴﺔ ﺼﻐﻴﺭﺓ ﺘﻡ ﺍﺨﺘﺭﻋﻬﺎ ﺒﻌﺩ ﺃﺠﻬﺯﺓ ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ‪ .‬ﻭﻴﻘـﻭﻡ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗـﺏ ﺒﺤﻔـﻅ‬
‫ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﺩﺍﺨﻠﻪ ﻭﺍﻟﺘﻲ ﺘﺴﻤﻰ ﺒﺭﻨﺎﻤﺞ ﻭ ﻴﻜﻭﻥ ﻤﻥ ﺍﻟﺴﻬل ﺍﻟﺘﻌﺩﻴل ﻓﻴﻬﺎ ﺒﺩﻻ ﻤﻥ ﺇﻋﺎﺩﺓ ﺘﻐﻴﻴﺭ ﺍﻷﺴﻼﻙ ﻭﺍﻟﺘﻭﺼﻴﻼﺕ ﻜﻤـﺎ‬
‫ﻜﺎﻥ ﻤﺘﺒﻊ ﻗﺩﻴﻤﺎ‪  ‬‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﻴﻜﺭﻭﻤﻌﺎﻟﺞ ﺘﻡ ﺘﻁﻭﻴﺭﻩ ﺒﺤﻴﺙ ﺘﻡ ﻭﻀﻊ ﺠﻤﻴﻊ ﺍﻟﻤﻜﻭﻨﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺸﺭﻴﺤﺔ ﻭﺍﺤﺩﺓ ﻤﺩﻤﺠﺔ‪:‬‬
‫‪ -1‬ﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ )‪(CPU‬‬
‫‪ -2‬ﺫﺍﻜﺭﺓ ﻤﺅﻗﺘﺔ )ﻋﺸﻭﺍﺌﻴﺔ( )‪(RAM‬‬
‫‪ - 3‬ﺫﺍﻜﺭﺓ ﻗﺎﺒﻠﺔ ﻟﻠﻘﺭﺍﺀﺓ ﻭ ﺍﻟﻜﺘﺎﺒﺔ ﻜﻬﺭﺒﺎﺌﻴﺔ )‪(EEPROM‬‬
‫‪ -4‬ﻤﺩﺍﺨل ﺍﻟﺭﺒﻁ ﺍﻟﻤﻨﻁﻘﻴﺔ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻭ ﺍﻟﻭﺴﻁ ﺍﻟﺨﺎﺭﺠﻲ ‪.‬‬
‫ﻭﻴﺠﺏ ﺃﻥ ﻨﺫﻜﺭ ﺃﻥ ﻫﻨﺎﻙ ﺒﻌﺽ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﻲ ﻴﺘﻡ ﺍﺴﺘﺨﺩﺍﻡ ﺫﺍﻜﺭﺓ ﺇﻀﺎﻓﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﻜﻤﻴﺔ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﺭﺍﺩ ﺘﺨﺯﻴﻨﻬﺎ ﺃﻜﺒﺭ ﻤﻥ‬
‫ﺴﻌﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ!‬
‫ﺍﻟﺨﻼﺼﺔ ‪ :‬ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻫﻭ ﺠﻴل ﺠﺩﻴﺩ ﻭ ﻤﻁﻭﺭ ﻤﻥ ﺍﻟﻤﻴﻜﺭﻭﻤﻌﺎﻟﺞ ﻭ ﺃﻥ ﺠﻤﻴﻊ ﻤﻠﺤﻘﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻡ ﻭﻀﻌﻬﺎ ﻓﻲ ﺸﺭﻴﺤﺔ ﻭﺍﺤﺩﺓ ﻭ ﻤﻥ‬
‫ﻫﻨﺎ ﻓﺒﻨﺎﺀ ﺩﺍﺭﺓ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﺘﻜﻭﻥ ﺒﺴﻴﻁﺔ ﻭ ﺼﻐﻴﺭﺓ ﻭ ﻟﻴﺴﺕ ﻤﻌﻘﺩﺓ‪.‬‬
‫‪ 2‬‬
‫‪‬‬
‫ﻫﻭ ﺩﺍﺌﺭﺓ ﻤﺘﻜﺎﻤﻠﺔ ﺫﺍﺕ ‪ 18‬ﻁﺭﻑ ﻟﻜل ﻁﺭﻑ ﻭﻅﻴﻔﺔ ﺨﺎﺼﺔ ﺒﻪ ‪.‬‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻴﻭﺼل ﻋﻠﻰ ﺘﻭﺘﺭ ‪ . 5V‬ﺍﻟﺘﻭﺘﺭ ﺍﻟﻤﻭﺠﺏ ﻋﻠﻰ ﺍﻟﻁﺭﻑ ‪ 14‬ﻭﺍﻟﺴﺎﻟﺏ ﻋﻠﻰ ﺍﻟﻁﺭﻑ ‪. 5‬‬
‫ﻤﻨﻔﺫ ﺃ ‪ :‬ﻤﻜﻭﻥ ﻤﻥ ﺨﻤﺴﺔ ﺃﻁﺭﺍﻑ ﻭﻫﻲ ) ‪. ( 3 , 2 ,1, 18 , 17‬‬
‫ﻤﻨﻔﺫ ﺏ ﻤﻜﻭﻥ ﻤﻥ ﺜﻤﺎﻨﻴﺔ ﺃﻁﺭﺍﻑ ﻭﻫﻲ ) ‪. ( 13 ، 12 ، 11 ، 10 ، 9 ، 8 ، 7 ، 6‬‬
‫ﻤﻼﺤﻅﺔ ‪ :‬ﻜل ﻁﺭﻑ ﻤﻥ ﺃﻁﺭﺍﻑ ﺍﻟﻤﻨﻔﺫ "ﺃ" ﺃﻭ "ﺏ" ﻴﻤﻜﻥ ﺒﺭﻤﺠﺘﻪ ﻜﻤﻨﻔﺫ ﻟﺩﺨﻭل ﺃﻭ ﺨﺭﻭﺝ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ‬
‫ﺍﻟﻁﺭﻓﺎﻥ ‪ 15‬ﻭ ‪ 16‬ﻟﻭﺼل ﺍﻟﺴﺎﻋﺔ ‪.‬‬
‫‪.‬‬
‫‪‬‬
‫ﺍﻟﺴﺭﻋﺔ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﺘﺤﺩﺩﻫﺎ ﺩﺍﺭﺓ ﺍﻫﺘﺯﺍﺯﻴﺔ ﺨﺎﺭﺠﻴﺔ ﺘﻭﺼل ﻋﻠﻰ ﺍﻷﻁﺭﺍﻑ ‪ 15‬ﻭ ‪ . 16‬ﻤﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﻤﻘﺎﻭﻤﻪ ﻭﻤﻜﺜﻔﺔ ﺃﻭ ﺒﺒﺴﺎﻁﺔ‬
‫ﺤﺠﺭ ﻜﺭﻴﺴﺘﺎل )‪ , (Quartz‬ﺍﻻﺤﺘﻤﺎل ﺍﻟﺜﺎﻨﻲ ﺫﻭ ﺩﻗﻪ ﻋﺎﻟﻴﺔ ‪ .‬ﻓﺤﺠﺭ ﺍﻟﻜﺭﻴﺴﺘﺎل ﻴﺤﺩﺙ ﺘﺫﺒﺫﺏ ﻋﻨﺩ ﻤﺭﻭﺭ ﺍﻟﺘﻴﺎﺭ ﺒﻪ ‪ .‬ﻭﻗﻴﻤـﺔ ﺘﺫﺒﺫﺒـﻪ‬
‫ﻤﻜﺘﻭﺒﺔ ﻋﻠﻰ ﻏﻼﻓﻪ ﺍﻟﻤﻌﺩﻨﻲ ﻓﻤﻨﻪ ‪ 4‬ﻭ ‪ 10‬ﻭ‪.20Mhz‬‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ‪ 16F84‬ﻴﺘﺤﻤل ﺃﻥ ﻴﻭﺼل ﻋﻠﻰ ﻫﺯﺍﺯ ﺃﻋﻠﻰ ﻗﻴﻤﻪ ﻟﺘﺫﺒﺫﺒﻪ ‪ , 20Mhz‬ﻫﺫﺍ ﺍﻟﺘﺫﺒﺫﺏ ﻴﺤﺩﺩ ﺍﻟﺴﺎﻋﺔ ‪ ,‬ﻭﻫﻭ ﺍﻟﺫﻱ ﻴﺤـﺩﺩ‬
‫ﺴﺭﻋﺔ ﺘﻨﻔﻴﺫ ﺍﻟﻤﻌﺎﻟﺞ ﻷﻭﺍﻤﺭ ﺒﺭﺍﻤﺠﻨﺎ ‪ .‬ﺤﻴﺙ ﺴﺭﻋﺔ ﺘﻨﻔﻴﺫ ﺍﻷﻤﺭ ﺘﺴﺎﻭﻱ ﺭﺒﻊ ﺴﺭﻋﺔ ﺍﻟﻬﺯﺍﺯ ‪.‬‬
‫ﻤﺜﻼ ﻟﻠﺘﻭﻀﻴﺢ ‪ .‬ﺍﻷﻤﺭ ﻤﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺍﻤﺤﻲ ‪ ,‬ﺍﻗﺭﺃ ‪ ,‬ﺍﺠﻤﻊ ‪ ,‬ﺍﻁﺭﺡ ‪ ،‬ﺍﻟﺦ ‪ .....‬ﻟﻨﻘل ﺃﻨﻨﺎ ﻭﺼﻠﻨﺎ ﺍﻟﻤﺘﺤﻜﻡ ﻋﻠـﻰ ﻜﺭﻴـﺴﺘﺎل ‪4Mhz‬‬
‫ﻓﺈﻥ ﺴﺭﻋﺔ ﺘﻨﻔﻴﺫ ﺍﻷﻭﺍﻤﺭ ﺭﺒﻊ ﻫﺫﻩ ﺍﻟﻘﻴﻤﺔ ﺃﻱ ‪ 1Mhz‬ﺃﻱ ﻤﻠﻴﻭﻥ ﺃﻤﺭ ﻓﻲ ﺍﻟﺜﺎﻨﻴﺔ‪ ,‬ﻭﻫﺫﺍ ﻤﻌﻨﺎﻩ ﺃﻨﻪ ﻴﻨﻔﺫ ﺍﻷﻤﺭ ﺍﻟﻭﺍﺤﺩ ﺒﻤﻴﻜﺭﻭ ﺜﺎﻨﻴﺔ‪.‬‬
‫ﺍﻟﻜﺭﻴﺴﺘﺎل ﻟﻴﺱ ﻟﻪ ﻗﻁﺒﻴﺔ ‪ ,‬ﻴﻤﻜﻥ ﻭﺼﻠﻪ ﻜﻴﻔﻤﺎ ﻨﺸﺎﺀ ‪ ,‬ﻭ ﻤﻥ ﺍﻟﻤﺴﺘﺤﺴﻥ ﺒﻌﺩ ﻭﺼﻠﻪ ﺃﻥ ﻨ ﺼل ﻜل ﻁﺭﻑ ﻤﻨﻪ ﺒﻭﺍﺴﻁﺔ ﻤﻜﺜﻔـﺔ ‪22pF‬‬
‫ﻋﻠﻰ ﺍﻟﻜﺘﻠﺔ ﻟﺘﻔﺎﺩﻱ ﺍﻟﻀﺠﻴﺞ ‪.‬‬
‫‪1‬‬
‫ﺒﻘﻲ ﻟﻨﺎ ‪ ,‬ﺍﻟﻁﺭﻑ ﺭﻗﻡ ‪ , 4‬ﻫﻭ ﻁﺭﻑ ﺍﻟﻭﻀﻊ ﻓﻲ ﺍﻟﺼﻔﺭ‪ ,‬ﻓﻌﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﻴﻨﻬﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻤﻠﻪ ﺜﻡ ﻴﻌﻭﺩ ﻟﺘﻁﺒﻴﻘﻪ ﻤﻥ ﺍﻷﻭل ﻤﺠﺩﺩﺍ ‪.‬‬
‫ﺍﻟﺸﻜل ﺍﻟﺨﺎﺭﺠﻲ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ‪16F84‬‬
‫‪ 3‬‬
‫‪‬‬
‫ﻟﻥ ﺃﻀﻊ ﺼﻭﺭﺓ ﻟﺘﺼﻤﻴﻡ ﺍﻟﻬﻴﻜل ﺍﻟﺩﺍﺨﻠﻲ ﻟﻠﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻭﻨﺒﺩﺃ ﻓﻲ ﺸﺭﺤﻬﺎ ﻓﺫﻟﻙ ﻟﻥ ﻴﻭﺼﻠﻨﺎ ﻟﻠﻬﺩﻑ ﺍﻟﻤﻁﻠﻭﺏ ‪ .‬ﺒل ﺴﻨﻔﻌل ﻋﻜﺱ ﺫﻟـﻙ‬
‫ﺴﻨﺸﺭﺡ ﻜل ﺠﺯﺀ ﺒﺒﺴﺎﻁﻪ ﻭ ﻨﻀﻴﻔﻪ ﻋﻠﻰ ﺍﻟﺘﺼﻤﻴﻡ ﻟﺘﻜﺘﻤل ﺍﻟﻔﻜﺭﺓ ﻭ ﺍﻟﺼﻭﺭﺓ ﻤﻌﺎ ‪ ....‬ﺍﻷﻤﺭ ﻟﻴﺱ ﻤﻌﻘﺩﺍ ‪ ...‬ﻓﻠﻨﺭﻜﺯ ﺴـﻭﻴﺎ ‪ ....‬ﻟﻨﺒـﺩﺃ‬
‫ﺒﺘﻌﺭﻴﻑ ﺍﻟﺴﺠلْ‪....‬‬
‫ﺍﻟﺴﺠلْ ﻋﺒﺎﺭﺓ ﻋﻥ ﻋﺩﺓ ﺨﺎﻨﺎﺕ ﺃﻓﻘﻴﺔ ‪,‬ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ‪ ,‬ﻜل ﺨﺎﻨﺔ ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺒﻴﺕ ) ﺍﻟﺒﻴﺕ ﻤﻌﻨﺎﻩ ﺤﺭﻑ ﺜﻨﺎﺌﻲ ﺇﻤﺎ ﻭﺍﺤﺩ ﺃﻭ ﺼﻔﺭ(‬
‫ﻓﻲ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ‪ 16F84‬ﻁﻭل ﺍﻟﺴﺠل ‪ H8‬ﺒﻴﺎﺕ ﻤﻥ ﺒﻴﺕ ﺼﻔﺭ ﻟـ ﺒﻴﺕ ‪. 7‬‬
‫ﺒﻴﺕ ‪0‬‬
‫ﺒﻴﺕ‪1‬‬
‫ﺒﻴﺕ‪2‬‬
‫ﺒﻴﺕ‪4‬‬
‫ﺒﻴﺕ‪3‬‬
‫ﺒﻴﺕ‪5‬‬
‫ﺒﻴﺕ‪6‬‬
‫ﺒﻴﺕ‪7‬‬
‫ﺇﺫﻥ ﺍﻟﺴﺠل ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻜﻠﻤﺔ ﺜﻨﺎﺌﻴﺔ ﻤﻥ ﺜﻤﺎﻨﻴﺔ ﺃﺒﻴﺎﺕ )‪ .(Octet‬ﻫﺫﻩ ﻫﻲ ﺍﻟﻜﻠﻤﺔ ﺍﻟﺘﻲ ﻴﻘﺭﺃﻫﺎ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻴﻁﺭﺤﻬﺎ ﺃﻭ ﻴﺠﻤﻌﻬﺎ ﻤﺜﻼ ﻤـﻥ‬
‫ﺴﺠل ﺁﺨﺭ‪.‬‬
‫ﺴﺅﺍل ‪ ....‬ﻜﻴﻑ ﻴﻔﻬﻡ ﺍﻟﻤﻌﺎﻟﺞ ﺒﺄﻨﻨﻲ ﺃﺭﻴﺩ ﻁﺭﺡ ﻫﺫﺍ ﺍﻟﺴﺠل ﻤﻥ ﺫﺍﻙ ؟‬
‫ﺒﺒﺴﺎﻁﻪ ﻟﻜل ﺴﺠل ﺍﺴﻡ ﻭﻋﻨﻭﺍﻥ ﻟﻨﺭﻯ ‪......‬ﻜﻴﻑ ؟ ‪ .....‬ﺍﻟﺫﺍﻜﺭﺓ ﻤﺅﻟﻔﻪ ﻤﻥ ﺴﺠﻼﺕ ﺒﺸﻜل ﻋﻤﻭﺩﻱ ﻜﻤﺎ ﻴﻭﻀﺢ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ‪:‬‬
‫ﺍﻟﻤﻭﻀﻊ ﻴﺸﻜل ﻋﻨﻭﺍﻥ ﺍﻟﺴﺠل ‪ ,‬ﻭﺍﻟﻤﻌﺎﻟﺞ ﻴﻔﻬﻡ ﺫﻟﻙ ﺘﻠﻘﺎﺌﻴﺎ ‪ ,‬ﻭﻟﻴﺱ ﻟﺩﻴﻪ ﻤﺸﻜﻠﻪ ﻓﻲ ﺫﻟﻙ‪ ,‬ﺍﻟﻤﺸﻜﻠﺔ ﻟﺩﻴﻨﺎ ﻨﺤﻥ ﺇﺫﺍ ﻜﺎﻥ ﻫﻨﺎﻙ ﺫﺍﻜﺭﺓ ﻤﻥ‬
‫ﺴﺘﻴﻥ ﻋﻨﻭﺍﻨﺎ ‪ ,‬ﻭ ﺃﺭﺩﻨﺎ ﺃﻥ ﻨﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﺎ ﻤﺜﻼ ‪ ,‬ﻟﻘﻴﺎﺱ ﻤﺴﺎﺤﺔ ﺍﻟﻤﺭﺒﻊ ‪ ....‬ﺍﻟﻁﻭل × ﺍﻟﻌﺭﺽ ‪ ....‬ﻓﺒﺄﻱ ﻤﻥ ﻫﺫﻩ ﺍﻟﻌﻨـﺎﻭﻴﻥ ﻭﻀـﻌﻨﺎ‬
‫ﺍﻟﻁﻭل ﻭﺍﻟﻌﺭﺽ ‪ ......‬ﻟﺫﺍ ﻫﻨﺎﻙ ﻟﻜل ﺴﺠل ﺇﺴﻡ ‪ ....‬ﺇﻤﺎ ﺃﻥ ﻨﻀﻌﻪ ﻨﺤﻥ ﺒﺄﻨﻔﺴﻨﺎ ‪ ....‬ﻭﻫﻨﺎﻙ ﺃﺴﻤﺎﺀ ﻟﺴﺠﻼﺕ ﻤﺤﺩﺩﻩ ﻤﻥ ﺍﻟﻤﺼﻨﻊ‪....‬‬
‫‪2‬‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﺅﻗﺘﺔ) ‪(RAM‬‬
‫ﺫﺍﻜﺭﺓ ) ‪ ( RAM‬ﺘﻌﻤل ﻭﺘﺤﺘﻔﻅ ﺒﺎﻟﻤﻌﻠﻭﻤﺎﺕ ﻁﺎﻟﻤﺎ ﻫﻨﺎﻙ ﺘﻭﺘﺭ ﻜﻬﺭﺒﺎﺌﻲ ﻴﺼل ﻟﻠﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻭ ﻓﻲ ﺤﺎل ﻓﻘﺩﺍﻨﻪ ﺘﺘﺤﻭل ﻜل ﺍﻟﺴﺠﻼﺕ‬
‫ﺇﻟﻰ ﺼﻔﺭ ﻭﺘﻔﻘﺩ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ‪) .......‬ﺫﺍﻜﺭﻩ ﻤﺅﻗﺘﺔ (‬
‫ﺘﺘﻜﻭﻥ ﻤﻥ ﺼﻔﺤﺘﻴﻥ ﻭﺒﻜل ﺼﻔﺤﺔ ﻫﻨﺎﻙ ‪ 128‬ﺴﺠل ﻤﻥ ﻤﻭﻀﻊ ﺼﻔﺭ ﺇﻟﻰ ‪.127‬‬
‫ﻟﻨﺄﺨﺫ ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ ﺃﻭﻟﻰ ‪ 12‬ﻤﻭﻀﻊ ) ﻤﻥ ‪ 0‬ﺇﻟﻰ ‪ ( 11‬ﻋﺒﺎﺭﺓ ﻋﻥ ﺴﺠﻼﺕ ﺴﻤﺎﻫﺎ ﺍﻟﻤﺼﻨﻊ ﻭﺘﺴﺘﺨﺩﻡ ﻤﻌﻠﻭﻤﺎﺘﻬـﺎ ﻓـﻲ ﺘـﺴﻬﻴل‬
‫ﺍﻟﺒﺭﻤﺠﺔ ‪ ,‬ﺴﻨﺩﺭﺱ ﺫﻟﻙ ﻻﺤﻘﺎ ﻭﺘﺴﻤﻰ ﺴﺠﻼﺕ ﺍﻟﻌﻤل ﺍﻟﺨﺎﺹ ‪ .‬ﻭﻴﻤﻜﻥ ﻗﺭﺍﺀﺘﻬﺎ ﻭﺘﻐﻴﻴﺭ ﻤﺤﺘﻭﺍﻫﺎ ‪.‬‬
‫ﻤﻥ ‪ 12‬ﺇﻟﻰ ‪ 79‬ﻫﻨﺎﻙ ‪ 68‬ﺴﺠل ﻫﺩﻑ ﻋﺎﻡ ﻤﻌﻨﺎﻩ ﺃﻥ ﻫﺫﻩ ﺍﻟﺴﺠﻼﺕ ﺨﺎﺼﺔ ﺒﻙ ﻜﻤﺒﺭﻤﺞ ﻭ ﻟﻙ ﺍﻟﺤﺭﻴﺔ ﺒﺄﻥ ﺘﺴﻤﻴﻬﺎ ﻜﻤﺎ ﺘﺸﺎﺀ ‪ ,‬ﻤﺜﻼ ﻁﻭل‬
‫ﺃﻭ ﻋﺭﺽ ﻜﻤﺎ ﺫﻜﺭﺕ ﺴﺎﺒﻘﺎ ‪ .....‬ﺇﺫﻥ ﻋﻨﺩﻨﺎ ‪ 68‬ﺴﺠل ﺘﺤﺕ ﺘﺼﺭﻓﻨﺎ ﺍﻟﻤﻁﻠﻕ ‪.‬‬
‫ﻤﻥ ‪ 80‬ﺇﻟﻰ ‪ , 127‬ﻓﺎﺭﻍ ‪ ,‬ﻤﻭﺠﻭﺩ ﻤﻜﺎﻥ ﻭﻋﻨﻭﺍﻥ ﺍﻟﺴﺠﻼﺕ ﺃﻤﺎ ﺍﻟﺴﺠﻼﺕ ﺒﺤﺩ ﺫﺍﺘﻬﺎ ﻓﻬﻲ ﻏﻴﺭ ﻤﻭﺠﻭﺩﺓ ‪.‬‬
‫ﺍﻟﺼﻔﺤﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻜﺴﺎﺒﻘﺘﻬﺎ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ‪ 128‬ﺴﺠل ﻤﻥ ﺍﻟﻤﻭﻀﻊ ‪ 128‬ﺇﻟﻰ ‪ ، 255‬ﺃﻭل ‪ 12‬ﺴﺠل ﺴﺠﻼﺕ ﻋﻤل ﺨﺎﺹ ﻤﻥ ‪ 128‬ﺇﻟـﻰ‬
‫‪ ........ 139‬ﺒﻌﺩﻫﺎ ﻤﻥ ﺍﻟﻤﻭﻀﻊ ‪ 140‬ﺇﻟﻰ ‪ 207‬ﻫﻨﺎﻙ ‪ 68‬ﺴﺠل ‪ ,‬ﻋﺒﺎﺭﺓ ﻋﻥ ﺼﻭﺭﻩ ﻁﺒﻕ ﺍﻷﺼـل ﻟـﺴﺠﻼﺕ ﺍﻷﻫـﺩﺍﻑ ﺍﻟﻌﺎﻤـﺔ‬
‫ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ‪.‬‬
‫ﻨﺘﻭﻗﻑ ﻗﻠﻴﻼ ‪ ,‬ﻟﺘﻭﻀﻴﺢ ﻫﺫﻩ ﺍﻟﻨﻘﻁﺔ ‪ ....‬ﻟﻨﻘل ﺃﻨﻪ ﻟﺩﻴﻙ ﺴﺠل ﺍﺴﻤﻪ ‪ REG‬ﻋﻨﻭﺍﻨﻪ ‪ 12‬ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ ‪ .....‬ﻓﺄﻨﺕ ﺘﻘﻭل ﻟﻠﻤﻌﺎﻟﺞ‬
‫ﺃﺩﺨل ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ ‪....‬ﻭ ﺍﻗﺭﺃ ‪ ..... REG‬ﺃﻤﺎ ﺇﺫﺍ ﻁﻠﺒﺕ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺩﺨﻭل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻟﻴﻘﻭﻡ ﺒﻤﻬﻤﺔ ﻤﺎ ‪ ،‬ﺜﻡ ﺍﺤﺘﺠـﺕ‬
‫ﻗﺭﺍﺀﺓ ﺍﻟﺴﺠل ‪ REG‬ﻤﺭﺓ ﺃﺨﺭﻯ‪ .....‬ﻓﻠﺴﺕ ﺒﺤﺎﺠﺔ ﻟﻠﺫﻫﺎﺏ ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ ﺜﺎﻨﻴﺔ ‪ ،‬ﻓﺎﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻴﻀﻊ ﺼﻭﺭﻩ ﻁﺒـﻕ ﺍﻷﺼـل‬
‫ﻟﻠﺴﺠل ﻭﻴﺴﻤﻬﺎ ‪ REG‬ﻓﻲ ﺍﻟﻤﻭﻀﻊ ‪ 140‬ﻜل ﻤﺎ ﻋﻠﻴﻙ ﺃﻥ ﺘﻘﻭل ﺍﻗﺭﺃ ‪ REG‬ﻤﺜﻼ‪ .‬ﻋﺩﺍ ﺫﻟﻙ ﺃﻱ ﺘﻐﻴﻴﺭ ﻴﺠﺭﻱ ﻟﻬﺫﺍ ﺍﻟﺴﺠل ﺴﻭﺍﺀ ﻜﺎﻥ‬
‫ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ ﺃﻭ ﺍﻟﺜﺎﻨﻴﺔ ‪ ,‬ﻴﻨﻌﻜﺱ ﻋﻠﻰ ﻤﻘﺎﺒﻠﻪ ‪ ,‬ﻓﻜل ﻭﺍﺤﺩ ﻤﻨﻬﻡ ﻤﺭﺁﺓ ﻟﻶﺨﺭ ‪.‬‬
‫ﻤﻥ ﺍﻟﻤﻭﻀﻊ ‪ 208‬ﺇﻟﻰ ‪ 255‬ﻓﺎﺭﻍ ‪.....‬‬
‫ﺇﺫﻥ ﺍﻟﺼﻭﺭﺓ ﺍﻟﻜﺎﻤﻠﺔ ﻟﺫﺍﻜﺭﺓ ‪ RAM‬ﻴﻭﻀﺤﻬﺎ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ‪:‬‬
‫ﺍﻟﺼﻔﺤﺔ ‪1‬‬
‫ﺍﻟﺼﻔﺤﺔ ‪2‬‬
‫ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ‬
‫ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﻨﻭﻉ) ﻓﻼﺵ( ﺃﻱ ﺃﻨﻬﺎ ﺘﻤﺤﻰ ﻭﺘﻘﺭﺃ ﻜﻬﺭﺒﺎﺌﻴﺎ ‪ ،‬ﺘﺤﺘﻔﻅ ﺒﺎﻟﻤﻌﻠﻭﻤﺎﺕ ﻟﻤﺩﺓ ‪ 40‬ﻋﺎﻡ ﺤﺘﻰ ﻭﻟﻭ ﻗﻁﻊ ﺍﻟﺘﻴﺎﺭ ﺍﻟﻜﻬﺭﺒﺎﺌﻲ ﻋـﻥ‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ‪ .‬ﻭﻫﻲ ﺫﺍﻜﺭﺓ ﻨﺴﺘﻁﻴﻊ ﻗﺭﺍﺀﺘﻬﺎ ﺃﻭ ﻤﺤﻭﻫﺎ ‪.‬‬
‫‪3‬‬
‫ﺇﺫﻥ ﻫﻲ ﺫﺍﻜﺭﺓ ﻤﺨﺼﺼﺔ ﻟﺤﻔﻅ ﺍﻷﻭﺍﻤﺭ ‪ ,‬ﺍﻟﺘﻲ ﺘﺸﻴﺭ ﻟﻠﻤﻌﺎﻟﺞ ‪ ,‬ﻤﺎ ﻫﻭ ﻤﻁﻠﻭﺏ ﻤﻨﻪ ﺃﻥ ﻴﻔﻌﻠﻪ ‪ ،‬ﻓﻌﻨﺩﻤﺎ ﻨﻀﻊ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻓﻲ ﺩﺍﺭﺓ ﻤﺎ‬
‫ﺒﻌﺩ ﺃﻥ ﻨﻜﻭﻥ ﻗﺩ ﺒﺭﻤﺠﻨﺎﻩ ‪.‬ﻭ ﻓﻭﺭ ﻭﺼﻭل ﺍﻟﺘﻴﺎﺭ ﺍﻟﻜﻬﺭﺒﺎﺌﻲ ﻟﻪ ﺃﻭل ﻋﻤل ﻴﻘﻭﻡ ﺒﻪ ﺍﻟﻤﻴﻜﺭﻭﻤﻌﺎﻟﺞ ﺘﻠﻘﺎﺌﻴﺎ ﻫﻭ ﺍﻟﺫﻫﺎﺏ ﺇﻟﻰ ﺃﻭل ﻤﻭﻀﻊ ﻓﻲ‬
‫ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﻟﻴﻁﺒﻕ ﺃﻭل ﺃﻤﺭ ﻭﺘﻠﻘﺎﺌﻴﺎ ﻴﺒﺤﺙ ﻋﻥ ﺍﻟﻤﻭﻀﻊ ﺍﻟﺜﺎﻨﻲ ﻭﻫﻜﺫﺍ ﺒﺎﻟﺘﺴﻠﺴل ﺤﺘﻰ ﻨﻬﺎﻴﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﺫﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻴﻁﺒـﻕ ﺘﻠﻘﺎﺌﻴـﺎ‪,‬‬
‫ﺍﻷﻭﺍﻤﺭ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺴﺠﻼﺕ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ‪ ,‬ﻤﻥ ﺃﻭل ﻤﻭﻀﻊ ﻭﺤﺘﻰ ﺍﻟﻨﻬﺎﻴﺔ ﻭﺒﺸﻜل ﺘﺴﻠﺴﻠﻲ ‪.‬‬
‫ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻜﻭﻨﻪ ﻤﻥ ‪ 1024‬ﺴﺠل )ﻤﻥ ﺼﻔﺭ ﺇﻟﻰ ‪ ( 1023‬ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 14‬ﺒﻴﺕ ‪ .‬ﺍﻟﻤﻭﻀﻊ ﺼﻔﺭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺅﺸﺭ ﺍﻟﻭﻀﻊ‬
‫ﻓﻲ ﺍﻟﺼﻔﺭ )‪ (RAZ‬ﻭﺍﻟﺭﺍﺒﻊ ﻤﺅﺸﺭ ﻤﻘﺎﻁﻌﺔ )‪ (Interruption‬ﻟﻨﺭﺴﻡ ﺍﻟﺸﻜل ‪ .....‬ﺜﻡ ﻨﻭﻀﺢ ﻫﺎﺘﻴﻥ ﺍﻟﻨﻘﻁﺘﻴﻥ‪.‬‬
‫ﻣﺆﺷﺮ اﻟﻮﺿﻊ ﻓﻲ اﻟﺼﻔﺮ‬
‫ﻣﺆﺷﺮ اﻟﻤﻘﺎﻃﻌﺔ‬
‫ﻤﺅﺸﺭ ﺍﻟﻭﻀﻊ ﻓﻲ ﺍﻟﺼﻔﺭ)‪ (RAZ‬ﻋﻨﺩﻤﺎ ﻨﻁﺒﻕ ﺇﺸﺎﺭﺓ ﻋﻠﻰ ﺍﻟﻤﺩﺨل ‪ 4‬ﻓﺈﻥ ﺍﻟﻤﻴﻜﺭﻭﻤﻌﺎﻟﺞ ﻴﻠﻐﻲ ﻜل ﻤﺎ ﻴﻘﻭﻡ ﺒـﻪ ﻓـﻲ ﺘﻠـﻙ ﺍﻟﻠﺤﻅـﺔ‬
‫ﻭﻴﺫﻫﺏ ﺘﻠﻘﺎﺌﻴﺎ ﺇﻟﻰ ﻤﺅﺸﺭ ﺍﻟﻭﻀﻊ ﻓﻲ ﺍﻟﺼﻔﺭ ﺃﻱ ﺇﻟﻰ ﺍﻟﻤﻭﻀﻊ ﺼﻔﺭ ﻟﻴﻁﺒﻕ ﺍﻷﻭﺍﻤﺭ ﺒﺎﻟﺘﺴﻠﺴل ﻤﺠﺩﺩﺍ ‪.‬‬
‫ﻤﺅﺸﺭ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ :‬ﻓﻲ ﺤﺎل ﺤﺩﻭﺙ ﻤﻘﺎﻁﻌﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺴﻴﺫﻫﺏ ﺘﻠﻘﺎﺌﻴﺎ ﺇﻟﻰ ﺍﻟﻌﻨﻭﺍﻥ ‪ 4‬ﻟﻴﻁﺒﻕ ﻤﻨﻪ ﻓﺼﺎﻋﺩﺍ ﺍﻷﻭﺍﻤﺭ ﺒﺸﻜل ﺘﺴﻠﺴﻠﻲ‪.‬‬
‫ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ‬
‫ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻥ ﻨﻭﻉ )‪ (EEPROM‬ﻴﻌﻨﻲ ﺃﻨﻬﺎ ﺘﺴﺠل ﻭﺘﻤﺤﻰ ﻜﻬﺭﺒﺎﺌﻴﺎ ‪.‬‬
‫ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻜﻭﻨﻪ ﻤﻥ ‪ 64‬ﺴﺠل ) ﻤﻥ ﺍﻟﻤﻭﻀﻊ ﺼﻔﺭ ﺤﺘﻰ ‪ ( 63‬ﺒﻁﻭل ‪ 8‬ﺒﻴﺕ ‪.‬‬
‫ﻤﻴﻜﺭﻭﻤﻌﺎﻟﺞ ‪ 8‬ﺒﻴﺕ ‪:‬‬
‫ﻴﺴﺘﻁﻴﻊ ﺃﻥ ﻴﻌﺎﻟﺞ ) ﻴﻁﺭﺡ ‪ ,‬ﻴﺠﻤﻊ ‪ ,‬ﻴﻘﺭﺃ ‪ .......‬ﺇﻟﺦ ( ﻜﻠﻤﺎﺕ ) ﺴﺠﻼﺕ ( ﺒﻁﻭل ‪ 8‬ﺃﺒﻴﺎﺕ‪ ،‬ﻴﻌﻨﻲ ﺃﻜﺒﺭ ﺭﻗﻡ ﺜﻨﺎﺌﻲ ﻴﻤﻜﻥ ﺃﻥ ﻨﺨﺯﻨﻪ ﻓﻲ‬
‫ﺴﺠل ﻤﻥ ‪ 8‬ﺒﻴﺕ ﻫﻭ ﺍﻟـ ‪ 11111111‬ﻭﻴﺴﺎﻭﻱ ﻋﺸﺭﻴﺎ ﺍﻟﺭﻗﻡ ‪ ، 255‬ﻨﻔﻬﻡ ﻤﻥ ﺫﻟﻙ ﺃﻨﻪ ﻴﻌﺎﻟﺞ ﺃﺭﻗﺎﻡ ﻤﻥ ﺼﻔﺭ ﻟـ ‪ 255‬ﻭ ﻻ ﻗﺩﺭﺓ ﻟﻪ‬
‫ﻟﻤﻌﺎﻟﺠﺔ ﺃﺭﻗﺎﻡ ﺃﻋﻠﻰ ﻤﻥ ﺫﻟﻙ ‪.‬‬
‫ﺴﺠل ﻋﻤل ﺍﻟﻤﻴﻜﺭﻭﻤﻌﺎﻟﺞ ‪:‬‬
‫ﻋﺒﺎﺭﺓ ﻋﻥ ﺴﺠل ﻤﻥ ‪ 8‬ﺃﺒﻴﺎﺕ ‪ ,‬ﻭﻴﺭﻤﺯ ﺇﻟﻴﻪ ﺒﺤﺭﻑ "‪ ."W‬ﻭﻴﺴﺘﻌﻤﻠﻪ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻠﻘﻴﺎﻡ ﺒﻌﻤﻠﻴﺎﺘﻪ ﺍﻟﺤﺴﺎﺒﻴﺔ ‪ ,‬ﻭﺴﻨﺭﻯ ﺘﻔﺼﻴﻼ ﻟـﺫﻟﻙ ﻓـﻲ‬
‫ﺸﺭﺤﻨﺎ ﻟﻠﺒﺭﻤﺠﺔ ‪.‬‬
‫‪4‬‬
‫ﻋﺩﺍﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ‪:‬‬
‫ﺴﺠل ﻤﻜﻭﻥ ﻤﻥ ‪ 14‬ﺒﻴﺕ ‪ .‬ﻭﻀﻴﻔﺘﻪ ﻻ ﺘﺘﻌﺩﻯ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ‪ ,‬ﺘﺫﻜﺭ ﺒﺄﻨﻨﻲ ﻗﻠﺕ ﺃﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻴﺒﺩﺃ ﺒﺘﻁﺒﻴـﻕ ﺍﻷﻭﺍﻤـﺭ ﺒﺎﻟﺘﺴﻠـﺴل ﻤـﻥ‬
‫ﺍﻟﻤﻭﻀﻊ ﺼﻔﺭ ﻭﺤﺘﻰ ﺍﻟﻨﻬﺎﻴﺔ‪ ،‬ﻓﺒﻴﻨﻤﺎ ﺍﻟﻤﻌﺎﻟﺞ ﻴﻔﻌل ﺫﻟﻙ ‪ ,‬ﻫﺫﺍ ﺍﻟﺴﺠل ﻴﺘﻐﻴﺭ ﺘﻠﻘﺎﺌﻴﺎ ﻟﻴﺤﺘﻭﻱ ﻤﻭﻀﻊ ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﻴﻨﻔﺫ ‪.‬‬
‫ﻟﻤﺤﺔ ﺴﺭﻴﻌﺔ ﻋﻥ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﺼﻐﺭﺓ‪:‬‬
‫ﻋﻨﺩﻤﺎ ﻨﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻟﻠﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻴﻤﻜﻨﻨﺎ ﺘﺠﺯﺌﺘﻪ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺭﺌﻴﺴﻲ ﻭﺒﺭﺍﻤﺞ ﻤﺴﺎﻋﺩﺓ ﻤ‪‬ﺼﻐﺭﻩ ﺘﻘﻭﻡ ﺒﻭﻅﻴﻔﺔ ﻤﻌﻴﻨـﻪ ﻨﺭﻴـﺩ‬
‫ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﺃﻜﺜﺭ ﻤﻥ ﻤﺭﺓ ﺩﺍﺨل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ ﻓﻨﺴﺘﺩﻋﻴﻬﺎ ‪.‬‬
‫ﻤﺜﺎل ‪ :‬ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻴﻨﻔﺫ ﺃﻤﺭ ﻜل ‪ 1‬ﻤﻴﻜﺭﻭﺜﺎﻨﻴﺔ ‪ ،‬ﻟﻜﻨﻨﺎ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﺃﻥ ﻴﻨﺘﻅﺭ ‪ 5‬ﻤﻴﻜﺭﻭﺜﺎﻨﻴﺔ ﻗﺒل ﺃﻥ ﻴﻁﺒﻕ ﺃﻤﺭﺍ ﻤﺎ ‪ ...‬ﺍﻟﺤل ﻫﻭ ﻜﺘﺎﺒﺔ‬
‫ﺒﺭﻨﺎﻤﺞ ﻤﺼﻐﺭ ﻨﺴﺘﺩﻋﻴﻪ ﻤﺘﻰ ﻨﺸﺎﺀ ﻟﻴﺴﺘﻬﻠﻙ ‪ 5‬ﻤﻴﻜﺭﻭ ﺜﺎﻨﻴﺔ ﻤﻥ ﺍﻟﻭﻗﺕ ‪ ....‬ﻤﺜﻼ ﻨﺴﻤﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺼﻐﺭ ‪ Retard‬ﻭﻨﻜﺘﺏ‪:‬‬
‫‪Retard‬‬
‫‪Nop‬‬
‫‪Nop‬‬
‫‪Nop‬‬
‫‪return‬‬
‫ﺃﻋﻼﻩ ﻜﺘﺒﻨﺎ ﻭﺒﻜل ﺒﺴﺎﻁﺔ ﺒﺭﻨﺎﻤﺞ ﻤ‪‬ﺼﻐﺭ ‪ ....‬ﺒﻠﻐﺔ ‪ Assembleur‬ﻭﺍﺴﺘﻌﻤﻠﻨﺎ ﺃﻤﺭﺍﻥ ﻤﻨﻬﻡ ﻻ ﺘﻔﻌل ﺸﻲﺀ )‪ (Nop‬ﻭ ﺍﺭﺠﻊ )‪.(return‬‬
‫ﺍﻷﻭل ﻁﻠﺒﻨﺎ ﻤﻥ ﺍﻟﻤﺘﺤﻜﻡ ﺃﻥ ﻻ ﻴﻔﻌل ﺸﻴﺌﺎ ﻓﻬﻭ ﻟﻥ ﻴﺠﻤﻊ ﻟﻥ ﻴﻁﺭﺡ ﺇﻟﺦ ‪ .....‬ﻟﻜﻥ ﺘﻨﻔﻴﺫ ﻫﺫﺍ ﺍﻷﻤﺭ ﻴﺴﺘﻐﺭﻕ ‪ 1‬ﻤﻴﻜﺭﻭﺜﺎﻨﻴﺔ ‪ .‬ﻁﻠﺒﻨﺎ ﻤﻨﻪ‬
‫ﺃﻥ ﻴﻨﻔﺫﻩ ﺜﻼﺙ ﻤﺭﺍﺕ ﺴﻴﺴﺘﻐﺭﻕ ﺫﻟﻙ ‪ 3‬ﺨﻼل ﻤﻴﻜﺭﻭﺜﺎﻨﻴﺔ ﻭ ﺍﻷﻤﺭ ﺍﺭﺠﻊ ﻴﺴﺘﻬﻠﻙ ﺩﻭﺭﺘﺎﻥ ﻤﻥ ﺍﻟـﺴﺎﻋﺔ ﺃﻱ ‪ 2‬ﻤﻴﻜﺭﻭﺜﺎﻨﻴـﺔ ‪ ......‬ﺇﺫﻥ‬
‫ﻴﻁﺒﻕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ‪ 5‬ﻤﻴﻜﺭﻭﺜﺎﻨﻴﺔ ﻭﻫﺫﺍ ﻤﺎ ﻨﺭﻴﺩﻩ ‪......‬‬
‫ﺘﻌﻠﻤﻨﺎ ﻤﺎ ﻫﻭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤ‪‬ﺼﻐﺭ ﻭ ﻴﻁﻠﺏ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ ﺃﻥ ﻴﺴﺘﺩﻋﻴﻪ ﻜﻬﺫﺍ ‪.‬‬
‫‪Retard‬‬
‫‪Call‬‬
‫ﻴﺄﺘﻲ ﺍﻟﻤﻴﻜﺭﻭﻤﻌﺎﻟﺞ ﻟﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺼﻐﺭ ‪ ,‬ﻭﻴﺒﺩﺃ ﺒﺘﻨﻔﻴﺫ ﺍﻷﻭﺍﻤﺭ ﺒﺎﻟﺘﺴﻠﺴل ‪ ,‬ﻭﻋﻨﺩﻤﺎ ﻴﺼل ﺇﻟـﻰ ﺍﻷﻤـﺭ ﺇﺭﺠـﻊ ﻜﻴـﻑ ﺴـﻴﻌﺭﻑ‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﻌﺎﻟﺞ ﺇﻟﻰ ﺃﻱ ﻤﻭﻀﻊ ﺴﻴﺭﺠﻊ ؟ ﻭﺍﻟﻤﻁﻠﻭﺏ ﻫﻭ ﺍﻟﺭﺠﻭﻉ ﻟﺘﻁﺒﻴﻕ ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﻴﻠﻲ ﺃﻤﺭ ﺍﻻﺴﺘﺩﻋﺎﺀ ﻟﺫﺍ ﻭﺠﺩﺕ ﺫﺍﻜﺭﺓ ﺍﻟﻌﻭﺩﺓ ‪.‬‬
‫ﺫﺍﻜﺭﺓ ﺍﻟﻌﻭﺩﺓ ‪:‬‬
‫ﻤﻜﻭﻨﺔ ﻓﻲ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻤﻥ ﺜﻤﺎﻨﻴﺔ ﺴﺠﻼﺕ ‪ .‬ﻫﺫﻩ ﺍﻟﺴﺠﻼﺕ ﻻ ﺘﻜﺘﺏ ﻭﻻ ﺘﻘﺭﺃ ﻤﺒﺎﺸﺭﺓ ‪ ,‬ﺒل ﻴﺴﺘﻌﻤﻠﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻠﻘﺎﺌﻴﺎ ‪ ....‬ﻴﻌﻨﻲ ﻜﻠﻤﺎ‬
‫ﺼﺎﺩﻓﻪ ﺃﻤﺭ ﺍﺴﺘﺩﻋﺎﺀ ﺴﻴﺴﺠل ﻤﺎ ﺒﻤﺤﺘﻭﻯ ﻋﺩﺍﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ )ﻤﻭﻀﻊ ﺍﻷﻤﺭ( ﻓﻲ ﺃﻭل ﺴﺠل ﻟﺫﺍﻜﺭﺓ ﺍﻟﻌﻭﺩﺓ ﻭﻋﻨﺩﻤﺎ ﻴﻁﻠﺏ ﻤﻨـﻪ ﺍﻟﺭﺠـﻭﻉ‬
‫ﺴﻴﻌﻠﻡ ﺒﻭﺍﺴﻁﺔ ﻫﺫﺍ ﺍﻟﺴﺠل ﺃﻴﻥ ﻴﺭﺠﻊ ‪ ........‬ﻭﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺃﻤﺭ ﺇﺭﺠﻊ ﻴﻤﺤﻲ ﺍﻟﺴﺠل ﻤﻥ ﺫﺍﻜﺭﺓ ﺍﻟﻌﻭﺩﺓ ‪.‬‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ‪ 16F84‬ﻴﺘﺤﻤل ﺘﺨﺯﻴﻥ ﻤﻭﺍﻀﻊ ‪ 8‬ﺇﺴﺘﺩﻋﺎﺀﺍﺕ ‪ ,‬ﻓﺈﺫﺍ ﺯﺍﺩﺕ ﻋﻥ ﺫﻟﻙ ‪ ,‬ﻓﺴﻴﻤﺤﻰ ﺘﻠﻘﺎﺌﻴﺎ ﻭﺍﺤﺩ ﻟﺩﺨﻭل ﺁﺨﺭ ‪ .‬ﻜﺫﻟﻙ ﺫﺍﻜﺭﺓ‬
‫ﺍﻟﻌﻭﺩﺓ ﺘﺴﺘﺨﺩﻡ ﻓﻲ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﻟﻨﻔﺱ ﺍﻟﻤﻬﻤﺔ ‪ ...‬ﻓﻲ ﺸﺭﺤﻨﺎ ﻟﻠﺒﺭﻤﺠﺔ ﺴﺘﺘﻀﺢ ﻟﻙ ﺍﻟﺼﻭﺭﺓ ﺃﻜﺜﺭ ‪.‬‬
‫‪5‬‬
‫‪W‬‬
‫اﻟﻤﯿﻜﺮو ﻣﻌﺎﻟﺞ‬
‫ﻣﺆﺷﺮ اﻟﻮﺿﻊ ﻓﻲ اﻟﺼﻔﺮ‬
‫ﻣﺆﺷﺮ اﻟﻤﻘﺎﻃﻌﺔ‬
‫اﻟﺼﻔﺤﺔ ‪2‬‬
‫اﻟﺼﻔﺤﺔ ‪1‬‬
‫‪RAM‬‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻤﻥ ﺍﻟﺩﺍﺨل‬
‫ﻤﻭﺍﺼﻔﺎﺕ ‪. PIC16F84‬‬
‫‪ -1‬ﻴﻔﻬﻡ ‪ 35‬ﺘﻌﻠﻴﻤﺔ ﺃﻭ ﺃﻤﺭ ‪.‬‬
‫‪ -2‬ﻴﺴﺘﻁﻴﻊ ﺃﻥ ﻴﺨﺯﻥ ﺒﺫﺍﻜﺭﺘﻪ ﺒﺭﻨﺎﻤﺞ ﻤﻥ ‪ 1024‬ﺃﻤﺭ‪.‬ﻭﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﻨﻭﻉ ﻓﻼﺵ ‪,‬ﻭﺫﻟﻙ ﻴﻌﻨﻲ ﺃﻨﻨﺎ ﻨـﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘـﺏ ﻭ ﻨﻤﺤـﻲ‬
‫ﻤﺤﺘﻭﺍﻫﺎ ﺒﻭﺍﺴﻁﺔ ﺍﻟﻜﻬﺭﺒﺎﺀ‪ ,‬ﻭ ﺇﺫﺍ ﻗﻁﻌﻨﺎ ﺍﻟﻜﻬﺭﺒﺎﺀ ﻋﻨﻬﺎ ﻓﻬﻲ ﺘﺤﻔﻅ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻟﻤﺩﺓ ﺃﺭﺒﻌﻴﻥ ﻋﺎﻤﺎ‪,‬‬
‫‪ 68 -3‬ﺒﺎﻴﺕ ﻤﻥ ﺫﺍﻜﺭﺓ ‪. RAM‬‬
‫‪ 64 -4‬ﺒﺎﻴﺕ ﻟﻠﻤﻌﻠﻭﻤﺎﺕ ﻤﻥ ﻨﻭﻉ ‪ EEPROM‬ﻨﻔﺱ ﻤﻭﺍﺼﻔﺎﺕ ﺍﻟﻔﻼﺵ‪.‬‬
‫‪ 15 -5‬ﺴﺠل ﻋﻤل ﺨﺎﺹ‪.‬‬
‫‪ 13 -6‬ﺒﻴﻥ ﺩﺨﻭل‪ /‬ﺨﺭﻭﺝ‬
‫‪ -7‬ﺍﻟﻤﻘﺎﻁﻌﺔ‪INT :‬‬
‫‪ O/I‬ﻤﻌﻨﻰ ﺫﻟﻙ ﺃﻥ ﺍﻟﺒﻴﺕ ﻴﻤﻜﻥ ﺃﻥ ﻴﺴﺘﻌﻤل ﻜﻤﺩﺨل ﻭ ﻜﻤﺨﺭﺝ‪.‬‬
‫ﻋﻨﺩﻤﺎ ﻴﺤﺩﺙ ﺘﻐﻴﺭ ﻤﺎ ﻓﻲ ﻫﺫﺍ ﺍﻟﺒﻴﺕ )ﻤﻥ ﻭﺍﺤﺩ ﺇﻟﻰ ﺼﻔﺭ ﺃﻭ ﺒﺎﻟﻌﻜﺱ( ﻴﺘﻭﻗﻑ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻥ ﻋﻤﻠـﻪ ﺍﻟﻌـﺎﺩﻱ‬
‫ﻭﻴﺫﻫﺏ ﺇﻟﻰ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﻴﺠﺩ ﺒﻪ ﻤﺎ ﻴﻔﻌل ﻓﻲ ﺤﺎل ﺍﻟﻤﻘﺎﻁﻌﺔ‪.‬ﻭﻫﺫﺍ ﺍﻟﻤﻜﺎﻥ ﻨﻜﻭﻥ ﻨﺤﻥ ﻗﺩ ﺒﺭﻤﺠﻨﺎﻩ ﻤﺴﺒﻘﺎ ﺒﺎﻟﻁﺒﻊ‪.‬‬
‫‪ PORTA‬و ‪PORTB‬‬
‫ﻗﻠﻨﺎ ﺒﺎﻥ ﻫﻨﺎﻙ ‪ 13‬ﻁﺭﻑ ﻴﻤﻜﻥ ﺃﻥ ﺘﺴﺘﻌﻤل ﻜﺩﺨﻭل ﻭ ﺨﺭﻭﺝ ﻭﻫﺫﻩ ‪ 13‬ﻁﺭﻑ ﺘﻨﻘـﺴﻡ ﺒـﺩﻭﺭﻫﺎ ﺇﻟـﻰ ﻤﺭﻓـﺄﻴﻥ ﺃﻭ ‪ PORT‬ﻭﻫﻤـﺎ‬
‫‪ PORTA‬ﻭ ‪ PORTB‬ﻭﻨﻼﺤﻅ ﺃﻥ ﻜل ﻁﺭﻑ ﻟﻪ ﺭﻗﻡ ﻭﺍﺴﻡ ﻴﻌﺭﻑ ﺒﻪ ‪.‬‬
‫ﺇﺫﻥ ﻜل ﻤﻥ ‪ PORTA‬ﻭ ‪ PORTB‬ﻫﻤﺎ ﻋﺒﺎﺭﺓ ﻋﻥ ﺴﺠل ﻋﻤل ﺨﺎﺹ ﻤﺅﻟﻑ ﻤﻥ ‪ 8‬ﺃﺒﻴﺎﺕ‪.‬ﻜﻤﺎ ﻴﻭﻀﺢ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ‪:‬‬
‫‪6‬‬
‫ﺇﻥ ﺴﺠل ﺍﻟﻌﻤل ‪ PORTB‬ﻫﻭ ﺒﺒﺴﺎﻁﺔ ﻤﻭﻗﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻤﺅﻟﻑ ﻤﻥ ﺜﻤﺎﻨﻲ ﺃﺒﻴﺎﺕ ‪ .‬ﻓﻜل ﻤﺎ ﻴﻜﺘﺏ ﻓﻲ ﺴﺠل ﺍﻟﻌﻤل ﻫﺫﺍ ﺘﻅﻬﺭ ﻨﺘﻴﺠﺘـﻪ‬
‫ﻓﻲ ﺍﻟﻁﺭﻑ ﺍﻟﺘﺎﺒﻊ ﻟﻪ ‪.‬ﻓﺈﺫﺍ ﻜﺘﺒﻨﺎ ‪ 1‬ﻓﻲ ﺍﻟﺒﻴﺕ ‪ RP3‬ﻤﻥ ﺴﺠل ﺍﻟﻌﻤل ﺴﺘﻜﻭﻥ ﻟﺩﻴﻨﺎ ﻓﻲ ﻁﺭﻑ ﺍﻟﺘﺎﺒﻊ ﻟﻪ ﺍﻟﻘﻴﻤـﺔ ‪ 5V‬ﻭﻫـﺫﺍ ﻴﻌﻨـﻲ ‪1‬‬
‫ﻭﺍﻟﻌﻜﺱ ﺼﺤﻴﺢ ‪.‬‬
‫ﻻﺤﻅ ﺃﻥ ﺁﺨﺭ ﺜﻼﺜﺔ ﺃﺒﻴﺎﺕ ﻓﻲ ﺴﺠل ﺍﻟﻌﻤل ‪ PORTA‬ﻏﻴﺭ ﻤﻭﺠﻭﺩﺓ ﻓﻜل ﻤﺎ ﺘﻜﺘﺒﻪ ﻫﻨﺎ ﻻ ﻗﻴﻤﺔ ﻟﻪ‪.‬‬
‫ﻜﺨﻼﺼﺔ ‪ :‬ﺍﻟـ‪ BORTA‬ﻟﻪ ‪ 5‬ﺃﻁﺭﺍﻑ ﻭ ﺍﻟـ‪ PORTB‬ﻟﻪ ‪ 8‬ﺃﻁﺭﺍﻑ ﻭ ﻜل ﻫﺫﻩ ﺍﻷﻁﺭﺍﻑ ﻴﻤﻜﻥ ﺃﻥ ﺘﺒﺭﻤﺞ ﻜﻤﺩﺍﺨل ﺃﻭ ﻤﺨﺎﺭﺝ ‪.‬‬
‫ﻛﯿﻒ ﻧﺒﺮﻣﺞ ‪ PORTA‬و ‪ PORTB‬؟‬
‫ﻨﺴﺘﻌﻤل ﺴﺠﻼﻥ ﻋﻤل ﺨﺎﺹ ﻭﻫﻡ‬
‫‪ trisa‬ﻭ‬
‫‪ trisb‬ﻓﻜل ﺴﺠل ﻤﺅﻟﻑ ﻤﻥ ‪ 8‬ﺃﺒﻴﺎﺕ ﻭﻜل ﺒﻴﺕ ﻴﻤﺜل ﻁﺭﻑ ﻤﻌﻴﻥ‪ ,‬ﻓﺈﺫﺍ ﺃﺭﺩﻨﺎ ﻫـﺫﺍ‬
‫ﺍﻟﻁﺭﻑ ﻜﺨﺭﻭﺝ ﻨﻀﻊ ‪ 0‬ﻓﻲ ﺍﻟﺒﻴﺕ ﺍﻟﺘﺎﺒﻊ ﻟﻪ ﻭ‪ 1‬ﻜﺩﺨﻭل‪ ,‬ﺍﻨﻅﺭ ﺍﻟﺼﻭﺭﺓ‪.‬‬
‫ﻣﺜ ﺎل ‪ :‬ﻨﺭﻴﺩ ﺒﺭﻤﺠﺔ ﺃﻁﺭﺍﻑ ‪ PORTB‬ﻜﻤﺨﺎﺭﺝ ﻭ ﺃﻁﺭﺍﻑ ‪ PORTA‬ﻜﻤﺩﺍﺨل ‪ ،‬ﺃﻜﺘﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻨﺎﺴـﺏ ﺒﺎﺴـﺘﻌﻤﺎل ﻟﻐـﺔ ﺍﻵﻟـﺔ‬
‫)‪(Assembleur‬‬
‫ﻨﻀﻊ ‪ 1‬ﻓﻲ ﺍﻟﺒﻴﺕ ﺍﻟﺨﺎﻤﺱ ﻤﻥ ﺴﺠل ‪ STATUS‬ﻟﻠﺫﻫﺎﺏ ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻤﻥ ﺍﻟﺫﺍﻜﺭ ﺓ;‬
‫‪bsfSTATUS,5‬‬
‫ﻨﻀﻊ ‪ 0‬ﻓﻲ ﺍﻟﺴﺠل ‪; W‬‬
‫‪MOVLW 0×00‬‬
‫‪MOVWF TRISB‬‬
‫ﻨﻀﻊ ‪ 1F=11111‬ﻓﻲ ﺴﺠل ﺍﻟﻌﻤل‪; W‬‬
‫‪MOVLW 0×1F‬‬
‫‪MOVWF TRISA‬‬
‫ﻨﻀﻊ ‪ 0‬ﻓﻲ ‪ TRISB‬ﺇﺫﻥ ﺃﻁﺭﺍﻑ ﺍﻟـ‪ PORTB‬ﺍﻟﺜﻤﺎﻨﻴﺔ ﻜﻠﻬﺎ ﻤﺒﺭﻤﺠﺔ ﻜﻤﺨﺎﺭﺝ;‬
‫ﻨﻀﻊ ‪ 1‬ﻓﻲ ‪ TRISA‬ﺇﺫﻥ ﺃﻁﺭﺍﻑ ﺍﻟـ‪ PORTA‬ﺍﻟﺨﻤﺴﺔ ﻜﻠﻬﺎ ﻤﺒﺭﻤﺠﺔ ﻜﻤﺩﺍﺨل;‬
‫ﻨﻀﻊ ‪ 0‬ﻓﻲ ﺍﻟﺒﻴﺕ ﺍﻟﺨﺎﻤﺱ ﻤﻥ ﺴﺠل ‪ STATUS‬ﻟﻠﺭﺠﻭﻉ ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ;‬
‫‪bcfSTATUS,5‬‬
‫ﻤﻼﺤﻅﺔ ‪ :‬ﻜل ﻤﺎ ﻴﺄﺘﻲ ﺒﻌﺩ );( )ﺍﻟﻨﻘﻁﺔ ﺍﻟﻔﺎﺼﻠﺔ( ﻓﻬﻭ ﻟﻴﺱ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭ ﻻ ﻴﺄﺨﺫﻩ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﺒﻌﻴﻥ ﺍﻻﻋﺘﺒﺎﺭ ‪ ،‬ﻭ ﺇﻨﻤﺎ ﻫﻭ ﻋﺒﺎﺭﺓ‬
‫ﻋﻥ ﺘﻌﻠﻴﻘﺎﺕ ﻴﻀﻌﻬﺎ ﺍﻟﻤﺒﺭﻤﺞ ‪.‬‬
‫‪7‬‬
‫ﻨﻼﺤﻅ ﺃﻥ ‪TRISA‬‬
‫ﻭ‪ TRISB‬ﻤﻭﺠﻭﺩﺍﻥ‬
‫ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺜﺎﻨﻴﺔ‬
‫ﺍﻟﺼﻔﺤﺔ ﺍﻟﺜﺎﻨﻴﺔ‬
‫ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ‬
‫اﻟﺴﺠﻞ ‪: STATUS‬‬
‫ﻻ ﺒﺩ ﻭﺍﻨﻙ ﺸﺎﻫﺩﺕ ﻓﻲ ﺴﺒﺎﻕ ﺍﻟﺴﻴﺎﺭﺍﺕ ﻴﺭﻓﻌﻭﻥ ﻋﻠﻤﺎ ﻟﻺﺸﺎﺭﺓ ﻟﻠﻤﺘﺴﺎﺒﻕ ﺒﺄﻨﻪ ﻭﺼل ﺨﻁ ﺍﻟﻨﻬﺎﻴﺔ‪ ,‬ﻭﻓﻲ ﻜﺭﺓ ﺍﻟﻘﺩﻡ ﻴﺭﻓﻊ ﺍﻟﺤﻜـﻡ ﺍﻟﻌﻠـﻡ‬
‫ﻟﻴﺸﻴﺭ ﺒﺎﻥ ﺍﻟﻜﺭﺓ ﺃﺼﺒﺤﺕ ﺨﺎﺭﺝ ﺍﻟﻤﻠﻌﺏ‪ ,‬ﺃﻭ ﻜﺎﻥ ﻫﻨﺎﻙ ﻤﺨﺎﻟﻔﺔ ﻤﺎ‪...‬ﺍﻟﺦ‪ .‬ﻭﻤﺎ ﻋﻼﻗﺔ ﺫﻟﻙ ﺒﺎﻻﻟﻜﺘﺭﻭﻨﻴﺎﺕ؟ ﻜـل ﻤـﺎ ﻓـﻲ ﺍﻷﻤـﺭ ‪ ,‬ﺃﻥ‬
‫ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻟﻪ ﺃﻋﻼﻡ ﻴﺭﻓﻌﻬﺎ ﻋﻨﺩﻤﺎ ﻴﺤﺩﺙ ﺸﻲﺀ ﻤﺎ‪ ,‬ﻭ ﻜﺄﻨﻪ ﻴﻘﻭل ﻟﻨﺎ ﻭﺒﻜل ﻟﻁﻑ ‪ ,‬ﺤﺩﺙ ﻫﺫﺍ ﻓﺎﺘﺨﺫ ﺍﻟﻘﺭﺍﺭ ﺍﻟﺫﻱ ﻴﻨﺎﺴﺒﻙ‪,‬ﻓﻬﻭ ﺒﻬﺫﺍ‬
‫ﻴﺴﺎﻋﺩﻨﺎ ﻋﻠﻰ ﺍﻟﺘﺤﻜﻡ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻭﻤﺎ ﻨﺭﻴﺩﻩ ﻨﺤﻥ ﻤﻨﻪ ﺃﻥ ﺒﻔﻌل‪.‬‬
‫ﻗﻠﻨﺎ ﺃﻥ ﻫﻨﺎﻙ ‪ 15‬ﺴﺠل ﻋﻤل ‪,‬ﻓﺈﺤﺩﻯ ﻫﺫﻩ ﺍﻟﺴﺠﻼﺕ ﻴﺴﻤﻰ "‪ "STATUS‬ﻭﻤﻌﻨﺎﻫﺎ ﺤﺎﻟﺔ‪ ,‬ﻓﻬﻭ ﻴﻌﺒﺭ ﻋﻥ ﺤﺎﻟﺔ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ‪ .‬ﻓـﺴﺠل‬
‫‪ STATUS‬ﻫﺫﺍ ﻤﺅﻟﻑ ﻤﻥ ‪ 8‬ﺒﻴﺕ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫‪8‬‬
‫‪bit 7‬‬
‫‪IRP‬‬
‫‪bit 5‬‬
‫‪RP0‬‬
‫‪bit 6‬‬
‫‪RP1‬‬
‫‪bit3‬‬
‫‪PD‬‬
‫‪bit 4‬‬
‫‪TO‬‬
‫‪bit 2‬‬
‫‪Z‬‬
‫‪bit 1‬‬
‫‪DC‬‬
‫‪bit 0‬‬
‫‪C‬‬
‫ﺍﻟﺒﻴﺕ ﺭﻗﻡ ‪ 6‬ﻭ‪ 7‬ﻻ ﻭﻅﻴﻔﺔ ﻟﻬﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ‪ 16F84‬ﻭﻴﺠﺏ ﺃﻥ ﻴﺒﻘﻭﺍ "‪. "0‬‬
‫ﺍﻟﺒﻴﺕ ﺭﻗﻡ ‪RP0 , 5‬‬
‫ﻴﺴﺘﻌﻤل ﻻﺨﺘﻴﺎﺭ ﺃﻱ ﺼﻔﺤﺔ ﺘﺭﻴﺩ ﺍﻟﺩﺨﻭل ﺇﻟﻴﻬﺎ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ‪ ،‬ﺼﻔﺤﺔ‪ 1‬ﺃﻭ ﺼﻔﺤﺔ‪ . 0‬ﻓﺈﺫﺍ ﺃﺭﺩﻨﺎ ﺍﻟﺩﺨﻭل ﺇﻟـﻰ‬
‫ﺍﻟﺼﻔﺤﺔ ‪ 0‬ﻨﻀﻊ ‪ 0‬ﻓﻲ ﻫﺫﺍ ﺍﻟﺒﻴﺕ ﻭﺍﻟﻰ ﺍﻟﺼﻔﺤﺔ ‪ 1‬ﻨﻀﻊ ‪.1‬‬
‫ﺍﻟﺒﻴﺕ ﺭﻗﻡ ‪ TO 4‬ﻫﻭ ﻋﻠﻡ ﻴﺘﻌﻠﻕ ﺒﺎﻟﻭﻗﺕ ﻭﺴﻨﺸﺭﺤﻪ ﺒﺎﻟﺘﻔﺼﻴل ﻋﻨﺩﻤﺎ ﻨﺼل ﺇﻟﻰ ﺍﻷﻭﺍﻤﺭ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺒﻪ‪.‬‬
‫ﺍﻟﺒﻴﺕ ﺭﻗﻡ ‪3‬‬
‫‪ PD‬ﻟﻪ ﻋﻼﻗﺔ ﺒﺎﻟﺘﻴﺎﺭ ﺍﻟﻜﻬﺭﺒﺎﺌﻲ ﻭﺴﻨﺸﺭﺤﻪ ﻋﻨﺩﻤﺎ ﻨﺼل ﺍﻷﻤﺭﻴﻥ ﺍﻟﻤﺘﻌﻠﻘﻴﻥ ﺒﻪ ﻭﻫﻡ ‪CLRWDT,SLEEP‬‬
‫ﺃﻤﺎ ﻤﺎ ﺘﺒﻘﻰ‪,‬ﺍﻟﺒﻴﺕ ‪ 0‬ﻭ ‪ 1‬ﻭ‪ 2‬ﻭﻫﻡ‬
‫‪ Z , DC , C‬ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ ﻓﻬﻡ ﺍﻷﻋﻼﻡ ﺍﻟﺘﻲ ﻨﺸﺭﺤﻬﺎ ﻓﻲ ﻤﺎ ﺴﻴﺄﺘﻲ ‪.‬‬
‫ﺍﻷﻋﻼﻡ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺠﻤﻊ‪:‬‬
‫ﺇﺫﺍ ﻁﻠﺒﺕ ﻤﻥ ﺍﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﺃﻥ ﻴﺠﻤﻊ ﻟﻙ ﺭﻗﻤﻴﻥ ﻭﻜﺎﻨﺕ ﺍﻟﻨﺘﻴﺠﺔ ﺍﻜﺒﺭ ﻤﻥ ‪ 255‬ﻓﺎﻟﻤﻴﻜﺭﻭﻤﺭﺍﻗﺏ ﻴﻀﻊ ﺃﻭﺘﻭﻤﺎﺘﻴﻜﻴﺎ ﻓﻲ ﺍﻟﻌﻠﻡ ‪ C‬ﻭﺍﺤـﺩ‬
‫)‪ .(1‬ﻭﻴﻀﻊ )‪ ( 0‬ﻓﻲ ﺤﺎﻟﻪ ﻋﺩﻡ ﺘﺠﺎﻭﺯ ﻫﺫﺍ ﺍﻟﺭﻗﻡ "‪."255‬‬
‫ﺃﻤﺎ ﺍﻟﻌﻠﻡ ‪ DC‬ﻓﻬﻭ ﻴﻌﺒﺭ ﻋﻥ ﻤﺎ ﻴﺤﺩﺙ ﻓﻲ ﺃﻭل ﺃﺭﺒﻌﺔ ﺃﺒﻴﺎﺕ‪,‬ﻭﻫﺫﺍ ﻤﻌﻨﺎﻩ ﺍﻨﻪ ﺇﺫﺍ ﻜﺎﻥ ﻫﻨﺎﻙ ﺘﺠﺎﻭﺯ ﻟﻠﺭﻗﻡ ‪ 15‬ﻤﻥ ﻨﻅﺎﻤﻨﺎ ﺍﻟﻌﺸﺭﻱ ﻓﻌﻠﻡ‬
‫‪ DC=1‬ﻭﻓﻲ ﺤﺎل ﺍﻟﻌﻜﺱ ﻓﻬﻭ ﻴﺴﺎﻭﻱ ‪. 0‬‬
‫ﺍﻟﻌﻠﻡ ‪ Z=1‬ﻓﻲ ﺤﺎﻟﺔ ﻭﺍﺤﺩﻩ ﻓﻘﻁ‪.‬ﻭﻫﻲ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺠﻭﺍﺏ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺤﺴﺎﺒﻴﺔ "ﻭﺍﺤﺩ"‪ ,‬ﻭﻤﺎ ﺩﻭﻥ ﺫﻟﻙ ﻓﺎﻟﻌﻠﻡ ﻴﺒﻘﻰ ﻤﺴﺎﻭﻴﺎ ﻟﻠﺼﻔﺭ )‪. (0‬‬
‫ﺍﻷﻋﻼﻡ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﻁﺭﺡ ‪:‬‬
‫ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺍﻟﺠﻭﺍﺏ ﺭﻗﻤﺎ ﺍﻴﺠﺎﺒﻴﺎ‬
‫‪C=1‬‬
‫ﻭﺴﻠﺒﻴﺎ‬
‫‪ C=0‬ﻤﺜﻼ‬
‫ﻋﻠﻡ ‪ DC‬ﻴﺴﺎﻭﻱ ﻭﺍﺤﺩ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺃﻭل ﺃﺭﺒﻌﺔ ﺃﺒﻴﺎﺕ ﻤﻥ ﺴﺠل ‪ W‬ﺍﺼﻐﺭ ﻤﻥ ﺃﻭل ﺃﺭﺒﻌﺔ ﺒﻴﺕ ﻤﻥ ﺍﻟﺴﺠل ﺍﻟﺫﻱ ﺘﺭﻏﺏ ﻓﻲ ﻁﺭﺤﻪ‪,‬‬
‫ﻭﺒﻌﻜﺱ ﺫﻟﻙ ﻓﻬﻭ ﺼﻔﺭ‪.‬‬
‫ﺍﻟﻌﻠﻡ ‪ Z=1‬ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﻗﻴﻤﺔ ﺍﻻﺜﻨﻴﻥ ﻤﺘﺴﺎﻭﻴﺔ‪,‬ﻭﻤﺎ ﺩﻭﻥ ﺫﻟﻙ ﻓﻬﻭ ﺼﻔﺭ‪.‬‬
‫ﺃﺼﺒﺢ ﻋﻨﺩﻨﺎ ﺍﻵﻥ ﻓﻜﺭﻩ ﻋﻥ ﺍﻷﻋﻼﻡ ﻭﻭﻅﺎﺌﻔﻬﺎ ﻓﻲ ﺍﻟﺠﻤﻊ ﻭﺍﻟﻁﺭﺡ ‪,‬ﻓﺒﺎﻟﻁﺒﻊ ﻟﻬﺎ ﻭﻅﺎﺌﻑ ﺃﺨﺭﻯ ﻤﺘﻌﻠﻘﺔ ﺒﺎﻷﻭﺍﻤﺭ ﺍﻟﺘﻲ ﻟﻡ ﻨﺩﺭﺴﻬﺎ ﺒﻌﺩ‪.‬‬
‫‪9‬‬
Téléchargement