안녕하세요?
아래와 같이 짜깁기 코딩을 했는데
PORTC의 0번 pin으로 분명히 CDS 센서값 high가 들어오는데 모터가 꼼짝을
안합니다...low에서도 반응없구요...
if 조건문에서 0x41로 준건 reset키 때문입니다.(PORTC 06번 reset은 평상시 high)
코딩 환경은 AVR GCC 입니다....
port로 입력을 정확히 받으려면 어떻게 해야할까요?
#define MOTOR_DDR DDRD
#define MOTOR_PORT PORTD
#define PWM1_ON (MOTOR_PORT|=0x01)
#define PWM1_OFF (MOTOR_PORT&=0xFE)
#define LED_ON (MOTOR_PORT|=0x02)
#define LED_OFF (MOTOR_PORT&=0xFD)
#define DIR1_ON (MOTOR_PORT|=0x02)
#define DIR1_OFF (MOTOR_PORT&=0xFD)
#define ENABLE1_OFF (MOTOR_PORT|=0x04)
#define ENABLE1_ON (MOTOR_PORT&=0xFB)
#define BREAK1_ON (MOTOR_PORT|=0x08)
#define BREAK1_OFF (MOTOR_PORT&=0xF7)
void Port_Init(void)
{
//set Port B to output
DDRB = 0xFF;
//PORTB = 0x00;
//set Port C to input
DDRC = 0x3E;
PORTC = 0x41;
DDRD = 0xFF;
PORTD = 0x00;
}
void DC_Motor(void)
{
unsigned Tmp1;
int i, d, count=1;
//Tmp1 = (PINC,0);
if (PINC == 0x41){
BREAK1_OFF;
ENABLE1_ON;
count++;
DIR1_ON; // Ch1 정방향
for(d=0; d<10; d++){ // 속도 조절
for(i=0;i<100;i++){ // 10 번 PWM 발생
PWM1_ON; // PWM1 신호 1
delay(10-d);
PWM1_OFF; // PWM1 신호 0
delay(d);
if(d==2) {BREAK1_ON; break;}
} // 정지 (18200 Only)
}
}
else if (PINC == 0x40){
BREAK1_OFF;
ENABLE1_ON;
count++;
DIR1_OFF; // Ch1 역방향
for(d=0; d<10; d++){ // 속도 조절
for(i=0;i<100;i++){ // 10 번 PWM 발생
PWM1_ON; // PWM1 신호 1
delay(10-d);
PWM1_OFF; // PWM1 신호 0
delay(d);
if(d==2) {BREAK1_ON; break;}
}
}
}
}
int main(void)
{
MCUCR = 0x00;
Port_Init();
while(1){
//LED_Control();
DC_Motor();
}
이 구문은 pinc가 0x41과 같아야 되는 구문인데요..
비트 0번만 검사하려 한 의도라면 비트연산자로 PINC & 0x01해야겠지요^^
CDS가 뭐지 ?