随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。
通信方式
并行通信通常是将数据字节的各位用多条数据线同时进行传送 。
图一:并行通信
串行通信是将数据字节分成一位一位的形式在。
图二:串行同行
串行通信的传输方向
单工是指数据传输仅能沿一个方向,不能实现反向传输。
半双工是指数据传输可以沿两个方向,但需要分时进行。
全双工是指数据可以同时进行双向传输。
串行通信常见的错误校验
奇偶校验、循环冗余校验
传输速率(比特率):
比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。
80C51串行口的结构
图三:串口结构
有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。
串行口的控制寄存器(SCON)(有点复杂,没咋整明白,以后用的时候再说)
用以设定串行口的工作方式、接收/发送控制以及设置状态标志:
图四:SCON
SM0和SM1为工作方式选择位,可选择四种工作方式:
图五:工作方式
SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1。
REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。
RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。
TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。
RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。
PCON中只有一位SMOD与串行口工作有关 :
图六:PCON
SMOD(PCON.7) 波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。
波特率的计算(用波特率计算器)
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
T1 溢出率 = fosc /{12×[256 -(TH1)]}
在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。
图七:波特率
串口如何使用
确定串行口控制(编程SCON寄存器);
确定T1的工作方式(编程TMOD寄存器);
计算T1的初值,装载TH1、TL1;
启动T1(编程TCON中的TR1位);
PC和单片机通信:
#include typedef unsigned char uchar; void Serial_comInit() { SCON=0X50; //设置为工作方式1 ,既然是方式一,自然要确定波特率,设置定时器1 TMOD=0X20;//8位重装载 PCON=0X80; TH1=0xF3;//波特率4800 TL1=0XF3; ES=1; //打开通信中断 EA=1; //打开总中断 TR1=1; //打开计数器 } void main(void) { Serial_comInit(); while(1); } void communication() interrupt 4 { uchar receiveData; receiveData=SBUF;//出去,接,收到的数据 RI = 0;//清除接收中断标志位 SBUF=receiveData;//将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 } 电脑发送数据到单片机: (来源:https://blog.csdn.net/u014453898/article/details/57123007) #include #define uchar unsigned char #define uint unsigned int uchar buf; #define led P2 void main(void) { SCON=0x50;//设定串口工作方式0101 0000 PCON=0x00; TMOD=0x20; EA=1; ES=1; TL1=0xfd;//波特率9600 TH1=0xfd; TR1=1; while(1); } //串行中断服务函数 void serial() interrupt 4 { ES=0; //暂时关闭串口中断 RI=0; buf=SBUF; //把收到的信息从SBUF放到buf中。 switch(buf) { case 0x31: led=0xfe;break; //二进制 0011 0001 十进制 49 控制字符 1 16进制 0X31 case 0x32: led=0xfd;break; //1111 1101 case 0x33: led=0xfb;break; case 0x34: led=0xf7;break; case 0x35: led=0xef;break; case 0x36: led=0xdf;break; case 0x37: led=0xbf;break; case 0x38: led=0x7f;break; } ES=1; //重新开启串口中断 SBUF=buf; while(!TI); TI=0; }
上一篇:51单片机双向通信实例
下一篇:C51单片机串口工作的四种方式总结
推荐阅读
史海拾趣
在电子行业的浪潮中,3D PLUS公司以其前瞻性的技术视角,率先投身于3D技术的研发。公司初期便聚焦于3D扫描技术的突破,成功开发出全自动彩色桌面型3D扫描仪,该设备能够在短短几分钟内实现实物向数字的转变,为行业带来了前所未有的高效与便捷。这一创新产品的推出,不仅迅速获得了市场的认可,更在行业内树立了3D PLUS的技术领先地位。
进入21世纪后,随着互联网的普及和信息技术的飞速发展,光纤通信技术迎来了新的发展机遇。DiCon凭借其在微机电系统(MEMS)、微光学设计等领域的技术积累,成功推出了一系列具有创新性的光纤通信产品。这些产品不仅提高了数据传输的速度和稳定性,还降低了成本,进一步扩大了公司在市场上的份额。
Amerace Electronic Components公司自成立以来,一直致力于电子元件的技术创新。在早期的发展阶段,公司投入大量资源进行研发,成功推出了一系列具有创新性的电子元件产品,如高精度电阻器和电容器。这些产品在市场上获得了广泛的认可,为公司赢得了良好的声誉。随着技术的不断进步,Amerace持续引领行业创新,为电子行业带来了更多高性能、高可靠性的元件产品。
在追求经济效益的同时,AEM始终关注环境保护和可持续发展。公司积极响应全球环保倡议,采用环保材料和生产工艺,减少生产过程中的废弃物排放和能源消耗。同时,AEM还投入大量资源研发节能环保的电子元器件产品,为客户提供更加绿色、高效的解决方案。
此外,AEM还积极参与社会公益活动,关注社会责任。公司通过捐款、赞助等方式支持教育、文化等事业的发展,为社会的和谐与进步贡献了自己的力量。
在电子行业的发展过程中,Continental Industries注重与其他企业的合作与共赢。公司与多家知名企业建立了长期稳定的合作关系,共同开展技术研发和产品创新。通过资源共享和优势互补,双方实现了互利共赢,共同推动了电子行业的进步。
在电子行业快速发展的背景下,E-tec始终保持对技术创新的关注。他们投入大量资金进行研发,不断推出新产品和新技术。例如,他们成功开发了一种新型的微型连接器,该连接器具有体积小、传输速度快、抗干扰能力强等优点,受到了市场的热烈欢迎。此外,E-tec还注重产品升级和换代,确保产品始终保持在行业前列。
摘要以实现声频放人器低澡声化为出发点,阐述了具体设计的几个方面.从低噪声放大器设计的基本原理和方法入手,对晶体管放人器的噪声模型作了分析,并推导出一种实用的最佳源电阻近似求法.还对系统电路的低噪声设计略加探讨.… 查看全部问答∨ |
|
如何用定时器T2控制电机移动到一定距离自动停下,那位高手可提供代码或方法 Atmel公司的AT89C52有定时/计数器2,可利用T2的加减计数功能.T2有两个输入端,T2(P1.0)为脉冲输入端,T2EX(P1.1)为加减计数控制端。利用90°相差的信号可以实现加减计数。圆度仪的电机I 控制电感测微仪的上下位置运动,速度的大小由数据采集板的D/A ...… 查看全部问答∨ |
|
发起一次GPSONE就相当于建立一次DO连接,这个可以通过QXDM信令中看到, 我现在默认的operation mode = MS-assisted,我试过将operation mode 设置成MS-Based Mode或者tandalone mode,但是都不成功,无法建立DO连接,请问如何变化模式到MS-Based Mode ...… 查看全部问答∨ |
在嵌入式开发板上移植l2tp客户端rp-l2tp后运行l2tpd守护进程出现could not dload sync-pppd.so:File not found,但在lib下是有sync-pppd.so的,在板子上是无法设置动态库搜索路径的,有那位大虾作过或者是碰到过类似的问题的希望能指点一二,谢谢!… 查看全部问答∨ |
XIPKERNEL.BIN下载出错?如下所示,我将所有文件都包含到xipkernel里,下载到ARM时缺认为格式错误, 请问什么原因,是EBOOT版本问题吗? Download BIN file information: ----------------------------------------------------- [0]: Base A ...… 查看全部问答∨ |
开始做一下自我介绍吧,我是一名湘潭大学05级自动化专业的学生。性格能内能外,觉得 还应该不断完美。下面说一说我大学前面三年的生活吧。 大一大二没学什么课外的知识,平平淡淡,如果参加社团不算的话。大三有机会 ...… 查看全部问答∨ |
我的硬件原理图如下链接:请放心打开! http://www.dzjia.cn/html/jiejuefangan/20070619/24939_2.html 如图示:P2.7接到RC500的NCS片选脚上,这时我想要访问RC500的内部地址,我就应该先定义要访问的地址,如下: #define Page_Sel   ...… 查看全部问答∨ |
系统SPI1和SPI2工作正常,SPI3初始化后引脚状态都不对,请版主指点,谢谢! RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ...… 查看全部问答∨ |