BASIC4MCU | 질문게시판 | 코드에러
페이지 정보
작성자 디코랩 작성일2018-09-12 20:00 조회9,320회 댓글2건본문
전에 네이버 지식인에 글을쓰고 답을 받은 코드에서 에러가 나서 질문 드립니다.
아래 코드에 별을 친 부분 근처에서 오류가 발생하여 , 뒤의 ;를 지우고 코딩을 해보았는데.
naver.c(110): error C249: 'DATA': SEGMENT TOO LARGE 라는 에러가 발생하여 컴파일이 안되었습니다.
이 부분을 어떻게 수정해야 좋을지 질문 드립니다.
아래 코드는 블루투스를 연동하여 일정 단어를 입력 받을경우 포트2의 모터가 동작하고
포트1_0에 사운드 센서에서 받은 신호가 들어올 경우 2_0의 모터가 1초 동작하는 코드 입니다.
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-08-22 오후 9:02:25
// by Ok-Hyun Park
//#include <reg51.h>
//
sbit sound=P0^0; // sound sensor
//
sbit m1f=P2^0; // in1 pin of motor1
sbit m1b=P2^1; // in2 pin of motor1
sbit m2f=P2^2; // in1 pin of motor2
sbit m2b=P2^3; // in2 pin of motor2
//
char msg1[]="robot is moving forward\n";
char msg2[]="robot is moving backward\n";
char msg3[]="robot is moving right\n";
char msg4[]="robot is moving left\n";
char msg5[]="robot is stopped\n";
//
char Smsg[]="Sound Sensor Detected\n";
//
void delay_us (unsigned int us ){ while(us--); }
void delay_ms (unsigned int ms ){ while(ms ){ delay_us( 112); ms--; } }
void delay_sec(unsigned char sec){ while(sec){ delay_ms(1000); sec--; } }
//
void delay(unsigned long d){ while(d--); }; ★이부분 오류
//
char rxdata(void) { while(!RI); RI=0; return SBUF; }
void txdata(char x){ while(!TI); TI=0; SBUF=x; }
void txStr(char *s){ while(*s)txdata(*s++); }
//
void main(void){
unsigned char s;
TMOD=0x20; // timer 1,mode 2,auto reload
SCON=0x50; // 8bit data,1 stop bit,REN enabled
TH1=0xfd; // timer value for 9600 bits per second(bps)
TR1=1;
while(1){
if(RI){ // hc-05 bluetooth 수신데이터가 있으면
s=rxdata();
if(s=='f'){ m1f=1; m1b=0; m2f=1; m2b=0; txStr(msg1); }
if(s=='b'){ m1f=0; m1b=1; m2f=0; m2b=1; txStr(msg2); }
if(s=='r'){ m1f=1; m1b=0; m2f=0; m2b=1; txStr(msg3); }
if(s=='l'){ m1f=0; m1b=1; m2f=1; m2b=0; txStr(msg4); }
if(s=='s'){ m1f=0; m1b=0; m2f=0; m2b=0; txStr(msg5); }
}
//
if(sound){ // sound 감지하면
txStr(Smsg);
m1f=1; m1b=0; // fwd
delay_ms(1000);
m1f=0; m1b=0; // stop
}
}
}
댓글 2
조회수 9,320master님의 댓글
master 작성일delay()함수는 사용하지 않으니 삭제하고 컴파일 해보세요
master님의 댓글
master 작성일
m1f=0; m1b=0; // stop
delay_ms(1000);
STOP 뒤에도 딜레이를 줘야합니다.