ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°ΡΠΈΡΡ Π²ΡΠ²ΠΎΠ΄Ρ ΠΏΠΎΡΡ Π²Π²ΠΎΠ΄Π°
ΠΠΎΡΡΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ:
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΡ Π½Π° Π²ΡΡ ΠΎΠ΄ ΠΈ Π²Ρ ΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ «0» ΠΈ «1»;
ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΠ¦Π;
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ UART, SPI ΠΈ Ρ.Π΄.
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΡΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ ΡΠ°Π·Π½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½ΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ «ΠΠΎΡΡΡ Π²Π²ΠΎΠ΄Π° Π²ΡΠ²ΠΎΠ΄Π° MDP_PORTx»
Π Π°Π±ΠΎΡΠ° ΠΏΠΎΡΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π² ΡΡΠ°ΡΡΠ΅ Π‘Ρ Π΅ΠΌΠΎΡΠ΅Ρ Π½ΠΈΠΊΠ° ΠΏΠΎΡΡΠΎΠ² GPIO.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ SPL
Π€ΡΠ½ΠΊΡΠΈΠΈ SPL ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»Ρ, ΡΡΡΡΠΊΡΡΡΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π² ΡΡΡΡΠΊΡΡΡΠ΅, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ²ΠΎΠ΅ΠΌ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΡΠΉ ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΈ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ . ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ SPL ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ SPL ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ². Π’ΠΎ Π΅ΡΡΡ ΠΏΠΎΠ»Ρ Π² ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΈ ΡΠ΅Π³ΠΈΡΡΡΡ, ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΠΌΠΎΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ, Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ·Π²Π°Π½Π½Π°Ρ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΆΠ΅Π»Π΅Π·Π΅.
ΠΠΈΠ½ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ SPL ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ) ΠΈ ΡΠ½ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ SPL, Π΄ΠΎΠ±ΠΈΠ²Π°ΡΡΡΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΡΡΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠ°
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²ΡΠ²ΠΎΠ΄Π°(-ΠΎΠ²) ΠΏΠΎΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
PORT_StructInit(&GPIOInitStruct);
Π€ΡΠ½ΠΊΡΠΈΡ PORT_StructInit Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
void PORT_StructInit(PORT_InitTypeDef* PORT_InitStruct)
<
/* Reset PORT initialization structure parameters values */
PORT_InitStruct->PORT_Pin = PORT_Pin_All;
PORT_InitStruct->PORT_OE = PORT_OE_IN;
PORT_InitStruct->PORT_PULL_UP = PORT_PULL_UP_OFF;
PORT_InitStruct->PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;
PORT_InitStruct->PORT_PD_SHM = PORT_PD_SHM_OFF;
PORT_InitStruct->PORT_PD = PORT_PD_DRIVER;
PORT_InitStruct->PORT_GFEN = PORT_GFEN_OFF;
PORT_InitStruct->PORT_FUNC = PORT_FUNC_PORT;
PORT_InitStruct->PORT_SPEED = PORT_OUTPUT_OFF;
PORT_InitStruct->PORT_MODE = PORT_MODE_ANALOG;
>
PORT_Pin
PORT_OE
PORT_PULL_UP ΠΈ PORT_PULL_DOWN
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ PORT_PULL_UP ΠΈ PORT_PULL_DOWN Π·Π°Π΄Π°ΡΡ ΠΏΠΎΠ΄ΡΡΠΆΠΊΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΊ Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π΅ΠΌΠ»ΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ²ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄. Π‘ΠΎΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΠΈΡΡΠΎΡΠ° ΠΏΠΎΠ΄ΡΡΠΆΠΊΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ°
50ΠΠΠΌ, ΡΠΎΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΎΡΠ½ΡΡΡ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ.
ΠΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ Π±ΠΈΡΠΎΠ²ΡΠΌΠΈ ΠΌΠ°ΡΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΈΡΠΎΠ³Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡΡΡΡ ΠΏΠΎ Π½ΡΠΆΠ½ΠΎΠΌΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅. ΠΠΎΡΡΠΎΠΌΡ PORT_PULL_UP_OFF Π½Π΅ ΡΠ°Π²Π½ΠΎ PORT_PULL_DOWN_OFF, ΠΈ Π²Π°ΠΆΠ½ΠΎ ΠΈΡ Π½Π΅ ΠΏΡΡΠ°ΡΡ.
PORT_PD_SHM
ΠΡΠΎ ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈ PORT_PD_SHM_OFF dU = 200 ΠΌΠ, Π° ΠΏΡΠΈ PORT_PD_SHM_On = 400 ΠΌΠ.
PORT_PD
Π ΡΠ΅ΠΆΠΈΠΌΠ΅ PORT_PD_OPEN Π²ΡΠ²ΠΎΠ΄ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΡΠ°Π½Π·ΠΈΡΡΠΎΡΠ° ΠΊΠΎΠΌΠΌΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ Π΅Π³ΠΎ Ρ ΡΠ΅ΠΏΡΡ ΠΏΠΈΡΠ°Π½ΠΈΡ, ΡΠΎ Π΅ΡΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ°ΠΆΠΈΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΡΡ Π»ΠΈΠ½ΠΈΡ Π½Π° 0, Π° ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ 1 ΡΡΠΎ «ΠΏΡΠΎΡΠ°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅» ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½Π΅ΡΠ½ΡΡ ΠΏΠΎΠ΄ΡΡΠΆΠΊΠ° ΠΊ ΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° ΡΠΈΠ½Π΅ I2C.
PORT_GFEN
PORT_MODE
ΠΠ½Π°Π»ΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ΅Π· Π²ΡΠ²ΠΎΠ΄ Π·Π°Π²ΠΎΠ΄ΠΈΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΠΎΡΠΈΡΡΠΎΠ²ΠΊΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΠΠ¦Π. ΠΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Π¦ΠΠ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠ΅ΠΆΠΈΠΌ.
PORT_FUNC
ΠΡΠ²ΠΎΠ΄ | Analog | DIGITAL | |||
---|---|---|---|---|---|
PORT | MAIN | ALTER | OVERRID | ||
Π Π12 | — | Π Π12 | ADDR28 | SSP1_RXD | UART1_RXD |
Π Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΡΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΎΠ² Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, TMR2_CH2, ΡΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π²ΡΠ²ΠΎΠ΄, ΠΏΡΠΈΡΡΠΌ Π²ΡΠ±ΠΎΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΠΎΡΡΠ°, Ρ.Π΅. ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΡΡ Π, Π΄Π°Π»Π΅Π΅ ΠΏΠΎΡΡ B ΠΈ Ρ.Π΄.
PORT_SPEED
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ PORT_SPEED ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ, Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ½ΡΠΎΠ². ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ:
ΠΡΠΈ Π±ΡΡΡΡΡΡ ΡΡΠΎΠ½ΡΠ°Ρ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°, Π½ΠΎ Π·Π°ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠ΅ΠΉ. ΠΠ»Ρ ΠΌΠΈΠ³Π°Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠΌ ΡΠΊΠΎΡΠΎΡΡΡ Π½Π΅ Π²Π°ΠΆΠ½Π° ΠΈ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Ρ PORT_SPEED_SLOW.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π³ΠΈΡΡΡΡ
SPL Π΄Π΅Π»Π°Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΏΠΎΡΡΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΠΎΠΉ ΠΈ Π·Π°ΡΠΈΡΠ°Π΅Ρ ΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ SPL Π·Π°Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π²ΡΠ²ΠΎΠ΄ΠΎΠ² ΠΏΠΎΡΡΠΎΠ². ΠΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π‘Ρ Π΅ΠΌΠΎΡΠ΅Ρ Π½ΠΈΠΊΠ° ΠΏΠΎΡΡΠΎΠ² GPIO.
ΠΠ»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠ° Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΠ»ΠΎΠ³ ΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠ΅
Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² Π½Π° Π‘ΠΈ++
ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² (ΠΠ) ΡΠ°Π±ΠΎΡΠ° Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΈ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ (Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ) ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΡΡΠ½Π΄Π°ΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠ΅ΠΉ Π½Π°ΠΏΡΡΠΌΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ΅Π»ΠΎΠΌ. ΠΠΎΠ΄ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ Π·Π΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°.
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ ΠΠ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΡΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ (GPIO). ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΡΠΈΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°.
Π’ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π΄Π²Π°, Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΠ²ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
Π‘ΠΈΡΡΠ°ΡΠΈΡ ΠΎΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΠΈ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΠΌ ΠΈΠ·Π³ΠΎΡΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ°ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ΠΌ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π»ΠΈΠ½ΠΈΠΉ Π² ΠΏΠΎΡΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΡΡΠΎΠ² Π΄Π»Ρ ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Ρ.Π΄. Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΎ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΡΡ, ΡΠ°ΠΊ ΠΈ ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ, Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΡΡΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΊΠ°ΠΊ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ ΠΏΠΎ ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π²Π΅ΡΡ Π² ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅, ΡΠ°ΠΊ ΠΈ Π½Π΅Ρ. ΠΠ½ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΎ ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ°ΡΡΠΈΡΠΈΡΠ΅Π»Ρ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΄Π²ΠΈΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ. ΠΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠΈ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π΄ΡΠ°ΠΉΠ²Π΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π΅ Π±ΡΠ» Π·Π°ΡΠΎΡΠ΅Π½ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΈΠ»ΠΈ-ΠΆΠ΅ Π½Π΅ Π±ΡΠ» ΡΠ»ΠΈΡΠΊΠΎΠΌ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌ Π² ΡΠ»ΡΡΠ°Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π½Π°ΠΉΡΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π΄Π΅ΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄Π° ΠΆΠ΅ΡΡΠ²ΡΡΡ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΡΡ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡΡ ΠΊΠΎΠ΄Π°, ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΎΡΠ΄Π΅Π»ΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΠ΄ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΠ½ΡΠ΅ΡΡΡ Π²ΡΡΡΠ½ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΡΠΈΡΡΠΎΠΌ Π‘ΠΈ.
ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ (Π²Π°ΡΠΈΠ°Π½Ρ Ρ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ Π² ΠΊΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΡΡΠΎΠ² ΠΈ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ Π½ΠΎΠΆΠ΅ΠΊ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ):
ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π΄Π»Ρ ΠΠ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° AVR. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ avr-gcc, Π½ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΠΊ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΠ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π‘ΠΈ/Π‘ΠΈ++ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ.
1. ΠΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ
Π‘ΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π² ΠΠ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²Π΅Π»ΠΈΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ. Π ΡΠ°ΠΌΠΎΠΌ ΠΏΡΠΎΡΡΠΎΠΌ ΠΈ ΡΠ°ΠΌΠΎΠΌ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΡΡ ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° Π½ΠΎΠΆΠ΅ΠΊ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π½Π°ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ #define, Π½Π΅ Π·Π°Π±ΡΠ², ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠΎ DDR ΠΈ PIN ΡΠ΅Π³ΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ.
ΠΠ΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΠΌΠΈΠ³Π°ΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· Π²ΡΠ²ΠΎΠ΄ΠΎΠ² ΠΠ:
reg->data_pin_bm; //ΡΠ°ΠΊΡΠΎΠ²ΡΠΉ ΠΈΠΌΠΏΡΠ»ΡΡ *reg->port |= reg->clk_pin_bm; value >>= 1; *reg->port &=
reg->clk_pin_bm; > //Π·Π°ΡΡΠ»ΠΊΠΈΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡ *reg->port |= reg->latch_pin_bm; *reg->port &=
Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΡΠΈΠ½Π³Π° WriteShiftReg
LD r30, X+ LD r31, X SBIW r26, 0x01 ; 1 LD r24, Z ADIW r26, 0x04 ; 4 LD r25, X SBIW r26, 0x04 ; 4 OR r24, r25 ST Z, r24
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΡΡΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΡΠ° ΡΠ΅ΠΏΠ΅ΡΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 9 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠΉ.
Π§ΡΠΎΠ±Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π΄Π°ΡΡ Π½ΠΎΠΌΠ΅ΡΠ° Π½ΠΎΠΆΠ΅ΠΊ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ, ΠΈ Π²ΡΠΊΠΈΠ½ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠΊΠΈ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎ ΡΠ΄Π²ΠΈΠ³ΠΎΠ²ΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ data_pin_bm ΠΈ clk_pin_bm ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΈΡ ΠΈΠ· ΡΡΡΡΠΊΡΡΡΡ, Π° latch_pin_bm ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ Π΄Π»Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ:
>data_pin_bm; //ΡΠ°ΠΊΡΠΎΠ²ΡΠΉ ΠΈΠΌΠΏΡΠ»ΡΡ *reg->port |= clk_pin_bm; value >>= 1; *reg->port &= clk_pin_bm; > //Π·Π°ΡΡΠ»ΠΊΠΈΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡ *reg->port |= reg->latch_pin_bm; *reg->port &=
Π’Π°ΠΊΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠΊΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄ WriteShiftReg ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π½Π° 25 % Ρ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ΅ΡΠ΅ΠΉ Π² ΡΠ΄ΠΎΠ±ΡΡΠ²Π΅.
3. ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΡΡ
ΠΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊ ΠΠ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΡΠΎΠΉΡΡΠ² ΡΡΠ΅Π±ΡΡΡΠΈΡ
Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΈΠ½ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, Π΄ΡΠ°ΠΉΠ²Π΅Ρ ΠΊΠΎΡΠΎΡΡΡ
ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΈ ΠΎΠ±ΡΡΠΌΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΡ-ΠΆΠ΅ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ HD44780 (ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ 4Ρ
Π±ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΡΠ΅Π±ΡΠ΅Ρ 7 Π»ΠΈΠ½ΠΈΠΉ). Π ΡΠΎΠΌΡ-ΠΆΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ β ΠΊ ΡΠ°Π·Π½ΡΠΌ Π»ΠΈΠ½ΠΈΡΠΌ ΠΏΠΎΡΡΠΎΠ², ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΄Π²ΠΈΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ. ΠΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ΠΈ ΠΏΠΎΠ΄Π³ΠΎΠ½ΡΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° β Π½Π΅Ρ ΡΠΆ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ. ΠΠ° ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠΈΡΠΊΡΠ΅Ρ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡΡ Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΠ. ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΡΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ Π² ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ? Π‘Π»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΡΡΠΈ, ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ.
ΠΠ΄Π΅ΡΡ Π»ΡΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ, ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΡΡ. ΠΠ° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ Π³ΡΡΠΏΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΡ
Π²Ρ
ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°:
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ ΠΊ ΠΠ. ΠΡΡ ΡΡΠΆΡΠ»Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π²ΠΎΠ·Π»ΠΎΠΆΠ΅Π½Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΡ VPort1Write. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΈΡΠΏΠ»Π΅Ρ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°, ΡΡΡ ΡΠΆΠ΅ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π½ΡΠ°Π·ΠΈΠΈ Ρ Π²Π°ΡΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ WriteShiftReg, Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ ΡΠ΅ΡΠ΅Π· ΡΠ΄Π²ΠΈΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ:
ShiftReg reg1 = <&PORTA, 1>; void VPort2Write(uint8_t value)
Π§Π΅Π³ΠΎ-ΠΆΠ΅ ΠΌΡ Π΄ΠΎΠ±ΠΈΠ»ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΡΡΠΎΠ²:
ΠΠΎΠ΄Ρ
ΠΎΠ΄ Π‘ΠΈ++ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ.
Π§ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΡΠ·ΡΠΊ Π‘ΠΈ++ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΈΡΡΡΠΌ Π‘ΠΈ? ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΡΡΠΎΡΠΌΡΠ»ΠΈΡΡΠ΅ΠΌ, ΡΡΠΎ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π°ΡΠΈΡ
ΠΈΠ·ΡΡΠΊΠ°Π½ΠΈΠΉ:
ΠΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΈΠ½ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠ°Π·Ρ ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΈΠ·-Π·Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠΎΡΡΠ°ΠΌ ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π²ΡΡΠ΅ΠΊΠ°ΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌΠΈ.
Π£Π΄ΠΎΠ±Π½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ Π»ΠΈΠ½ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ, Ρ.Π΅. ΠΊΠ»Π°ΡΡΠ°. Π Π‘ΠΈ++ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ, ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ Π°Π΄ΡΠ΅Ρ. ΠΠ½Π°ΡΠΈΡ, Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π° Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π½Π΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ. Π ΠΊΠ°ΠΊ ΡΠΎΠ³Π΄Π° ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ? ΠΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ, Π° ΠΏΠΎΡΡ ΠΈ Π½ΠΎΠΌΠ΅Ρ Π±ΠΈΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π°. Π‘ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ Π±ΠΈΡΠ° Π²ΡΡ ΡΡΠ½ΠΎ β ΡΡΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π΅Π³ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΡΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π±Π»ΠΎΠ½Π°. Π ΠΊΠ°ΠΊ Π±ΡΡΡ Ρ ΠΏΠΎΡΡΠΎΠΌ? ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΠΎΡΡΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
avr-gcc:
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr)) #define _SFR_MEM8(mem_addr) _MMIO_BYTE(mem_addr + __SFR_OFFSET) #define PORTB _SFR_IO8(0x18)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠΎΠ²ΡΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠΌΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π½ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠ΅Π΄Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π±Π»ΠΎΠ½Π°:
template //ΠΎΡΠΈΠ±ΠΊΠ° class Pin <. >;
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΡΡΠ° Π² Π²ΠΈΠ΄Π΅ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π° ΠΏΠΎΡΠΎΠΌ Π΅Π³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ:
ΠΠ·ΡΡΡ Π°Π΄ΡΠ΅Ρ PORTB ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²Π·ΡΡΠΈΡ Π°Π΄ΡΠ΅ΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ , ΠΊΠΎΠΈΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π°:
typedef Pin Pin1; // ΠΎΡΠΈΠ±ΠΊΠ°
ΠΠ΄Π½Π°ΠΊΠΎ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΡΡΠ°, Π΅ΡΡ Π½ΡΠΆΠ½Ρ PINx ΠΈ DDRx ΡΠ΅Π³ΠΈΡΡΡΡ. Π ΡΠΎΠΌΡ-ΠΆΠ΅, Π² ΡΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ ΡΠ΅ΡΠΈ. ΠΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΌΠ°ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², ΠΈ ΠΎΠ½ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ. ΠΠΎ ΡΠΎΠ³Π΄Π° Pin Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°Π²ΡΠ·Π°Π½ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠΎΠ².
ΠΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π²ΡΠ΅ ΠΏΠΎΡΡΡ Ρ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΡΠΆΠ½ΡΠΉ ΠΏΠΎΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π°.
() < return PORTA; >template<> volatile uint8_t & GetPort
ΠΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
ΠΡΠ·ΠΎΠ² Reg1::Write ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ Π»ΠΈΡΡΠΈΠ½Π³:
Π‘Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π»ΠΈΡΡΠΈΠ½Π³ Π½Π΅ ΡΡΡΡΠΏΠ°Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡ Π²ΡΡΡΠ½ΡΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅. Π ΠΊΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ Π‘ΠΈ++ ΠΈΠ·Π±ΡΡΠΎΡΠ΅Π½ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π»Ρ ΠΠ? ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° ΡΠΈΡΡΠΎΠΌ Π‘ΠΈ, ΡΠΎΡ ΡΠ°Π½ΠΈΠ² ΡΠΈΡΡΠΎΡΡ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π°, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΠ°Π±ΠΎΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠΎΠ² Π/Π ΠΈ ΡΠ°ΠΊΡΡ-ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ.
Π‘ΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°
ΠΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠ°Π»ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ ΡΠ°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ β ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΠ±ΠΈΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½Π° ΡΡΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΠ°Ρ Π³ΡΡΠΏΠΏΡ Π»ΠΈΠ½ΠΈΠΉ Π/Π β ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ Π/Π. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈ ΠΏΠΎΡΡΡ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ Ρ Π½Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΡΠΎ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ². ΠΠΎ Π·Π΄Π΅ΡΡ Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π»ΠΈΠ½ΠΈΠΉ, Π° ΡΠ°Π±Π»ΠΎΠ½Ρ Π² Π‘ΠΈ++ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ Cxx03, Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΡΠ²ΡΡΡΡ Variadic templates). ΠΠ°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Loki, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ ΠΠ½Π΄ΡΠ΅Π΅ΠΌ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠ΅ΡΠΊΡ. Π Π½Π΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π΄Π»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Π½Ρ. ΠΡΠΎ Π½Π°ΠΌ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ β ΡΠΏΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ² ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² ΡΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. Π§ΡΠΎ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ°ΠΊΠΎΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ² Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Ρ ΠΈΡ
Π°Π²ΡΠΎΡΠ° ΠΠ½Π΄ΡΠ΅Ρ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠ΅ΡΠΊΡ Π² ΠΊΠ½ΠΈΠ³Π΅ Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++. ΠΡΠ΅Π½Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ, Ρ
ΠΎΡΡ-Π±Ρ ΠΌΠ΅Π»ΡΠΊΠΎΠΌ, Π³Π»Π°Π²Ρ Β«Π‘ΠΏΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²Β» Π² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅. ΠΠ΅Π· ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΌΠ°Π»ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π΄Π°Π»ΡΡΠ΅.
ΠΠ΅ Π²ΠΎ Π²ΡΠ΅Ρ ΠΠ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ Π±ΠΈΡΠ°ΠΌΠΈ Π² ΠΏΠΎΡΡΠ°Ρ Π/Π. Π ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π΅ MegaAVR ΡΠΎΠΆΠ΅ Π΅ΡΡΡ ΠΏΠΎΡΡΡ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° β ΠΎΠ΄Π½ΠΎ ΡΡΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΡ.
Π’ΠΎ Π΅ΡΡΡ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ N Π±ΠΈΡΠΎΠ² ΠΈΠ· Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² N Π±ΠΈΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΡΠ°Ρ Π/Π. ΠΠ»ΠΈ ΠΏΠΎ Π΄ΡΡΠ³ΠΎΠΌΡ Π³ΠΎΠ²ΠΎΡΡ, ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π±ΠΈΡΡ ΠΏΠΎ ΠΏΠΎΡΡΠ°ΠΌ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΡ Π·Π° ΡΠ°Π·.
Π ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π·Π°ΠΏΠΈΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ Π/Π Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
1. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠΎΠ² ΠΊ ΠΊΠΎΡΠΎΡΡΡ
ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°.
2. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°:
ΠΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΡΡ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΡΡΠΎΠ² Π½Π° Π‘ΠΈ, ΡΠΎ Π²ΡΠ΅ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅ΠΌ Π²ΡΡΡΠ½ΡΡ, Π° ΡΠ΅ΠΉΡΠ°Ρ Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡΡ ΡΠΏΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΠΌ ΡΠ°ΡΡΠ΅Ρ Π±ΠΈΡΡ ΠΈ ΡΡΠΈΡΠ°Π΅Ρ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠΊΠΈ! ΠΡΠΈΡΡΡΠΏΠΈΠΌ.
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅ Π΅ΡΡΡ Π΄Π²Π° Π½ΠΎΠΌΠ΅ΡΠ°:
ΠΠ±Π° ΠΎΠ½ΠΈ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΈΡΡ ΠΈΠ· Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΡΡ.
ΠΡΠΎΡΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ»Π°ΡΡ TPin ΠΏΠΎΠΌΠ½ΠΈΡ ΡΠ°ΠΌ, ΠΎΠ½ΠΎ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π² enum-Π΅:
Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½:
Π₯ΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΡΠΎΠ³ΠΎ ΠΈ Π½Π΅ Π΄Π΅Π»Π°ΡΡ, Π° Π²ΡΡΠΈΡΠ»ΡΡΡ Π±ΠΈΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΡΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° IndexOf.
ΠΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ Ρ ΡΠ°Π½ΠΈΡ ΡΠΈΠΏ Π»ΠΈΠ½ΠΈΠΈ Π/Π ΠΈ Π΅Π΅ Π±ΠΈΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΡΠΏΠΈΡΠΊΠ΅. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΡΡΡΠΏΠΈΠΌ ΠΊ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΏΠΈΡΠΊΠ° Π»ΠΈΠ½ΠΈΠΉ. ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΡΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠΌ Π΄Π»ΠΈΠ½Ρ ΡΠΏΠΈΡΠΊΠ° 16-Ρ Π»ΠΈΠ½ΠΈΡΠΌΠΈ, Π΅Π»ΠΈ Π½Π°Π΄ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈ Π±ΠΎΠ»ΡΡΠ΅, ΠΏΠΎΡΠΎΠΌ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΠΎΠ·ΡΠΌΡΠΌ ΡΠ°Π±Π»ΠΎΠ½ MakeTypelist ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Loki ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ΄ ΡΠ²ΠΎΠΈ Π½ΡΠΆΠ΄Ρ:
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Β«Π³ΠΎΠ»ΡΠΉΒ» ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠΎΠ² Π½Π°ΡΠΈΡ Π»ΠΈΠ½ΠΈΠΉ Π²Π²ΠΎΠ΄Π° Π²ΡΠ²ΠΎΠ΄Π°. ΠΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π»ΠΈΠ½ΠΈΠΉ, ΡΠ΄Π΅Π»Π°ΡΡ Ρ Π½ΠΈΠΌ ΠΏΠΎΠΊΠ° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ β Π΄Π»Ρ Π½Π΅Π³ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
ΠΠ°ΡΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠΈΠΌ ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΡΠΈΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ:
ΠΠ°Π»Π΅Π΅ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° Π»ΠΈΠ½ΠΈΠΉ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΈΠΌ ΠΏΠΎΡΡΠ°ΠΌ:
//ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° template struct GetPorts; // Π΄Π»Ρ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ β ΠΏΡΡΡΠΎΠΉ ΡΠΈΠΏ template <> struct GetPorts < typedef NullType Result; >; // Π΄Π»Ρ Π½Π΅ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° // ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠΎΠ² // ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π³ΠΎΠ»ΠΎΠ²Ρ Head ΠΈ Ρ Π²ΠΎΡΡ Tail template struct GetPorts > < private: // ΠΊΠ»Π°ΡΡ TPin ΠΏΠΎΠΌΠ½ΠΈΡ ΡΠ²ΠΎΠΉ ΠΏΠΎΡΡ // Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΡΡΠΎΡ ΡΠΈΠΏ ΠΏΠΎΡΡΠ° typedef typename Head::Pin::Port Port; //ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Ρ Π²ΠΎΡΡ typedef typename GetPorts ::Result L1; public: // ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠΎΠ² ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ° (Port) ΠΈ Ρ Π²ΠΎΡΡΠ° (L1) typedef Typelist
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ-ΠΆΠ΅ ΠΏΠΎΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ Π² Π½Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·. ΠΠ°ΠΌ Π½ΡΠΆΠ½Ρ Π½Π΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΏΠΎΡΡΡ, ΠΏΠΎ ΡΡΠΎΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ NoDuplicates ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Loki:
// ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠΎΠ² typedef typename GetPorts
::Result PinsToPorts; // Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠΎΠ² Π±Π΅Π· Π΄ΡΠ΄Π»ΠΈΠΊΠ°ΡΠΎΠ² typedef typename NoDuplicates
Π§ΡΠΎΠ±Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΡΠΎΡ ΠΎΠ΄ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ ΠΏΠΎΡΡΠΎΠ² ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ»Π°ΡΡΠ°. ΠΠ°Π·ΠΎΠ²ΡΠΌ Π΅Π³ΠΎ PortWriteIterator. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠΎΠ² ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ:
template struct PortWriteIterator;
Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΈ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΡΠ°ΠΌΠΈ. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π»ΠΈΠ½ΠΈΠΉ.
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π»ΠΈΠ½ΠΈΠΉ, ΡΠ΅ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΌΡ ΠΏΠΎΡΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΠΌ Π±ΠΈΡΠΎΠ²ΡΡ ΠΌΠ°ΡΠΊΡ Π΄Π»Ρ ΠΏΠΎΡΡΠ°.
//ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ TList Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ template struct GetPortMask; // ΠΠ»Ρ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ 0. template <> struct GetPortMask < enum
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΏΠΎΡΡ:
::Result Pins; // ΠΠΎΡΡΠΈΡΠ°Π΅ΠΌ Π±ΠΈΡΠΎΠ²ΡΡ ΠΌΠ°ΡΠΊΡ Π΄Π»Ρ ΠΏΠΎΡΡΠ° enum ::UppendValue(value); // Π΅ΡΠ»ΠΈ ΠΊΠΎΠ»-Π²ΠΎ Π±ΠΈΡ Π² Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΏΠΎΡΡΠ°, // ΡΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠΎΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. // ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ if((int)Length ::value == (int)Port::Width) Port::Write(result); else < // PORT = PORT & Mask | result; Port::ClearAndSet(Mask, result); >// ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ PortWriteIterator ::Write(value); > > Π€ΡΠ½ΠΊΡΠΈΡ PinWriteIterator::UppendValue ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π±ΠΈΡΡ Π²ΠΎ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ Π±ΠΈΡΡ Π² ΠΏΠΎΡΡΡ. ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² Π»ΠΈΠ½ΠΈΠΉ Π² ΡΠ΅Π»ΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΎ, Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ
Π±ΠΈΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±ΠΈΡ: ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π»ΠΈΠ½ΠΈΠΈ Π² ΠΏΠΎΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½. Π‘ ΡΡΡΡΠΎΠΌ Π²ΡΠ΅Π³ΠΎ Π²ΡΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡ PinSet Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ: ::Result PinsToPorts; public: typedef PINS PinTypeList; // Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠΎΠ² Π±Π΅Π· Π΄ΡΠ΄Π»ΠΈΠΊΠ°ΡΠΎΠ² typedef typename NoDuplicates ::Result Ports; // Π΄Π»ΠΈΠ½Π½Π° ΡΠΏΠΈΡΠΊΠ° Π»ΠΈΠ½ΠΈΠΉ enum ::value>; // Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠΉ Π² ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ // Π΅ΡΠ»ΠΈ Π΄Π»ΠΈΠ½Π½Π° ΡΠΏΠΈΡΠΊΠ° ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½Π° 8 Π±Π΅ΡΡΠΌ ΡΠΈΠΏ uint8_t, // Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ β uint16_t typedef typename IoPrivate::SelectSize ::Result DataType; //Π·Π°ΠΏΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ static void Write(DataType value) < PortWriteIterator Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ ΡΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ: ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠΈΡΠΊΠΎΠ² Π»ΠΈΠ½ΠΈΠΉ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΡ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΎΠ±ΡΡΡΠΊΡ: Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π‘ΡΠ°Π»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ β ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ, Π° ΠΏΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π³Π΄Π΅ ΡΠ³ΠΎΠ΄Π½ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² ΠΊΠ»Π°ΡΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠ΅ΠΉ. Π Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ. ΠΠ°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ ΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ
ΠΠ. //Π²ΡΠ²ΠΎΠ΄ Π² PORTA in r24, 0x1b andi r24, 0xF1 ori r24, 0x0A out 0x1b, r24 //Π²ΡΠ²ΠΎΠ΄ Π² PORTB in r24, 0x18 andi r24, 0xE7 ori r24, 0x10 out 0x18, r24 ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½Ρ ΠΈ ΠΎΠ½ Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡΡΠ½ΠΎ ΠΏΠΎΡΡΠΈΡΠ°Π» Π²ΡΠ΅ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠΊΠΈ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½Π΅ ΠΎΡΡΠ°Π²ΠΈΠ² Π½ΠΈΡΠ΅Π³ΠΎ Π»ΠΈΡΠ½Π΅Π³ΠΎ Π½Π° Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠ²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ Π΅ΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ? Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ (ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ ΡΠΎΡ-ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ): // MCU AtMega16 MyPins::Write(PORTC); // ΡΠΈΡΠ°Π΅ΠΌ PORTC in r18, 0x15 ; 21 //Π²ΡΠ²ΠΎΠ΄ Π² PORTA in r25, 0x1b ; 27 mov r24, r18 add r24, r24 andi r24, 0x0E ; 14 andi r25, 0xF1 ; 241 or r24, r25 out 0x1b, r24 ; 27 //Π²ΡΠ²ΠΎΠ΄ Π² PORTB in r24, 0x18 ; 24 andi r18, 0x18 ; 24 andi r24, 0xE7 ; 231 or r18, r24 out 0x18, r18 ; 24 Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ PORTC. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ΅Ρ, Π½Π΅ΠΏΡΠ°Π²Π΄Π°-Π»ΠΈ? ΠΠ°ΠΆΠ΅ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅. Π ΡΠΎΠΌΡ-ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²ΡΡΡΠ½ΡΡ ΡΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΡΡΠΈ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠΊΠΈ, ΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π΅Π»ΠΈΠΊ ΡΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΈΡΡΡΡ. // ΡΠΈΡΠ°Π΅ΠΌ PORTC.IN lds r18, 0x0648 mov r25, r18 add r25, r25 andi r25, 0x0E ; 14 //Π²ΡΠ²ΠΎΠ΄ Π² PORTA ldi r30, 0x00 ; 0 ldi r31, 0x06 ; 6 ldi r24, 0x0E ; 14 std Z+6, r24 ; 0x06 std Z+5, r25 ; 0x05 andi r18, 0x18 ; 24 //Π²ΡΠ²ΠΎΠ΄ Π² PORTB ldi r30, 0x20 ; 32 ldi r31, 0x06 ; 6 ldi r24, 0x18 ; 24 std Z+6, r24 ; 0x06 std Z+5, r18 ; 0x05 ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ
ΡΠ°ΡΡ
ΠΎΠ΄Π°Ρ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π‘ΠΈ++ Π·Π΄Π΅ΡΡ Π½Π΅ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΉ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π»ΠΈΠ½ΠΈΠΉ (DDRx). ::Write(value); > //Π·Π°ΠΏΠΈΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ static void DirWrite(DataType value) < PortWriteIterator Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΠΊΠ»Π°ΡΡ PortWriteIterator. ::value == (int)Port::Width) Port::DirWrite(result); else < Port::DirClear(Mask); Port::DirSet(result); >PortWriteIterator ::DirWrite(value); > >; ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Set, Clear, DirSet, DirClear Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΡ Π±ΠΈΡΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π² ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ
ΠΏΠΎΡΡΠ° ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ
Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΡΡΠ°ΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΡΡΠ°. ΠΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡ: ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π½Π° ΡΡΠ΅Π½ΠΈΠΈ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ. ΠΡΠ°ΠΊ Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΠ. ΠΠΎ Π²Π΅Π΄Ρ Π·Π°Π΄Π°ΡΠ° Π±ΡΠ»Π° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΈΡΠ΅ β ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ΠΎΡ Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ². Π ΡΡΠ° ΡΠ΅Π»Ρ ΡΠΆΠ΅ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠ°. ΠΠ»Π°ΡΡ TPin, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ Π»ΠΈΠ½ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΈ ΡΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Ρ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠΎΠ² Π/Π. ΠΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΈΠ΄Π½ΠΎ Π½Π° ΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΡΡΠΎ Ρ Π½Π°Ρ ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΏΠΎΡΡΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ² Tiny/Mega AVR, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ XMega. Π’Π°ΠΊ Π²ΠΎΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠ»Π°ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΡΡΠ° Π/Π, ΠΈ ΡΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ Π±ΡΠ΄ΡΡ Ρ Π½ΠΈΠΌ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΠΎΠ·ΡΠΌΡΠΌ, ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ ΡΠ°Π½Π΅Π΅, ΡΠ΄Π²ΠΈΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π»ΠΈΠ½ΠΈΠΉ Π/Π. template class ThreePinLatch < public: typedef T DataT; // Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΡΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ°Ρ
Π»ΠΈΠ½ΠΈΠΉ enum clearMask) | value); > static void Set(DataT value) < Write(_currentValue |= value); >static void Clear(DataT value) < Write(_currentValue &= value); > static void Togle(DataT value) < Write(_currentValue ^= value); >static void DirWrite(DataT value) < /*Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅*/ >static DataT DirRead() < return 0xff; //Π²ΡΠ΅Π³Π΄Π° Π²ΡΡ
ΠΎΠ΄ >static void DirSet(DataT value)*> static void DirClear(DataT value)*> static void DirTogle(DataT value)*> protected: // ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ static DataT _currentValue; >; template T ThreePinLatch ::_currentValue = 0; ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ
Π»ΠΈΠ½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ° β ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Π²ΡΡ
ΠΎΠ΄, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΈ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ. ΠΠΎΠΏΡΡΠΊΠ° ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΠ° Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ°ΡΠΎ Π½Π° Π·Π°ΠΏΠΈΡΡ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. Π ΠΌΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ Β«ΠΏΠΎΡΡΒ» ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ Π»ΠΈΠ½ΠΈΠΉ. ΠΡΠΈΡΠ΅ΠΌ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠΎΡΡΠ°Π² ΡΠΏΠΈΡΠΊΠ° Π»ΠΈΠ½ΠΈΠΉ β ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π»ΠΈΠ½ΠΈΠΈ ΡΠ΄Π²ΠΈΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΈ Π»ΠΈΠ½ΠΈΠΈ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΏΠΎΡΡΠΎΠ². Π Π½Π°ΡΠΈΡ
ΡΠ΅Π»ΡΡ
Π·Π½Π°ΡΠΈΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ±ΠΈΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π½ΠΎ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ Π±ΠΈΡΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΏΠΈΡΠΊΠΎΠ² Π»ΠΈΠ½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ. ΠΠΎ ΠΏΠ΅ΡΠ²ΡΡ
, ΡΡΠΎ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π»ΠΈΠ½ΠΈΡΠΌ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΠΊΠ»Π°ΡΡ PinSet Π΄ΠΎΠΏΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄: template class Pin :public TypeAt ΠΠ΄Π΅ΡΡ ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ TypeAt ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Loki, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΡΠΈΠΏΠΎΠ² ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΈΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ: ΠΠ±ΠΎΠ±ΡΠ°Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π±ΠΈΡΠ°ΠΌ Π² ΡΠΏΠΈΡΠΊΠ΅ Π»ΠΈΠ½ΠΈΠΉ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΡΡΠ΅Π·Π°. ΠΠ΅ Π±ΡΠ΄Ρ Π²Π΄Π°Π²Π°ΡΡΡΡ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΈΡ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΡΠΈΠ²Π΅Π΄Ρ Π»ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: // Π±Π΅ΡΡΠΌ ΡΡΠ΅Π· ΠΈΠ· MyPins Π½Π°ΡΠΈΠ½Π°Ρ Ρ 4-Π³ΠΎ Π±ΠΈΡΠ°, Π΄Π»ΠΈΠ½Π½ΠΎΠΉ 4 Π±ΠΈΡΠ°. typedef MyPins::Slice OtherPins; Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΈΠ½ΠΈΠΉ OtherPins, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ: ΠΡΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π³ΡΡΠΏΠΏΡ Π»ΠΈΠ½ΠΈΠΉ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΠ·ΠΎΠ² OtherPins::Write(ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ) Π·Π°ΠΏΠΈΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² 4 Π±ΠΈΡΠ° PORTB, Π½Π΅ Π·Π°ΡΡΠΎΠ½ΡΠ² Π»ΠΈΠ½ΠΈΠΈ Π² ΡΠ΄Π²ΠΈΠ³ΠΎΠ²ΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅. ΠΠΎΠ΄Π²Π΅Π΄ΡΠΌ ΠΈΡΠΎΠ³ΠΈ Β© ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈΠ½ Π§ΠΈΠΆΠΎΠ² Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ. ΠΡ ΠΏΠΎΡΡΡΡΠ°ΡΡΠΈΠ΅! ΠΡΠ΅Π³ΠΎ Π·Π° ΠΌΠ΅ΡΡΡ ΠΌΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ Π½ΡΠΆΠ½ΡΡ ΡΡΠΌΠΌΡ Π² 500000 Π½Π° Ρ
ΠΎΠΊΠΊΠ΅ΠΉΠ½ΡΡ ΠΊΠΎΡΠΎΠ±ΠΊΡ Π΄Π»Ρ Π΄Π΅ΡΡΠΊΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ° ΠΠΈΡΡΠ΅Π½ΠΎΠΊ. ΠΠ· ΠΊΠΎΡΠΎΡΡΡ
125000+ Π±ΡΠ»ΠΎ ΠΎΡ Π²Π°Ρ, ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ EasyElectronics. ΠΡΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π° 25000+ ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠΎΠΊ ΠΏΠ»Π°ΡΠ΅ΠΆΠ΅ΠΉ Π½Π° 251 ΡΡΠ±Π»Ρ. ΠΡΠΎ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΊΡΡΡΠΎ. Π‘Π΅ΠΉΡΠ°Ρ ΠΈΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ° ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΡΡΠ²Ρ! Π Ρ Π²ΡΡΡΡΠ» Π½Π° ΡΡΠΈ Π³ΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, Π΅ΠΆΠ΅ΠΌΠ΅ΡΡΡΠ½ΠΎΠΉ ΠΏΠ°Ρ
ΠΎΡΡ Π½Π°Π΄ ΡΡΠ°ΡΡΡΠΌΠΈ :)))))))))))) Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π²Π°ΠΌ Π·Π° ΡΠ°ΠΊΠΎΠΉ ΠΌΠΎΡΠ½ΡΠΉ ΠΏΠΈΠ½ΠΎΠΊ. Π_ΠΎ π
ΠΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ Π»ΠΈΡΡΠΈΠ½Π³:
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΡ-ΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ AtXMega128a1. Π ΡΡΠΎΠΌ ΠΠ ΠΏΠΎΡΡΡ Π/Π Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ in ΠΈ out. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠΎΠ², ΡΡΠΈΡΡΠ²Π°ΡΡΠ°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° XMega Ρ Π½Π°Ρ ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π°.
Π¦Π΅Π»ΠΈ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π΄Π»Ρ ΠΠ Π½Π° Π‘ΠΈ++ Π±ΡΠ»ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅ΡΠ΅. ΠΠΎΡΡΠΈΠ³Π½ΡΡΠ° ΠΊΠ°ΠΊ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ±ΠΈΡΠΎΠ²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠ°ΠΊ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ Π»ΠΈΠ½ΠΈΡΠΌΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. Π‘ΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ΄ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Ρ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠΎΠ². Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΠ΅Π· SPI ΡΠ°ΡΡΠΈΡΠΈΡΠ΅Π»Ρ ΠΏΠΎΡΡΠΎΠ²) ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ, ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π° Π΄ΡΡΠ³ΠΎΠ΅ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ ΠΠ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΡΡΠ° Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠΈΡΠΊΠΎΠ² Π»ΠΈΠ½ΠΈΠΉ (Π½ΠΎ Π²Π΅Π΄Ρ ΠΎΠ½ΠΈ ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Ρ) ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° Π‘ΠΈ++.
Email: klen1@mail.ru Π‘Π΅Π½ΡΡΠ±ΡΡ 201086 thoughts on βΠ Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² Π½Π° Π‘ΠΈ++β
Π’ΡΡΠΊΠ°:)
ΠΠΏΡ ΡΠ°ΠΊΠ°Ρ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΡΠ°ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ ΠΠ))