안녕하세요 저는 89c52와 sim548c 모듈을 통신하려고합니다. 나는 AT 명령을 보내고 마이크로 컨트롤러에 모든 응답을 배열로 저장하고 검색 기능을 통해 올바른 응답이 전송되었는지 확인하여 다음 AT 명령으로 넘어갈 수 있는지 확인합니다. 이를 위해서는 양방향 직렬 전송이 필요합니다. 우선 직렬 AT 명령을 보낸 다음 수신을 활성화하고 모듈의 모든 응답을 배열에 저장해야합니다. 이 프로그램을 사용하고 있지만 마이크로 컨트롤러가 들어오는 데이터를 받아 어레이에 저장할 수는 없습니다. 그것은 성공적으로 전송하지만받지 못합니다. 문제가 무엇인지 친절하게 파악할 수 있습니까?마이크로 컨트롤러에서 비동기식 UART 전송 8051
int check=0;
int out=0;
unsigned char info[20]={"00000000000000000000"};
unsigned char *s;
unsigned char a[3],b[3];
void transmit_data(unsigned char str)
{
SBUF=str;
while(TI==0);
TI=0;
}
void send_serial(unsigned char *s)
{
delay(50);
while(*s!=0x0)
{
SBUF=*s;
while(TI==0)
{
}
TI=0;
s++;
}
}
void receive_data() interrupt 4
{
if(RI)
{
info[check++]=SBUF;
RI=0;
}
if(TI)
TI=0;
}
void search(unsigned char b[])
{
int l=0;
for(l;l<18;l++)
{
if(info[l]==b[0] && info[l+1]==b[1] && info[l+2]==b[2])
{
out=1;
break;
}
}
}
void compare(unsigned char *s, unsigned char a[]) //for CIPSEND
{
while(1)
{
out=0;
check=0;
delay(50);
send_serial("AT+CIPSEND\r");
delay(100);
send_serial(s);
transmit_data(0x0D);
transmit_data(0x0A);
transmit_data(0x1A);
IE=0x90;
delay(200);
IE=0x88;
search(a);
if (out==1)
break;
}
}
RI 및 SBUF는 어떻게 정의됩니까? 필요한 경우 휘발성으로 표시됩니까? 또한 루프백을 수행하거나 알려진 데이터를 생성하고 수신이 전혀 작동하는지 확인할 수 있습니까? –
나는 당신이 사용하는 컴파일러/libs에 대해 언급해야한다고 생각한다. – XTL