BASIC4MCU | 질문게시판 | 답변 : atmega128 입력 받아서 조건문 실행 질문
페이지 정보
작성자 master 작성일2020-10-10 21:45 조회3,481회 댓글1건본문
신호 세 개를 받아서 실행시키는 조건문을 하고 싶은데 안되서 도움을 구하고싶습니다.
버튼입력을 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>
//
bit FLAG=0,mode=0;
//
void main(void){
DDRA=0xFF; //LED 출력
//DDRC=0x00; //버튼 입력
DDRD=0xFF; //motor 출력
//DDRE=0x00; //OPAMP 입력
while(1){
if(PINE&0xC0)==0xC0){
if(mode){ // mode가 0이 아니면 (1이면)
PORTA=0x18; PORTD=0x14; delay_ms(3000); //LED 왼쪽 2개만 켜기 //모터 역회전
PORTD=0x1C; delay_ms(1000); //모터 정지
}
else{ // mode가 0이면
PORTA=0x1F; PORTD=0x0C; delay_ms(3000); //LED 전부켜기 //모터 정회전
PORTD=0x1C; delay_ms(1000); //모터 정지
}
}
//----------------------------------
if(PINC.0){
if(FLAG==0){ FLAG=1; mode=~mode; delay_ms(100); } //PINC.0 상승엣지 시 mode 토글
}
else{
if(FLAG){ FLAG=0; delay_ms(100); } //PINC.0 하강엣지 시 FLAG 초기화
}
}
}
여기까지는 버튼연결안되어있고 업로드시 점등만되도록 짜놓은 상태입니다.
여기서 14번 추가하고 버튼 누를 시에 점등 순서를 바꾸고 싶은데 어떻게 해야 할까요? 많이 초보입니다ㅜㅜ
//
대충 변경 해드렸습니다만
점등 순서를 바꾼다는 뜻이 무슨 말인지는 모르겠습니다.
댓글 1
조회수 3,481카안님의 댓글
카안 작성일감사합니다. 오늘도 배워갑니다.