SCI总线通信协议实例详解(附详细示波器实测波形图)

合集下载

第5章 串行通信接口SCI

第5章 串行通信接口SCI

例如:传输字符“R”的ASCII时: R的ASCII码:1010010 如使用奇校验
起始位 0 1 0 0 1 0 1 0 停止位
数据位(先低位后高位)
校验位
缺点:传输过程中,若有1位(或奇数个数据位)发生错误,通过 奇偶校验位可以知道。若有2位(或偶数个数据位)发生错误,通 过奇偶校验位无法知道。
SCI波特率= fBUSCLK/(16×BR), 其中fBUSCLK为内部总线频率,BR=0时,波特率发生器被禁止, SCI模块也被禁止。
16位SCI波特率寄存器由两个8位寄存器组成SCIXBDH和
SCIXBDL(X表示SCI模块编号,取1或2)
SCIXBDH D15~D13未定义,一般取0
SCI 控制寄存器3(SCIxC3) SCI状态寄存器 SCI状态寄存器1(SCIxS1)
优点:方法简单,发生1位错误的概率远大于2位,所以这种方法还 是最常用的。几乎所用的MCU异步串行通信接口,都提供这一功能。
串行通信的传输方式 单工(Simplex):数据传送是单向的,一端为发送端,另一端为
接收端。这种传输方式中,除了地线之外,只要一根数据线就可 以了。有线广播就是单工的。
全双工(Full-duplex):数据传送是双向的,且可以同时接收与发 送数据。这种传输方式中,除了地线之外,需要两根数据线,站 在任何一端的角度看,一根为发送线,另一根为接收线。一般情 况下,MCU的异步串行通信接口均是全双工的。
异步串行通信的格式
下图给出了8位数据、无校验情况的传送格式:空闲状态为 “1”,发送器通过发送一个“0”表示一个字节传输的开始, 然后是数据位(8位),最后发送停止位。
开始位
第0位
第1位
第2位

怎样用示波器分析RS232

怎样用示波器分析RS232

怎样用示波器分析RS232怎样用示波器分析RS232RS232是一种常用的串行通信协议,广泛应用于计算机、网络设备和工业控制等领域。

为了分析RS232通信的波形和信号特征,可以使用示波器进行观测和分析。

下面将介绍如何使用示波器分析RS232通信:1.确定连接和设置:首先,需要将RS232设备(如计算机、控制器等)的发送引脚与示波器的输入引脚相连。

通常,RS232的发送引脚是DTR(数据终端就绪)或TXD(传输数据),示波器的输入引脚应选择对应的通道。

2.配置示波器:在示波器上选择正确的输入通道并设置相应的触发模式。

根据需要选择合适的时间和电压范围,以确保可以正确捕捉到波形信号。

3.设置波特率和数据位:根据RS232通信的波特率和数据位配置示波器。

波特率是指每秒传输的位数,数据位表示每个字节中的位数。

可以通过示波器的菜单或控制面板设置这些参数。

4.观察和分析波形:启动RS232通信后,示波器将开始捕捉到信号波形。

通过示波器的显示屏或软件查看捕捉到的波形。

-分析波形的时序:可以观察每个字节之间的时间间隔,以及每个字节的起始位、数据位和停止位。

根据RS232协议的规范,起始位为低电平,数据位为数据传输的符号信息,停止位为高电平。

-检查数据错误:通过分析波形可以检查是否存在数据位错误、起始位错误、停止位错误等。

例如,如果一些波形的起始位不是低电平,可能意味着出现了数据错误。

-观察信号噪声:通过示波器,可以检测到RS232信号中的噪声和干扰。

这些噪声可能是来自外部环境、电磁干扰或设备故障等因素引起的。

示波器可以帮助找到干扰的原因,并采取相应的措施进行排除。

-分析通信速率:观察每个波形周期的长度,可以计算出通信的实际波特率。

如果波特率与设定值不一致,可能是由于设备设置或波特率选择有误。

5.进行波形捕获和保存:如果需要保存分析结果,可以使用示波器提供的保存功能将波形数据保存为文件。

这样可以随时回顾或与他人分享分析结果。

SCI串行通信

SCI串行通信

实验五SCI串行通信一.实验目的1.了解串行通讯的基本原理;2. 掌握SCI接口通信的工作原理和典型编程方法。

二.实验设备1.PC机一台,操作系统为WindowsXP (或Windows98、Windows2000),安装了ccs3.1;2.TI 2000系列的TMS320F2812 eZdsp开发板一块;3.扩展实验箱一台。

三.实验原理1.串行通信接口(SCI)是采用双线制通信的异步串行通信接口(UART)。

SCI模块采用标准非归零(NRZ)数据格式,能够实现多CPU之间或同其他具有兼容数据格式SCI端口的外设进行数据通信。

SCI的接收器和发送器都支持16级接受和发送FIFO,有着各自独立的中断和使能位,可以独立地操作实现半双工通信,或者同时操作实现全双工通信。

为保证数据完整,SCI模块对接受的数据进行间断、极性、超限和帧错误的检测。

为减少软件的负担,SCI采用硬件对通信数据进行极性和数据格式检测。

通过对16位的波特率控制寄存器进行编程,配置不同的SCI通信速率。

SCI与CPU的的接口结构如图5.1。

图5.1 SCI与CPU接口结构图2.SCI接口特点:2个外部引脚:SCITXD为SCI数据发送引脚;SCIRXD为SCI数据接收引脚。

两个引脚为多功能复用引脚,如果不使用可以作为通用数字量I/O。

●可编程通信速率,可以设置64K种通信速率。

●数据格式:1个启动位;1-8个可编程数据字长度;可选择奇校验、偶校验或无校验位模式;1或2位的停止位。

●4种错误检测标志位:奇偶错误、超时错误、帧错误和间断错误。

●2种唤醒多处理器方式:空闲线唤醒(Idle-line)和地址位唤醒(Address Bit)。

●全双工或半双工通信模式。

●双缓冲接收和发送功能。

●发送和接收可以采用中断和状态查询2种方式。

图5.2 SCI通信模块接口框图●独立的发送和接收中断使能控制。

●NRZ(非归零)通信格式。

●13个SCI模块控制寄存器,起始地址为7050H。

白话说电气_ASI总线介绍(有实物图)

白话说电气_ASI总线介绍(有实物图)

ASI 很简单,类似于DP网络,DP走的是DP通讯线,ASI走的是扁平电缆。

协议不细说。

这两个网络可以通过网关模块互联,互相读写数据。

AS-I总线介绍AS-i(actuatorsensorinterface)是传感器/执行器接口的缩写。

1994年,为推进二进制传感器、执行器与总线适配接口的研究和推广,由欧洲几大行业公司倡议,联合成立了AS-i社团组织,后来逐渐发展壮大,吸纳了世界著名的传感器、执行器制造商和研究单位,发展成为国际AS-i组织。

2002年9月20日,中国AS-I用户组织成立,主要参加单位包括:P+F、FESTO、SIEMENS (关于西门子对于ASI通讯的支持,我们实际项目中有使用西门子的343-2模块,就是ASI的主控制器,或者叫做扫描模块)、ASINTERNATIONAL、ITEI、SEARI、TSINGHUA等。

AS-Interface(Actuator-Sensor-Interface)是执行器-传感器-接口的缩写,ASI 现场总线能够直接连接二进制执行器和传感器,形成自动化底层控制系统,是属于现场总线(FIELDBUS)下层设备层的监控网络系统。

所以在之前关于现场总线分类的文章中找不到对于ASI总线的介绍。

这是一个比较小的低成本的属于设备层的总线技术。

AS-Interface总线体系为主从结构,AS-Interface主机和控制器(IPC、PLC、DC)总称为系统主站(MASTER)。

从站(SLAVE)有两种,一种是带有AS-Interface 通信芯片的智能传感器/执行器,另一种是分离型I/O模块连接普通的传感器/执行器。

主从站之间使用非屏蔽非绞接的两芯电缆,其中使用的标准AS-Interface 扁平电缆使用专利的穿刺安装方法,连接简单可靠。

在2芯电缆上除传输信号外,还传输网络电源。

AS-Interface总线系统是一个开放的系统,它通过主站中的网关可以和多种现场总线(如FF、Profibus、Devicenet、Ethernet等)相连接。

i2c 读波形

i2c 读波形

i2c 读波形I2C(Inter-Integrated Circuit)是一种串行通信协议,用于在电子设备之间进行短距离通信。

它由飞利浦公司(现在是恩智浦)在1980年代初开发,并且在当时用于连接微控制器和外部设备。

I2C通信协议使用两根信号线,即SDA(Serial Data Line)和SCL(Serial Clock Line),通过这两根信号线实现设备之间的数据传输。

SDA线用于发送数据和接收应答,而SCL线用于同步设备数据传输的时钟信号。

I2C总线上的设备之间通过逻辑地址进行通信。

每个设备都有一个独一无二的7位地址,其中最低位用于指示数据读写操作。

这意味着在I2C总线上最多可以连接128个设备。

在进行I2C通信时,有两个关键概念,即“主机”和“从机”。

主机设备控制总线上的数据传输和时钟信号生成,而从机设备被主机设备控制,执行相应的数据读写操作。

在I2C通信中,主机设备通过发送起始信号(Start)来开始通信过程,并在通信结束时发送停止信号(Stop)。

同样,在数据传输过程中,主机设备发送地址和命令字节来选择从机设备,然后发送或接收数据字节。

为了确保数据的准确传输,I2C通信协议还有一个应答机制。

在主机发送数据字节后,从机会返回一个应答位,如果收到的数据字节正确,从机就会发送一个低电平应答位,否则发送高电平应答位。

I2C通信的波形图如下所示:_______SDA _____________ _____| |_____| |____________|| |-----------------------------|______________||__________________________________SCL在上面的波形图中,可以看到SDA和SCL信号的电平变化。

起始信号(Start)在SDA位上的下降沿触发,停止信号(Stop)在SDA位上的上升沿触发。

在每一个时钟周期中,数据传输发生在SCL信号的整个周期内。

DSP原理及应用技术第7.3节 串行通信接口(SCI)

DSP原理及应用技术第7.3节  串行通信接口(SCI)
RXINT RXINT
TXINT TXINT
7.3 串行通信接口(SCI)
2)SCI自动波特率
SCI模块的增强功能支持硬件上的自动波特率检测逻辑。自动波特率 检测的流程如下:
①使能自动波特率检测模式:设置CDC位(SCIFFCT.13)为1并通过 向ABDCLR位(SCIFFCT.14)写1清除ABD位(SCIFFCT.12)。
7.3 串行通信接口(SCI)
(3)SCI多处理器通信
多处理器通信格式允许一个处理器在同一串行线路中将数据块有 效地传给其它处理器。在一条串行线上每次只有一个处理器发送数据 地址字节: 休眠位: 识别地址字节:
两种多处理器模式的接收顺序如下: 1)在接收一个地址块时,SCI端口被唤醒并请求中断(SCICTL2 寄存器的RX/BK INT ENA位必须使能以发送中断请求)。读取包含目 的地址的第一帧数据。 2)通过中断进入一个软件服务程序,检测即将到来的地址,将 接收到的地址字节与存储在内存中的器件地址进行比对。 3)如果检测结果表明数据块的地址与该设备CPU地址一致,则 CPU清零SLEEP位,并读取数据块的其余部分;如果不是则退出子程序 ,SLEEP仍然保持置位,并且在下一个数据块开始之前不会产生接收 中断。
SCI模块与CPU的连接如图7-29所示。
7.3 串行通信接口(SCI)
1. SCI模块具有以下特征:
➢ 两个外部引脚(不用于SCI通信时,可作为通用I/O口): SCITXD:SCI发送-输出引脚; SCIRXD:SCI接收-输入引脚; ➢ 可编程为多达64K种不同的波特率; ➢ 可编程的数据字格式; ➢ 四个错误检测标志:奇偶校验、溢出、帧错误和间断检测; ➢ 两种多处理器唤醒模式:空闲线和地址位; ➢ 半双工或者全双工操作; ➢ 双缓冲接收或发送功能; ➢ 发送器和接收器操作的完成可以通过中断驱动或者软件查询状态标志来

SCI


SPI引脚定义 SPI引脚定义
SPI引脚: SPI引脚:
SCK MOSI MISO SS 主机产生的同步时钟 主机发送,从机接收 主机接收,从机发送 主从机选择
注意:
注意,主从机选择信号是低电平有效。1-主机,0= 注意,主从机选择信号是低电平有效。1 主机,0= 从机。系统中只能有一个主机。 主机的MOSI、MISO分别和从机的MOSI,MISO连 主机的MOSI、MISO分别和从机的MOSI,MISO连 接。
SPI1的 的 MOSI,时 , 片选, 钟,片选, 接到 74HC164
74HC164,串 , 入并出。 入并出。
74HC244八 八 同相三态线驱 动器
接8段LED的 段 的 驱动电路, 驱动电路, 低电平使某 段发光。 段发光。
SCI(串行通信接口) SCI(串行通信接口)总线接口
MC9S12DG128单片机有两个SCI 模块。 SCI 模块仅仅复用了PS 口的4 个I/O 引脚(0-3 位)作为RXD0、TXD0、RXD1、TXD1。当SCI 接收器/发送器被允许时,SCI 将控制TxD 和RxD 进入相应的操作,否则它们只能用作普通的I/O 口。 注意SCI是异步 异步串行通信口。 异步 SCI的发送器与接收器都是双缓冲的。各自 SCI 有工作使能和中断控制。可工作于全双工模式。 SCI的主要特性: 1、异步 3、不归零格式(NRZ) 5、收、发双缓冲 2、全双工 4、13个波特率控制位,选择更广 6、具有8个中断标志位的中断驱动操作
串行通信的数据传输方式 串行通信的数据传输方式
方式 全双工 半双工 单工 图示 一句话总结 同时收发 分时收发 只发不收, 只收不发
9S12系列单片机 9S12系列单片机SPI的定义 系列单片机SPI的定义

SPI通信协议(SPI总线)学习

SPI通信协议(SPI 总线)学习各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢支持全双工通信通信简单数据传输速率块3、缺点没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。

4、特点1):高速、同步、全双工、非差分、总线式2):主从机通信模式5、协议通信时序详解1):SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。

也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

(1)SDO/MOSI –主设备数据输出,从设备数据输入;(2)SDI/MISO –主设备数据输入,从设备数据输出;(3)SCLK –时钟信号,由主设备产生;(4)CS/SS –从设备使能信号,由主设备控制。

当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。

2):需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL和CPHA来控制我们主设备的通信模式,具体如下:Mode0:CPOL=0,CPHA=0Mode1:CPOL=0,CPHA=1Mode2:CPOL=1,CPHA=0Mode3:CPOL=1,CPHA=1时钟极性CPOL是用来配置SCLK 的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA是用来配置数据采样是在第几个边沿:CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿例如:CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

示波器抓取i2c波形的采样方法

示波器抓取i2c波形的采样方法
I2C是一种常用的串行通信协议,用于连接各种数字IC。

示波器是一种非常有用的工具,可以用来抓取并分析I2C波形。

以下是一些示波器抓取I2C波形的采样方法。

1.选择合适的示波器
I2C通常使用100kHz或400kHz的速度进行通信,因此您需要选择具有足够高带宽的示波器。

建议选择带宽高于500MHz的示波器。

此外,示波器应该具有足够的存储深度,以便可以捕获整个I2C通信序列。

2.设置示波器
在捕获I2C波形之前,您需要正确地设置示波器。

首先,您需要选择适当的触发条件。

建议使用外部触发,并将触发电平设置为I2C 总线上的时钟线。

然后,您需要设置水平和垂直缩放,以便可以看到整个I2C波形,并且每个信号都足够清晰。

3.捕获波形
一旦示波器设置完成,您可以开始捕获I2C波形。

在捕获之前,您需要确保I2C总线处于空闲状态。

然后,您可以开始捕获波形。

当示波器触发时,它将捕获I2C波形。

确保示波器捕获了整个通信序列。

4.分析波形
一旦您捕获了I2C波形,您可以分析它以了解通信中发生了什么。

首先,您需要确认总线的时钟频率。

然后,您可以查看每个数据传输周期,包括START和STOP条件以及数据和应答位。

您还可以分析数
据传输的时间和幅度。

总之,示波器是一种非常有用的工具,可以用于捕获和分析I2C 波形。

使用上述方法,您可以正确地设置示波器,捕获I2C波形,并分析通信中发生的事情。

i2c 异常波形 调试

i2c 异常波形调试I2C(Inter-Integrated Circuit)是一种常用的串行总线协议,用于连接微控制器和各种外设。

然而,在实际调试中,我们常常会遇到一些异常波形问题。

本文将介绍如何生动、全面、有指导意义地调试I2C异常波形。

首先,我们需要了解I2C的基本工作原理。

I2C总线由两根信号线组成,分别是SDA(Serial Data Line)和SCL(Serial Clock Line)。

SDA负责数据传输,而SCL负责数据时钟同步。

在正常情况下,SDA和SCL信号应呈现一个类似矩形波的形状。

当我们遇到异常波形时,首先需要确认硬件连接是否正确。

检查是否存在短路、开路等问题,以确保信号能够正常传输。

接下来,检查I2C总线上的电源供应是否稳定。

电源电压不稳定可能导致信号形变,从而产生异常波形。

使用示波器来测量电源电压,确保其在规定范围内波动较小。

进一步,我们需要确认是否存在信号线上的干扰。

附近的高频设备、电磁干扰源可能会影响I2C信号的传输。

移动这些干扰源,或添加屏蔽罩以隔离I2C信号线,可以帮助减少干扰。

除了硬件问题外,软件编程错误也可能导致异常波形。

检查软件中相关的I2C调试代码,确保正确配置I2C总线速率和其他相关参数。

如果以上方法都无法解决异常波形问题,那么可能存在I2C驱动器或设备的故障。

尝试更换驱动器或设备,以确定是哪个组件引起了异常波形。

最后,持续监测调试过程中的异常波形,通过示波器或逻辑分析仪实时观察信号变化,有助于找出问题的根源。

不断尝试不同的调试方法,结合硬件和软件层面的检查,从而逐步排除异常波形问题。

综上所述,调试I2C异常波形需要全面的硬件和软件分析,以及不断尝试不同的解决方法。

通过正确配置硬件连接、检查电源供应、排除信号干扰、检查软件程序等步骤,可以解决大多数异常波形问题。

坚持持续监测和调试,找到问题的根源,并进行相应的修复措施,保证I2C总线正常工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SCI详解曾经有人说过这么一句话,拿到一块单片机,首先必须做的事情就是调通它的SCI 通信,SCI调通了,就像一个练武之人打通了任督二脉,将会使你日后的开发如虎添翼。

确实,SCI不仅在MCU与外设通信之间起着非常重要的作用,更能给你的系统开发带来非常大的便利。

比如说,我们可以在程序的任何地方放置一条打印语句,把我们所需要查看的变量的值通过串口发送到PC端显示出来,从而对程序执行结果的正误进行判断。

目前市面上常见的单片机大多都只有一个UART异步串行通信口,有的甚至没有,比如和泰的HT66F50。

对于有UART模块的单片机来说,想使用串口通信就相对简单了。

你只要设置好波特率和其它一些简单的设置就能使用,你甚至不需要深入的了解串口通信的协议。

这对初学者来说有利也有弊。

有利的地方就是初学者只要进行简单的设置即可使用串口,不利之处是不利于初学者了解串口通信的底层协议,因为模块都帮你处理好了。

对于没有串口或者需要用到多串口的场合就需要用单片机普通I/O模拟串口通信的协议。

这能使初学者更好更深入的理解串口通信的协议。

所以,这里我们主要讲如何用I/O 模拟串口通信。

一:串口通信基本概念首先来看一下通信的格式。

在异步通信中,数据是一帧一帧(包括一个字符代码或一字节数据)传送的,每一帧的数据格式如图1所示:图1 串行通信帧格式在帧格式中,一个字符由4部分组成,起始位、数据位、奇偶校验位和停止位。

首先是一个起始位(0),然后是5~8位数据位(规定低位在前,高位在后),接下来是可省略的校验位,最后是一位停止位(1)。

通常使用的是1位起始位,8位数据位,无奇偶校验位,1位停止位的帧格式,我们下面用例子用I/O模拟串口的就是这种的帧格式。

再来看一下串口通信中波特率的概念。

波特率,即数据传送速率,表示每秒传送二进制代码的位数,、它的单位是b/s。

根据波特率的定义可以得到每一位代码的传送时间T d为波特率的倒数。

比如,当波特率为9600b/s时,T d=1/9600=104μs。

下面的例子就是以波特率为9600为例讲解的。

为了让读者对上面的概念有一个更为感性的认识,接下来用串口调试助手发送0x5500,串口调试助手发送截图如图2所示,示波器捕捉的波形如图3所示:图2 串口调试助手发送0x5500图3 实测PC发送0x5500波形从图2的红框部分可以看出串口发送的相关属性,比如波特率为9600,无奇偶校验位,8位数据位,1位停止位。

图3中对该波形已经进行了详细的标注,这里进一步的分析一下。

从图3的测量时间可以看出,每一位持续的时间确实为104μs,跟前面的计算结果是相符合的。

对于发送第一段波形(发送0x55)来说,包括1位起始位(为0),接下来是8位数据位(依次为1010 1010B,注意:低位在前),最后是1位停止位(为1)。

对于第二段波形(发送0x00)来说,实测的低电平持续时间为936μs,刚好为1位起始位+8位数据位持续的时间(9x104=936μs)。

并且从图3还可以看出,发送0x55和发送0x00是连续的。

事实上,帧与帧之间的间隙(时间间隔)可以是任意的,如图4所示:图4 帧与帧之间的时间间隔图4中实测的帧与帧之间的时间间隔是10.7ms。

从上述的波形可以看出,串口通信的特点是帧与帧之间的间隙(时间间隔)可以是任意的,但每一帧中的各位是以固定的时间传送的。

二:硬件电路单片机通过普通I/O口与PC机RS232串口实现通信的硬件电路如图5所示:图5 MAX232CPE典型应用电路由于PC机串行口为RS232C标准接口,与输入输出均采用TTL电平的单片机在接口规范上不一致,因此TTL电平到RS232接口电平的转换采用MAX232。

其中,TXD1和RXD1可以根据自己的需要接单片机的任一个I/O口。

三:单片机I/O模拟串口发送用I/O口模拟串口通信,常用的方法有延时法和定时法。

延时法是用延时产生每一位发送所需的时间,定时法则是用定时产生该时间。

这里主要是采用延时法。

设定串口通信协议为:波特率为9600,1位起始位,8位数据位,无奇偶校验位,1位停止位。

先来看看如何模拟串口发送。

发送时,先发送一个起始位(低电平),延时104μs;接着按低位在先的顺序发送8位数据(发送每一位完都要延时104μs);最后发送停止位(高电平),延时104μs。

相应的程序如下所示:#define Tx PORTA_PA1void SendByte(unsigned char data) //波特率为9600{unsigned char i;Tx=0; delay(); //起始位,延时104μsfor(i=0;i<8;i++){if(data&0x01) //发送"1"{Tx=1;delay();}else //发送"0"{Tx=0;delay();}data=data>>1; //先发低位}Tx=1; delay(); //停止位}在主程序调用该函数SendByte(0x55);串口调试助手接收到的数据和示波器实测的波形分别如下所示:图6 串口调试助手接收到0x55图7 实测单片机发送0x55从图6可以看到PC机能正确的接收到单片机发来的数据,图7中的波形可以看出模拟的串口通信协议是正确的,每位的时间间隔正好为104μs。

在这里说明一下,上述程序中的延时函数delay();是根据我的硬件条件借助示波器编写出来的。

读者应该根据自己的硬件条件编写该函数。

有了上面的发送一个字符的函数,就可以编写类似于C语言中的printf()打印输出语句,具体程序如下:void ConsolePutROMString( char* str){char c;while( c = *str++ )SendByte(c);}在主程序中调用ConsolePutROMString("It is OK!\r\n");其中,字符串后面的\r\n在C 语言中表示换行。

程序的运行结果如下:图8 字符串接收四:单片机I/O模拟串口接收接收时,先判断接收引脚(用具有引脚中断功能的PTJ_PTJ7模拟)是否有下降沿出现,如有,则表示有数据待接收,延时104μs等待起始位过去;接着继续延时50μs左右,其时刚好到第一位数据的中段,这时采样可以保证数据的准确性。

接着延时104μs刚好到第二位数据的中段,采样;按其方法接收完8位数据,最后判断PTJ_PTJ7是否有停止高电平出现,如有,则完成一个数据接收,没有则继续等待。

在这里之所以选择PTJ_PTJ7引脚,是因为为了判断起始位,需要判断是否有下降沿出现,所以需要找一个带有引脚中断的I/O口,PTJ_PTJ7刚好可以满足该要求。

程序如下://发送引脚定义和标志位设定unsigned char RecStatus=0;#define Rec PTJ_PTJ7// PTJ_PTJ7引脚中断服务子程序void interrupt 24 PORTH_ISR(void) //Vporth{PTM_PTM5=1; //调试用引脚RecStatus=1; //有数据发送过来PIFJ_PIFJ7=1; //清除中断标志位}//接收函数unsigned char ReceiveByte(void) //9600{unsigned char i;unsigned char buf=0x00;PIEJ_PIEJ7 = 0; //禁止J7中断delay(); delay50us();PTM_PTM5=0;for(i=0;i<8;i++){if(Rec==1) //接收到的为”1”{buf=(buf|0x01<<i);delay(); PTM_PTM5=1;}else //接收到的为”0”{delay(); PTM_PTM5=0;}}while(Rec==0); //等待结束位PIEJ_PIEJ7 = 1; //使能J7中断return buf;}在上面的接收函数里,为了观察程序是否确实在每一位的中段附近采样I/O引脚的状态,加入了调试语句(程序中与PTM_PTM5有关的语句)。

//SCI初始化函数void SCIinit() //SCI初始化{DDRA_DDRA1=1; //outputTx=1;DDRJ_DDRJ7 =0x00; //inputRec=1;PIEJ_PIEJ7 = 1 ; //使能J7口中断PPSJ_PPSJ7 = 0; //下降沿}然后在主函数里接收来自PC机发送的数据,并将其发送给PC机以便于观察现象,程序如下:void main(void) {unsigned char buf;EnableInterrupts;DDRM_DDRM5=0xFF;PTM_PTM5=0; //调试用SCIinit();for(;;){if(RecStatus==1) //等待数据{buf=ReceiveByte(); //接收数据SendByte(buf); //发送数据RecStatus=0; //标志位置零}}}运行程序,现象如下:图9 程序运行结果在串口调试助手里选择自动发送0x55(如红框所示),自动发送周期1ms,可以发现在接收区里显示的正是0x55,说明程序正确。

接收引脚实测波形如下图所示:图10 接收引脚实测波形从图10可以看出(通道一为接收引脚波形,通道二为调试引脚波形),程序确实都是在每一位的中段附近采样的(通道二波形的上升沿或下降沿即是采样时刻)。

相关文档
最新文档