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

发布者:andyliow1980最新更新时间:2017-02-19 来源: eefocus关键字:51单片机  串口接收  发送数据 手机看文章 扫描二维码
随时随地手机看文章

芯片STC89C52RC

 

在PC端向单片机发送任意数据后, 单片机向PC端发送4行文本,

由于在windos下,回车换行用\r\n

 

 


 

C代码  收藏代码

  1. #include   

  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. }  

 


关键字:51单片机  串口接收  发送数据 引用地址:51单片机学习笔记:串口接收和发送数据

上一篇:51单片机学习笔记:利用ADC0804模数转换器采集电压
下一篇:51单片机学习笔记,4*4矩阵键盘

推荐阅读最新更新时间:2024-03-16 15:33

51单片机入门——步进电机
1 电机的分类 电机的分类方式有很多,从用途角度可划分为驱动类电机和控制类电机。直流电机属于驱动类电机,这种电机是将电能转换成机械能,主要应用在电钻、小车轮子、电风扇、洗衣机等设备上。步进电机属于控制类电机,它是将脉冲信号转换成一个转动角度的电机,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,主要应用在自动化仪表、机器人、自动生产流水线、空调扇叶转动等设备。 步进电机又分为反应式、永磁式和混合式三种。 反应式步进电机:结构简单成本低,但是动态性能差、效率低、发热大、可靠性难以保证,所以现在基本已经被淘汰了。 永磁式步进电机:动态性能好、输出力矩较大,但误差相对来说大一些,因其价格低而广泛应用于消费
[单片机]
<font color='red'>51单片机</font>入门——步进电机
51单片机矩阵键盘的编程
C51单片机上的外设键盘键是使用的矩阵方式扩展的,但是硬件仿真时必须把蜂民器的开关打开触使行扫描的74HC53的E端接地为输出型,否则测死了也没反应,我还以为是我的程序有问题呢,后来才找到的。 其原理 74HC138译码器在输出端Y1与WR(P3^6)都处于低电平通过或非门,转化成行扫描的74HC53的片选端打开写入数据,在输出端的高4位通过移位方式输出到外设键盘中。然后给WR一个高电平来给74HC53一个低电平使得输入无效进行锁存操作。然后通过RD(P3^7)与Y2共同输出低电平通过或非门加上个非门把低电平送到列扫描的74HC53的片选端E上,在读取数据前必须先将要获取的高4位进行置1,然后读取高4位数据,通过RD送出高电平进行
[单片机]
51单片机 8X8点阵屏循环左移
使用定时器0中断控制8x8点阵屏循环左移 #include reg51.h. #include intrins.h typedef unsigned char u8; typedef unsigned int u16; sbit SRCLK=P3^6; sbit RCLK=P3^5; sbit SER=P3^4; u16 i,k; u16 time; u8 code ledduan ={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24}, {0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x6c}, {
[单片机]
AT89C51单片机扩展高速串行同步移位输出口的方法
AT89C51(与MCS-51兼容)单片机的串行口在方式0工作状态下,使用移位寄存器芯片可以扩展多个8位并行I/O口。在LED点阵显示屏应用系统中,一般都采用数据同步移位输出方式,并使用移位寄存器芯片(如74LS595)扩展并行I/O口驱动LED点阵显示。LED 点阵显示采用扫描方式,为不产生闪烁感,每秒需要传送50屏点阵显示数据,因此有大量的数据要通过同步移位的方式送到显示驱动电路部分,这就要求单片机能够快速地输出数据。AT89C51单片机的串行口在方式0工作状态下,数据以fosc/12的波特率输出,1个字节数据写入SBUF后,需检查中断标志位 TI是否为“1”并清“0”TI或延时几个机器周期后才能继续写入了一个数据,输出速度慢
[单片机]
AT89C<font color='red'>51单片机</font>扩展高速串行同步移位输出口的方法
51单片机实现贪食蛇的子程序
这是从 http://www.51hei.com/bbs/dpj-20623-1.html 这个 制作 里面截取的一段子程序,调用函数请下载里面的附件. 下面是mysanke.h文件: #ifndef _MYSNAKE_H_ #define _MYSNAKE_H_ /*--------------------------------------------------------- 函数功能:检测随机落食是否压在已存在的亮点上 调用形式:Check_Food(*node); 参数:结构体指针 返回值:返回食物是否可以放置1- 可以 0- 不可以 备注:食物产生函数调用此函数用于 检测 -----------------
[单片机]
<font color='red'>51单片机</font>实现贪食蛇的子程序
51单片机lcd代码
#include ../delay/delay.h #include lcd.h /*==================================================== 判断写入命令/数据函数 =====================================================*/ void lcd_write(unsigned char byte, unsigned char flag) { if(flag) { RS = 1; //选择数据寄存器 } else {
[单片机]
51单片机超声波测距学习板的基本原理
  1.功能      超声波测距学习板可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0-27~4.00m,测量精度1cm,测量时与被测物体无直接接触。能够清晰稳定地显示测量结果。   2.基本原理      超声波发生器内部结构有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波本时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。在超声探测电路中,发射端得到输出脉冲为一系列方波,其宽度为发射超声的时间间隔,
[单片机]
什么是51单片机最小系统
1.什么是51单片机 51 内核单片机是 指兼容Intel 的8051指令系统的单片机统称;从诞生到现在的几十年时间,已成为一款经过市场考验、成熟的芯片产品。目前国内也众多51单片机厂家,且还有众多带51内核,用于各种不同场景的专用类单片机。 51单片机内部框架: 以下以STC89C52单片机为例,其内部总体结构其基本特性如下: 8位CPU、4-8k 字节 ROM、128 字节 RAM、21 个特殊功能寄存器32根I/0线、可寻址的 64 字节外部数据、程序存贮空间、2个 16 位定时器计数器中断结构:具有二个优先级、五个中断源、一个全双工串行口、位寻址(即可对寄存器进行位操作)功能,能按位进行逻辑运算的位处理器。 除 1
[单片机]
什么是<font color='red'>51单片机</font>最小系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved