Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 131

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ: Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠΌ Ρƒ нас Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ числСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ΅ числСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Π·Π°Π΄Π°Ρ‡ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. НапримСр, Π·Π°Π΄Π°Ρ‡Π΅ с самым высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ сопоставим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ нашС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ сцСнария Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€ΠΎΠ±ΠΎΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ Π·Π°Π΄Π°Ρ‡. Π’Π°ΠΊ ΠΊΠ°ΠΊ наш Ρ€ΠΎΠ±ΠΎΡ‚ дСзактивируСтся, ΠΊΠΎΠ³Π΄Π° приблиТаСтся ΠΊ ΠΌΠΈΠ½Π΅, ΠΌΡ‹ присваиваСм Π·Π°Π΄Π°Ρ‡Π΅ обнаруТСния ΠΌΠΈΠ½ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 1. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ самый высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ€Π°Π²Π½Ρ‹ΠΉ 2 присвоим ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ объСзда ΠΌΠΈΠ½Ρ‹. Π—Π°Π΄Π°Ρ‡Π΅ ATD-прСобразования присвоим ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 3, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° обСспСчиваСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ близости стСнок Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°. Π—Π°Π΄Π°Ρ‡Π΅ Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° присвоим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 4, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ столкновСния со стСнками. НаконСц, Π·Π°Π΄Π°Ρ‡Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π–ΠšΠ” Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 5. Π­Ρ‚ΠΎ самый Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ для Π·Π°Π΄Π°Ρ‡, рассмотрСнных ΠΊ настоящСму Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ; ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ всСх ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π·Π°Π΄Π°Ρ‡ Π΅Ρ‰Π΅ Π½ΠΈΠΆΠ΅. ΠžΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. Они Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… этапах Ρ€Π°Π±ΠΎΡ‚Ρ‹ нашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π° Π·Π°Ρ‚Π΅ΠΌ входят Π² состояниС бСздСйствия. ΠœΡ‹, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΈΠΌ самый Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, давая ΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ 6 (инициализация Π–ΠšΠ”), 7 (инициализация ATD), ΠΈ 8 (инициализация ШИМ).

ЀрагмСнтация Π·Π°Π΄Π°Ρ‡. Как ΠΌΡ‹ ΡƒΠΆΠ΅ выяснили Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ части ΠΈΠ»ΠΈ Ρ„Π°Π·Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠžΠ‘Π Π’ с нСсколькими Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅Π΄ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ способна Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ связанныС с Π½Π΅ΠΉ дСйствия ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°. Π§Π°Ρ‰Π΅ всСго Π·Π°Π΄Π°Ρ‡Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ дСйствий ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ приостановлСна Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. Π€Π°ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π·Π°Π΄Π°Ρ‡ΠΈ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ Π² состояниС готовности Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ процСссорноС врСмя Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ пСрСдаСтся Π΅ΠΉ. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΏΡ€Π΅Ρ€Π²Π°Π² Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для этого мСстС. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ записываСм контСкст ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² памяти. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° Ρ‚Ρ€ΠΈ части. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Ρ‡Π° становится Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ, процСссор выполняСт ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠΎΠ΄Π° Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ прСрывания (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π²Π°ΠΌΠΈ, ΠΊΠ°ΠΊ программистом). Когда ΠΊΠΎΠ΄ достигаСт этой ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ прСрывания, контСкст сохраняСтся Π² TCB, ΠΈ процСссор ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π—Π°Ρ‚Π΅ΠΌ выполняСтся Π·Π°Π΄Π°Ρ‡Π° с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. Когда прСрванная Π·Π°Π΄Π°Ρ‡Π° снова ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ для своСго выполнСния Π΄Ρ€Π°Π³ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ процСссорноС врСмя, ΠΎΠ½Π° начинаСтся с Ρ‚ΠΎΠ³ΠΎ мСста, Π³Π΄Π΅ Π±Ρ‹Π»Π° ΠΏΡ€Π΅Ρ€Π²Π°Π½Π° ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части своСго ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ процСсс продолТаСтся, ΠΏΠΎΠΊΠ° Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ всС прСдусмотрСнныС дСйствия.

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΡΡ‚ΡŒ ИК Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² (рис. 8.16) выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π°Π·Π²Π°Π½Π½ΡƒΡŽ process_turn, которая ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ систСму ATD ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° 68HC12, начиная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ сигналы ΠΎΡ‚ пяти Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² (с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΎΡ‚ 0 Π΄ΠΎ 4), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ ATD ΠΎΡ‚ 7 Π΄ΠΎ 3, соотвСтствСнно. Π’Ρ‹Ρ…ΠΎΠ΄ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° Π₯ΠΎΠ»Π»Π°, установлСнного Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части Ρ€ΠΎΠ±ΠΎΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°Π³Π½ΠΈΡ‚Π½Ρ‹Π΅ ΠΌΠΈΠ½Ρ‹, связан с ΠΊΠ°Π½Π°Π»ΠΎΠΌ 2 ATD. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ слСдуСт ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ прСрывания.

Рис. 8.16. Π ΠΎΠ±ΠΎΡ‚ c ΠΏΡΡ‚ΡŒΡŽ ИК Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ Π₯ΠΎΠ»Π»Π°. ИК-Π΄Π°Ρ‚Ρ‡ΠΈΠΊ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ присутствиС стСнок Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π°, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ Π₯ΠΎΠ»Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ присутствиС ΠΌΠ°Π³Π½ΠΈΡ‚Π½Ρ‹Ρ… ΠΌΠΈΠ½.


Код process_turn, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ процСсс ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅.

void process_turn() {

 /*Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ систСмы ATD */

 ATDCTL2 = 0x80; /*установка Ρ„Π»Π°Π³Π° ADPU, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ Π½Π° систСму ATD*/

 ATDCTL3 = 0x00; /*ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Β«Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅Β» систСмы */

 ATDCTL4 = 0x7F; /*Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ частоты Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° P Π΄ΠΎ 125 ΠΊΠ“Ρ† */

                 /*Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°, врСмя прСобразования = 32 ATD Ρ†ΠΈΠΊΠ»Π° */

 /* 1 Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 256 мкс */

 for (i=0; i<67; i++) { /* ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ 100 мкс ΠΏΡ€ΠΈ 8 ΠœΠ“Ρ† ECLK*/

  ;

 }

 /*Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ATD-прСобразования */

 ATDCTL5 = 0x50; /*ΠΠ°Ρ‡Π°Ρ‚ΡŒ многоканальноС ATD-ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ */

 /* для 8 ΠΊΠ°Π½Π°Π»ΠΎΠ² */

 while((ATDSTAT & 0x8000) == 0) { /* ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ прСобразования ΠΏΠΎ*/

  /*ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Ρ„Π»Π°Π³Π° SCF */

  ;

 }

 /* ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ATD-прСобразования*/

 /* Π² глобальном массивС char*/

 sens[0] = ADR7H; /*ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

 sens[1] = ADR6H; /*срСдний Π»Π΅Π²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

 sens[2] = ADR5H; /*Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

 sens[3] = ADR4H; /*срСдний ΠΏΡ€Π°Π²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

 sens[4] = ADR3H; /*ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

 sens[5] = ADR2H; /*Π”Π°Ρ‚Ρ‡ΠΈΠΊ Π₯ΠΎΠ»Π»Π°*/

 /*Π°Π½Π°Π»ΠΈΠ· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠΎΡ€ΠΎΠ³ΠΈ для*/

 /*Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° Π₯ΠΎΠ»Π»Π°(hes_threshold) ΠΈ для ИК-Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² (opto_threshold)ΡΠ²Π»ΡΡŽΡ‚ΡΡ*/

 /* Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ*/

 if (sens[5] < hes_threshold) { /*сигнал с Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° Π₯ΠΎΠ»Π»Π°, объСзд*/

  pwm_motors(back_up); /* Ρ€ΠΎΠ±ΠΎΡ‚ Π΄Π°Π΅Ρ‚ Π·Π°Π΄Π½ΠΈΠΉ Ρ…ΠΎΠ΄*/

  /*дСйствия, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ послС Ρ‚ΠΎΠ³ΠΎ */

  /* ΠΊΠ°ΠΊ Ρ€ΠΎΠ±ΠΎΡ‚ ΠΎΡ‚ΡŠΠ΅Ρ…Π°Π» Π½Π°Π·Π°Π΄ */

  if(sens[0] > opto_threshold) pwm_motors(right_turn);

  else pwm_motors(left_turn);

  for(i=0; i<0xFFFF; i++) { /*Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ двигатСля */

   for(j=0; j<15; j++){

    ;

   }

  }

 }

 /*Ссли ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ Ρ‚ΡƒΠΏΠΈΠΊ - Π·Π°Π΄Π½ΠΈΠΉ Ρ…ΠΎΠ΄*/

 else if((sens[2]>opto_threshold) && (sens[0]>opto_threshold) && (sens[4]>opto_threshold)) {

  pwm_motors(back_up);

 }

 /*Ссли стСнки спСрСди ΠΈ слСва, */

 /*ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Ρ€ΠΎΠ±ΠΎΡ‚Π° Π½Π°ΠΏΡ€Π°Π²ΠΎ */

 else if((sens[0]>opto_threshold) && (sens[2]>opto_threshold)) {

  pwm_motors(right_turn);

 }

 /*Ссли стСнки спСрСди ΠΈ справа, */

 /*ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Ρ€ΠΎΠ±ΠΎΡ‚Π° Π½Π°Π»Π΅Π²ΠΎ */

 else if((sens[2]>opto_threshold) && (sens[4]>opto_threshold)) {

  pwm_motors(left_turn);

 }

 /*Ссли стСнка ΠΏΠ΅Ρ€Π΅Π΄ срСдним ΠΏΡ€Π°Π²Ρ‹ΠΌ */

 /* Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π°ΠΏΡ€Π°Π²ΠΎ */

 else if (sens[1] > opto_threshold) {

  pwm_motors(half_right);

 }

 /*Ссли стСнка ΠΏΠ΅Ρ€Π΅Π΄ срСдним Π»Π΅Π²Ρ‹ΠΌ */

 /* Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π°Π»Π΅Π²ΠΎ */

 else if (sens[3]>opto_threshold) {

  pwm_motors(half_left);

 }

 /*Ссли сигналов ΠΎΡ‚ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π΅Ρ‚, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π΅Π΄*/

 else {

  pwm_motors(forward);

 }

}

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ Π½Π° Ρ‚Ρ€ΠΈ части ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠžΠ‘Π Π’ Π±Π΅Π· прСрывания, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ прСрывания послС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ATD ΠΈ послС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ… с ATD. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссором. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти измСнСния, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ввСсти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π½Π°Π·ΠΎΠ²Π΅ΠΌ code_section. Π­Ρ‚Π° пСрСмСнная ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, какая ΠΈΠ· Ρ‚Ρ€Π΅Ρ… частСй ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ активности Π·Π°Π΄Π°Ρ‡ΠΈ.

int process_turn(int code_section) {

 switch(code_section) {

 case 0:

  /*Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ систСмы ATD */

  ATDCTL2 = 0x80; /*Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ATD */

  ATDCTL3 = 0x00; /*ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ систСмы */

  ATDCTL4 = 0x7F; /*Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ частоты Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° P Π΄ΠΎ 125 ΠΊΠ“Ρ† */

  /*Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°, врСмя прСобразования = 32 ATD Ρ†ΠΈΠΊΠ»Π° */

  /* 1 Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 256 мкс */

  for (i=0; i<67; i++) {

   /* ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ 100 мкс ΠΏΡ€ΠΈ 8 ΠœΠ“Ρ† ECLK*/

   ;

  }

  code_section = 1; /*update code_section variable */

  break;

 case 1:

  /*Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ATD-прСобразования */

  ATDCTL5 = 0x50; /*ΠΠ°Ρ‡Π°Ρ‚ΡŒ многоканальноС ATD-ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅*/

  /* для 8 ΠΊΠ°Π½Π°Π»ΠΎΠ² */

  while ((ATDSTAT & 0x8000) == 0) {

   /* ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ прСобразования ΠΏΠΎ*/

   /*ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Ρ„Π»Π°Π³Π° SCF */

   ;

  }

  /* ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ATD-прСобразования*/

  /* Π² глобальном массивС char */

  sens[0] = ADR7H; /*ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

  sens[1] = ADR6H; /*срСдний Π»Π΅Π²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

  sens[2] = ADR5H; /*Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

  sens[3] = ADR4H; /*срСдний ΠΏΡ€Π°Π²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

  sens[4] = ADR3H; /*ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ */

  sens[5] = ADR2H; /*Π”Π°Ρ‚Ρ‡ΠΈΠΊ Π₯ΠΎΠ»Π»Π° */

  code_section = 2; /*update code_section variable */

  break;

 case 2:

  /*Π°Π½Π°Π»ΠΈΠ· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠΎΡ€ΠΎΠ³ΠΈ для*/