๋ฐ์ํ
๐ A31G123ML + Keil uVision โ ์ธ๋ถ ์ธํฐ๋ฝํธ๋ก ๋ฒํผ ๋๋ฅด๊ธฐ
์ด๋ฒ ์ค์ต์์๋ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๊ณ , ๊ทธ์ ๋ฐ๋ผ LED๊ฐ ํ ๊ธ๋๋ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค.
์ด๋ CPU๊ฐ ๋๊ธฐ ์์ด ์ด๋ฒคํธ์ ๋ฐ์ํ๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์, ์ค์๊ฐ ์์คํ ๊ฐ๋ฐ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๐งฐ ์ค๋น๋ฌผ
- ABOV A31G123ML ๋ณด๋
- ํธ์๋ฒํผ 1๊ฐ
- LED 1๊ฐ
- ํ๋ค์ด ์ ํญ (10kฮฉ)
๐งฑ ํ๋ก ์ฐ๊ฒฐ
- ๋ฒํผ: P1.0 (์ ๋ ฅ ํ) โ 5V / GND โ ํ๋ค์ด
- LED: P0.0 (์ถ๋ ฅ ํ)
๐ป ์ฝ๋ ์์: ๋ฒํผ ๋๋ฅด๋ฉด LED ํ ๊ธ
#include "A31G123.h" volatile uint8_t led_state = 0; void EXINT0_IRQHandler(void) { if (EXINT->PEND & (1 << 0)) { EXINT->PEND = (1 << 0); // ์ธํฐ๋ฝํธ ํ๋๊ทธ ํด๋ฆฌ์ด led_state ^= 1; if (led_state) PORT0->OUT |= (1 << 0); else PORT0->OUT &= ~(1 << 0); } } void exint0_init(void) { PORT1->MODE &= ~(1 << 0); // P1.0 ์ ๋ ฅ PORT1->PULLUP |= (1 << 0); // ๋ด๋ถ ํ์ ์ฌ์ฉ ๊ฐ๋ฅ (๋๋ ์ธ๋ถ ํ๋ค์ด) EXINT->CFG &= ~(0x03 << 0); // Falling edge EXINT->MASK |= (1 << 0); // Mask ํด์ EXINT->PEND = (1 << 0); // Pending clear NVIC_EnableIRQ(EXINT0_IRQn); // NVIC ํ์ฑํ } int main(void) { PORT0->MODE |= (1 << 0); // P0.0 ์ถ๋ ฅ PORT0->OUTEN |= (1 << 0); // Push-pull PORT0->OUT &= ~(1 << 0); // ์ด๊ธฐ๊ฐ OFF exint0_init(); while (1) { // ๋ฉ์ธ ๋ฃจํ๋ ์๋ฌด ๊ฒ๋ ํ์ง ์์ (์ธํฐ๋ฝํธ๋ง ์ฌ์ฉ) } }
โ ํ์ธ ํฌ์ธํธ
- ๋ฒํผ์ ๋๋ฅผ ๋๋ง๋ค LED๊ฐ ํ ๊ธ๋จ
- main ๋ฃจํ๋ ๋๊ธฐ ์์ด ์ธํฐ๋ฝํธ๋ง์ผ๋ก ๋์
- EXINT ์ค์ ์ ๋ฐ๋ผ rising/falling edge ์ ํ ๊ฐ๋ฅ
๐ ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ํธ์์๋ ์ธ๋ถ ์
๋ ฅ ์ด๋ฒคํธ์ ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ์ค์ตํ์ต๋๋ค.
๋ค์ ํธ์์๋ UART ์๋ฆฌ์ผ ํต์ ์ผ๋ก PC์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์๋ณด๊ฒ ์ต๋๋ค ๐ป๐ก
๋ฐ์ํ