BASIC4MCU | 질문게시판 | ATmega128 외부인터럽트를 이용한 카운트
페이지 정보
작성자 사구구 작성일2018-04-08 01:33 조회7,506회 댓글1건본문
#include <stdlib.h>
#include <delay.h>
#include <mega128.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
bit speed_flag=0;
void MotorA_1(void)
{
PORTC=0x08;
delay_ms(5);
PORTC=0x04;
delay_ms(5);
PORTC=0x02;
delay_ms(5);
PORTC=0x01;
delay_ms(5);
}
void MotorA_2(void)
{
PORTC=0x08;
delay_ms(10);
PORTC=0x04;
delay_ms(10);
PORTC=0x02;
delay_ms(10);
PORTC=0x01;
delay_ms(10);
}
void Interrupt_init(void)
{
EICRB = 0x02;
EIMSK = 0x10;
DDRE.4=0;
SREG |= 0x80;
}
interrupt [EXT_INT4] void ext_int4_isr(void)
{
speed_flag++;
}
void Port_Init()
{
DDRB = 0xFF; //모터를 구동시키기 위해 포트B의 8비트 모두 출력으로 설정. MAIN 모터
DDRC = 0xFF; // 서브 모터 제
DDRF = 0xf0; //버튼
}
void main(void)
{
Port_Init();
Interrupt_init();
speed_flag=0;
while(1)
{
}
/////////////////바퀴제어/////////////////////////////
if (speed_flag==1)
{
MotorA_1();
}
else if(speed_flag==2)
{
MotorA_2();
}
if (speed_flag==3)
{
PORTB=0x00;
speed_flag=0;
}
delay_ms(1);
}
}
인터럽트방식을 이용하여 변수를 하나씩 증가해가며 모터 속도를 올리고 정지 시키려고 하는데 처음 누르면 동작을 하다가 한번 더 누르면 바로 정지를 해버립니다 ...
분명 인터럽터 안에 카운트가 아니라 not 방식을 이용하였을 때는 되었는데..
speed_flag를 3까지 증가 시키고자 합니다.하지만 speed_flag가 2가 되는 순간 바로 정지합니다.
어떻게 해야 될까요?
댓글 1
조회수 7,506사구구님의 댓글
사구구 작성일해결했습니다. 알고보니 변수를 정수형이 아닌 bit로 설정한 문제였습니다. 다른 분들도 참고하시길 바랍니다.