BASIC4MCU | 질문게시판 | atmega128 입력 받아서 조건문 실행 질문
페이지 정보
작성자 카안 작성일2020-10-10 18:04 조회2,402회 댓글0건본문
안녕하세요.
신호 세 개를 받아서 실행시키는 조건문을 하고 싶은데 안되서 도움을 구하고싶습니다.
버튼입력을 PINC.0과 PINE.6과 PINE.7으로 받습니다.
PINC.0에 받은 신호는 FLAG 변수를 토글할 수 있게 했습니다
PORTA와 D에는 각각 LED와 모터가 달려있습니다.
PINC.0 신호로 FLAG 변수가 토글됨에따라 PINE.6과 7 신호를 받았을 때 다르게 동작시키고 싶은데
조건문이 이상한지 아무것도 동작을 안하네요.
LED와 모터 모두 atmega128로 동작되는 걸 확인했고 OPAMP와 버튼 신호도
정상적으로 들어오는 걸 확인해서 조건문이 이상한거같은데
if(PINE.6 & PINE.7 & FLAG==1)도 안되고
if((PINE== 0b11000000) & ~FLAG ==1) 도 안되는데
조건문에서 FLAG를 빼면 정상작동하는데 FLAG 토글이 문제인거같기도 하고
조건문이 이상한거같기도 하고 도와주세요.
#include <mega128a.h>
#include <delay.h>
#include <stdio.h>
unsigned int FLAG=0b0;
void main(void)
{
DDRA =0xFF; //LED 출력
PORTA=0x00;
DDRC =0x00; //버튼 입력
PORTC=0x00;
DDRD = 0xFF; //motor 출력
PORTD = 0x00; //초기값
DDRE=0x00; //OPAMP 입력
PORTE=0x00;
while(1)
{
if((PINE== 0b11000000) & ~FLAG ==1)
{
PORTA = 0b00011111; //LED 전부켜기
PORTD =0b00001100; //모터 정회전
delay_ms(3000);
PORTD=0b00011100; //모터 정지
delay_ms(1000);
}
else if((PINE== 0b11000000) & FLAG ==1)
{
PORTA = 0b00011000; //LED 왼쪽 2개만 켜기
PORTD =0b00010100; //모터 역회전
delay_ms(3000);
PORTD=0b00011100; //모터 정지
delay_ms(1000);
}
else if(PINC.0==1)
{
FLAG=~FLAG; //PINC.0 신호를 받아서 FLAG 토글
delay_ms(1000); //연속 입력방지
}
}//endwhile
}//end main
댓글 0
조회수 2,402등록된 댓글이 없습니다.