BASIC4MCU | 질문게시판 | 아트메가 128 코딩 오류 질문입니다.
페이지 정보
작성자 태태킴 작성일2023-05-27 19:08 조회1,650회 댓글1건본문
안녕하세요. 아트메가128 인터럽트를 활용하여 모터 동작을 조절하고자 하는 코딩을 하고 있습니다.
아래와 같은 코딩을 작성했는데 오류코드가
volatile uint8_t motor_state = 0; // 모터 상태 (0: 정지, 1: 정회전, 2: 역회전)에서 }관련한 오류가 있다고 계속 뜹니다. 제 눈으로 계속 봤을 때는 크게 이상이 있는 부분이 눈에 띄지 않아서 답답해서 질문 올려봅니다. 감사합니다.
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#include <interrupt.h>
#define MOTOR_PIN1 BO1 // 모터 제어 핀1
#define MOTOR_PIN2 BO2 // 모터 제어 핀2
#define SWITCH_PIN 3 // 택트 스위치 핀
volatile uint8_t motor_state = 0; // 모터 상태 (0: 정지, 1: 정회전, 2: 역회전)
문제가 되는 부분
void motor_init() {
// 모터 제어 핀 초기화
DDRB |= (1 << MOTOR_PIN1) | (1 << MOTOR_PIN2);
}
void motor_stop() {
PORTB &= ~((1 << MOTOR_PIN1) | (1 << MOTOR_PIN2)); // 모터 제어 핀1과 핀2을 LOW로 설정
motor_state = 0; // 모터 상태를 정지로 설정
}
void motor_clockwise() {
PORTB |= (1 << MOTOR_PIN1); // 모터 제어 핀1을 HIGH로 설정
PORTB &= ~(1 << MOTOR_PIN2); // 모터 제어 핀2을 LOW로 설정
motor_state = 1; // 모터 상태를 정회전으로 설정
}
void motor_counter_clockwise() {
PORTB &= ~(1 << MOTOR_PIN1); // 모터 제어 핀1을 LOW로 설정
PORTB |= (1 << MOTOR_PIN2); // 모터 제어 핀2을 HIGH로 설정
motor_state = 2; // 모터 상태를 역회전으로 설정
}
interrupt [EXT_INT0] void ext_int0_isr() {
delay_ms(50); // 디바운싱을 위한 지연
if (PIND & (1 << PIND3)) {
// 택트 스위치가 한번 눌렸을 때
motor_clockwise(); // 모터 정회전
}
}
interrupt [EXT_INT1] void ext_int1_isr() {
delay_ms(50); // 디바운싱을 위한 지연
if (PIND & (1 << PIND3)) {
// 택트 스위치가 두번 눌렸을 때
motor_stop(); // 모터 작동 정지
}
}
interrupt [EXT_INT2] void ext_int2_isr() {
delay_ms(50); // 디바운싱을 위한 지연
if (PIND & (1 << PIND3)) {
// 택트 스위치가 세번 눌렸을 때
motor_counter_clockwise(); // 모터 역회전
}
}
void switch_init() {
// 택트 스위치 핀 초기화
DDRD &= ~(1 << SWITCH_PIN); // 입력으로 설정
PORTD |= (1 << SWITCH_PIN); // 풀업 저항 사용
}
void main() {
motor_init(); // 모터 초기화
switch_init(); // 택트 스위치 초기화
// 인터럽트 초기화
MCUCR = (1 << ISC01); // 하강 에지에서 인터럽트 발생
MCUCR |= (1 << ISC11); // 하강 에지에서 인터럽트 발생
MCUCSR &= ~(1 << ISC2); // 하강 에지에서 인터럽트 발생
GICR |= (1 << INT0) | (1 << INT1) | (1 << INT2); // 인터럽트 활성화
#asm("sei") // 전역 인터럽트 활성화
while (1) {
// 추가적인 작업 수행
}
}
댓글 1
조회수 1,650master님의 댓글
master 작성일
volatile uint8_t motor_state = 0; // 모터 상태 (0: 정지, 1: 정회전, 2: 역회전) <-- 문제가 되는 부분
//
char motor_state=0; // 모터 상태 (0: 정지, 1: 정회전, 2: 역회전) <-- 문제가 되는 부분