实验原理
51 单片机的串行口是一个可编程的全双工的通信接口,具有 UART(通用异步收发器)的全部功能,能同时进行数据的发送和接收,也可以作为同步移位寄存器使用。51 单片机的串行口主要有两个独立的串行数据缓冲寄存器 SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器)和发送控制器、接收控制器、输入移位寄存器及若干控制们电路组成。串行口方式 1 是最常用的通信方式,传输的数据共 10 位,1 位起始位,8 位数据位,最低位在前,高位在后,1 位停止位,帧与帧之间可以有空闲,也可以无空闲。
发送方式:当数据被写入 SBUF 寄存器后,单片机自动开始从起始位发送数据,发送到停止位的开始时,有内部硬件将 TI 置 1,向 CPU 申请中断,接下来可在中断程序中做相应处理,也可以选择不进入中断。
接收方式:用软件置 REN 为 1 时,接收器以选择波特率的 16 倍速率采样 RXD 引脚电平,检测到 RXD 引脚输入电平发生负跳变时则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入一位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位,当 RI=0;且 SM2=0(或接收到的停止位为 1)时,将接收到的 9 位数据的前 8 位数据装入接收 SBUF,第 9 位(停止位)进入 RB9,并置 RI=1,向 CPU 请求中断。
在具体操作串行口之前,需要对单片机的一些与串口有关的特殊功能寄存器进行初始化设置,主要设置产生波特率的定时器 1,、串行口控制和中断控制,具体步骤如下:
○1 确定 T1 的工作方式(编程 TMOD 寄存器);
○2 计算 TI 的初值,装载 TH1,TL1;
○3 确定串行口工作方式(编程 SCON 寄存器);
○4 串行口工作在中断方式,要进行中断设置,(编程 IE,IP 寄存器);

相关寄存器的选择说明



实验代码如下

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,a;//定义变量
/*
****************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
*****************************************************************************/
void main()
{TMOD=0x20; //用来定时器设置TH1=0xfd; //设置初值 9600=(2 的 SMOD 次方/32)*(TI 溢出率)=(1/32)
//*11059200/(256-X)*12TL1=0xfd;TR1=1; //开启定时器 1SM0=0; //设置串行口工作方式SM1=1;REN=1; //允许串行接收位EA=1; //开启总中断ES=1; //开启串口中断
while(1)
{if(num==1) //判断是否有串口数据的传送{ES=0; //关闭串口中断num=0;SBUF=a; //发送数据 a 到 SBUF,即将单片机的数据发送到计算机while(!TI); //发送数据后,TI 自动置 1TI=0; //TI 置 0,才能进行下次发送ES=1; //打开中断}
}
}
void ser() interrupt 4
{RI=0; //接收到数据后,将 RI 置 0a=SBUF; //接收数据num=1; //标志位
}

为了方便以后复习,写得详细一点,以下是引用.

串口的6个特征如下。
(1)、物理上的连线至少3根,分别是Tx数据发送线,Rx数据接收线,GND共用地线。
(2)、0与1的约定。RS232电平,约定﹣5V至﹣25V之间的电压信号为1,﹢5V至﹢25V之间的电压信号为0 。TTL电平,约定5V的电压信号为1,0V电压信号为0 。CMOS电平,约定3.3V的电压信号为1,0V电压信号为0 。其中,CMOS电平一般用于ARM芯片中。
(3)、发送秩序。低位先发。
(4)、波特率。收发双方共同约定的一个数据位(0或1)在数据传输线上维持的时间。也可理解为每秒可以传输的位数。常用的波特率有300bit/s, 600bit/s, 2400bit/s, 4800bit/s, 9600bit/s。
(5)、通信的起始信号。发送方在没有发送数据时,应该将Tx置1 。 当需发送时,先将Tx置0,并且保持1位的时间。接受方不断地侦测Rx,如果发现Rx常时间变高后,突然被拉低(置为0),则视为发送方将要发送数据,迅速启动自己的定时器,从而保证了收发双方定时器同步定时。
(6)、停止信号。发送方发送完最后一个有效位时,必须再将Tx保持1位的时间,即为停止位。

注意:

读取SBUF数据或接受SBUF数据都是采用ASCII码,数据类型unsigned char,二进制数据

实验

从串口中输入0-999,数码管显示0-999.

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela1 = P1^0; //第一位
sbit wela2 = P1^1; //第二位
sbit wela3 = P1^2; //第三位
unsigned int  a;
uchar num,ge,shi,bai;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带小数点的共阴数码管段值0-9。
uchar code tablewe[]={0x04,0x02,0x01};uchar table1[2];
uchar k=0;
void delay(uchar x)//延时
{uchar i,j; for(j=x;j>0;j--){for(i=113;i>0;i--){}}
}
void main(void)
{          TMOD=0x20;         //用定时器设置串口波特率    9600  TH1=0xfd;           //赋初值  9600=(2 的 SMOD 次方/32)*(TI 的溢出率)=(1/32)*11059200/(256-X)*12 x=253 TL1=0xfd;         //赋初值 TR1=1;           //开启定时器 1 SM0=0;           //模式选择   SM1=1; REN=1;             //串口初始化 EA=1;              //开启总中断 ES=1;             //开启串口中断 P1=0x00;while(1){if(num==1)     //判断是否有串口数据的传送 { num=0;if (table1[1]==0x00){bai=table1[1];shi=(table1[0]>>4)&0xf;ge=table1[0]&0xf;//if((table1[0]>>4)&0xf==0x00)出错}else{bai=(table1[0]>>4)&0xf;shi= table1[0]&0xf;ge=table1[1];}}if (bai!=0x00){P1=0x04;P0=table[bai];delay(5);      }if (shi!=0x00){P1=0x02;P0=table[shi];delay(5);  }P1=0x01;P0=table[ge];delay(5);}
}
void ser() interrupt 4       //串口中断号 4
{ table1[0]=0;table1[1]=0;//清零if(RI){for(k=0;k<2;k++){while(!RI); //查询接收标志RI=0;table1[k]=SBUF;//一次读8位delay(10);if (RI==0)   break;  //表示只发一位 }}  num=1;//表示有接收
}

单片机与 PC 机串口通信实验相关推荐

  1. 单片机与PC机串口通信编程

    单片机与PC机串口通信编程 实验目的 利用PROTUES仿真软件.串口调试助手.虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法. 实验目的 1.PROTUES仿真软件 ...

  2. pc机串口通讯实验c语言,单片机实验六 单片机与PC机串口通讯

    实验报告六 实验名称:单片机与PC机串口通讯 实验目的 : 1.掌握串行口工作方式的程序设计,掌握单片机通讯的编制. 2.了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议. 3.了解PC机通讯 ...

  3. pic常用子程序c语言,手把手教你使用PIC单片机做RS232串口通信实验(C语言版)

    这一期,我们将一起来学习一下PIC单片机如何与PC机进行通信,一起来完成一个简单的RS232通信实例,我们不做太多的理论,从实例出发,相信能够给大家一个比较通俗.透彻地认识,掌握了它的原理,那你就可以 ...

  4. 单片机与PC机一样都是计算机,51单片机与PC机通信资料

    <51单片机与PC机通信资料>由会员分享,可在线阅读,更多相关<51单片机与PC机通信资料(14页珍藏版)>请在人人文库网上搜索. 1.专业综合实习报告专 业: 电子信息工程 ...

  5. 单片机实验八 RS232串口通信实验(接收与发送)

    实验八 RS232串口通信实验(接收与发送) 一.实验目的 1.熟悉实验软件和硬件,进行正确的接线: 2.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化: 3.使用串口调试助手做为上位机 ...

  6. 单片机 多机通讯c语言,单片机多机串口通信.doc

    单片机多机串口通信 摘要 本文详细介绍了基于RS-485总线的单片机与多台单片机间的串行通信原理.实现方法和相应的通信硬件.软件设计.该设计是由单片机与单片机组成的主从控制系统,其中单片 关键词: 单 ...

  7. 基于8086简易电子琴系统仿真设计-基于8086红外自动门控制系统设计-基于单片机8x8矩阵键盘两机串口通信-基于单片机8层电梯控制系统仿真设计-基于单片机ADC0809和DAC0832模数和数模设计

    1189基于8086简易电子琴系统仿真设计-设计资料 编写一实现电子琴的程序,并实现若干扩展功能. 基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶: 扩展功 ...

  8. windows通信端口初始化失败_STM32实例——USART串口通信实验(二)

    USART 串口通信配置步骤 在上面的介绍中,可能有的朋友很不理解,不过没有关系,下面我们讲解如何使用库函数对 USART 进行配置.这个也是在编写程序中必须要了解的.具体步骤如下:(USART 相关 ...

  9. java实现上位机与下位机串口通信

    串口通信是在工程应用中很常见.在上位机与下位机通讯过程中常通过有线的串口进行通信,在低速传输模式下串口通信得到广泛使用.在说个之前先来简单解释一下上位机与下位机的概念. 上位机与下位机 通常上位机指的 ...

最新文章

  1. 第3章 深入理解盒子模型
  2. 谷歌发布新编程语言,专治SQL各种“不服”
  3. 白话Elasticsearch10-深度探秘搜索技术之基于dis_max实现best fields策略进行多字段搜索
  4. COCO 数据集的使用
  5. VC环境下的静态库(lib)使用和动态库(Dll)的使用(清晰版)
  6. dell跳过开机硬件检测,关闭dell开机硬件自检 戴尔笔记本电脑每次开机自动硬件检查怎么取消?...
  7. 游戏设计与计算机,RPG游戏设计与实现-数学与计算机系.doc
  8. Deepgreen数据库日志清理脚本
  9. vs code 配置java
  10. Golang——HTTP编程请求和响应实现
  11. c 四舍五入_王子异成苏宁易购新宠?网友:我心里的C位还是贾乃亮!
  12. 新潮传媒“小趋势”背后的巨变之力
  13. Xcode 11.7(12.4)/13.2的signing和sandbox配置截图对比
  14. 计算器: 请输入两个数和一个符号,完成两个数的+ - * / % // **
  15. 【机器学习-周志华】学习笔记-第九章
  16. Python—基础篇(三)
  17. mac 远程连接 Windows 桌面
  18. ftp上传下载 java FTPClient
  19. vue后台管理侧边栏菜单布局
  20. springboot+vue旅游景点酒店预订系统网站

热门文章

  1. SDS很好,但处理器需“减负”!
  2. Java--反编译软件
  3. Haploview做单倍型分析
  4. 测试普通话水平的软件,求测试普通话标准的软件?6款普通话软件推荐
  5. html中一些标签怎么打印,html2ps - 如何打印小标签?
  6. Java--JAVA_HOME环境变量的配置
  7. DIY 3D打印机——【有啥用啥版】
  8. 利用java swing编写一个简易的计算器,实现了括号,优先级,三角函数,阶乘等功能
  9. 安装ubuntu8.04。。。。
  10. 计算机网络分布式处理的应用,谈计算机网络发展及其应用研究