在讲解本章的内容之前请大家先反复阅读《手把手教你学51单片机》文档的第11章内容,很多概念文档都已详细讲解有。

1.波特率

串口通信就是单片机与电脑端,单片机与单片机,单片机与模块器件之间互发信息进行通信,比如单片机发送一个“1”的字符给电脑端,电脑端的窗口就会接收到“1”。我们常用的波特率为9600,所谓9600指的是一秒钟单片机可以发送9600个数据位,也就是1秒钟的时间里单片机可以发送(9600/8)=1200字节。

如果我们想发送一个字符“A”给电脑端的窗口,那么字符“A”对应的ASCII值就是65,二进制表示为01000001。

2.通信引脚

单片机的P3.1是发送引脚,也就是说要发送字符“A”,这个引脚的变化如下图所示

单片机要发送一个字节给电脑端,首先发送引脚需要先拉高,然后拉低持续(1/9600)秒,电脑端检测到这个低电平信号就会准备接收数据字节。然后我们要发送的二进制位是01000001,但是串口通信发送的字节是低位在前,高位在后,所以上图的发送顺序就是01000001反过来为10000010。一个字节发送完成之后还要发送一个停止位1,电脑端接收到这个停止位就认为一个字节发送完成了。

我们用定时器来实现引脚的持续时间,怎么定时(1/9600)秒怎么设置,计算一下就可以了

(1/9600)=X*(12/11059200)

解得X=96。

因为定时时间间隔比较短,所以我们使用定时器0的工作模式2就可以了。填充TH0的初始值就是256-96=160=0xA0。

因为P3.1在“#include”已有定义为TXD,我们直接用即可。通过按K4来启动发送字节数据。

3.代码#include

#include //详见第六章第8讲

#include    //详见第八章第11讲

void TIM0_Mode2_Init()

{

TMOD&=0xF0;   //清0低四位

TMOD|=0x02;   //设置定时器0为工作模式2

TH0 = 0xA0;   //计算出波特率9600

TL0 = 0xA0;

ET0 = 1;      //闭合定时器0中断的开关

TR0 = 1;      //启动定时器0

}

void main()

{

u8 key;

LED_Init();        //初始化LED硬件模块

KEY_Init();        //初始化按键模块

EA = 1;            //闭合总中断开关

TIM0_Mode2_Init(); //定时(1/9600)秒

TR0 = 0;           //先关闭定时器

while(1)

{

key=KEY_Scan(0,1000);

if(key==4)TR0 = 1;//开启定时器启动一次字节传输,按一次发送一次。

}

}

void TIM0_IRQHandler()  interrupt 1

{

static u8 cnt=0,i,TXDBUF=65; //字符“A”的ASCII值为65

cnt++;                       //cnt一直在1~10之间变化

if(cnt==1)TXD=0;             //cnt变为1,发送起始位,这次的中断函数就执行完了,持续够(1/9600)秒之后,再次进入中断函数,然后就是进入发送数据字节的8位的任务

if (cnt>=2 && cnt<=9)        //发送8位数据位,从低位开始引脚的变化为 1 0 0 0 0 0 1 0

{

TXD = TXDBUF & 0x01;     //“TXDBUF & 0x01”的表达式就是,要么等于1要么等于0,这样P3.1的引脚要么保持高电平,要么保持低电平

TXDBUF >>= 1;

}

if (cnt == 10)

{

TXD = 1;     //发送停止位

TR0 = 0;     //关闭定时器,结束一次字节传输

cnt=0;

i++;

TXDBUF=65+i; //下次按按键发送的是 B C D E···

}

}

大家可能对中断函数里的内容感到艰涩难度,这里简单说明一下,我们按下K4启动了定时器,然后第一次进入中断函数时,做的任务就是拉低P3.1,然后这次的中断函数的任务就结束了,等过了(1/9600)秒之后,再次进入中断函数,上一次拉低P3.1的时间已经持续够(1/9600)秒了,这第二次的中断函数任务就是拉高P3.1,因为发送字符A这个字节的最低位为1,持续够(1/9600)秒进入第三次执行中断函数,拉低P3.1,第四,第五,第六,第七都是拉低P3.1发送0,以此类推,到第10次中断函数执行就是拉高P3.1发送停止位,关闭定时器结束一次字节的传输,要想再次发送需要按K4启动定时器,“TXDBUF=65+i;

”表示下次发送的是66这个数据,再下次就是发送67······

4.软件设置

在软件界面选择串口助手,选用字符格式显示,查看波特率是否为9600,最后点击“打开串口”。

不断地间隔按K4,就会看到电脑端显示出单片机发送过来的字符数据

如何用c语言串口通讯,串口通信入门相关推荐

  1. QT 多线程串口通讯 串口助手

    前言 模仿XCom写的一个串口助手 没模仿完全 因为帮助页是我不需要的 其次就是协议通讯我也不太懂 所以这2个界面也没有弄 1.讲一些个人认为比较麻烦的实现功能 其实如果用QT比较多应该都明白 那么多 ...

  2. s7300plc串口通信_s7-300串口通讯.ppt

    s7-300串口通讯 串口通信特点 1:点到点连接 2:串形通信 信息字节的每个位按照固定的次序一个连接一个传输 3:通信双方约定统一的传输速率.数据位.奇偶校验.停止位 4:半双工.全双工操作 串口 ...

  3. 基于VB的串口通讯及其软件实现

    1 串口通信的通信机理 PC串行通信是指直接对串行端口的UART(PC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口)进行编程实现的通信 一般说来,PC机都有一个或多个串行端口,它 ...

  4. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯

    1,前言 开发环境:在 Visual Studio 2017,.NET Core 2.x 串口通讯用于设备之间,传递数据,物联网设备中广泛使用串口方式连接通讯,物联网通讯协议 :Modbus 协议 A ...

  5. STM32 CubeIDE(九)串口通讯

    STM32 CubeIDE(九)串口通讯 串口通讯 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在 ...

  6. 51单片机(八).单片机的I2C与串口通讯

    STC89C52的I2C与串口通信 I2C总线 单片机电路中的I2C总线(Inter Integrated Circuit Bus)是一种Philips公司推行的串行总线标准.连接在总线上的外设通过总 ...

  7. 串口通讯基本原理 【详细】

    串口通信的基本知识 本文介绍了串口通讯的基本概念.数据格式.通讯方式.典型的串口通讯标准等内容. 串口通讯,RS232,RS485,停止位,奇校验,偶校验 1 串口通讯     串口通讯(Serial ...

  8. STM32 —— 串口通讯

    STM32 -- 串口通讯 什么是串口通讯 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,其通讯协议可分层 ...

  9. c#串口通讯详解(附源码)

    串口通讯 串口通讯是计算机传输数据的一种通讯方式,只不过是以比特位来传输数据的 串口通讯的相关参数 波特率: 波特率的大小代表每秒钟可以传输多少个二进制位,如波特率是9600,能每秒传输9600二进制 ...

最新文章

  1. Oracle事务和锁
  2. 「后端小伙伴来学前端了」Vue中Props配合自定义方法实现组件间的通信
  3. Android使用ImageView显示网络图片
  4. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件...
  5. 转移纸缺陷在线检测系统
  6. java poi excel模板变量_Java Web之POI操作Excel2016模板
  7. Python数据挖掘Pandas
  8. 电商后台管理系统技术总结(黑马)
  9. php 邮件上传类阿里云邮件上传接口
  10. 社交网络中基于张量分解的好友推荐
  11. Prometheus + Grafana 图形化监控实践
  12. canvas给文字增加阴影效果
  13. R语言统计方法-我常用的
  14. 基于pytorch的胶囊网络minst图像分类实现
  15. 矛与盾---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三十五)
  16. 【操作系统】操作系统在计算机中扮演的角色
  17. 王者荣耀服务器维护2020421,王者荣耀维护
  18. 截图翻译的方法有哪些
  19. 【微信小程序入门到精通】— 事件绑定的详细解读
  20. 常见蛋白质种类_关于健身常用的4种蛋白粉

热门文章

  1. APP 应用内活动运营,有哪些活动形式?
  2. DayDayUp:佛说:有果必有因。 黑格尔说:世界上没有无缘无故的爱,也没有无缘无故的恨。
  3. 【论文阅读】7-Discovering Structural Regularity in 3D Geometry
  4. 计算机无法屏幕亮度,win7电脑屏幕亮度无法调节怎么办?调节屏幕亮度的方法...
  5. vscode在报错时候自动格式化代码
  6. 支付宝余额提现收手续费了
  7. Rust + GO 大战 C/CPP + JAVA
  8. 10.26 node.js day01
  9. python求最小公倍数
  10. Android利用谷歌地图获取并解析经纬度对应的地理位置