一个很基本的串口程序
功能:给
单片机发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]!=' ') 这句话的意思把temp当成一个字符串,你可以在初始化的时候temp[6] = {0};试下。
当然最好的办法还是不用while,因为你知道有几个数字,直接用for就可以。
一周热门 更多>