首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

51单片机的串口通信有关问题

2012-03-23 
51单片机的串口通信问题这是写入单片机的程序#includereg52.h#define uint unsigned int#define uchar u

51单片机的串口通信问题
这是写入单片机的程序
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char flag,a; //flag用来判断是否有数据输入,a用来接收输入的数据
uint i;
uchar tab[]="123456";
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==1)//有数据输入,开始返回数据
{
ES=0;
for(i=0;i<6;i++)
{
SBUF=tab[i];
while(!TI);
TI=0;
}
TI=1;
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
无论向单片机用串口通信传输什么数据,返回的总是奇怪的字符,用了很多版本的串口调试助手都不行,我的系统是64位WIN7,请问问题出在哪里?怎样才能返回想要的数据?

[解决办法]
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char flag,a; //flag用来判断是否有数据输入,a用来接收输入的数据
uint i;
uchar tab[]="123456";//你把数组改成uchar code tab[]="123456";试一下
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==1)//有数据输入,开始返回数据
{
ES=0;
for(i=0;i<6;i++)
{
SBUF=tab[i]; 
while(!TI);
TI=0;
}
TI=1;//把这个去掉
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}

uchar code table[]="I get"试一下
[解决办法]

C/C++ code
#include<reg52.h>#define uint unsigned int#define uchar unsigned charunsigned char flag,a; //flag用来判断是否有数据输入,a用来接收输入的数据uint i;uchar tab[]="123456";void init()//初始化程序{    TMOD=0X20;    TH1=0XFD;    TL1=0XFD;    TR1=1;        SM0=0;    SM1=1;    REN=1;         // 先设置模式再使能接收。放在模式前面有问题,我也不知道为什么    EA=1;    ES=1;}void main(){    init();    while(1)    {        if(flag==1)//有数据输入,开始返回数据        {            ES=0;            for(i=0;i<6;i++)            {                SBUF=tab[i];                    while(!TI);                TI=0;            }            //TI=1;            // 这条语句在这里没有什么用。            SBUF=a;            while(!TI);            TI=0;            ES=1;            flag=0;        }    }}void ser() interrupt 4{    if(RI)             // 51串口接收和和发送共用一个中断源,虽然你发送的时候已经关闭了串口中断,最好进中断的时候还是判断一下                {        RI=0;        a=SBUF;        flag=1;    }} 

热点排行