相关寄存器

SCON:串口控制寄存器(可位寻址)
串行控制寄存器SCON用于选择串行通信的工作方式和某些控制功能。其格式如下:

SM0、SM1:

SM2:允许方式2或方式3多机通信控制位;
REN:允许/禁止穿行接收控制位。
○ 由软件置位REN,REN=1为允许串行接收状态,可启动串行接收器RxD,开始接收信息;
○ 软件复位REN,即REN=0,则禁止接收;
TB8:在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0;
RB8:在方式2或方式3,是接收到的第9位数据;
TI: 发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,必须用软件复位;
RI:接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。在其他方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1(例外情况见SM2说明),必须由软件复位,即RI=0。

PCON:电源控制寄存器

SMOD:波特率选择位。
○ 当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;
○ SMOD=0,则各工作方式的波特率不加倍。复位时SMOD=0。
SMOD0:帧错误检测有效控制位。
○ 当SMOD0=1,SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能;
○ 当SMOD0=0,SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行口的工作方式。复位时SMOD0=0

printf重定向

因为在单片机中,printf函数是放在stdio文件中的,需要引用stdio文件;然后printf函数也是需要挨个字节输出的,而输出单字节底层是用的putchar函数,所以就需要将原有putchar函数内部改成串口输出单字节去。

char putchar(char c)//重定向
{uart_send_byte(c);return c;
}

代码

uart.c

#include "uart.h"void uart_init()
{TMOD=0x20;SCON=0x50;TR1=1;TH1=0xfd;TL1=0xfd;EA=1;ES=1;ET1 = 0;     //禁止定时器1中断
}//发送一个字符
void uart_send_byte(u8 byte_data)
{SBUF = byte_data;while(!TI);TI=0;
}//发送一串字符串
void uart_send_string(u8 *str)
{while(*str){uart_send_byte(*str++);  delay(10);}
}char putchar(char c)//重定向
{uart_send_byte(c);return c;
}

uart.h

#ifndef __UART__H
#define __UART__H#include "reg52.h"
#include "delay.h"void uart_init();
void uart_send_byte(u8 byte_data);
void uart_send_string(u8 *str);#endif

main.c

#include "reg52.h"
#include "uart.h"
#include "string.h"
#include "stdlib.h"sbit led1 = P0^6;/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{   uart_init();while(1);
}/*******************************************************************************
* 函数名         : uart_irq() interrupt 4
* 函数功能        : 串口通信中断函数
* 输入           : 无
* 输出             : 无
*******************************************************************************/
void uart_irq() interrupt 4
{u8 byte_data = 0;static u8 rec_str[32] = {0};if(RI){ RI=0;//清标志位byte_data =SBUF;    if(byte_data != 'o'){strncat(rec_str,&byte_data,1);}    else if(byte_data == 'o'){printf("%s\r\n",rec_str);memset(rec_str,0,sizeof(rec_str)); } }
}

51单片机串口通信--发送字符、接收字符、发送字符串、接收字符串相关推荐

  1. 51单片机串口通信发送以及接收代码详解1

    #include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...

  2. 51单片机串口通信发送以及接收代码详解2

    #include <reg51.h> //实验现象:在电脑端没按下发送的时候,单片一直给电脑发送aaa字符串: //实验现象:在电脑端按下发送的时候,结束字符串aaa的发送代码,执行单片接 ...

  3. 51单片机串口通信模板_深入理解51单片机串口通信及通信实例

    串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  4. 51单片机~串口通信(讲解+代码)

    51单片机~串口通信 (一)计算机串行通信原理: 综上:所以在设置的时候,经常将SCON设置为0X50==0101 0000 ,使用方式1. (二)工作: 中断控制 led灯,每发送一条指令灯亮或灭( ...

  5. 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...

  6. 51单片机串口通信模板_51单片机串口通信

    51 单片机串口通信 51 单片机串口通信(转载) 2009-03-03 18:22 一.串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计 算机端,而且也能实现计算机对单 ...

  7. 51单片机串口通信【收集学习向】

    本篇整理了学习51串口通信过程中看到的一些比较好的文章,有很多的超链接.并根据自己遇到的情况分析了串口传输乱码的一些原因. 目录 1.原理知识 2.测试程序和虚拟仿真 3.电路设计与公母口连线 电路设 ...

  8. 51单片机-串口通信(串口向电脑发送信息电脑通过串口控制LED)

    文章目录 前言 一.串行通信口的功能以及串行通信口的结构及原理 1.1 串行通信口的功能 1.2 51单片机串口的结构 二.串行通信口的控制寄存器 2.1 串行控制寄存器SCON 2.2 电源控制寄存 ...

  9. 51单片机-串口通信

    目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部 ...

最新文章

  1. 让Hinton后悔投少了的AI公司:吴恩达弟子徒孙创办,LeCun李飞飞Jeff Dean投资,产品让人无法拒绝...
  2. 服务器统一计算系统,思科为微软扩展统一计算系统UCS服务器
  3. S7 Linux用户管理及用户信息查询命令
  4. ArcGIS Engine基础开发教程(转)
  5. 【C语言进阶深度学习记录】三十 二维数组与二维指针
  6. ie浏览器安全使用网银支付功能方法
  7. python中最难的是什么_Python 最难的问题你猜是什么?
  8. 【数据结构与算法】广义表的储存结构和结点定义的Java实现
  9. eclipse 中的注释 快捷键
  10. Unity 接入科大讯飞语音识别及语音合成
  11. 【MATLAB】求定积分
  12. Axure RP 8.0安装和汉化
  13. altium designer 常用元件封装
  14. PL/SQL相关的数据字典
  15. 任正非:从未想干翻苹果|用友云SaaS产品“云直播”上市 |【软件网每日新闻播报│第9-28期】
  16. 笔记︱横截面回归模型中调节效应+中介效应(横截面回归模型两大方向)
  17. 服务器的垃圾清扫系统指令,怎么用dos命令系统清理垃圾
  18. D3 二维图表的绘制系列(十九)封闭图
  19. 网关地址和网关IP是什么
  20. MongoDB可视化工具之Studio 3T的使用

热门文章

  1. [随想]关于移动支付
  2. 茶叶行业网站的盈利模式探讨
  3. c语言位运算试题及解析,C语言面试题分类-位运算
  4. mysql提示Got timeout reading communication packets、Got an error reading communication packets
  5. pythonyaml参数_Python yaml
  6. SAP外币评估 fagl fc val 多评估与少评估问题
  7. 项目Beta冲刺(团队)——05.28(6/7)
  8. 岭北之役:徐达的莫大苦楚
  9. PCA主成分分析实战案例
  10. Android基础学习(二)—— 常用控件