게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
atmega128 코드 c언어 수정해봤는데 봐주세요 .ㅠ
게시물ID : science_15155짧은주소 복사하기
작성자 : 망량
추천 : 0
조회수 : 822회
댓글수 : 0개
등록시간 : 2012/11/20 22:47:15


#include <avr/io.h>

void _delay_ms(unsigned int m)
{
// 스텝모터의 펄스 크기값
unsigned int i,j;
for(i=0;i<m;i++)
 for(j=0;j<1200;j++);      
}
// 스텝모터 정방향으로 회전 하기 위한 위상값
void rotation()
{unsigned int j=1;
PORTB = 0x60;
_delay_ms(j);
PORTB = 0x20;
_delay_ms(j);
PORTB = 0x30;
_delay_ms(j);
PORTB = 0x10;
_delay_ms(j);
PORTB = 0x90;
_delay_ms(j);
PORTB = 0x80;
_delay_ms(j);
PORTB = 0xC0;
_delay_ms(j);
PORTB = 0x40;
_delay_ms(j);          



}
// 스텝모터 역방향으로 회전 하기 위한 위상값
void rerotation()
{unsigned int j=1;

PORTB = 0x40;
_delay_ms(j);
PORTB = 0xC0;
_delay_ms(j);
PORTB = 0x80;
_delay_ms(j);
PORTB = 0x90;
_delay_ms(j);
PORTB = 0x10;
_delay_ms(j);
PORTB = 0x30;
_delay_ms(j);
PORTB = 0x20;
_delay_ms(j);
PORTB = 0x60;
_delay_ms(j);           
}

int main(void)
{
unsigned int r=0;

DDRB = 0xFF;                  // 포트 B 출력핀으로 지정
DDRD = 0x00;                  // 포트 D 입력핀으로 지정 
DDRF = 0X00;                  // 포트 F 입력핀으로 지정
  
PORTB = 0x00;                 // 포트 B 초기화
PORTD = 0X00;                 // 포트 D 초기화 
PORTF = 0X00;                 // 포트 F 초기화

_delay_ms(100);


while(1)
{
// OPEN 스위가 눌리거나 적외선 센서에 물체가 감지되면 ( 포트D와 F에 값이 들어오면)
    if((PIND & 0X04)==4||(PINF & 0X02)==2)                                        
{
while((PIND & 0X08)==0) 
{
// OPEN 스위치가 눌린후 STOP 스위치가 눌릴때 까지 스텝모터 회전수 카운팅이 됨
        // _delay_ms의 내부함수를 통해 I값을 상승시키고 그것을 받아 r값을 세고 있는다. 
        // D포트에 신호가 들어와서 (PIND & 0X08)==8이 되면 이 while구문은 실행이 되지 
        // 않고 그동안 r값이 상승하엿기 때문에 아래 while구문이 실행되고 된다.
rotation();
r++;                   
}
 // 문이 열린후 대기 시간 
_delay_ms(2000);
// 카운팅한 r값이 0이 될 때까지 스텝모터 회전수를 역방향으로 회전하여 문을 닫음
while(r>0 )
{
r--;
rerotation();
}                       
}
}
}

----------------------------------------------------------------------------------------------------

#include <avr/io.h>

#define SENSER (PIND & 0X04)==4
#define OPEN (PINF & 0X02)==2
#define STOP (PIND & 0X08)==0


void _delay_ms(unsigned int m)
{
// 스텝모터의 펄스 크기값
unsigned int i,j;
for(i=0;i<m;i++)
 for(j=0;j<1200;j++);      
}
// 스텝모터 정방향으로 회전 하기 위한 위상값
void rotation(){
unsigned char data[8] = {0x08, 0x0b, 0x04, 0x06, 0x02, 0x03, 0x01, 0x09};
unsigned int j=1 ;
    
         for(j=0; j<1; j++){
             PORTB = data[j];
             _delay_ms(j);
         }
}

}
// 스텝모터 역방향으로 회전 하기 위한 위상값
void rerotation(){
unsigned char data[8] = {0x09, 0x01, 0x03, 0x02, 0x06, 0x04, 0x0b, 0x08};
unsigned int j=1 ;
    
         for(j=0; j<1; j++){
             PORTB = data[j];
             _delay_ms(j);
         }
}

int main(void)
{
unsigned int r=0;

DDRB = 0xFF;                  // 포트 B 출력핀으로 지정
DDRD = 0x00;                  // 포트 D 입력핀으로 지정 
DDRF = 0X00;                  // 포트 F 입력핀으로 지정
  
PORTB = 0x00;                 // 포트 B 초기화
PORTD = 0X00;                 // 포트 D 초기화 
PORTF = 0X00;                 // 포트 F 초기화

_delay_ms(100);


while(1)
{
// OPEN 스위가 눌리거나 적외선 센서에 물체가 감지되면 ( 포트D와 F에 값이 들어오면)
    if((SENSER) || (OPEN)                                        
{
while(STOP) 
{
// OPEN 스위치가 눌린후 STOP 스위치가 눌릴때 까지 스텝모터 회전수 카운팅이 됨
        // _delay_ms의 내부함수를 통해 I값을 상승시키고 그것을 받아 r값을 세고 있는다. 
        // D포트에 신호가 들어와서 (PIND & 0X08)==8이 되면 이 while구문은 실행이 되지 
        // 않고 그동안 r값이 상승하엿기 때문에 아래 while구문이 실행되고 된다.
rotation();
r++;                   
}
 // 문이 열린후 대기 시간 2초 
_delay_ms(2000);
// 카운팅한 r값이 0이 될 때까지 스텝모터 회전수를 역방향으로 회전하여 문을 닫음
while(r>0 )
{
r--;
rerotation();
}                       
}
}
}

위코드를 아래 코드로 수정해봤는데 for문을 제대로 옮겼는지 define으로 정의하는게 제대로 한건지좀 봐주실수 있으세요  ?감사합니다. 
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호