找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4914|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机学习:串口接收和发送数据

[复制链接]
跳转到指定楼层
楼主
芯片STC89C52RC

在PC端向单片机发送任意数据后, 单片机向PC端发送4行文本,
由于在windos下,回车换行用





C代码
  1.     #include <reg52.h>  
  2.     #include "MY51.h"  
  3.       
  4.     void    initSer();          //串口初始化  
  5.     uchar  sendFlag = 0;     //未发送数据时  
  6.     uchar  receFlag =0;     //未接受到数据时  
  7.       
  8.     code  uchar  TEXT0[] = "****************************\r\n";  //\r\n是回车换行  
  9.     code  uchar  TEXT1[] = "单片机串口通讯测试\r\n";  
  10.     code  uchar  TEXT2[] = "http://xouou.iteye.com\r\n";  
  11.     code  uchar  TEXT3[] = "****************************\r\n\r\n";//回车换行并空1行  
  12.       
  13.     void sendChar(uchar sendValue);  //发送一字节数据  
  14.     void sendAll(uchar *pValue);       //发送一组数据  
  15.       
  16.     void main(void)  
  17.     {  
  18.         initSer();  
  19.         while(1)  
  20.         {  
  21.           while(receFlag)               //单片机串口收到任意数据后,开始向PC发送数据  
  22.           {  
  23.                sendAll(TEXT0);         //发送数据  
  24.                sendAll(TEXT1);  
  25.                sendAll(TEXT2);  
  26.                sendAll(TEXT3);  
  27.                 receFlag=0;             //发完了清标志      
  28.           }  
  29.         }  
  30.     }  
  31.       
  32.     void serInt() interrupt 4   //中断函数  
  33.     {  
  34.         if(RI)                  //如果收到任意数据  
  35.         {  
  36.             RI = 0;  
  37.             P1=SBUF;        //数据的变化让led灯直观反应出来  
  38.             receFlag=1;   //修改接受标志,便于主函数进入while中发数据  
  39.         }  
  40.          
  41.         if(TI)  
  42.         {  
  43.             TI = 0;                //发送完一个数据  
  44.             sendFlag = 0;        //清标志位  
  45.         }  
  46.     }  
  47.       
  48.       
  49.     void sendChar(uchar Value)  //发送一个字节数据  
  50.     {  
  51.          SBUF = Value;      
  52.          sendFlag = 1;       //设置发送标志位,发一字节就置位  
  53.          while(sendFlag);    //直到发完数据,将sendFlag清零后,才退出sendChar函数  
  54.     }  
  55.       
  56.     void sendAll(uchar *pValue) //发送一组数据  
  57.     {  
  58.         while((*pValue) != '\0')   //如果没有发送完毕就继续发  
  59.         {  
  60.             sendChar(*pValue);      //发送1字节数据  
  61.             pValue++;                 //指向下1个字节  
  62.         }  
  63.     }  
  64.       
  65.     void initSer()      //初始化  
  66.     {  
  67.         //注意:刚上电时,SCON是为0的  
  68.         TMOD=TMOD|0x20; //T1定时器模式,工作方式2  
  69.         TH1=0Xfd;        // 256-(11059200/(32*12*9600))  
  70.         TL1=0xfd;  
  71.         SM0=0;           //属于SCON寄存器  
  72.         SM1=1;           //串口工作方式1,10位异步,波特率可改  
  73.         REN=yes;             //允许串口接收  
  74.         ES=open;             //开串口中断  
  75.         EA=open;             //开总中断  
  76.         TR1=start;       //启动定时器  
  77.     }  
复制代码






分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:146886 发表于 2017-2-10 09:20 | 只看该作者
不错啊,真是好东西啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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