一个很基本的串口程序
功能:给
单片机发6个字符,然后让它返回这6个字符
出现2个问题‘
1,第一次用串口发送时,只返回4个字符(也许与程序没关系)
2,每次返回的字符多了另一个。如发送123456,却返回的是1234565
程序如下,希望大家能帮忙 ,谢谢
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag=0,i;
uchar temp[6];
uchar num=0 ;
int j ;
void init() //串口初始化
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void main()
{
init();
while(1)
{
if(flag==6) //收到6个字符后,执行
{
ES=0; //关中断,既发送时不计入中断
i=0;
while(temp[i]!=' ') //为什么用这种方式会多返回一个字符5,结束符?
{
SBUF=temp[i];
while(!
ti);
TI=0;
i++;
}
ES=1;
flag=0;
}
}
}
void ser() interrupt 4
{
if(RI) //只有当接收时,才执行以下程序★★★★★
{
RI=0;
temp[flag]=SBUF; //接受到的字符存到数组中
flag++;
}
}
while(temp[i]!=' ') //为什么用这种方式会多返回一个字符5,结束符?
{
SBUF=temp[i];
while(!TI);
TI=0;
i++;
}
把以上程序,改成一下是正确的
for(i=0;i<6;i++)
{
SBUF=temp[i];
while(!TI);
TI=0;
}
while(temp[i]!=' ') 这句话的意思把temp当成一个字符串,你可以在初始化的时候temp[6] = {0};试下。
当然最好的办法还是不用while,因为你知道有几个数字,直接用for就可以。
我试过这样定义temp[]={‘0’,‘0’,‘0’,‘0’,‘0’,‘0’} 还是不行,但是其他的数组我可以用这个方式 ,我把下面table[]数组也用这种方式,返回的是I get 没有错误啊
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag=0,a,i,b,c,d,e,f,g;
uchar code table[]="I get ";
uchar temp[6];
uchar num=0 ;
int j ;
void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void main()
{
init();
while(1)
{
if(flag==6)
{
ES=0;
// for(i=0;i<6;i++)
// {
// SBUF=table;
// while(!TI);
// TI=0;
// }
while(table!=' ')
{
SBUF=temp;
while(!TI);
TI=0;
}
i=0;
for(i=0;i<6;i++)
{
SBUF=temp;
while(!TI);
TI=0;
i++;
}
//
// i=0;
// while(temp!=' ') //为什么用这种方式会多返回一个字符5,结束符?
// {
// SBUF=temp;
// while(!TI);
// TI=0;
// i++;
// }
ES=1;
flag=0;
}
}
}
void ser() interrupt 4
{
if(RI) //只有当接收时,才执行以下程序★★★★★
{
RI=0;
// if(flag==temp1[flag])
// {
temp[flag]=SBUF;
// }
flag++;
}
}
我等下取试试
一周热门 更多>