ΠΠ΅ΡΠ΅Π΄ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π½Π°Π΄ΠΎ Π±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠ»ΠΎΡ
ΡΠΎΡ ΠΏΠ»ΠΎΡΠ½ΠΈΠΊ ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π·Π½Π°Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΎΠΏΠΎΡ. ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. Π£ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠ·ΡΠΊ β ΠΌΠ°ΠΊΡΠΎΠ°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΆΠΈΠ·Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΡΠΏΡΠΎΡΠ°Π΅ΡΡΡ Π² ΡΠ°Π·Ρ. ΠΠ΅Π΄Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΈ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΡΠΈΠΏΠ° MOV Counter,Default_Count Π²ΠΌΠ΅ΡΡΠΎ MOV R17,R16 ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΡΡΠΎ Ρ Π½Π°Ρ R17 Π·Π½Π°ΡΠΈΡ Counter, Π° R16 ΡΡΠΎ Default_Count. ΠΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ³ΠΎ ΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Π»ΠΈΠ±ΠΎ Π·Π½Π°ΠΊΠΎΠΌ Β«;Β«, Π»ΠΈΠ±ΠΎ Π΄Π²ΠΎΠΉΠ½ΡΠΌΠΈ ΡΠ»Π΅ΡΠ°ΠΌΠΈ Β«//Β«, Π° Π΅ΡΠ΅ AVR Studio ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ CΠΈΡΠ½ΡΡ Π½ΠΎΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², Π³Π΄Π΅ ΠΊΠΎΠΌΠ΅Π½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ Β«ΠΊΠΎΠ»ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ²ΠΎΠ»ΠΎΠΊΠΎΠΉΒ» /* ΠΊΠΎΠΌΠΌΠ΅Π½Ρ */.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ .include ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π»ΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Π§ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·Π±ΠΈΡΡ Π±ΠΎΠ»ΡΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊ Π½Π° ΠΊΡΡΡ ΠΌΠ΅Π»ΠΊΠΈΡ
, ΡΡΠΎΠ±Ρ Π½Π΅ Π·Π°Π³ΡΠΎΠΌΠΎΠΆΠ΄Π°ΡΡ ΠΈ Π½Π΅ ΠΌΠΎΡΠ°ΡΡ ΡΡΠ΄Π° ΡΡΠ΄Π° ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΠΏΠΎΡΡΡΠ½ΠΊΡ ΠΊΠΎΠ΄Π°. Π‘ΡΠΈΡΠ°ΠΉ ΠΊΡΠ΄Π° ΡΡ Π²ΠΎΡΠΊΠ½ΡΠ»
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ .def ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΠΊ Π»ΡΠ±ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ΅ΡΡΡΡΠΎΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° β ΠΏΠΎΡΡ ΠΈΠ»ΠΈ ΡΠ΅Π³ΠΈΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΄Π΅Π»Π°Π» Ρ ΡΡΠ΅ΡΡΠΈΠΊ, Π° ΡΡΠΈΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ R0, Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°-ΠΏΠΎΠΌΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Ρ Π·Π°ΡΠ·Π°Π» R16. Π§ΡΠΎΠ±Ρ Π½Π΅ Π·Π°ΠΏΡΡΠ°ΡΡΡΡ ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅ Ρ ΠΌΠ΅Π½Ρ Π·Π°Π΄ΡΠΌΠ°Π½ΠΎ Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Ρ ΠΈΠΌ ΡΠ΅ΡΠ΅Π· .def ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°.
1 2 | .def schetchik = R0 .def pomoika = R16 |
.def schetchik = R0 .def pomoika = R16
Π ΡΠ΅ΠΏΠ΅ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠ³Ρ ΡΠΌΠ΅Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ R0 Π½Π΅ΠΎΡΠΈΡΠ°Π»ΡΠ½ΡΡ ΠΊΠ»ΠΈΡΠΊΡ schetchik
ΠΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Π²Π°ΡΡ ΠΊΡΡΡ ΠΈΠΌΠ΅Π½ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π½Π° Π²ΡΠ΅ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΡΠ½ΠΎ ΠΎΡΠΊΠ»ΠΈΠΊΠ°ΡΡΡΡ.
Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ .undef ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π°ΠΏΡΠΎΡΡ Π·Π°Π±ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠΎ Π»ΠΈΠ±ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΎ. ΠΠ½ΠΎΠ³Π΄Π° Π±ΡΠ²Π°Π΅Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠΌΡ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΡΠ°Π·Π½ΡΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ .equ ΡΡΠΎ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠ΅ΡΠΊΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. ΠΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠΈΡΠ°ΡΡ Π΅Π΅ Π² ΠΊΠΎΠ΄Π΅, Π½ΠΎ Π²Π΄ΡΡΠ³ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π²ΡΠ±ΡΠ°Π½Π° Π½Π΅Π²Π΅ΡΠ½ΠΎ, Π° Π·Π½Π°ΡΠΈΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΡΠ΅ΡΡΡΠΈΡΡ ΠΈ Π²Π΅Π·Π΄Π΅ ΠΏΡΠ°Π²ΠΈΡΡ, Π° Π΅ΡΠ»ΠΈ Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π°Π±ΡΠ΄Π΅ΡΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΠΊΡΡ ΠΌΠ°Ρ
ΡΠΎΠ²ΡΡ Π±Π°Π³Ρ, ΡΡΠΎ Π·Π°Π΄ΠΎΠ»Π±Π°Π΅ΡΡΡΡ ΠΏΠΎΡΠΎΠΌ Π΅Π΅ Π²ΡΠ»Π°Π²Π»ΠΈΠ²Π°ΡΡ. Π’Π°ΠΊ ΡΡΠΎ Π½Π°ΡΠΈΠ³, Π²ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΏΠΈΡΠ°ΡΡ Π½Π°Π΄ΠΎ ΡΠ΅ΡΠ΅Π·
.equ! ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΆΠ΅ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π½Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, Π° ΡΠ΅Π»ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠΎΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ, Π° Π² ΠΊΠΎΠ΄ ΠΏΠΎΠΉΠ΄Π΅Ρ ΡΠΆΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°Π΄ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅. Π‘ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΡΠΎΠ±Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ, Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ, Π° Π·Π½Π°ΡΠΈΡ 1/2 = 0, Π° 5/2 = 2
1 2 3 | .equ Time = 5 .equ AcΡelerate = 4 .equ Half_Speed = (Accelerate*Time)/2 |
.equ Time = 5 .equ AcΡelerate = 4 .equ Half_Speed = (Accelerate*Time)/2
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» Π² ΠΏΠΎΡΡΠ΅ ΠΏΡΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° AVR ΠΏΠ°ΠΌΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΡΠ°Π·Π±ΠΈΡΠ° Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ β Π΄Π°Π½Π½ΡΠ΅ (ΠΠΠ£), ΠΊΠΎΠ΄ (FLASH), EEPROM
Π§ΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ.
.CSEG ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°, ΠΎΠ½ ΠΆΠ΅ ΡΠ»Π΅Ρ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΈΠ΄Π΅Ρ ΡΠ΅Π»ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΠΌΠΌΠ°Π½Π΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. Π’ΡΡ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡΠ½ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΈΠ±ΡΠ΄Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ Ρ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΏΠΎΡΡΠΈΡΠ°Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΡΠ°ΡΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°.
Π ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π° ΡΠΌΠ΅ΡΡΠ½Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ:
ΠΠ΄ΡΠ΅ΡΠ½Π°Ρ ΠΌΠ΅ΡΠΊΠ°. ΠΡΠ±ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π½Π΅ Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅Π΅ΡΡ Ρ ΡΠΈΡΡΡ, Π³Π»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ ΡΡΠΎΡΠ»ΠΎ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅.
1 2 3 | .CSEG label: LDI R16,'A' RJMP label |
.CSEG label: LDI R16,’A’ RJMP label
Π ΠΈΡΠΎΠ³Π΅, ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ label Π² ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎΠΈΡ ΡΡΠ° ΡΠ°ΠΌΠ°Ρ ΠΌΠ΅ΡΠΊΠ°, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ LDI R16,βAβ
ΠΠ΄ΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ Π΄Π°Π½Π½ΡΠ΅, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ± ΡΡΠΎΠΌ ΡΡΡΡ Π½ΠΈΠΆΠ΅.
.ORG address ΠΎΠ·Π½Π°ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Β«ΠΊΠΎΠΏΠ°ΡΡ ΠΎΡΡΡΠ΄Π° ΠΈ Π΄ΠΎ ΠΎΠ±Π΅Π΄Π°Β», Ρ.Π΅. Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ°Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | .CSEG .ORG 0x0000 RJMP Start ;ΠΏΠ΅ΡΠ΅ΠΏΡΡΠ³ΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ². Β .ORG INT0addr ; External Interrupt0 Vector Address RJMP INT0_expection Β .ORG INT1addr ; External Interrupt1 Vector Address RETI Β .ORG OC2addr ; Output Compare2 Interrupt Vector Address RJMP PWM_1 Β .ORG OVF2addr ; Overflow2 Interrupt Vector Address RETI Β .ORG ICP1addr ;Input Capture1 Interrupt Vector Address RETI Β .ORG 0Ρ 0032 ; ΠΠ°ΡΠ°Π»ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Β Start: LDI R16,0x54 ; ΠΈ ΠΏΠΎΠ½Π΅ΡΠ»Π°ΡΡ |
.CSEG .ORG 0x0000 RJMP Start ;ΠΏΠ΅ΡΠ΅ΠΏΡΡΠ³ΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ². .ORG INT0addr ; External Interrupt0 Vector Address RJMP INT0_expection .ORG INT1addr ; External Interrupt1 Vector Address RETI .ORG OC2addr ; Output Compare2 Interrupt Vector Address RJMP PWM_1 .ORG OVF2addr ; Overflow2 Interrupt Vector Address RETI .ORG ICP1addr ;Input Capture1 Interrupt Vector Address RETI .ORG 0Ρ 0032 ; ΠΠ°ΡΠ°Π»ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Start: LDI R16,0x54 ; ΠΈ ΠΏΠΎΠ½Π΅ΡΠ»Π°ΡΡ
Π‘ΡΠ°ΡΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΈΡ Π°ΡΡΡΡ Π² ΡΠ»Π΅Ρ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ²
.db ΠΌΠ°ΡΡΠΈΠ² Π±Π°ΠΉΡΠΎΠ².
.dw ΠΌΠ°ΡΡΠΈΠ² ΡΠ»ΠΎΠ² β Π΄Π²Π° Π±Π°ΠΉΡΠ°.
.dd ΠΌΠ°ΡΡΠΈΠ² Π΄Π²ΠΎΠΉΠ½ΡΡ
ΡΠ»ΠΎΠ² β ΡΠ΅ΡΡΡΠ΅ Π±Π°ΠΉΡΠ°
.dq ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ
ΡΠ»ΠΎΠ² β Π²ΠΎΡΠ΅ΠΌ Π±Π°ΠΉΡ.
1 2 3 | Constant: .db 10 ; ΠΈΠ»ΠΈ 0Ρ Ah Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Message: .db "ΠΡΠΈΠ²Π΅Ρ Π»ΡΠ½Π°ΡΠΈΠΊΠ°ΠΌ" Words: .dw 10, 11, 12 |
Constant: .db 10 ; ΠΈΠ»ΠΈ 0Ρ Ah Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Message: .db «ΠΡΠΈΠ²Π΅Ρ Π»ΡΠ½Π°ΡΠΈΠΊΠ°ΠΌ» Words: .dw 10, 11, 12
Π ΠΈΡΠΎΠ³Π΅, Π²ΠΎ ΡΠ»Π΅ΡΠ΅ Π²Π½Π°ΡΠ°Π»Π΅ Π±ΡΠ΄Π΅Ρ Π»Π΅ΠΆΠ°ΡΡ ΡΠΈΡΠ»ΠΎ 0Π, Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ±Π°ΠΉΡΠ½ΠΎ Π±ΡΠ΄ΡΡ Ρ
Π΅ΠΊΡΠΊΠΎΠ΄Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΡΠ°Π·Ρ Β«ΠΏΡΠΈΠ²Π΅Ρ Π»ΡΠ½Π°ΡΠΈΠΊΠ°ΠΌΒ», Π° Π΄Π°Π»ΡΡΠ΅ 000A, 000B, 000Π‘.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΈ ΡΠΈΡΠ»Π°, Ρ
ΠΎΡΡ ΡΠ°ΠΌΠΈ ΠΈ Π½Π΅Π²Π΅Π»ΠΈΠΊΠΈ, Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠΎ Π΄Π²Π° Π±Π°ΠΉΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΊΠ°ΠΊ .dw.
.DSEG ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ , ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²ΠΊΠ°. Π’Π΅ ΡΠ°ΠΌΡΠ΅ ΠΆΠ°Π»ΠΊΠΈΠ΅ ΡΡΠΈΡΠ°Π½Π½ΡΠ΅ Π±Π°ΠΉΡΡ. Π‘ΡΠ΄Π° Π½Π΅ Π·Π°Π·ΠΎΡΠ½ΠΎ ΠΏΠΈΡ Π°ΡΡ ΠΏΠ΅ΡΠΌΠ΅Π½Π½ΡΠ΅, Π΄Π΅Π»Π°ΡΡ ΡΡΡ Π±ΡΡΡΠ΅ΡΠ°, ΡΡΡ ΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ΅ΠΊ.
Π’ΡΡ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ .BYTE ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΡ Π½Π° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ.
1 2 | var1: .BYTE 1 table: .BYTE 10 |
var1: .BYTE 1 table: .BYTE 10
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ var1 ΡΠΎΡΡΠΎΡΡΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ°.
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΈΠ· 10 Π±Π°ΠΉΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ table ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ°Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π°ΠΉΡ ΠΈΠ· ΡΠ΅ΠΏΠΎΡΠΊΠΈ. ΠΠ΄ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
.EESEG ΡΠ΅Π³ΠΌΠ΅Π½Ρ EEPROM, ΡΠ½Π΅ΡΠ³ΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ, Π° ΠΏΡΠΈ ΠΏΡΠΎΠΏΠ°ΠΆΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π°ΡΡΡΡ.
Π’ΡΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΡΠ΅ ΠΆΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΡΡΠΎ ΠΈ Π² flash β db, dw, dd, dq.
MACRO β ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΌΠ°ΠΊΡΠΎΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ. ΠΠΎΡ ΡΠΆ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΡΠΌΠΎΠ²Π°Ρ Π²Π΅ΡΡ. ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠ΅Π»ΡΠΌ ΠΊΡΡΠΊΠ°ΠΌ ΠΊΠΎΠ΄Π°, ΠΌΠ°Π»ΠΎ ΡΠΎΠ³ΠΎ, Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ.
1 2 3 4 | .MACRO SUBI16 ; Start macro definition subi @1,low(@0) ; Subtract low byte sbci @2,high(@0) ; Subtract high byte .ENDM ; End macro definition |
.MACRO SUBI16 ; Start macro definition subi @1,low(@0) ; Subtract low byte sbci @2,high(@0) ; Subtract high byte .ENDM ; End macro definition
@0, @1, @2 ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠ°, ΠΎΠ½ΠΈ Π½ΡΠΌΠ΅ΡΡΡΡΡΡ ΡΡΠΏΠΎ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ. Π ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π² ΠΊΠΎΠ΄.
ΠΡΠ·ΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°:
ΠΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ°Π²ΡΡΡΡ Π² ΠΊΠΎΠ΄.
ΠΠ°ΠΊΡΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅Π±Π΅ ΡΠ΄ΠΎΠ±Π½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° Π²ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΆΠΈΠ·Π½ΠΈ, ΠΏΠΎ ΡΡΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ ΡΠ·ΡΠΊ. ΠΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ ΡΡΠΎ ΡΡΠΏΠΎ ΠΊΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ ΠΌΠ°ΠΊΡΠΎΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ, ΡΠΎ Π΅Π³ΠΎ Π»ΡΡΡΠ΅ ΠΎΡΠΎΡΠΌΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ β Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΠΊΠ°Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΌΠ΅ΡΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ, Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠΎΠΊ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅ΠΉ.
ΠΠ°ΠΊΡΠΎΠ°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΡΡΠΎ ΠΌΠΎΡΠ½Π΅ΠΉΡΠ°Ρ ΡΡΡΠΊΠ°. ΠΠΎ Ρ ΠΎΠ΄Ρ ΠΏΡΠ΅ΡΡ Ρ Π±ΡΠ΄Ρ Π²Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ.
easyelectronics.ru
ΠΠ»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π°Π·ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² AVR Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ AVR Studio Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΡ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ. Π Π½ΠΎΠ²Π΅ΠΉΡΠΈΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ AVR ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° MEGA Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²ΡΡ ΡΠΎΡΠ΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΈ ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΊΡ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΡΠΏΠΎΡΡΠ΅Π±ΠΈΠΌΡΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΠΆΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ.
Β
Π Π΅Π³ΠΈΡΡΡΡ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°:
CBI — ΡΠ±ΡΠΎΡ Π±ΠΈΡΠ° ΠΏΠΎΡΡΠ°
SBI — ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π»ΠΎΠ³. «1» Π±ΠΈΡΠ° ΠΏΠΎΡΡΠ°
IN -Π·Π°Π³ΡΡΠ·ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΏΠΎΡΡΠ° Π² ΡΠ΅Π³ΠΈΡΡΡ
OUT — Π·Π°Π³ΡΡΠ·ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡ
SBIC — ΠΏΡΠΎΠΏΡΡΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΅ΡΠ»ΠΈ Π±ΠΈΡ ΠΏΠΎΡΡΠ° ΡΠ±ΡΠΎΡΠ΅Π½
SBIS —Β ΠΏΡΠΎΠΏΡΡΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΅ΡΠ»ΠΈ Π±ΠΈΡ ΠΏΠΎΡΡΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
Β
ΠΠ΅ΡΠ²Π»Π΅Π½ΠΈΠ΅:
CALL -Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ²
RCALL — ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ²
RET — Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
RETI — Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ, ΡΠ»Π°Π³ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ I «ΠΆΠ΅ΡΡΠΊΠΎ» ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ
JMP — Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄
RJMP — ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄
BRBC — ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄, Π΅ΡΠ»ΠΈ Π±ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° SREG ΡΠ±ΡΠΎΡΠ΅Π½
BRBS — ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄, Π΅ΡΠ»ΠΈ Π±ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° SREG ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
SBRC — ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΅ΡΠ»ΠΈ Π±ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΠ±ΡΠΎΡΠ΅Π½
SBRS — ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΅ΡΠ»ΠΈ Π±ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
Β
Π Π°Π±ΠΎΡΠ° ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ:
PUSH — ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡ Π² ΡΡΠ΅ΠΊΠ΅
POP — ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΈΠ· ΡΡΠ΅ΠΊΠ°
Β
ΠΠ°ΠΆΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
NOP — ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ
CLI — Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ
SEI — ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ
CP — ΡΡΠ°Π²Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π²ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ
CPI — ΡΡΠ°Π²Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ
LDI — Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ
CLR — ΠΎΡΠΈΡΡΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ
Β
ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄:
ldiΒ Β Β Β Β R16, 0b00001001 ;Β Β Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ (R16 - R32) outΒ Β Β PORTD, R16Β Β Β Β Β Β Β Β ;Β Β Π·Π°ΠΏΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ΠΏΠΎΡΡ D
inΒ Β Β Β Β Β R25, PORTB Β Β Β Β Β Β Β Β ; ΡΡΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Port B Π² ΡΠ΅Π³ΠΈΡΡΡ R25 cpiΒ Β Β Β R25, 4Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; ΡΡΠ°Π²Π½ΠΈΡΡ ΡΡΠΈΡΠ°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ =4 breqΒ Β exitΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° ΠΌΠ΅ΡΠΊΡ Π΅ΡΠ»ΠΈ Π±ΡΠ»ΠΎ ΡΠ°Π²Π½ΠΎ ... exit:Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; ΠΌΠ΅ΡΠΊΠ° nopΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; ΠΏΡΡΡΠΎΠΉ ΡΠ°ΠΊΡ
sbiΒ Β Β Β Β Β PORTD, PD4Β Β Β Β Β ; Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² 4-ΠΉ Π±ΠΈΡ ΠΏΠΎΡΡΠ° D Π»ΠΎΠ³. "1" rcallΒ Β Β Β Β my_delayΒ Β Β Β Β Β Β Β Β Β Β ; Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ cbiΒ Β Β Β Β Β PORTD, PD4 Β Β Β ; ΡΠ±ΡΠΎΡ 4-Π³ΠΎ Π±ΠΈΡΠ° ΠΏΠΎΡΡΠ° D ... my_delay:Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ (4 ΡΠ°ΠΊΡΠ°) nopΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; Ρ ΠΎΠ»ΠΎΡΡΠΎΠΉ ΡΠ°ΠΊΡ nop nop nop nop ret Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (3 ΡΠ°ΠΊΡΠ°) ; Π²ΡΠ·ΠΎΠ² ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ my_delay Π·Π°ΠΉΠΌΡΡ 4+ 5+3 = 12 ΡΠ°ΠΊΡΠΎΠ²
Β
Π Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΠΆΠΎΠ½Π° ΠΠΎΡΡΠΎΠ½Π° ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² AVR Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ².Β
Β
radioded.ru
Π’Π°ΠΊ Π²ΠΎΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ°ΠΊΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ. ΠΠ°ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡ β Β«Π‘Π»ΡΡΠ°ΠΉ, Π½Ρ ΠΊΠΎΡΠΎΡΠ΅ ΡΠ°ΠΊΠΎΠ΅ Π΄Π΅Π»ΠΎ β Ρ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ Π΄ΠΎΠΌΠ° Π·Π°Π±ΡΠ», ΡΠ°Π·Π΄Π΅Π»ΠΈ 56983 Π½Π° 2 ΠΈ ΡΠΊΠ°ΠΆΠΈ Π‘ΡΠΈΠ²Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΎΡΠΆΠ°Π»ΡΡ Π½Π° ΠΊΡΠ»Π°ΠΊΠ°Ρ Β» ΠΈ ΠΠ°ΡΡ Π½Π° ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ΅ ΡΡΠΈΡΠ°Π΅Ρ ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡ Π‘ΡΠΈΠ²Ρ ΠΏΠΎ-Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ » ΠΡΠΎΠΆΠΌΠΈΡΡ Π½Π° ΠΊΡΠ»Π°ΠΊΠ°Ρ 28491 ΡΠ°Π·» ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«ΠΠΠ ΠΠΠ’ΠΠΠΒ» β Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΠ°ΡΠΈ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π‘ΡΠΈΠ²Π°.
ΠΡΡΡ Π΄ΡΡΠ³Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ β ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ ΠΠ°ΡΠ΅ Β«Π‘ΠΊΠ°ΠΆΠΈ Π‘ΡΠΈΠ²Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΎΡΠΆΠ°Π»ΡΡ 28491 ΡΠ°Π·Β» ΠΈ ΠΠ°ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΠ°ΡΠΈ ΡΠ»ΠΎΠ²Π° Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ. ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΠΠΠ ΠΠ’ΠΠ
ΠΡΡ ΠΏΡΠΎΡΡΠΎ β Π΅ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΈ Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ β ΡΡΠΎ ΠΠ°ΡΠ΅ ΠΏΡΡΠΌΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π‘ΡΠΈΠ²Ρ β ΠΠ°ΡΡ ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΠ°ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π³Π»ΠΈΡ. Π ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° β ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΠ°ΡΠΈ β ΠΈ ΠΠ°ΡΡ ΡΠ½Π°ΡΠ°Π»Π° Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ, ΡΡΠΎ ΠΡ Π΅ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ, Π° ΠΏΠΎΡΠΎΠΌ ΡΠΆΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π³ΠΎΠ²ΠΎΡΠΈΡ Π‘ΡΠΈΠ²Ρ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΌΡΡΠ°ΡΡ Π°Π½Π³Π»ΠΈΡΠ°Π½ΠΈΠ½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ! ΠΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΡΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π½Π°ΡΠΈΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠΎΠΌ ΠΠ°ΡΠ΅ΠΉ. ΠΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ β ΠΠ°ΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΠ°Ρ ΡΠ»ΡΡΠ°Π΅ΡΡΡ Π±Π΅ΡΠΏΡΠ΅ΠΊΠΎΡΠ»ΠΎΠ²Π½ΠΎ β ΡΡΠΎ Π΅ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΠΎ ΠΎΠ½ ΠΈ Π΄Π΅Π»Π°Π΅Ρ. ΠΠ°ΡΠΈΠ½ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΡ Π·Π½Π°ΠΊΠΎΠ² β Π΅ΡΠ»ΠΈ Π²Ρ Π³Π»ΡΠ½Π΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΎΡΠΆΠΈΠΌΠ°Π½ΠΈΡΠΌΠΈ ΡΠΎ 56983 \ 2 = 28491.5 β Π½ΠΎ Ρ ΠΠ°ΡΠΈ Π²ΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΎΠΉ ΠΎΠ±ΡΡΠ±Π°Π΅ΡΡΡ β ΠΈ ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ β ΠΏΡΠΈΡΡΠΌ Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΡΠ°ΠΌ Π±ΡΠ΄Π΅Ρ 28491.000001 ΠΈΠ»ΠΈ ΡΠ°ΠΌ Π±ΡΠ΄Π΅Ρ 28491.9999999 β Π΄Π»Ρ ΠΠ°ΡΠΈ ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠ³ Π±ΡΠ΄Π΅Ρ 28491 Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ . ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΎΠΊΡΡΠ³Π»ΡΠ΅ΡΡΡ. ΠΡΡ Π²Π°ΠΆΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΎ ΠΠ°ΡΡ. ΠΠ°ΡΡ ΠΆΠ΅ΡΡΠΎΠΊ β Π΅ΠΌΡ ΠΏΠΎΡΠΈΠ³ Π½Π° ΡΠΎ, ΡΡΠΎ Π‘ΡΠΈΠ² Π·Π°ΡΡΠ°Ρ Π°Π΅ΡΡΡ ΠΎΡΠΆΠΈΠΌΠ°ΡΡΡΡ Π΄Π²Π°Π΄ΡΠ°ΡΡ Π²ΠΎΡΠ΅ΠΌΡ ΡΡΡΡΡ ΡΠ°Π·. ΠΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ β ΠΠ°ΡΡ ΠΏΠ΅ΡΠ΅Π²ΡΠ». ΠΡΠΈΡΡΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π²ΡΠ» β Π½ΠΎ ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΠ» ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΡ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ. Π’Π°ΠΊ ΡΡΠΎ Π΅ΡΠ»ΠΈ Π‘ΡΠΈΠ² ΠΏΠΎΠΌΡΡΡ Π½Π° Π΄Π²Π°Π΄ΡΠ°ΡΡ ΡΡΠΈ ΡΡΡΡΡΠΈ ΠΏΡΡΡΡΠΎΡ ΡΡΠΈΠ½Π°Π΄ΡΠ°ΡΠΎΠΌ ΠΎΡΠΆΠΈΠΌΠ°Π½ΠΈΠΈ β ΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΠ°ΡΠ° Π²ΠΈΠ½Π°.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠΎ ΠΏΠΎΠΊΠ° ΡΡΠΎ Π²ΡΡ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΊΠΎΠΏΠ°ΡΡ Π³Π»ΡΠ±ΠΆΠ΅ β ΠΏΠΎΠΊΠ° ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ. ΠΡΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ ΠΊ ΡΠ΅ΠΌΡ, ΠΊΡΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠ°ΠΊΡΡ ΡΠΎΠ»Ρ ΠΈ ΡΠ΅ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°.
Π Π΄Π°Π»ΡΡΠ΅ ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠ°Π΅ΠΌΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ Π²ΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠΊΠΈΠ½ΡΡΡ ΠΊΠ°ΠΊ ΠΆΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ ΠΏΠΎ Π²Π·ΡΠΎΡΠ»ΠΎΠΌΡ.
habr.com
ΠΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΡΡΠ°Π²Π½ΠΈΡΡΡ Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ ΠΈ Π±ΡΡΡΡΡΠΉ ΠΊΠΎΠ΄. ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ, ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΌ Π½Π΅ Π±ΡΠ» ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π±Ρ Ρ ΠΈΡΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ½ Π½Π΅ ΡΠ²ΠΎΡΠΈΠ» Ρ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠ΄Π΅Π°Π»Π΅Π½. Π ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΈΠ»ΡΠ½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½. ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΡΡΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ AVR GCC.
ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° Π²ΡΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π»ΡΡΡΠ΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠΎ ΠΊΡ.ΠΌΠ΅ΡΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ AVR GCC. ΠΡΠ°ΠΊΡΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΈΠΌ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΡΠΈΠΌΠΎ ΡΠ»ΡΡΡΠ΅Π½ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ (ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ). ΠΠ·ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π²ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° ΡΡΠ°ΡΡΠ΅ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΈΡ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ. Π’Π°ΠΊ Π²ΠΎΡ ΡΡΡ AVR GCC ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π½Π°Π΄ΠΎ (Ρ.Π΅., ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π³ΠΈΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ). Π, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΈΠΌΠ΅Π΅ΠΌ Π»ΠΈΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ/Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° (ΡΡΠΎ ΠΏΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠΎ Π΄Π²Π° ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΡΠΈΠΊΠ»Π°). ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½Π° Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΡΡ ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Π»ΠΈΡΠ½Π΅ΠΉ ΠΏΠ°ΡΡ PUSH/POP Π΄Π°ΡΡ ΠΎΡΡΡΠΈΠΌΡΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² CPU.
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ — ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Ρ Π΄Π΅ΡΡΡΠΊΠΎΠΌ (ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ) ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². GCC ΠΌΠΎΠΆΠ΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π²Π΅ΡΡ
Π½ΠΈΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
(r18 — r31, ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. ΡΡΡ) Π² ΠΊΠΎΠ΄Π΅ Π‘ΠΈ-ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Π·Π°Π±ΠΎΡΡΡΡ ΠΎ ΠΈΡ
ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠΈ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΡΠΈΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π΅ΠΌΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ Ρ
Π²Π°ΡΠΈΠ»ΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ βΠΆΠΈΡΠ½ΡΠ΅β ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ __prologue_saves__
ΠΈ __epilogue_restores__
ΠΏΡΠΈ Π²Ρ
ΠΎΠ΄Π΅ Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π²ΡΡ
ΠΎΠ΄Π΅ ΠΈΠ· Π½Π΅Ρ. Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ Π½Π° Π²Ρ
ΠΎΠ΄Π΅ ΡΡΠ΅ΠΊΠ΅ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π½Π°
Π²ΡΡ
ΠΎΠ΄Π΅ Π²ΡΠ΅ Π½ΠΈΠΆΠ½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ (Π²ΡΠ΅, Π±Π΅Π· ΡΠ°Π·Π±ΠΎΡΠ°). ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π΄Π°ΡΡ ΠΎΡΡΡΠΈΠΌΡΠΉ ΠΎΠ²Π΅ΡΡ
Π΅Π΄. ΠΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΡΡΠΎ ΡΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΡΠΊΠ°ΠΌΠΈ,
Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΈΠ΄ΡΡΡΡ.
Π’ΡΠ΅ΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ — Π½Π΅ Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈ Π² Π‘ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΡ
ΠΎΠ΄ ΠΏΠΎ Π±ΠΈΡΠ°ΠΌ Π±Π°ΠΉΡΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° Π‘ΠΈ Π²ΡΠ»ΡΠ΅ΡΡΡ Π² ΠΌΠΎΠ½ΡΡΡΡΠΎΠ·Π½ΡΠΉ ΡΠΈΠΊΠ»,
Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π±ΠΈΡΠΎΠ²Π°Ρ ΠΌΠ°ΡΠΊΠ° ΠΈ Π΄Π΅Π»Π°Π΅ΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π ΠΏΠΎ ΡΡΠΎΠΉ ΠΌΠ°ΡΠΊΠ΅. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅ ΡΠ΄Π΅Π»Π°Π½
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ROR
. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ΅Π½.
ΠΡΠΎΠ³ΠΎ, Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΈΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ Π½Π° Π½ΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ΅ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ. Π, Π΄Π°, Π΅ΡΠ»ΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π½ΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ r0-r17, ΠΊΠΎΡΠΎΡΡΠ΅ GCC ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ (ΠΈ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΠΈΠ· Π‘ΠΈ-ΠΊΠΎΠ΄Π°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΡΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²).
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ uint16-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°. Π‘-ΠΊΠΎΠ΄ ΡΡΠΈΠ²ΠΈΠ°Π»Π΅Π½:
ISR(TIMER1_OVF_vect) {
counter16++;
}
Π‘Π³Π΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½Π΅Π΅:
ISR(TIMER1_OVF_vect) {
3a0c: 1f 92 push r1
3a0e: 0f 92 push r0
3a10: 0f b6 in r0, 0x3f ; 63
3a12: 0f 92 push r0
3a14: 11 24 eor r1, r1
3a16: 8f 93 push r24
3a18: 9f 93 push r25
counter16++;
3a1a: 80 91 3e 04 lds r24, 0x043E ; 0x80043e
3a1e: 90 91 3f 04 lds r25, 0x043F ; 0x80043f
3a22: 01 96 adiw r24, 0x01 ; 1
3a24: 90 93 3f 04 sts 0x043F, r25 ; 0x80043f
3a28: 80 93 3e 04 sts 0x043E, r24 ; 0x80043e
}
3a2c: 9f 91 pop r25
3a2e: 8f 91 pop r24
3a30: 0f 90 pop r0
3a32: 0f be out 0x3f, r0 ; 63
3a34: 0f 90 pop r0
3a36: 1f 90 pop r1
3a38: 18 95 reti
Π§ΡΠΎ ΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ:
ΠΡΠΎΠ³ΠΎ 19 ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ 46 Π±Π°ΠΉΡ. ΠΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ r0 ΠΈ r1 ΡΡΡ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ:
push r24
push r25
in r24, SREG
push r24
lds r24, counter16
lds r25, counter16+1
adiw r24, 1
sts counter16+1, r25
sts counter16, r24
pop r24
out SREG, r24
pop r25
pop r24
reti
ΠΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ 14 ΠΊΠΎΠΌΠ°Π½Π΄ (ΠΏΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΠΈΠ·Π±Π°Π²ΠΈΠ»ΠΈΡΡ ΠΎΡ 4Ρ Π»ΠΈΡΠ½ΠΈΡ push/pop ΠΊΠΎΠΌΠ°Π½Π΄, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎ 2 ΡΠ°ΠΊΡΠ°). ΠΡΠ»ΠΈ Π±Ρ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ adiw, ΠΈ SREG Π±Ρ Π½Π΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π»ΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ±ΡΠ°ΡΡ Π΅ΡΡ 4 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. GCC ΠΆΠ΅ ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π²ΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π‘ΠΈ-ΠΊΠΎΠ΄Π΅.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ — ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΠΌΠΎΠ³Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΠΈΡΠΏΠ»Π΅ΠΉΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ 128Ρ 128, Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ ATMega328P, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π½Π° ΡΠ°ΡΡΠΎΡΠ΅ 20 ΠΠΡ. ΠΠΎΠ΄ΡΠ»Ρ, Π²ΠΎΠΎΠ±ΡΠ΅ΠΌ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π½Π΅ ΡΠΎΡΠΌΠΎΠ·ΠΈΡ, Π½ΠΎ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΠΌΠ½Π΅ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ ATMega8A Π½Π° 16 ΠΠΡ. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Ρ — ΠΎΠ½Π° ΡΡΠ°ΡΠ½ΠΎ ΡΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠ΅ ΠΏΡΠΈ ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΎΡ 3.3Π (ATMega328P ΠΏΠΎ Π΄Π°ΡΠ°ΡΠΈΡΡ ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° 10 ΠΠΡ), ΡΡΠΎΠΈΡ Π² ΡΠ°Π·Π° Π² 3-4 Π΄Π΅ΡΠ΅Π²Π»Π΅, Π΄Π° ΠΈ Π΄ΠΎΡΡΠ°ΡΡ Π΅Ρ Π»Π΅Π³ΡΠ΅. ΠΠΎΠΎΠ±ΡΠ΅ΠΌ, Π·Π°Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΠΌΠ½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ZX-ΠΌΠ°Π³Π½ΠΈΡΠΎΡΠΎΠ½Π° Π΄ΠΈΡΠΏΠ»Π΅ΠΉΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΎΡ 3.3Π Π½Π° ATMega8A, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π·Π°Π½Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ, Π½ΠΎ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠΉ ΠΈ Π±ΡΡΡΡΠΎΠΉ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΎΠΉ. ΠΡΠΎΡΠΈΠ²ΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° ATMega328P Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅Π»Π° ΡΠ°Π·ΠΌΠ΅Ρ Π² ΠΏΠΎΡΡΠΈ 20ΠΠ± (ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ²Π½ΠΎ 7ΠΠ± Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ ΡΡΠΈΡΡΡ, 5Ρ 7 ΠΈ 13Ρ 15). Π¨ΡΠΈΡΡΡ Π±ΡΠ»ΠΈ ΡΠΆΠ°ΡΡ Π΄ΠΎ 3.5 ΠΠ ΠΏΡΡΡΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ°. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ΄ ΠΊΠΎΠ΄ ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ 4ΠΊΠ± ΡΠ»Π΅ΡΠ° (Ρ ΡΡΡΡΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π°Π΄ΠΎ Π΅ΡΡ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ bootloader-Π°). Π ΠΈΡΠΎΠ³Π΅, ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π²ΠΏΠΈΡ Π½ΡΡΡ Π²ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 3ΠΠ±, ΡΠΎΡ ΡΠ°Π½ΠΈΠ² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΠ΅ΠΊ ΠΈ Π»ΠΈΠ½ΠΈΠΉ, ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π·Π°Π»ΠΈΠ²ΠΊΠ° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ², ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠ΅ΠΊΡΡΠ° (ΡΡΠΈΡΡΠ°ΠΌΠΈ 5Ρ 7 ΠΈ 13Ρ 15, Π»Π°ΡΠΈΠ½ΠΈΡΠ° + ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ° + ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ). ΠΡΠΈ ΡΡΠΎΠΌ Π±ΡΠ» ΡΠ΄Π°Π»ΡΠ½ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ, ΠΏΠΈΡΠ°Π»ΠΊΠΎΠΉ ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΎΠΉ (ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ZX-ΠΌΠ°Π³Π½ΠΈΡΠΎΡΠΎΠ½Π° ΠΎΠ½ Π½Π΅ Π½ΡΠΆΠ΅Π½), Π½ΠΎ ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΏΠΎΠ»ΡΡΠΎΡΠ° ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π²Π°ΡΠΈΡ Π½Π° ΡΡΠΈ Π²Π΅ΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΡΡΡΠΈΠΌΠΎ Π²ΡΡΠ΅, Ρ.ΠΊ., ΡΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ΄Π°, ΡΠ΅ΠΌ Π±ΡΡΡΡΠ΅Π΅ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ.
Π¦Π΅Π½Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° — Π΅Π³ΠΎ Π²ΡΡΠΎΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ. Π₯ΠΎΡΡ, ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΠ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°. ΠΠΎ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄ΠΎ Π±Π΅Π·ΠΎΠ±ΡΠ°Π·ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ (ΠΏΠΎ ΠΊΡ.ΠΌΠ΅ΡΠ΅, AVRA ΠΈ GCC). ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ, Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ 32 8-Π±ΠΈΡΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π±ΡΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅, ΡΠ΅ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π΄Π΅ΡΠΆΠ°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ, Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΡΡΠΈΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ·Π³, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ 7Β±2 ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. Π, ΠΊΠΎΠ³Π΄Π° ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (Ρ.Π΅., ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²) ΡΠ°Π·Π° Π² Π΄Π²Π° Π±ΠΎΠ»ΡΡΠ΅, ΡΠΎ ΠΌΠΎΠ·Π³ Π²Π·ΡΡΠ²Π°Π΅ΡΡΡ, ΠΈ ΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΏΡΡΠ°ΡΡΡ Π΄Π΅ΡΠΆΠ°ΡΡ Π² ΡΠΌΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ ΠΈ ΠΈΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. Π Π΅ΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ.
ΠΡΠΎΡΠΎΠ΅ Π½Π΅Π²ΡΠ½ΠΎΡΠΈΠΌΠΎΠ΅ Π½Π΅ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ — ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΡΠΌ. Π’ΡΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π΄Π΅ΡΠΆΠ°ΡΡ Π² ΡΠΌΠ΅ (ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΠΏΠ°ΡΡΠΈΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ), ΡΡΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ. Π§ΡΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ±ΠΈΠ²Π°Π΅Ρ Π²ΡΡΠΊΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π°.
ΠΠ΄Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ Π΄Π²ΡΡ Π½Π΅ΡΠ΄ΠΎΠ±ΡΡΠ² Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ Π² ΡΠ°Π·Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ. ΠΠΎΠΎΠ±ΡΠ΅, ΡΡΡ ΠΌΠ½Π΅ Π²ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΡΠ·ΡΠΊ Π‘—, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Π‘ΠΈ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π»ΡΠ³ΠΊΠΈΠΌΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΌΠΈ Π²ΡΡΠ°Π²ΠΊΠ°ΠΌΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ ΠΊΠ°ΠΊ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°Π±Π°Π²Π½Π°Ρ Π±ΡΠ»Π° ΡΡΡΠΊΠ°, Π½ΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π΄Π»Ρ AVR Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΎ.
ΠΡΠΎΠ·Π½Π°Π², ΡΡΠΎ Π½Π° ΡΠΈΡΡΠΎΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠ΅ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΡΠ΅ΡΠΈΠ» ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΈΡΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ²Π΅ ΠΈ Π΄ΡΡΠΆΠΈΡ Ρ Atmel assembler/AVRA ΠΈ AVR GCC.
Π‘Π½Π°ΡΠ°Π»Π° Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΈΠΌΠ΅ΡΡΠ΅ΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ. ΠΠ°ΡΠ΅ΠΌ, ΡΠ΄Π΅Π»Π°Π» ΡΠΈΠΊΠ»Ρ ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠ°Π»Π΅Π΅ — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π³ΡΡΠΏΠΏΠ°ΠΌΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΡΠΌ ΡΠ΅Π»ΡΠΌ (Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»ΠΈΠ½ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅, ΡΠ΅ΠΌ 8 Π±ΠΈΡ). ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π°-ΡΠΎ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ Π²ΡΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°..
ΠΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π½Π° ΡΠΈΡΡΠΎΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, Π΄Π΅Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π²ΡΡΠ°Π²ΠΊΠΈ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° Π‘ΠΈ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ.
Π§ΡΠΎΠ±Ρ Π±ΡΡΡΡΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ°, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΡΠ³Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠ΅Π³ΠΎ 10 ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² — ΡΡΠΈ — Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅ΠΌΡ — Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ, Π±ΡΠ΄ΡΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, Π·Π°ΡΡΠ°Π²ΠΈΠ»Π° ΠΌΠ΅Π½Ρ Π½Π°ΡΠ°ΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ — Π΅Ρ ΠΊΠΎΠ΄ Π±ΡΠ» Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ΡΠΈΡΠ°Π΅ΠΌ.
.proc drawCircle
.args circle_x(r24), circle_y(r22), radius(r20)
.use r19 as x0, r16 as y0
.use r26 as ddF_x, r27 as ddF_y
.use r30 as x, r31 as y, r23 as f
x0 = circle_x
y0 = circle_y
f = 1 - radius
ddF_x = 1
ddF_y = radius
x = 0
y = radius
ddF_y = -ddF_y
ddF_y += ddF_y
rcall drawPixel (x: circle_x, y: circle_y+radius)
rcall drawPixel (x: x0, y: y0-y)
rcall drawPixel (x: x0+y, y: y0)
rcall drawPixel (x: x0-y, y: y0)
loop {
if s(x >= y) {
ret
}
if (!f[7]) {
y -= 1
ddF_y += 2
f += ddF_y
}
x++
ddF_x += 2
f += ddF_x
rcall drawPixel(x: x0 + x, y: y0 + y)
rcall drawPixel(x: x0 + x, y: y0 - y)
rcall drawPixel(x: x0 - x, y: y0 - y)
rcall drawPixel(x: x0 - x, y: y0 + y)
rcall drawPixel(x: x0 + y, y: y0 + x)
rcall drawPixel(x: x0 + y, y: y0 - x)
rcall drawPixel(x: x0 - y, y: y0 + x)
rcall drawPixel(x: x0 - y, y: y0 - x)
}
.endproc
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ .proc
. ΠΠΌΡ ΠΏΡΠΎΠ΄Π΅Π΄ΡΡΡ ΡΡΠ°Π½Π΅Ρ ΠΌΠ΅ΡΠΊΠΎΠΉ Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ°ΡΠ΅ΠΌ ΠΈΠ΄ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ .args
— ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΈ ΡΠ°Π΄ΠΈΡΡΠ° ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ. ΠΠ°Π»Π΅Π΅, Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ .use
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ
ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², Π²Π΅ΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠΉ ΠΊΠΎΠ΄ Π±Π΅Π΄Π΅Ρ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠΌΠΈ. ΠΠΌΠ΅ΡΡΠΎ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄ mov
, ldi
ΠΈ ΡΠ°Π·Π½ΠΎΠΉ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΈ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π’Π°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° @
, ΡΡΠΈ ΠΌΠ΅ΡΠΊΠΈ
Π²ΠΈΠ΄Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ.
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° drawCircle
Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄ΡΡΠ³ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ drawPixel
, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ. ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ
ΡΠ΅ΡΠ΅Π· ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ rcall
) ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π΅ Π½Π° Π½Π΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ rjmp
) ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ
Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΠΈΠΌΡ : Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ.
ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π° ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΡΠ΅ (Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΆΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ).
ΠΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½, Π΅Π³ΠΎ ΠΈΠΌΡ (Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ΠΌ) ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΡΡΠΈΡΡ.
ΠΡΠ»ΠΈ Π½Π°Π΄ΠΎ ΡΠΎΡΠ»Π°ΡΡΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π΅ (Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π² AVR GCC), ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ .extern
ΡΠ°ΠΊ:
.extern drawPixel (x: r24, y: r22)
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ (Π±Π΅Π· Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ .args
):
.proc drawCircle (circle_x: r24, circle_y: r22, radius: r20)
...
Π§Π°ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ» ΡΠΎ ΡΡΡΡΡΠΈΠΊΠΎΠΌ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ Π΄ΠΎ Π½ΡΠ»Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΠΆΠ°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° loop
. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ΡΡ Π² ΡΠΈΠΊΠ»Π΅,
Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠΈΠΊΠ»Π°:
delay_10ms:
loop (r18 = 100) {
rcall delay_100us
}
Π ΠΊΡΡΠ³Π»ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π΅Π΄Π΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΡΡΡΡΡΠΈΠΊΠΎΠΌ ΡΠΈΠΊΠ»Π° ΠΈ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) Π΅Π³ΠΎ ΡΡΠ°ΡΡΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎ 100,
ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π±Π»ΠΎΠΊΠ°). ΠΡΠ»ΠΈ ΡΠ΅Π³ΠΈΡΡΡ Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΎ ΡΠΈΠΊΠ» Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ. Π’Π°ΠΊΠΆΠ΅ Π² ΡΠΈΠΊΠ»Π°Ρ
ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄Ρ break
(ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, ΡΠ»Π΅Π΄ΡΡΡΡΡ Π·Π° ΡΠΈΠΊΠ»ΠΎΠΌ) ΠΈ continue
(ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΠ°Π»ΠΎ ΡΠΈΠΊΠ»Π° Π½Π΅ ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΡΡΡΡΡΠΈΠΊΠ°).
Π§ΡΠΎΠ±Ρ Π½Π΅ Π΄Π΅ΡΠΆΠ°ΡΡ Π² ΡΠΌΠ΅ Π±ΠΎΠ»Π΅Π΅ 20 Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄ ΡΡΠ»ΠΎΠ²Π½ΡΡ
ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ if
ΠΈ else
. ΠΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
==
, !=
, <
, >
, <=
, >=
) Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ (&&
ΠΈ ||
Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ). ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΌΠΈ ΠΈ Π±Π»ΠΎΡΠ½ΡΠΌΠΈ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ if
:
if (!io[UCSRA].UDRE) goto UartSendChar ; wait for empty buffer
if (!r11[0]) ret
if (!F_ZERO) goto @return
if (r21 == 0xFE) goto send_command
if (r21.r22 < ZH.ZL) break
if (ZH.ZL.XH.XL >= r4.r3.r2.r1) {
ZH.ZL.XH.XL -= r4.r3.r2.r1
F_CARRY = 1
} else {
F_CARRY = 0
}
ΠΡΠΎΠΌΠ΅ 32 8-Π±ΠΈΡΠ½ΡΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΡ X
, Y
ΠΈ Z
(ΠΈΡ
ΠΈΠΌΠ΅Π½Π° Π²ΡΠ΅Π³Π΄Π° ΠΏΠΈΡΡΡΡΡ Π·Π°Π³Π»Π°Π²Π½ΡΠΌΠΈ Π±ΡΠΊΠ²Π°ΠΌΠΈ).
Π’.ΠΊ. 8-Π±ΠΈΡΠ½ΡΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² AVR Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π² Π³ΡΡΠΏΠΏΡ ΡΠΎΡΠΊΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊ:
loop {
if (r11.r12 < ZH.ZL) break
r11.r12 -= ZH.ZL
}
ΠΡΡΠΏΠΏΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·Π²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π² ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ , ΡΠ°ΠΊ ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡ.
Π Π΅Π³ΠΈΡΡΡΡ — ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΠΈΡ Π½Π° Π²ΡΡ Π½Π΅ Ρ Π²Π°ΡΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π½ΡΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΈΠΏΠΎΠ²:
ΠΠΌΡ | Π Π°Π·ΠΌΠ΅Ρ (Π±Π°ΠΉΡ) | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|
byte | 1 | ΠΠ΄Π½ΠΎ-Π±Π°ΠΉΡΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΠΠΠ£ |
word | 2 | ΠΠ²ΡΡ -Π±Π°ΠΉΡΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΠΠΠ£ |
dword | 4 | Π§Π΅ΡΡΡΡΡ -Π±Π°ΠΉΡΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΠΠΠ£ |
pointer | 2 | Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±Π»Π°ΡΡΡ ΠΠΠ£, ΠΌΠ°ΡΡΠΈΠ² |
ptr | 2 | Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² (ΡΡΡΠΎΠΊΡ) Π²ΠΎ ΡΠ»Π΅Ρ-ΠΏΠ°ΠΌΡΡΠΈ |
ΠΡΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ :
.extern s_video_mem : ptr
.extern var_b : byte
.extern var_w : word
.extern var_dw : dword
txtErr:
.DB "Error in parameter!"
Z = txtUartErr ; ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΡΡ ΠΏΠ°ΡΡ Z ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ-ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
ΠΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΠΠ£, ΠΠΠ£ ΠΈ ΠΏΠΎΡΡΠ°ΠΌ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ²Π°Π·ΠΈ-ΠΌΠ°ΡΡΠΈΠ²Ρ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ram[]
, prg[]
ΠΈ io[]
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°
r0 = io[PINA]
ΠΏΡΠΎΡΡΡΡ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎΡΡΠ° PINA
Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ r0
ΠΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΡΡΠ°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΈΡ ΠΈΠΌΠ΅Π½Π°ΠΌ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΠ°ΠΌ-ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌ. Π’.Π΅., ΡΡΡ Π²ΡΡ ΠΊΠ°ΠΊ Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π°Π΄ΡΠ΅Ρ Π΄ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
r0 = ram[Z++] ; ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π±Π°ΠΉΡ ΠΈΠ· ΠΠΠ£ Ρ ΠΏΠΎΡΡ-Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Z
r1 = prg[--X] ; ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π±Π°ΠΉΡ ΠΈΠ· ΡΠ»Π΅Ρ-ΠΏΠ°ΠΌΡΡΠΈ Ρ ΠΏΡΠ΅Π΄-Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ X
Π§ΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΡΠΈΡΡ ΠΈΠ· ΠΏΠΎΡΡΠΎΠ² ΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π³ΠΈΡΡΡ. Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΠΎΡΡΡΡ Π±Π°ΠΉΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, Π°Π΄ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ Z
Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ r0
, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π² ΠΏΠΎΡΡ UART-Π° UDR
:
io[UDR] = r0 = ram[Z]
Π Π²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠ΅Π³ΠΎ 16 Π±Π°ΠΉΡ ΠΈΠ· Π±ΡΡΠ΅ΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΏΠΎΡΡ UART:
loop (r1 = 16) {
if (!io[UCSRA].UDRE) continue ; ΠΆΠ΄ΡΠΌ, ΠΏΠΎΠΊΠ° Π±ΡΡΠ΅Ρ ΠΏΡΡΡ
io[UDR] = r0 = ram[Z++]
}
Π’ΡΡ Π΅ΡΡ ΡΠ°Π· ΡΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ continue
ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΠ°Π»ΠΎ Π±Π»ΠΎΠΊΠ° ΡΠΈΠΊΠ»Π° ΠΈ ΡΡΡΡΡΠΈΠΊ r1
ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ
Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½.
Π ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΡΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Ρ ΠΏΠΎΠ±Π°ΠΉΡΠΎΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅Π΅:
loop (len) {
rcall writeToLCD (prg[Z++])
rcall delay40us
}
ΠΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ»Π°Π³Π°ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ° SREG
Π²Π²Π΅Π΄Π΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠ²Π°Π·ΠΈ-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: F_GLOBAL_INT
, F_BIT_COPY
, F_HALF_CARRY
, F_SIGN
, F_TCO
, F_NEG
, F_ZERO
, F_CARRY
ΠΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ if
— goto
ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ.
ΠΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠ΅ ΠΈ Π½Π°Π²ΡΡΠ΄ Π»ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΡΡΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΡΠ·ΡΠΊΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²:
ΠΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ: Π§Π°ΡΡΠΎΡΠΎΠΌΠ΅Ρ-ΡΠ΅ΡΡΠ΅Ρ ΠΊΠ²Π°ΡΡΠ΅Π²
ΠΡΡ
ΠΎΠ΄Π½ΠΈΠΊ, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊ
Π’ΡΡ Ρ ΡΡΠ°ΡΠ°Π»ΡΡ ΠΎΡΠΎΠ±ΠΎ Π½Π΅ ΡΡΠΎΠ³Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, ΠΈ ΠΎΡΡΠ°Π²ΠΈΠ» ΠΈΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠ΅ ΡΡΠΈΡΠ°ΡΡ ΡΠ°ΠΊΡΡ. ΠΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½.
ΠΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ 86Π Π ΠΠ°ΠΌΠΈΠ»Ρ ΠΠ°ΡΠΈΠΌΠΎΠ²Π°
ΠΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π°ΠΊΡΡΡΡ, ΠΈ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ ΠΏΡΠΈΡΠ»ΠΎΡΡ (Π΄Π° ΠΏΡΠΎΡΡΠΈΡ ΠΌΠ΅Π½Ρ Π°Π²ΡΠΎΡ, Π½ΠΎ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π·Π°ΡΠΎΡΠΈΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ ΠΏΠΎΠ΄ ΡΠ΅Π±Ρ) Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΡΡ
ΠΎΠ΄Π½ΠΈΠΊ, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
ΠΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊ
ΠΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ avr-builder, ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π²ΠΊΠ»ΡΡΡΠ½ Π² Π½Π΅Π³ΠΎ, Π° ΡΠΊΡΠΈΠΏΡΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΅ΡΡΡ Π² ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ . Π§ΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠ°ΡΡΠΈΡΡΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠ°ΠΉΠ» make.builder ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ:
asm_ext = True
Π’ΠΎΠ³Π΄Π° ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ Π²ΡΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ»Ρ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ³ΠΎΠ½ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ avr-asm-ext. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Java.
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° Π³ΠΈΡΡ Π°Π±Π΅. Π Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Ρ Π½ΡΠ»Ρ Ρ ΡΠ΅Π»ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠ΅Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Ρ Π΄Π»Ρ IDE NetBeans). ΠΡΠΎΠΌΠ΅ AVR ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π΄ΡΡΠ³ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Z80.
ΠΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π½Π° Π³ΠΈΡΡ Π°Π±Π΅trolsoft.ru
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ Ρ ΡΠ·ΡΠΊΠ° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅ ATMEL AVR Studio, Π»ΠΈΠ±ΠΎ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ ATMEL AVR In-Circuit Emulator. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΠΊΠΆΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ Π² ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ AVR.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ΄ Microsoft Windows 3.11, Microsoft Windows95 ΠΈ Microsoft Windows NT. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ MS-DOS.
ΠΠ°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² AVR ΠΎΠΏΠΈΡΠ°Π½ Π² Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΊΡΠ°ΡΠΊΠΎ, Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΌΠ΅ΡΠΊΠΈ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ. ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ².
Π‘ΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄Π»ΠΈΠ½Π½Π΅Π΅ 120 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
ΠΡΠ±Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΌΠ΅ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΠΌΡΡ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ΠΌ. ΠΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΌΠ΅ΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΈΠΌΡΠ½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
ΠΡ ΠΎΠ΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠ΅ΡΡΡΡΡ ΡΠΎΡΠΌ:
[ΠΌΠ΅ΡΠΊΠ°:] Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° [ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ] [ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ][ΠΌΠ΅ΡΠΊΠ°:] ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ [ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ] [ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ]ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉΠΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΎΡΠΌΡ:
; [Π’Π΅ΠΊΡΡ]
ΠΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ. Π’Π΅ΠΊΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΡΠΊΠΈ Ρ Π·Π°ΠΏΡΡΠΎΠΉ (;) ΠΈ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. ΠΠ΅ΡΠΊΠΈ, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½ΠΈΠΆΠ΅.
ΠΡΠΈΠΌΠ΅ΡΡ:
label:Β Β Β Β .EQU var1=100 ; Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ var1 ΡΠ°Π²Π½ΡΠΌ 100 (ΠΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°)Β Β Β Β Β Β Β Β Β Β .EQU var2=200 ; Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ var2 ΡΠ°Π²Π½ΡΠΌ 200
test:Β Β Β Β Β rjmp testΒ Β Β Β ; ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» (ΠΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ)Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; Π‘ΡΡΠΎΠΊΠ° Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΌ
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ; ΠΡΡ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΌ
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠΎΠ±Ρ ΠΌΠ΅ΡΠΊΠΈ, Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ ΡΡΡΠΎΠΊΠΈ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² AVR, Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² AVR Data Book. Β
ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° | ΠΠΏΠ΅ΡΠ°Π½Π΄Ρ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΏΠ΅ΡΠ°ΡΠΈΡ | Π€Π»Π°Π³ΠΈ | Π¦ΠΈΠΊΠ»Ρ |
ADDΒ | Rd,RrΒ | Π‘ΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° | Rd = Rd + RrΒ | Z,C,N,V,H,SΒ | 1 |
ADC | Rd,Rr | Π‘ΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΎΠΌ | Rd = Rd + Rr + C | Z,C,N,V,H,S | 1 |
SUB | Rd,Rr | ΠΡΡΠΈΡΠ°Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° | Rd = Rd — Rr | Z,C,N,V,H,S | 1 |
SUBI | Rd,K8 | ΠΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ | Rd = Rd — K8 | Z,C,N,V,H,S | 1 |
SBC | Rd,Rr | ΠΡΡΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΎΠΌ | Rd = Rd — Rr — C | Z,C,N,V,H,S | 1 |
SBCI | Rd,K8 | ΠΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΎΠΌ | Rd = Rd — K8 — C | Z,C,N,V,H,S | 1 |
AND | Rd,Rr | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π | Rd = Rd Β· Rr | Z,N,V,SΒ | 1 |
ANDI | Rd,K8 | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ | Rd = Rd Β· K8 | Z,N,V,S | 1 |
OR | Rd,Rr | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΠΠ | Rd = Rd V Rr | Z,N,V,S | 1 |
ORI | Rd,K8 | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΠΠ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ | Rd = Rd V K8 | Z,N,V,S | 1 |
EOR | Rd,Rr | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π΅ ΠΠΠ | Rd = Rd EOR Rr | Z,N,V,S | 1 |
COM | Rd | ΠΠΎΠ±ΠΈΡΠ½Π°Ρ ΠΠ½Π²Π΅ΡΡΠΈΡ | Rd = $FF — Rd | Z,C,N,V,S | 1 |
NEG | Rd | ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΠΊΠ° (ΠΠΎΠΏ. ΠΊΠΎΠ΄) | Rd = $00 — Rd | Z,C,N,V,H,S | 1 |
SBR | Rd,K8 | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±ΠΈΡ (Π±ΠΈΡΡ) Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ | Rd = Rd V K8 | Z,C,N,V,S | 1 |
CBR | Rd,K8 | Π‘Π±ΡΠΎΡΠΈΡΡ Π±ΠΈΡ (Π±ΠΈΡΡ) Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ | Rd = Rd Β· ($FF — K8) | Z,C,N,V,S | 1 |
INC | Rd | ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° | Rd = Rd + 1 | Z,N,V,S | 1 |
DEC | Rd | ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° | Rd = Rd -1 | Z,N,V,S | 1 |
TST | Rd | ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½ΠΎΠ»Ρ Π»ΠΈΠ±ΠΎ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ | Rd = Rd Β· Rd | Z,C,N,V,S | 1 |
CLR | Rd | ΠΡΠΈΡΡΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡ | Rd = 0 | Z,C,N,V,S | 1 |
SER | Rd | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡ | Rd = $FF | None | 1 |
ADIW | Rdl,K6 | Π‘Π»ΠΎΠΆΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈ ΡΠ»ΠΎΠ²ΠΎ | Rdh:Rdl = Rdh:Rdl + K6Β | Z,C,N,V,S | 2 |
SBIW | Rdl,K6 | ΠΡΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ· ΡΠ»ΠΎΠ²Π° | Rdh:Rdl = Rdh:Rdl — K 6 | Z,C,N,V,S | 2 |
MUL | Rd,Rr | Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π» Π±Π΅Π· Π·Π½Π°ΠΊΠ° | R1:R0 = Rd * Rr | Z,C | 2 |
MULS | Rd,Rr | Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π» ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ | R1:R0 = Rd * Rr | Z,C | 2 |
MULSU | Rd,Rr | Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ ΡΠΈΡΠ»ΠΎΠΌ Π±Π΅Π· Π·Π½Π°ΠΊΠ° | R1:R0 = Rd * Rr | Z,C | 2 |
FMUL | Rd,Rr | Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΡΠΎΠ±Π½ΡΡ ΡΠΈΡΠ΅Π» Π±Π΅Π· Π·Π½Π°ΠΊΠ° | R1:R0 = (Rd * Rr) << 1 | Z,C | 2 |
FMULS | Rd,Rr | Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΡΠΎΠ±Π½ΡΡ ΡΠΈΡΠ΅Π» ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ | R1:R0 = (Rd *Rr) << 1 | Z,C | 2 |
FMULSU | Rd,Rr | Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ ΡΠΈΡΠ»ΠΎΠΌ Π±Π΅Π· Π·Π½Π°ΠΊΠ° | R1:R0 = (Rd * Rr) << 1 | Z,C | 2 |
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ
ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° | ΠΠΏΠ΅ΡΠ°Π½Π΄Ρ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΏΠ΅ΡΠ°ΡΠΈΡ | Π€Π»Π°Π³ΠΈ | Π¦ΠΈΠΊΠ»Ρ |
RJMP | k | ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ | PC = PC + k +1 | None | 2 |
IJMP | ΠΠ΅Ρ | ΠΠΎΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° (Z) | PC = Z | None | 2 |
EIJMP | ΠΠ΅Ρ | Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° (Z) | STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND | None | 2 |
JMP | k | ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ | PC = k | None | 3 |
RCALL | k | ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ | STACK = PC+1, PC = PC + k + 1 | None | 3/4* |
ICALL | ΠΠ΅Ρ | ΠΠΎΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² (Z) | STACK = PC+1, PC = ZΒ | None | 3/4* |
EICALL | ΠΠ΅Ρ | Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² (Z) | STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND | None | 4* |
CALL | k | ΠΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ | STACK = PC+2, PC = k | None | 4/5* |
RET | ΠΠ΅Ρ | ΠΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ | PC = STACK | None | 4/5* |
RETI | ΠΠ΅Ρ | ΠΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ | PC = STACK | I | 4/5* |
CPSE | Rd,Rr | Π‘ΡΠ°Π²Π½ΠΈΡΡ, ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ Π΅ΡΠ»ΠΈ ΡΠ°Π²Π½ΡΒ | if (Rd ==Rr) PC = PC 2 or 3 | None | 1/2/3 |
CP | Rd,Rr | Π‘ΡΠ°Π²Π½ΠΈΡΡ | Rd -Rr | Z,C,N,V,H,S | 1 |
CPC | Rd,Rr | Π‘ΡΠ°Π²Π½ΠΈΡΡ Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΎΠΌ | Rd — Rr — C | Z,C,N,V,H,S | 1 |
CPI | Rd,K8 | Π‘ΡΠ°Π²Π½ΠΈΡΡ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ | Rd — K | Z,C,N,V,H,S | 1 |
SBRC | Rr,b | ΠΡΠΎΠΏΡΡΡΠΈΡΡ Π΅ΡΠ»ΠΈ Π±ΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΠΎΡΠΈΡΠ΅Π½ | if(Rr(b)==0) PC = PC + 2 or 3 | None | 1/2/3 |
SBRS | Rr,b | ΠΡΠΎΠΏΡΡΡΠΈΡΡ Π΅ΡΠ»ΠΈ Π±ΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ | if(Rr(b)==1) PC = PC + 2 or 3 | None | 1/2/3 |
SBIC | P,b | ΠΡΠΎΠΏΡΡΡΠΈΡΡ Π΅ΡΠ»ΠΈ Π±ΠΈΡ Π² ΠΏΠΎΡΡΡ ΠΎΡΠΈΡΠ΅Π½ | if(I/O(P,b)==0) PC = PC + 2 or 3 | None | 1/2/3 |
SBIS | P,b | ΠΡΠΎΠΏΡΡΡΠΈΡΡ Π΅ΡΠ»ΠΈ Π±ΠΈΡ Π² ΠΏΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ | if(I/O(P,b)==1) PC = PC + 2 or 3 | None | 1/2/3 |
BRBC | s,k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³ Π² SREG ΠΎΡΠΈΡΠ΅Π½ | if(SREG(s)==0) PC = PC + k + 1 | None | 1/2 |
BRBS | s,k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³ Π² SREG ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ | if(SREG(s)==1) PC = PC + k + 1 | None | 1/2 |
BREQ | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ°Π²Π½ΠΎ | if(Z==1) PC = PC + k + 1 | None | 1/2 |
BRNE | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ°Π²Π½ΠΎ | if(Z==0) PC = PC + k + 1 | None | 1/2 |
BRCS | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ | if(C==1) PC = PC + k + 1 | None | 1/2 |
BRCC | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΎΡΠΈΡΠ΅Π½ | if(C==0) PC = PC + k + 1 | None | 1/2 |
BRSH | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ°Π²Π½ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ | if(C==0) PC = PC + k + 1 | None | 1/2 |
BRLO | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ | if(C==1) PC = PC + k + 1 | None | 1/2 |
BRMI | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΠΌΠΈΠ½ΡΡ | if(N==1) PC = PC + k + 1 | None | 1/2 |
BRPL | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΠΏΠ»ΡΡ | if(N==0) PC = PC + k + 1 | None | 1/2 |
BRGE | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ (ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ) | if(S==0) PC = PC + k + 1 | None | 1/2 |
BRLT | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ (ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ) | if(S==1) PC = PC + k + 1 | None | 1/2 |
BRHS | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ | if(H==1) PC = PC + k + 1 | None | 1/2 |
BRHC | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΎΡΠΈΡΠ΅Π½ | if(H==0) PC = PC + k + 1 | None | 1/2 |
BRTS | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³ T ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ | if(T==1) PC = PC + k + 1 | None | 1/2 |
BRTC | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³ T ΠΎΡΠΈΡΠ΅Π½ | if(T==0) PC = PC + k + 1 | None | 1/2 |
BRVS | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ | if(V==1) PC = PC + k + 1 | None | 1/2 |
BRVC | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠΈΡΠ΅Π½ | if(V==0) PC = PC + k + 1 | None | 1/2 |
BRIE | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ | if(I==1) PC = PC + k + 1 | None | 1/2 |
BRID | k | ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π΅ΡΠ»ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ | if(I==0) PC = PC + k + 1 | None | 1/2 |
* ΠΠ»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΊΠ»ΠΎΠ² ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π°Π½Π½ΡΡ , ΠΈ Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΠΠ£. ΠΠ»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ CALL, ICALL, EICALL, RCALL, RET ΠΈ RETI, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΈ ΡΠΈΠΊΠ»Π° ΠΏΠ»ΡΡ ΠΏΠΎ Π΄Π²Π° ΡΠΈΠΊΠ»Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ Ρ PC ΠΌΠ΅Π½ΡΡΠΈΠΌ 16 Π±ΠΈΡ (128KB ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ). ΠΠ»Ρ ΡΡΡΡΠΎΠΉΡΡΠ² Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ²ΡΡΠ΅ 128KB , Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΡΡΡ ΡΠΈΠΊΠ»ΠΎΠ² ΠΏΠ»ΡΡ ΠΏΠΎ ΡΡΠΈ ΡΠΈΠΊΠ»Π° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° | ΠΠΏΠ΅ΡΠ°Π½Π΄Ρ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΏΠ΅ΡΠ°ΡΠΈΡ | Π€Π»Π°Π³ΠΈ | Π¦ΠΈΠΊΠ»Ρ |
MOV | Rd,Rr | Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡ | Rd = Rr | None | 1 |
MOVW | Rd,Rr | Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² | Rd+1:Rd = Rr+1:Rr, r,d even | None | 1 |
LDI | Rd,K8 | ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ | Rd = K | None | 1 |
LDS | Rd,k | ΠΡΡΠΌΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° | Rd = (k) | None | 2* |
LD | Rd,X | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° | Rd = (X) | None | 2* |
LD | Rd,X+ | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Rd = (X), X=X+1 | None | 2* |
LD | Rd,-X | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ ΠΏΡΠ΅-Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | X=X-1, Rd = (X) | None | 2* |
LD | Rd,Y | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° | Rd = (Y) | None | 2* |
LD | Rd,Y+ | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Rd = (Y), Y=Y+1 | None | 2* |
LD | Rd,-Y | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ ΠΏΡΠ΅-Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Y=Y-1, Rd = (Y) | None | 2* |
LDD | Rd,Y+q | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ | Rd = (Y+q) | None | 2* |
LD | Rd,Z | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° | Rd = (Z) | None | 2* |
LD | Rd,Z+ | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Rd = (Z), Z=Z+1 | None | 2* |
LD | Rd,-Z | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ ΠΏΡΠ΅-Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Z=Z-1, Rd = (Z) | None | 2* |
LDD | Rd,Z+q | ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Ρ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ | Rd = (Z+q) | None | 2* |
STS | k,Rr | ΠΡΡΠΌΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ | (k) = Rr | None | 2* |
ST | X,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ | (X) = Rr | None | 2* |
ST | X+,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | (X) = Rr, X=X+1 | None | 2* |
ST | -X,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠ΅-Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | X=X-1, (X)=Rr | None | 2* |
ST | Y,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ | (Y) = Rr | None | 2* |
ST | Y+,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | (Y) = Rr, Y=Y+1 | None | 2 |
ST | -Y,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠ΅-Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Y=Y-1, (Y) = Rr | None | 2 |
ST | Y+q,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ | (Y+q) = Rr | None | 2 |
ST | Z,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ | (Z) = Rr | None | 2 |
ST | Z+,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | (Z) = Rr, Z=Z+1 | None | 2 |
ST | -Z,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠ΅-Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Z=Z-1, (Z) = Rr | None | 2 |
ST | Z+q,Rr | ΠΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ | (Z+q) = Rr | None | 2 |
LPM | ΠΠ΅Ρ | ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ | R0 = (Z) | None | 3 |
LPM | Rd,Z | ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ | Rd = (Z) | None | 3 |
LPM | Rd,Z+ | ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Ρ ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Rd = (Z), Z=Z+1 | None | 3 |
ELPM | ΠΠ΅Ρ | Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ | R0 = (RAMPZ:Z) | None | 3 |
ELPM | Rd,Z | Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ | Rd = (RAMPZ:Z) | None | 3 |
ELPM | Rd,Z+ | Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Ρ ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ | Rd = (RAMPZ:Z), Z = Z+1 | None | 3 |
SPM | ΠΠ΅Ρ | Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ | (Z) = R1:R0 | None | — |
ESPM | ΠΠ΅Ρ | Π Π°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ | (RAMPZ:Z) = R1:R0 | None | — |
IN | Rd,P | Π§ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ° | Rd = P | None | 1 |
OUT | P,Rr | ΠΠ°ΠΏΠΈΡΡ Π² ΠΏΠΎΡΡ | P = Rr | None | 1 |
PUSH | Rr | ΠΠ°Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ΡΡΠ΅ΠΊ | STACK = Rr | None | 2 |
POP | Rd | ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΈΠ· ΡΡΠ΅ΠΊΠ° | Rd = STACK | None | 2 |
* ΠΠ»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΊΠ»ΠΎΠ² ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π°Π½Π½ΡΡ , ΠΈ Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΠΠ£. ΠΠ»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ LD, ST, LDD, STD, LDS, STS, PUSH ΠΈ POP, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΊΠ» ΠΏΠ»ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΈΠΊΠ»Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π±ΠΈΡΠ°ΠΌΠΈ
ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° | ΠΠΏΠ΅ΡΠ°Π½Π΄Ρ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΏΠ΅ΡΠ°ΡΠΈΡ | Π€Π»Π°Π³ΠΈ | Π¦ΠΈΠΊΠ»Ρ |
LSL | Rd | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΄Π²ΠΈΠ³ Π²Π»Π΅Π²ΠΎ | Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) | Z,C,N,V,H,S | 1 |
LSR | Rd | ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΄Π²ΠΈΠ³ Π²ΠΏΡΠ°Π²ΠΎ | Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) | Z,C,N,V,S | 1 |
ROL | Rd | Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΄Π²ΠΈΠ³ Π²Π»Π΅Π²ΠΎ ΡΠ΅ΡΠ΅Π· C | Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) | Z,C,N,V,H,S | 1 |
ROR | Rd | Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΄Π²ΠΈΠ³ Π²ΠΏΡΠ°Π²ΠΎ ΡΠ΅ΡΠ΅Π· C | Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) | Z,C,N,V,S | 1 |
ASR | Rd | ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΄Π²ΠΈΠ³ Π²ΠΏΡΠ°Π²ΠΎ | Rd(n)=Rd(n+1), n=0,…,6 | Z,C,N,V,S | 1 |
SWAP | Rd | ΠΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΡΠ°Π΄ | Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) | None | 1 |
BSETΒ | s | Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ»Π°Π³Π° | SREG(s) = 1 | SREG(s) | 1 |
BCLR | s | ΠΡΠΈΡΡΠΊΠ° ΡΠ»Π°Π³Π° | SREG(s) = 0 | SREG(s) | 1 |
SBI | P,b | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±ΠΈΡ Π² ΠΏΠΎΡΡΡ | I/O(P,b) = 1 | None | 2 |
CBI | P,b | ΠΡΠΈΡΡΠΈΡΡ Π±ΠΈΡ Π² ΠΏΠΎΡΡΡ | I/O(P,b) = 0 | None | 2 |
BST | Rr,b | Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ Π±ΠΈΡ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ° Π² T | T = Rr(b) | T | 1 |
BLD | Rd,b | ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π±ΠΈΡ ΠΈΠ· T Π² ΡΠ΅Π³ΠΈΡΡΡ | Rd(b) = T | None | 1 |
SEC | ΠΠ΅Ρ | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° | C =1 | C | 1 |
CLC | ΠΠ΅Ρ | ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π°Π³ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° | C = 0 | C | 1 |
SEN | ΠΠ΅Ρ | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° | N = 1 | N | 1 |
CLN | ΠΠ΅Ρ | ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π°Π³ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° | N = 0 | N | 1 |
SEZ | ΠΠ΅Ρ | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ Π½ΡΠ»Ρ | Z = 1 | Z | 1 |
CLZ | ΠΠ΅Ρ | ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π°Π³ Π½ΡΠ»Ρ | Z = 0 | Z | 1 |
SEI | ΠΠ΅Ρ | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ | I = 1 | I | 1 |
CLI | ΠΠ΅Ρ | ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π°Π³ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ | I = 0 | I | 1 |
SES | ΠΠ΅Ρ | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ ΡΠΈΡΠ»Π° ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ | S = 1 | S | 1 |
CLN | ΠΠ΅Ρ | ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π°Π³ ΡΠΈΡΠ»Π° ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ | S = 0 | S | 1 |
SEV | ΠΠ΅Ρ | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ | V = 1 | V | 1 |
CLV | ΠΠ΅Ρ | ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π°Π³ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ | V = 0 | V | 1 |
SET | ΠΠ΅Ρ | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ T | T = 1 | T | 1 |
CLT | ΠΠ΅Ρ | ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π°Π³ T | T = 0 | T | 1 |
SEH | ΠΠ΅Ρ | Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° | H = 1 | H | 1 |
CLH | ΠΠ΅Ρ | ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π°Π³ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° | H = 0 | H | 1 |
NOP | ΠΠ΅Ρ | ΠΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ | ΠΠ΅Ρ | None | 1 |
SLEEP | ΠΠ΅Ρ | Π‘ΠΏΠ°ΡΡ (ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅) | Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ | None | 1 |
WDR | ΠΠ΅Ρ | Π‘Π±ΡΠΎΡ ΡΡΠΎΡΠΎΠΆΠ΅Π²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΠ° | Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ | None | 1 |
ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π½Π΅ ΡΠ°Π·Π»ΠΈΡΠ°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
ΠΠΏΠ΅ΡΠ°Π½Π΄Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°ΠΊΠΈΡ Π²ΠΈΠ΄ΠΎΠ²:
Rd: Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ (ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ) ΡΠ΅Π³ΠΈΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Rr: ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ b: ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° (3 Π±ΠΈΡΠ°), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ s: ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° (3 Π±ΠΈΡΠ°), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ P: ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° (5-6 Π±ΠΈΡ), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ K6; ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° (6 Π±ΠΈΡ), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ K8: ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° (8 Π±ΠΈΡ), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ k: ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° (ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ q: ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° (6 Π±ΠΈΡ), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Rdl:Β R24, R26, R28, R30. ΠΠ»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ADIW ΠΈ SBIW X,Y,Z: Π Π΅Π³ΠΈΡΡΡΡ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ (X=R27:R26, Y=R29:R28, Z=R31:R30)
studfiles.net