一道51单片机的C语言程序,关于串口通讯的,很简单......
好吧,从头到尾麻烦都详细讲一下吧。。。。就像//这样的注释。。。。。。。。。。。。。。。。。。利用上位机串口调试助手发送一个字符,单片机收到字符后返回给上位机“Irece...
好吧,从头到尾麻烦都详细讲一下吧。。。。
就像//这样的注释。。。。。。。。。。。。。。。。。。
利用上位机串口调试助手发送一个字符,单片机收到字符后返回给上位机“I receive, thanks ”。串口的波特率设为9600bps。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i;
uchar code table1[]=" , thanks ";
uchar code table[]="I receive";
void init()
{
} //设置工作方式,这个懂。
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
for(i=0;i<18;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void serial() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
好吧,从头到尾麻烦都详细讲一下吧。。。。
就像//这样的注释。。。。。。。。。。。。。。。。。。
uchar code table1[]=" , thanks ";
uchar code table[]="I receive";
这两句话打错了,应该是
uchar code table[]="I receive, thanks ";
大一学的C语言,大三都忘差不多了...
再加上单片机,更不懂了...
麻烦高手来点详细的解释吧。。。 展开
就像//这样的注释。。。。。。。。。。。。。。。。。。
利用上位机串口调试助手发送一个字符,单片机收到字符后返回给上位机“I receive, thanks ”。串口的波特率设为9600bps。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i;
uchar code table1[]=" , thanks ";
uchar code table[]="I receive";
void init()
{
} //设置工作方式,这个懂。
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
for(i=0;i<18;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void serial() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
好吧,从头到尾麻烦都详细讲一下吧。。。。
就像//这样的注释。。。。。。。。。。。。。。。。。。
uchar code table1[]=" , thanks ";
uchar code table[]="I receive";
这两句话打错了,应该是
uchar code table[]="I receive, thanks ";
大一学的C语言,大三都忘差不多了...
再加上单片机,更不懂了...
麻烦高手来点详细的解释吧。。。 展开
展开全部
#include<reg52.h> //增强型52寄存器的定义
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
unsigned char flag,a,i; //定义变量flag,a,i
uchar code table[]="I receive,thanks"; //定义一个字符串数组
void init()
{
} //设置工作方式,这个懂。
void main()
{
init(); //系统初始化,你懂的
while(1) //主循环部分,一直运行
{
if(flag==1) //等待flag标志位置位,当接收到数据的时候在串口接收中断中置位
{
ES=0; //禁止串口中断,但是注意发送中断标志位的置位仍然正常
for(i=0;i<18;i++) //for循环为了一个个把之前定义的字符串
{
SBUF=table[i]; //向串口收发缓冲器中写入回应的内容“I receive,thanks”
while(!TI); //等待发送完成,发送中断标志被置一,否则while循环一直进行
TI=0; //清除发送中断标志位
}
SBUF=a; //继续通过串口向串口收发缓冲器发送a,回显收到的数据
while(!TI); //等待发送完成
TI=0; //清除发送中断标志位
ES=1; //重新使能串口中断
flag=0; //清除flag,为了等待下一次接收
}
}
}
void serial() interrupt 4 //串口中断服务程序,优先级为4
{
RI=0; //当接收完成之后RI被置一,发生串口中断,清标志位
a=SBUF; //读取收到的字符,并赋给变量a
flag=1; //置接收完成标志flag为一,便于主程序中发送响应
}
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
unsigned char flag,a,i; //定义变量flag,a,i
uchar code table[]="I receive,thanks"; //定义一个字符串数组
void init()
{
} //设置工作方式,这个懂。
void main()
{
init(); //系统初始化,你懂的
while(1) //主循环部分,一直运行
{
if(flag==1) //等待flag标志位置位,当接收到数据的时候在串口接收中断中置位
{
ES=0; //禁止串口中断,但是注意发送中断标志位的置位仍然正常
for(i=0;i<18;i++) //for循环为了一个个把之前定义的字符串
{
SBUF=table[i]; //向串口收发缓冲器中写入回应的内容“I receive,thanks”
while(!TI); //等待发送完成,发送中断标志被置一,否则while循环一直进行
TI=0; //清除发送中断标志位
}
SBUF=a; //继续通过串口向串口收发缓冲器发送a,回显收到的数据
while(!TI); //等待发送完成
TI=0; //清除发送中断标志位
ES=1; //重新使能串口中断
flag=0; //清除flag,为了等待下一次接收
}
}
}
void serial() interrupt 4 //串口中断服务程序,优先级为4
{
RI=0; //当接收完成之后RI被置一,发生串口中断,清标志位
a=SBUF; //读取收到的字符,并赋给变量a
flag=1; //置接收完成标志flag为一,便于主程序中发送响应
}
展开全部
托你的福,我也学到了这点,谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<reg52.h> //头文件,c语言一样
#define uchar unsigned char //定义unsigned char为uchar
#define uint unsigned int
unsigned char flag,a,i; //定义unsigned char变量,其实这里用uchar也行
uchar code table[]="I receive, thanks "; //定义一个数组,存放到rom中,因为有code
void init()
{
} //设置工作方式,这个懂。
void main()
{
init(); //调用初始化函数
while(1) //while(1)循环,就是一直在这里面循环,一直接收
{
if(flag==1) //等待标志位也就是要等待接收中断执行之后,标志位置1,就是执行接收中断后,flag为1
{
ES=0; //关掉中断
for(i=0;i<18;i++) //for循环,依次取出数据发送(你写错了,是8)
{
SBUF=table[i]; //将你取出的一个uchar型数据送给SBUF
while(!TI); //等待发送完成,当发送完成后TI为1
TI=0; //发送中断清零,智能软件清零如果不清0会一直中断,出错的会
}
SBUF=a; //然后再发个a
while(!TI); //同上
TI=0;
ES=1; //置位中断标志位
flag=0; //清除标志位
}
}
}
void serial() interrupt 4 //中断,注意是interrupt 4
{
RI=0; //当发生中断清楚接收中断标志RI,也就是置0,它只能软件清零,一定要注意,只要你发送或者接收到后,RI和TI都会置位,必须软件清0
a=SBUF; //从SBUF中取出数据
flag=1; //标志位置1
}
呵呵,好了,慢慢来吧,单片机还是挺重要的~~~
记得给分啊~~~
(*^__^*) 嘻嘻……
#define uchar unsigned char //定义unsigned char为uchar
#define uint unsigned int
unsigned char flag,a,i; //定义unsigned char变量,其实这里用uchar也行
uchar code table[]="I receive, thanks "; //定义一个数组,存放到rom中,因为有code
void init()
{
} //设置工作方式,这个懂。
void main()
{
init(); //调用初始化函数
while(1) //while(1)循环,就是一直在这里面循环,一直接收
{
if(flag==1) //等待标志位也就是要等待接收中断执行之后,标志位置1,就是执行接收中断后,flag为1
{
ES=0; //关掉中断
for(i=0;i<18;i++) //for循环,依次取出数据发送(你写错了,是8)
{
SBUF=table[i]; //将你取出的一个uchar型数据送给SBUF
while(!TI); //等待发送完成,当发送完成后TI为1
TI=0; //发送中断清零,智能软件清零如果不清0会一直中断,出错的会
}
SBUF=a; //然后再发个a
while(!TI); //同上
TI=0;
ES=1; //置位中断标志位
flag=0; //清除标志位
}
}
}
void serial() interrupt 4 //中断,注意是interrupt 4
{
RI=0; //当发生中断清楚接收中断标志RI,也就是置0,它只能软件清零,一定要注意,只要你发送或者接收到后,RI和TI都会置位,必须软件清0
a=SBUF; //从SBUF中取出数据
flag=1; //标志位置1
}
呵呵,好了,慢慢来吧,单片机还是挺重要的~~~
记得给分啊~~~
(*^__^*) 嘻嘻……
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询