BASIC4MCU | 질문게시판 | ATmega128 외부 인터럽트 코드 제어
페이지 정보
작성자 At메가 작성일2022-11-28 23:40 조회1,138회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=21875
본문
먼저 바쁘신 와중에 제 글을 읽어주셔서 감사합니다.현재 저는 Atmega128 을 독학으로 공부 중에 있습니다.예제 문제를 푸는 도중 어려운 문제가 있어 문의드리게 됐습니다.제가 코드를 작성하였으나, 코드를 어떻게 고쳐야 각각 문제에 맞을지 궁금해 질문 남겨드립니다.<문제 1>(LED 여덟 개와 푸시 스위치 두 개를 사용)첫 번째 푸시 스위치의 인터럽트가 발생하면 LED가 전부 점등되고두 번째 푸시 스위치의 인터럽트가 발생하면 LED가 전부 소등하는 프로그램을 제작하라.<문제 2>(LED 여덟 개와 푸시 스위치 두 개와 부저를 사용)처음에 LED는 하나만 점등되어 있다. 첫 번째 푸시 스위치의 인터럽트가 발생할 때마다 LED 1bit 가 점등되면서 시프트한다.두 번째 푸시 스위치의 인터럽트가 발생하면 자동으로 LED 1bit 가 점등되면서 시프트한다.다시 두 번째 푸시 스위치를 누르면 1bit 시프트가 멈추게 된다.두 번째 푸시 스위치에 의해 LED가 자동으로 1bit 시프트될 때 첫 번째 푸시 스위치로 지정한 LED 가 켜지면 부저가 울리는 프로그램을 제작하라.아래는 제가 작성한 프로그램 입니다.#define F_CPU 16000000UL#include <avr/io.h>#include <util/delay.h>#include <avr/interrupt.h>volatile unsigned char SegData[10] = {0x00, 0x01, 0x02, 0x03, 0x04,0x05, 0x06, 0x07, 0x08, 0x09}volatile int val = 0;void Init_io(void){DDRA = 0xFF;PORTA = 0xFF;}void Init_isr(void){EIMSK |= (1<<INT0)|(1<<INT1)|(1<<INT2);EICRA |= (1<<ISC01)|(1<<ISC11)|(1<<ISC21);}ISR(INT0_vect){VAL = 1;}ISR(INT1_vect){VAL = 3;}ISR(INT2_vect){VAL = 7;}int main(void){Init_io();Init_isr();sei();int cnt = 0;int num = 0;while(1){cnt++;if(cnt >= 50){num++;cnt = 0;}if(num >= 10) num = 0;if(cnt % 2) PORTA = SegData[num] | 0x10;else PORTA = SegData[val] | 0x20;_delay_ms(10);}}
댓글 1
조회수 1,138master님의 댓글
master 작성일
독학중인데 문제는 누가 내줬을까요?
서적에 있는 문제라면 해당 서적은 안보시는 것이 좋습니다.