找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8971|回复: 14
收起左侧

C51通用串口收发数据C语言程序模块实例

  [复制链接]
回帖奖励 1 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次(中奖概率 10%)
hts2008222 发表于 2017-5-11 00:23 | 显示全部楼层 |阅读模式
#include <reg52.h>        //C51通用串口收发数据C语言程序模块
#define  uchar unsigned char
#define uint unsigned int
uchar shu;

bit i;
sbit  led1=P0^0;
void  delayms(uint xms)         //1ms;
{
   uint i,j;
   for(i=xms;i>0;i--)
       for(j=110;j>0;j--) ;


}
/************************************************************************/
void  UART_init()
{
  TMOD=0X20;//定时器1方式        2
  SCON=0X50;//K串口方式          
  TH1=0XFD;
  TL1=0XFD;
  EA=1;
  ES=1;
  TR1=1;

}


/*********************************
函数:void main(void)
____________________________________
说明:主函数,程序执行从这里开始
********************************/
void main(void)
{

   UART_init();
   while(1 ) ;
          
}

/*********************************
函数:void Inter()         interrunpt 4
____________________________________
说明:串口中断处理程序
********************************/
void Inter() interrupt 4
{
   uchar i=0;
  if(RI)        //判断是否接收完毕
  {
    RI=0; //是则RI清零,准备下一次接收
        shu=SBUF;
        SBUF=shu;
   }
   if(TI) //发送数据回去
   {
             TI=0;
   }
   if(shu== 0x30)   //判断接收到的数据, 并作出相应处理
        {
                 
          led1=1;//LED灯灭
         }
   if(shu == 0x31)        //判断接收到的数据, 并作出相应处理
        {
          led1=0;
        }
       
         if(shu== 0x32)   //判断接收到的数据, 并作出相应处理
        {
           for(i=0;i<10;i++)
          {
           led1=~led1;
           delayms(200);
          }
          
        }

}

回复

使用道具 举报

liuzhaoxin1020 发表于 2017-5-11 09:23 | 显示全部楼层
不错的文件,值得收藏
回复

使用道具 举报

13976778401 发表于 2017-5-11 09:49 | 显示全部楼层
只有收程序,发的程序呢?
回复

使用道具 举报

 楼主| hts2008222 发表于 2017-5-28 08:57 | 显示全部楼层
发的程序;
if(TI) //发送数据回去
   {
             TI=0;
   }
回复

使用道具 举报

lhyspurs 发表于 2017-5-29 22:18 | 显示全部楼层
只有收程序,发的程序呢?
回复

使用道具 举报

qwe1818 发表于 2017-11-30 20:28 | 显示全部楼层
很好如果能运行正是我想要的,感谢分享。
回复

使用道具 举报

回到原点 发表于 2017-12-20 20:35 | 显示全部楼层
漂亮
回复

使用道具 举报

feiyu1209 发表于 2018-7-6 22:47 | 显示全部楼层
楼主,程序试了下,很好用。能不能再详细讲讲,如果接收不是判断0,1,2.而是改成一段字符串比如“dakai”,"guanbi","shansuo“,这咋写啊?
还有,就是如果是比如15秒就自动发一“hello”,然后就开始接收或是等待接收,这咋写啊?
新手求教。望详解。谢谢
回复

使用道具 举报

wdliming 发表于 2018-7-25 20:56 | 显示全部楼层
谢谢分享。基础
回复

使用道具 举报

 楼主| hts2008222 发表于 2020-3-30 16:14 | 显示全部楼层
if(RI)        //判断是否接收完毕
  {
    RI=0; //是则RI清零,准备下一次接收
        shu=SBUF; //接收到的数据送给 shu变量存储
        SBUF=shu;  //发送 shu变量存储的数据回去
   }
   if(TI) //发送数据回去
   {
             TI=0;
   }
回复

使用道具 举报

而非非人非 发表于 2020-3-30 19:33 | 显示全部楼层
不错的文件,值得收藏
回复

使用道具 举报

同凨 发表于 2020-7-31 13:55 | 显示全部楼层
为什么实际运行的时候会有一定丢数据的概率
回复

使用道具 举报

lll888yyyy 发表于 2020-7-31 15:08 | 显示全部楼层
看看怎么样?谢谢分享!
回复

使用道具 举报

多喝水 发表于 2020-7-31 16:39 来自手机 | 显示全部楼层
值得收藏
回复

使用道具 举报

 楼主| hts2008222 发表于 2021-6-28 14:07 | 显示全部楼层
feiyu1209 发表于 2018-7-6 22:47
楼主,程序试了下,很好用。能不能再详细讲讲,如果接收不是判断0,1,2.而是改成一段字符串比如“dakai”,"g ...

这个你要配合PC的ASCII码进行转换就可以实现,代码和原理上比较复杂,关连知识很多,先学好最基础的,以后需要时,就会很容易明白的了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表