51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

这篇具有很好参考价值的文章主要介绍了51单片机学习笔记_6 IO通信:电脑与单片机之间的通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通信

通信基础知识

单片机还可以通过IO口实现多种通信。

串行通信:一条数据线,一次发1bit,发很久。

并行通信:多条数据线,同时发送,发的速度快多了但是费用高、接收困难、抗干扰性差。

异步通信:发送和接收方时钟可以不用完全一致。

同步通信 :发送和接收方时钟要完全一致。

单工、半双工、全双工通信:数据的传输方式,略。

比特率:位/s。

波特率:码元/s。

溢出率:比如13us溢出一次。溢出率就是1/13us。

校验位:如奇偶校验位。

停止位:分隔数据帧。

(有那么一点点感谢通原了~)

串口

串口通信,指外设和计算机之间通过数据线等传输数据的一种通信方式。比如RS-系列,大多数计算机应该都有对应的梯形接口。51单片机内自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现与计算机之间的串口通信!

单片机串口通信的管脚:VCC TXD(发送数据,串行输出)RXD(接收数据,串行输入)SGND(信号接地)。

电脑的串口还有很多管脚,如 RTS CTS,单片机的相对简单很多。

TXD和RXD用正负电压表示逻辑1和0,51单片机采用TTL 晶体管-晶体管逻辑集成电路,用高低电平表示逻辑状态(+5V:1;0V:0),所以需要转换型时候才能与计算机串口通信。

还有两种电平状态:RS232,3~15V 表示低(注意),-15~-3V 表示高。RS485,两线压差(差分信号)2~6V 表示高,-6~-2V 表示低。

51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

STC89C52系列有一个通用异步收发器(UART P30 P31端口),有四种工作模式。

  • 模式0:同步移位寄存器;
  • 模式1:8位UART,波特率可变(常用);
  • 模式2:9位UART,波特率固定;
  • 模式3:9位UART,波特率可变.

51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

TXD RXD 直接接到单片机 P30 P31 上. 另一端是单片机上自带的,我们把数据线连到电脑上就接上了。

51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

溢出率到波特率的计算见图。

串口助手和单片机要规定好发送数据的形式。

51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

串口数据缓存寄存器:SBUF。物理上是接收和发送两个寄存器,实际上共用相同的地址,只是使用时有不同的意义。我们只需要把数据放入其中就行,发送原理暂不用弄明白。

SCON:串口控制寄存器。控制电路。包含:

​ SM0,SM1:设置工作方式。比如我们采用8位 UART,就赋值01.

​ SM2:与工作方式1无关。

​ REN:是否允许串行接收状态。1允许接收。

​ TB8 RB8:接收到的第9位数据,与工作方式1无关。

​ TI RI:发送接收中断请求标志位。代表发送完了。硬件赋1,需要用软件复位。

赋值的话只有 SM0 SM1=01,和 REN 需要注意,其他的初始值都=0。

PCON:电源管理。包含:

​ SMOD:可见支路图,用于设置波特率是否加倍。

​ SMOD1:纠错或协助 SM0 设置工作方式。

IE:打开中断。

移位寄存器会触发对应中断。在中断图中的 TI RI,触发的是同一个中断。

实施串口通信

STC-ISP自带一个串口调试助手。

51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

串口选择左侧和串口号一致的选项。

STC89C52串口初始化函数:

void uart_init(void)
{
    TMOD|=0X20; //设置计数器工作方式 2
    SCON=0X50; //设置为工作方式 1。40是 REN 关闭,50是打开,代表单片机是否可以接收数据
    PCON=0X80; //波特率加倍,0就是不加倍
    TH1=0XFA; //计数器初始值设置,根据波特率为9600
    TL1=0XFA;
    ES=1; //打开接收中断
    EA=1; //打开总中断
    TR1=1; //打开计数器1
}

初始化函数也可以在 STC-ISP 中生成。这里会发现 12MHZ 的晶振相较 11.0592 MHZ 的晶振误差较大,要通过波特率加倍才能减少一些。这就是 11.0592 MHZ 晶振的设计原因。

单片机向电脑发送数据:给SBUF赋值即可。

在程序中发送可以直接SBUF=0X11;单片机就会收到11的信息,点击复位按钮后可以在串口助手的接收缓冲区中看到。

赋值后需要一段时间才能发送完成,发送完成后TI不再是0.

void main(){
    uart_init();
    SBUF=0x11;
    while(TI==0);TI=0;//=1说明发送完成,然后手动复位
    while(1){}
}

这样就在程序中发送了11信息。

电脑给单片机发送数据:通过串口助手发信息可以通过串口中断interrupt 4实现。

void uart() interrupt 4 //串口通信中断函数
{
    
    u8 rec_data;
    P2=0x00;//这一句使得函数成功触发时LED灯全亮,便于调试
    if(RI==1){P2=~SBUF;RI=0;}//因为发送和接收中断共用4中断,这句用于区分具体是发送还是接收中断
    //如果是接收中断,RI=1,那么只简单执行这两句即可。
    SBUF=rec_data; //将接收到的数据放入到发送寄存器
    while(!TI); //等待发送数据完成
    TI=0; //清除发送完成标志位
}

以上程序可以将发送缓冲区中输入的数据发给单片机,单片机再在接收缓冲区中原封不动地呈现出来。

文本模式和 HEX 模式就是文本和 ASCII 码的转换。文章来源地址https://www.toymoban.com/news/detail-483050.html

到了这里,关于51单片机学习笔记_6 IO通信:电脑与单片机之间的通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机学习笔记AD/DA

    AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号。比如单片机只能识别0与5V数字信号,当输入为2.5V——模拟信号时,就需要转化为单片机所能读取的数字信号。 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号。

    2024年02月09日
    浏览(38)
  • 51单片机学习笔记-9蜂鸣器

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 蜂鸣器 是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号。蜂鸣器按驱动方式可分

    2024年02月06日
    浏览(33)
  • 51单片机学习笔记7 -- 超声波测距

    1.超声波 蝙蝠和某些海洋动物都能够利用高频率的声音进行回声定位或信息交流。它们能通过口腔或鼻腔把从喉部产生的超声波发射出去,利用折回的声波来定向,并判定附近物体的位置、大小以及是否在移动。超声波是一种频率高于20000赫兹的声波,它的方向性好,穿透能

    2023年04月12日
    浏览(28)
  • 【51单片机】LED与独立按键(学习笔记)

    LED:发光二极管 补:电阻读数 102 = 10 00 = 1k 473 = 47 000 1、新建工程:Project = New Project Ctrl + Shift + N :新建文件夹 2、选型号:Atmel-AT89C52 3、xxx提示?选否 4、Source Group = 右键 = Add New Item … = C文件\\\"main.c\\\" 5、设置勾选创建HEX File文件 6、编译 CPU通过对寄存器的控制,寄存器通过驱

    2024年02月06日
    浏览(35)
  • 51单片机IO口控制

    原理:根据电路图,指向IO口的引脚;拉低电平,灯亮、 如图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictures/Camera Roll/屏幕截图 2023-07-19 014128.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下

    2024年02月15日
    浏览(29)
  • 51单片机学习笔记-12LCD1602液晶屏

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字

    2024年02月11日
    浏览(33)
  • 【个人笔记】51单片机串口通信的字符串接收和发送,串口通信调节数码管显示时钟(串口通信,定时器,数码管)

           目的:利用PROTUES仿真软件、串口调试助手、虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法;尝试制定通信协议,单片机根据通信协议解析接收到的内容,并根据接收的指令执行相应的操作。 基本功能: 1.时分秒的动态显示。

    2024年02月11日
    浏览(36)
  • 51单片机:设计一单片机双机通信电路

    鱼弦:CSDN内容合伙人、CSDN新星导师、全栈领域优质创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) 设计一单片机双机通信电路。要求编程实现:甲单片机系统中的按键可以控制乙单片机系统中的数码管(MPX8)动

    2024年02月20日
    浏览(40)
  • 【51单片机】IO 扩展(串转并)--74HC595

    参考: 普中 51 单片机开发攻略 第12章 【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】 https://www.bilibili.com/video/BV1Mb411e7re/?p=21share_source=copy_webvd_source=77e36f24add8dc77c362748ffb980148 nop ()是什么语句? and 位运算操作符 【51单片机入门教程-2020版 程序全程纯手打 从零开始入

    2024年01月22日
    浏览(35)
  • c51单片机串行通信示例代码(单片机--单片机通信)(附带proteus线路图)

      后面这个是接收端代码  另外发现一个奇怪的现象:如果把T1口改为T0口没有办法正常模拟

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包