一种用于单片机的红外串行通信接口

| 收藏本文 下载本文 作者:罗拉$花花酱

下面是小编为大家整理的一种用于单片机的红外串行通信接口(共含9篇),以供大家参考借鉴!同时,但愿您也能像本文投稿人“罗拉$花花酱”一样,积极向本站投稿分享好文章。

一种用于单片机的红外串行通信接口

篇1:一种用于单片机的红外串行通信接口

一种用于单片机的红外串行通信接口

摘要:阐述红外通信的基本工作原理;结合在单相电度表抄表系统中的具体应用,介绍一种适合单片机系统的红外通信方案,设计具体的硬件接口电路,说明其工作原理,给出应用于红外通信的程序流程,并指出在实施过程中应注意的一些问题。

关键词:单片机 红外通信 串行接口 抄表系统

引言

在很多单片机应用系统中,常常利用非电信号(如光信号、超声波信号等)传送控制信息和数据信息,以实现遥控或遥测的功能。例如在单相电度表抄表系统中,就是使用手持抄表器通过遥控的方式,来完成电度表用电量的抄录、设置表底数、电度表校时等工作。红外通信具有控制简单、实施方便、传输可靠性高的特点,是一种较为常用的通信方式。实现单片机系统红外通信的关键在于红外接口电路的设计以及接口驱动程序的设计。

1 红外通信的基本原理

红外通信是利用950nm近红外波段的红外线作为传递信息的媒体,即通信信道。发送端采用脉时调制(PPM)方式,将二进制数字信号调制成某一频率的脉冲序列,并驱动红外发射管以光脉冲的形式发送出去;接收端将接收到的光脉转换成电信号,再经过放大、滤波等处理后送给解调电路进行解调,还原为二进制数字信号后输出。

简而言之,红外通信的实质就是对二进制数字信号进行调制与解调,以便利用红外信道进行传输;红外通信接口就是针对红外信道的调制解调器。

(本网网收集整理)

2 红外通信接口的硬件电路设计

单片机本身并不具备红外通信接口,但可以利用单片机的串行接口与片外的红外发射和接收电路,组成一个应用于单片机系统的红外串行通信接口,如图1所示。

2.1 红外发送器

红外发送器电路包括脉冲振荡器、驱动管T1和T2、红外发射管D1和D2等部分。其中脉冲振荡器由NE555定时器、电阻(R1、R2)和电容(C1、C2)组成,用以产生38kHz的脉冲序列作为载波信号;红外发射管D1和D2选用Vishay公司生产的TSAL6238,用来向外发射950nm的红外光束。

红外发送器的.工作原理为:串行数据由单片机的串行输出端TXD送出并驱动T1管,数位“0”使T1管导通,通过T2管调制成38kHz的载波信号,并利用两个红外发射管D1和D2以光脉冲的形式向外发送。数位“1”使T1管截止,红外发射管D1和D2不发射红外光。若传送的波特率设为1200bps,则每个数位“0”对应32个载波脉冲调制信号的时序,如图2所示。

2.2 红外接收器

红外接收电路选用Vishay公司生产的专用红外接收模块TSOP1738。该接收模块是一个三端元件,使用单电源+5V电源,具有功耗低、抗干扰能力强、输入灵敏度高、对其它波长(950nm以外)的红外光不敏感的特点,其内部结构框图如图3所示。

TSOP1738的工作原理为:首先,通过红外光敏元件将接收到的载波频率为38kHz的脉冲调制红外光信号转化为电信号,再由前放大器和自动增益控制电路进行放大处理。然后,通过带通滤波器和进行滤波,滤波后的信号由解调电路进行解调。最后,由输出级电路进行反向放大输出。

为保证红外接收模块TSOP1738接收的准确性,要求发送端载波信号的频率应尽可能接近38kHz,因此在设计脉冲振荡器时,要选用精密元件并保证电源电压稳定。再有,发送的数位“0”至少要对应14个载波脉冲,这就要求传送的波特率不能超过2400bps。利用上述红外收发电路构成的红外信道最大通信距离为8m。

3 红外通信的软件设计

3.1 通信方式

考虑到红外光反射的原因,在全双工方式下发送的信号也可能会被本身接收,因此红外通信需采用异步半双工方式,即通信的某一方发送和接收是交替进行的。这里设置单片机的串行口采用方式3通信;通信的数据格式为每帧11位,包括1位起始位、8位数据位、1位奇偶校验位和1位停止位;片内定时器T1作为波特率发生器,选择传送的波特率为1200bps,则定时器T1的初值应设置为TL1=TH1=E8H,另外应禁止定时器T1中断,以免因定时器T1溢出而产生不必要的中断。

3.2 通信协议

进行红外通信之前,通信双方首先要根据系统的功能要求制订某种特定的通信协议,然后才能编写相应的通信程序。例如在电度表抄表系统中,红外通信的一方是单相电度表,另一方是手持抄表器,双方遵循表1格式的通信协议。

表1 抄表系统的通信协议

格 式

操 作操作码地址码数  据结束符读取表数AAH3字节BCD码3字节BCD码EDH设置表号BBH-3字节BCD码EDH设置表底数CCH3字节BCD码3字节BCD码EDH开/关表设备DDH3字节BCD码A0H/B0HEDH校验出错EEH3字节BCD码-EDH

3.3 单相电度表通信程序

在电度表抄表系统中,单相电度表接收命令是被动的,因此它采用实时性的中断方式进行接收。在系统初始化程序中依据如前所述的通信方式,对串行口和定时器T1进行相应的设置。

在中断程序程序中按字节形式进行接收,将接收到的字节存放在预先设定的缓冲区内,当接收到命令结束符后,则转入命令处理并回送相应的信息。接收过程中若发现校验错误,则停止接收并调用错误处理子程序,发送接收出错的信息,要求发送端重新发送。串行口中断服务程序的流程如图4所示。

3.4 手持抄表器通信程序

在红外通信过程中,手持抄表器是通信的发起者,其发送和接收都是主动的。它的具体工作过程为:CPU不断扫描键盘,若发现有命令键按下,则调用发送子程序发送相应的操作命令;发送结束后即启动接收子程序,以接收电度表回送的信息,然后对接收到的信息进行后续处理。

结语

本文介绍的应用于单片机系统的红外串行通信接口,具有硬件电路简单、成本低廉、编程方便、通信可靠性高的特点,实现了通信双方非接触式的数据传送。在电度表抄表系统中,由于配备了红外通信接口,利用手持抄表器可以方便地完成对电度表的抄录和校准等工作,大大提高了抄表工作的效率,而且抄表确定高并杜绝了估抄和误抄的问题。这种红外通信方案也可用于其它遥控、遥测的单片机应用场合。

篇2:一种用于单片机的红外串行通信接口

一种用于单片机的红外串行通信接口

摘要:阐述红外通信的基本工作原理;结合在单相电度表抄表系统中的具体应用,介绍一种适合单片机系统的红外通信方案,设计具体的硬件接口电路,说明其工作原理,给出应用于红外通信的程序流程,并指出在实施过程中应注意的一些问题。

关键词:单片机 红外通信 串行接口 抄表系统

引言

在很多单片机应用系统中,常常利用非电信号(如光信号、超声波信号等)传送控制信息和数据信息,以实现遥控或遥测的功能。例如在单相电度表抄表系统中,就是使用手持抄表器通过遥控的方式,来完成电度表用电量的抄录、设置表底数、电度表校时等工作。红外通信具有控制简单、实施方便、传输可靠性高的特点,是一种较为常用的通信方式。实现单片机系统红外通信的`关键在于红外接口电路的设计以及接口驱动程序的设计。

1 红外通信的基本原理

红外通信是利用950nm近红外波段的红外线作为传递信息的媒体,即通信信道。发送端采用脉时调制(PPM)方式,将二进制数字信号调制成某一频率的脉冲序列,并驱动红外发射管以光脉冲的形式发送出去;接收端将接收到的光脉转换成电信号,再经过放大、滤波等处理后送给解调电路进行解调,还原为二进制数字信号后输出。

简而言之,红外通信的实质就是对二进制数字信号进行调制与解调,以便利用红外信道进行传输;红外通信接口就是针对红外信道的调制解调器。

2 红外通信接口的硬件电路设计

单片机本身并不具备红外通信接口,但可以利用单片机的串行接口与片外的红外发射和接收电路,组成一个应用于单片机系统的红外串行通信接口,如图1所示。

2.1 红外发送器

红外发送器电路包括脉冲振荡器、驱动管T1和T2、红外发射管D1和D2等部分。其中脉冲振荡器由NE555定时器、电阻(R1、R2)和电容(C1、C2)组成,用以产生38kHz的脉冲序列作为载波信号;红外发射管D1和D2选用Vishay公司生产的TSAL6238,用来向外发射950nm的红外光束。

红外发送器的工作原理为:串行数据由单片机的串行输出端TXD送出并驱动T1管,数位“0”使T1管导通,通过T2管调制成38kHz的载波信号,并利用两个红外发射管D1和D2以光脉冲的形式向外发送。数位“1”使T1管截止,红外发射管D1和D2不发射红外光。若传送的波特率设为1200bps,则每个数位“0”对应32个载波脉冲调制信号的时序,如图2所示。

2.2 红外接收器

红外接收电路选用Vishay公司生产的专用红外接收模块TSOP1738。该接收模块是一个三端元件,使用单电源+5V电源,具有功耗低、抗干扰能力强、输入灵敏度高、对其它波长(950nm以外)的红外光不敏感的特点,其内部结构框图如图3所示。

TSOP1738的工作原理为:首先,通过红外光敏元件将接收到的载波频率为38kHz的脉冲调制红外光信号转化为电信号,再由前放大器和自动增益控制电路进行放大处理。然后,通过带通滤波器和进行滤波,滤波后的信号由解调电路进行解调。最后

[1] [2] [3]

篇3:一种多协议串行通信接口的设计方法

一种多协议串行通信接口的设计方法

摘要:文章对多种协议串行通信进行了分析与讨论,给合Linear公司生产的多协议串口芯片,针对传统串口通信实现中的问题以及实际的广域网串行通信的需求,提出了一种多协议串行接口的设计实现方法。

关键词:多协议串口通信;通信协议; 收发器;连接器; 多协议串口芯片 LTC1546/LTC1544

随着通信网技术的进一步发展,越来越多的互连网设备(如路由器、开关、网关、存取装置)中的串行接口在广域网(Wide Area Network)中被设计成能够支持多种物理接口协议或标准。广域网串行口协议包括RS-232,RS-449,EIA-530,V.35 ,V.36以及X.21等。图1所示是一个简单的串行通信接口示意图。由图可知,实现多协议串口通信的关键是将连接器送来的不同传输方式?平衡、非平衡?和不同电气信号通过收发器转换为终端能够识别并处理的、具有TTL电平的信号。

1 传统多协议通信的特点和问题

1.1 “子板”方式

广域网串口应用中的通用实现方法是为所需的每一种物理协议提供一个独立的子板。一个支持EIA-232,EIA-449及V.35协议的系统,通常需要三个独立的子板以及三个不同的连接器。这种方法由于每种协议要求配置一块子板,因此系统需要对PCB子板、收发器芯片、连接器等进行管理,这样既浪费资源,又会使管理工作复杂化。

(本网网收集整理)

1.2 通用连接器方式

为解决“子板”方式的缺点,可使用一块母板及通用连接器。一个母板上有多种收发器芯片,可以满足多串口协议的要求,并可共用一些通用器件,同时可减少资源的浪费。在配置中,应注意因连接器的管脚较少而带来的问题,较好的办法是根据信号而不是根据协议来分配管脚,即给每一个信号分配一个通用管脚,而不管其物理协议如何定义。如对EIA-232,EIA-449,EIA-530,V.35和V.36来说,其TxD信号可连至连接器相同的管脚。即SD?a?信号连接到管脚2,SD?b?信号连接到管脚14。然后利用这对管脚来描述所有协议的发送信号TxD。

这种方法同样也会带来一个问题,即所有收发器的I/O线至通用连接器的管脚必须彼此共用。例如,一个V.28驱动器芯片中的发送数据信号线的接连接器DB-25的管脚2;同时,一个V.11驱动器芯片中的发送数据信号线要接至连接器的管脚2和14;而V.35驱动器芯片中发送数据信号线也会接至连接器的管脚2和14。这样,通用连接器的管脚2将同时接有三根信号线,管脚14接有两根信号线。这样,在这一配置中,所有的驱动器都必须具有三态特性,以禁止不必要的输出。若收发器没有三态特性,则需要使用一个多路复用器来选择相应的输出端。由此带来的另一个问题是收发器在禁止使用时会产生漏电电流。如果选择了V.28协议,其输出电压理论值为15V。此时对于V.11协议的驱动器会被禁用,而处于三态时,其输出漏电电压就必须足够低,才能使得连在同一连接器管脚的V.28协议的驱动器信号不受影响。如果在发送器与接收器之间有隔断开关,则开关也要考虑漏电情况。

1.3 串口的DTE/DCE模式切换

DTE/DCE的`切换可通过选择不同的连接器转换电缆来实现,这样,在实现DTE/DCE转换时可最大程度地减小收发器的复杂性,但缺点是需要更换电缆,尤其是设备放置位置不便或DTE/DCE需要频繁切换时这一点尤为突出。

如果保持传输电缆不变,则可将收发器配置为两套以分别支持DTE、DCE方式。而将DTE收发器的驱动器输出与DCE收发器的接收器输入相连,而将接收器输入端与DCE收发器的驱动器输出相连。为了控制DTE或DCE方式,驱动器或接收器的输出必须为三态。当选择为DTE方式时,DCE芯片禁止,其驱动器和接收器处于三态,反之亦然。

该方法虽然解决了对电缆的频繁更换问题,但由于多用了一套收发器而使得设计成本大为提高,且串口板的体积也大了很多。

2 多协议串口通信的实现原理

传统设计中,针对某种协议通常应选择相应的收发芯片,如对于RS-232协议,常用DS-1488/DS-1489、MAX232或SP208等收发器芯片;而对于RS-449协议,则常使用SN75179B、MAX488、MAX490等收发器芯片。当同时使用RS-232、RS-422和V.35协议时,就需要多个收发器芯片来支持不同的协议。

现在,一些收发器的生产厂商研制出了多协议收发器芯片。Sipex是第一家生产出RS-232/ RS-422软件可选择协议芯片SP301的公司。这种芯片可将RS-232和RS-422收发器的电气特性综合到一个芯片中实现。其中SP50X系列产品最多可支持8种协议标准。其它生产厂家如Linear公司生产的LTC154x系列、LTC284x系列芯片也具有以上功能。用户可根据自己的需要选择适当的芯片。

图2为采用分立的收发器芯片与采用一片多协议收发器芯片实现多协议串口通信的通信卡。从图可知,前者实现的复杂度要远远大于后者,具体的性能比较如表1所列。

表1 两种方法实现串口通信的性能比较

分立器件板综合器件板供电电压+5V,-5V,+12V,-12V+5V所需收发器芯片数121支持的物理层协议RS-232,RS-422,RS-449,EIA-530,V.35,V.36RS-232,RS-422,RS-449,RS-485,EIA-530,EIA-530A,V.35,V.36协议选择方式跳线或开关软件或硬件(通过内部译码)串口板大小除了15个收发器芯片外还需其它硬件支持非常小功耗大约1W大约100mW~250mW

除此之外,与分立收发器芯片相比,多协议收发器对驱动器使能控制和对输出漏电电流的处理要容易得多。当通过软件或硬件方法选择某一协议时,驱动器和接收器的电气参数将调整至适当的大小,电路内部将自动控制驱动器的输出电平、接收器的输入门限、驱动器和接收器的阻抗值以及每一物理层协议的常用模式范围。

另外,由于外部网络终端对V.35的需求,使得与V.35收发器的连接不能象其它协议那么简单。当使用分立收发器芯片时,常常通过采用昂贵的继电器开关电阻在选择其它协议接口时将V.35网络终端断开,或者要求用户每选择一个新的接口标准就改变一次终端模块,这样既浪费资源又会使接口电路变得复杂,因而不是一种理想的实现方法。而多协议串口芯片则自动提供适当的终端和片上开关来符合V.10、V.11、V.28和V.35电气协议,从而解决了电缆终端转换问题。

3 基于LTC1546/44的多协议通信

为了说明多协议串口芯片的工作原理,现以Linear公司的LTC1546/1544芯片为例进行分析。

3.1 LTC1546/LTC1544的性能

LTC1546芯片是一个3驱动器/3接收器的收发器,其主要特点如下:

● 带有软件可选的收发器可支持RS232、RS449、EIA530、EIA530A、V.35、V.36和X.21协议?

● 可提供片上电缆终端?

● 与LTC1543引脚兼容?

● 与LTC1544配合可完成完整的DTE或DCE?

● 工作在5V单电源?

● 占位面积小。

LTC1544芯片是一个4驱动器/4接收器的收发器,其主要特点有:

● 软件可选的收发器支持RS232、RS449、EIA530、EIA530A、V.35、V.36和X.21协议?

● 采用LTC1344A作为软件可选的电缆终端?

● 采用LTC1543、LTC1544A或LTC1546可实现完整的DTE或DCE端口?

● 与LTC1543同样工作于5V单电源。

这两种芯片均采用28引线SSOP表面贴封装,图3所示为其引脚排列。

由LTC1546/ LTC1544可组成一套完整的软件可选择DTE或DCE接口,以应用于数据网络、信息业务单元?CSU?和数据业务单元(DSU)或数据路由器中,它支持多种协议,电缆终端可在片上提供,因此不再需要单独的终端设计。其中,LTC1546每个端口的一半用来产生和适当终止时钟和数据信号。LTC1544则用来产生控制信号及本地环路返回信号(Local Loop-back,LL)。接口协议通过模式选择引脚M0、M1和M2来决定,具体选择方式见表2。

表2 通信协议的模式选择

LTC1546模式名称M2M1M0DCE/DTED1D2D3R1R2R3未用(缺省V.11)0000V.11V.11V.11V.11V.11 RS530A0010V.11V.11ZV.11V.11V.11RS5300100V.11V.11ZV.11V.11V.11X.210110V.11V.11ZV.11V.11V.11V.351000V.35V.35ZV.35V.35V.35RS449/V.361010V.11V.11ZV.11V.11V.11V.28/RS2321100V.28V.28ZV.28V.28V.28无电缆1110ZZZZZZ未用(缺省V.11)0001V.11V.11V.11ZV.11V.11RS530A0011V.11V.11V.11ZV.11V.11RS5300101V.11V.11V.11ZV.11V.11X.210111V.11V.11V.11ZV.11V.11B.351001V.35V.35V.35ZV.35V.35RS449/V.361011V.11V.11V.11ZV.11V.11V.28/RS2321101V.28V.28V.28ZV.28V.28无电缆1111ZZZZZZ

由表2可知,如果将端口设置为V.35模式,模式选择引脚应当为M2=1,M1=0,M0=0。此时,对于控制信号,驱动器和接收器将工作在V.28(RS232)模式;而对于时钟和数据信号,驱动器和接收器将工作在V.35模式。

模式选择可通过控制电路?或利用跳线将模式引脚接至地或Vcc?来实现对引脚M0、M1和M2的控制,也可通过适当的接口电缆插入到连接器上实现外部选择控制。若选用后者,则当移开电缆时,全部模式引脚均不连接,即M0=M1=M2=1,此时LTC1546/ LTC1544进入无电缆模式。在这种模式中,LTC1546/1544的供电电流将下降到500μA以下,并且LTC1546/ LTC1544驱动器输出将被强制进入高阻状态。同时,LTC1546的R2和R3接收器应当分别用103Ω端接,而LTC1546和LTC1544上的其它接收器则应通过30kΩ电阻接到地。

通过DCE/DTE引脚可使能LTC1546中的驱动器3/接收器1、LTC1544中的驱动器3/接收器1和驱动器4/接收器4;LTC1544中的INVERT信号对驱动器4/接收器4起使能作用。可以通过下面两种方法中的一种将LTC1546/LTC1544设置为DTE或DCE工作模式:一种是将专门配有适当极性的连接器接至DTE或DCE端;另一种是通过专用DTE电缆或专用DCE电缆发送信号给LTC1546/LTC1544,同时使用一个连接器构成一种既适合DTE又适合DCE的工作模式。

3.2 典型应用

图4为一个带有DB-25连接器端口并可被设置为DTE或DCE工作模式的多协议串口通信电路,图中LTC1546/LTC1544芯片一边与连接器相连,另一边接至HDLC芯片,M0、M1、M2及DCE/DTE引脚接至EPLD硬件控制电路以实现对通信协议和工作模式的选择。其中DTE或DCE工作模式需要连接对应的电缆以保证正确的信号发送。例如,在DTE模式中,TxD信号通过LTC1546的驱动器1发送到引脚2和14。在DCE模式中,驱动器则将RxD信号发送到引脚2和14。

图4中,LTC1546采用一个内部容性充电泵来满足VDD和VEE。其中,VDD为符合V.28的正电源电压端,该端应连接一只1F的电容到地;VEE为负电源电压端。一个电压倍增器在VDD上将产生大约8V电压,而电压反相器则将在VEE上产生大约-7.5V的电压。四只1μF电容均为表面贴装的钽或陶瓷电容,VEE端的电容最小应为3.3μF。所有电容耐压均应为16V,同时应尽可能放置在LTC1546的附近以减少EMI干扰。

图4 用LTC1546/LTC1544芯片实现多协议串口通信(DTE/DCE可选)

在V.35模式中,LTC1546中的开关S1和S2将导通,同时应连接一个T型网络阻抗,以将接收器的30kΩ输入阻抗与T网络终端并联起来,但不会显著影响总输入阻抗,因此对于用户来说,这种模式下的电路设计与其它模式下完全相同。

由于LTC1546是3驱动器/3接收器的收发器,LTC1546是4驱动器/4接收器的收发器,所以如果同时采用RL、LL和TM信号,则LTC1546/LTC1544就没有足够的驱动器和接收器。因此,可用LTC1545来替换LTC1544。LTC1545为5驱动器/5接收器的收发器,它能够处理多个可选的控制信号,如TM和RL。

所有LTC1546/LTC1544接收器在全部模式下都具有失效保护功能。如果接收器输入浮置或通过一个终端电阻短接在一起,那么,接收器的输出将永远被强制为一个逻辑高电平。

4 结束语

实现多协议串口通信的方法很多,不同厂家提供有功能各不相同的串口芯片。设计者可根据自己的需求来选择。当设计一个支持各种物理层协议的复杂DTE/DCE模式时,和使用许多分立的元器件相比,选择一个单片多协议串行收发器将会简化配置,同时所设计的电路也会更灵活、方便和简单。

篇4:一种多协议串行通信接口的设计方法

一种多协议串行通信接口的设计方法

摘要:文章对多种协议串行通信进行了分析与讨论,给合Linear公司生产的多协议串口芯片,针对传统串口通信实现中的问题以及实际的广域网串行通信的需求,提出了一种多协议串行接口的设计实现方法。

关键词:多协议串口通信;通信协议; 收发器;连接器; 多协议串口芯片 LTC1546/LTC1544

随着通信网技术的进一步发展,越来越多的互连网设备(如路由器、开关、网关、存取装置)中的`串行接口在广域网(Wide Area Network)中被设计成能够支持多种物理接口协议或标准。广域网串行口协议包括RS-232,RS-449,EIA-530,V.35 ,V.36以及X.21等。图1所示是一个简单的串行通信接口示意图。由图可知,实现多协议串口通信的关键是将连接器送来的不同传输方式?平衡、非平衡?和不同电气信号通过收发器转换为终端能够识别并处理的、具有TTL电平的信号。

1 传统多协议通信的特点和问题

1.1 “子板”方式

广域网串口应用中的通用实现方法是为所需的每一种物理协议提供一个独立的子板。一个支持EIA-232,EIA-449及V.35协议的系统,通常需要三个独立的子板以及三个不同的连接器。这种方法由于每种协议要求配置一块子板,因此系统需要对PCB子板、收发器芯片、连接器等进行管理,这样既浪费资源,又会使管理工作复杂化。

1.2 通用连接器方式

为解决“子板”方式的缺点,可使用一块母板及通用连接器。一个母板上有多种收发器芯片,可以满足多串口协议的要求,并可共用一些通用器件,同时可减少资源的浪费。在配置中,应注意因连接器的管脚较少而带来的问题,较好的办法是根据信号而不是根据协议来分配管脚,即给每一个信号分配一个通用管脚,而不管其物理协议如何定义。如对EIA-232,EIA-449,EIA-530,V.35和V.36来说,其TxD信号可连至连接器相同的管脚。即SD?a?信号连接到管脚2,SD?b?信号连接到管脚14。然后利用这对管脚来描述所有协议的发送信号TxD。

这种方法同样也会带来一个问题,即所有收发器的I/O线至通用连接器的管脚必须彼此共用。例如,一个V.28驱动器芯片中的发送数据信号线的接连接器DB-25的管脚2;同时,一个V.11驱动器芯片中的发送数据信号线要接至连接器的管脚2和14;而V.35驱动器芯片中发送数据信号线也会接至连接器的管脚2和14。这样,通用连接器的管脚2将同时接有三根信号线,管脚14接有两根信号线。这样,在这一配置中,所有的驱动器都必须具有三态特性,以禁止不必要的输出。若收发器没有三态特性,则需要使用一个多路复用器来选择相应的输出端。由此带来的另一个问题是收发器在禁止使用时会产生漏电电流。如果选择了V.28协议,其输出电压理论值为15V。此时对于V.11协议的驱动器会被禁用,而处于三态时,其输出漏电电压就必须足够低,才能使得连在同一连接器管脚的V.28协议的驱动器信号不受影响。如果在发送器与接收器之间有隔断开关,则开关也要考虑漏电情况。

1.3 串口的DTE/DCE模式切换

DTE/DCE的切换可通过选择不同的连接器转换电缆来实现,这样

[1] [2] [3] [4] [5] [6] [7]

篇5:串行DataFlash存储器及其与单片机的接口

摘要:DataFlash是Atmel公司新推出的大容量串行Flash存储器产品,具有体积小、容量大、功耗低和硬件接口简单的特点,非常易于构成微型测量系统。本文重点介绍此类存储器与单片机的接口,并给出实际的电路设计和软件代码示例。

关键词:串行Flash存储器接口AT45DB161B

1概述

Flash存储器按其接口可分为串行和并行两大类。串行Flash存储器大多采用I2C接口或SPI接口进行读写;与并行Flash存储器相比,所需引脚少、体积小、易于扩展、与单片机或控制器连接简单、工作可靠,所以串行Flash存储器越来越多地用在各类电子产品和工业测控系统中。

DataFlash是美国Atmel公司新推出的大容量串行Flash存储器产品,采用NOR技术制造,可用于存储数据或程序代码,其产品型号为AT45DBxxxx。此系列存储器容量较大,从1Mb~256Mb;封装尺寸小,最小封装型式(CBGA)尺寸为6mm×8mm;采用SPI接口进行读写,硬件连线少;内部页面尺寸较小,8Mb容量的页面尺寸为264字节,16Mb和32Mb容量的页面尺寸为512字节,64Mb容量的页面尺寸为1056字节,128Mb容量和256Mb容量的页面尺寸为2112字节。另外,AT45DBxxxx系列存储器内部集成了两个与主存页面相同大小的SRAM缓存,极大地提高了整个系统的灵活性,简化了数据的读写过程。此外,AT45DBxxxx系列存储器工作电压较低,只需2.7~3.6V;整个芯片的功耗也较小,典型的读取电流为4mA,待机电流仅为2μA。所有这些特点使得此系列存储器非常适合于构成微型、低功耗的测控系统。笔者就使用AT45DB161B存储器和PIC16LC73B单片机及微型压力传感器构成了用两片纽扣电池驱动的微型压力测量装置,其外形尺寸仅为φ10mm×20mm。

2芯片简介

2.1引脚排列和功能

AT45DB161B为DataFlash系列中的中档产品,单片容量为16Mb。其引脚排列如图1所示,引脚功能如表1所列。

表1AT45DB161B引脚功能

引脚名称功能描述CS片选SCK串行时钟SI串行输入SO串行输出WP页面写保护RESET复位RDY/BUSY准备好/忙NC未使用

2.2芯片内部逻辑结构

AT45DB161B的内部逻辑结构分为三个部分:存储器页阵列(主存)、缓存与I/O接口。AT45DB161B的存储页面大小为528字节,整个存储器共分为4096页,片内集成了两个528字节的SRAM缓存,内部逻辑结构如图2所示。

3存储器读写接口

3.1SPI接口及操作模式

AT45DB161B存储器采用SPI接口进行读写。SPI接口是一种通用串行接口总线,字长为8位,用来与外部设备(例如EEPROM、A/D转换器等)进行通信。SPI接口利用SCK、SI和SO三根线进行数据的读/写。其中,SCK为时钟信号,SI和SO为数据输入和输出线。AT45DB161B的SCK引脚的时钟信号必须由外部单片机或控制器输入,读/写命令字由SI引脚输入,数据由SO引脚输出。

SPI接口共有四种操作模式,分别为0、1、2和3。SPI操作模式决定了设备接收和发送数据时的时钟相位和极性,即决定了时钟信号的上升和下降沿与数据流行方向之间的.关系,如图3所示。

DataFlash系列存储器仅支持使用得最为广泛的SPI模式0和3。在这两种模式下,SCK信号的上升沿触发数据输入,下降沿触发数据输出。二者的区别是SCK信号的起始电平不同。

3.2存储器命令接口与状态机

除了基本存储单元外,DataFlash系列存储器内部还包括命令用户接口CUI(CommandUserInterface)和状态机。CUI接收用户软件的操作命令,将其翻译成状态机内部操作码并进行命令的有效性检验。状态机控制存储器所有的内部操作,包含一个8位的状态寄存器(statusregister),用来指示设备的操作状态。向存储器输入读状态寄存器命令可将状态寄存器的数据从最高位开始依次读出。状态寄存器各位的意义如表2所列。

表2状态寄存器各位定义

位7位6位5位4位3准备好/忙比较容量位2位1位0将来使用

3.3存储器操作命令及其模式

为了使存储器进行所需的操作,例如读、写、擦除等,必须从SI引脚输入相应的操作命令,然后从SO或SI引脚读取或写入数据。除读状态寄存器命令外,所有的命令格式为:1字节操作码+3字节地址码。操作码指示所需的操作,DataFlash系列节地址码用来寻址存储器页阵列或缓存。图4为AT45DB161B的读/写命令格式。

篇6:串行DataFlash存储器及其与单片机的接口

4.1硬件电路

DataFlash系列存储器几乎可以和任何类型的单片机接口,无论单片机是否有SPI接口。当然,如果单片机有SPI接口,那么存储器读/写程序就相对简单些;如果单片机没有SPI接口,则可以用软件仿真SPI接口与存储器通信。

图5为微型压力测量系统的一部分。存储器采用AT45DB161B-TC,TSOD封装;单片机为美国Microchip公司的PIC16LC73B-04/SS,SSOP封装。单片机采用软件仿真SPI接口的方式与存储器通信,存储器工作于SPI模式0。

4.2AT45DB161B存储器读/写子程序

DataFlash系列存储器可以按地址从低到高顺序读写,也可以随机读写任一字节的数据。对于顺序读数据,可以使用连续读主存页阵列命令(操作码68H或E8H)从给定的起始地址开始连续读出,中间不需用户干预,也可使用读单页主存命令(操作码52H或D2H),自行提供页地址读取数据。对于顺序写数据,可以使用通过缓存写主存页命令(操作码82H或85H),直接将数据写入主存;也可以先使用写缓存命令(操作码84H或87H),将数据写入缓存,在适当的时刻再使用缓存写主存页命令(操作码83H或86H),将缓存中的数据写入主存,如图6所示。使用何种方式读写取决于特定的应用场合与要求。

下面的子程序为顺序读/写存储器的例子。子程序spiwt采用了通过缓存写主存页的方法,向存储器写入1字节数据。顺序读存储器子程序spicrd采用了边疆读主存页阵列命令。从给定地址处连续读出数据,用图5所示的PIC16LC73B单片机汇编语言编写,使用MPLAB5.4.00编译器编译通过并烧写入单片机,按图5所示系统实测通过。

;顺序写子程序,用spiwt名称调用

spiwtbcfSTATUS,RP0

bcfPORTB,SCK;模式0

bcfPORTB,cs;片选

movlw82H;加载操作码

movwfspi_out;置入寄存器

callspiout;调用子程序输出操作码

movfPA1,w;加载第一字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfBA1,w

xorwfPA2,w;获得第二字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfBA2,w;加载第三字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfspi_wt,w;加载待写数据

movwfspi_out;置入寄存器

callspiout;调用子程序输出

bsfPORTB,cs;触发写入操作

nop;延时

retlw0;从子程序返回

;输出子程序,用spiout名称调用

spioutmovlw0x08;加载输出位数

movwfspi_cnt;置入寄存器

nspioutrlfspi_out;先输出最高位

btfscSTATUS,C;是否为1

bsfPORTB,SDO;输出1

btfssSTATUS,C;是否为0

bcfPORTB,SDO;输出0

nop;延时

bsfPORTB,SCK;时钟信号上升沿

nop;延时

bcfPORTB,SCK;时钟信号下降沿

decfszspi_cnt;检查输出位数

gotonspiout;输出下一位

retlw0;从子程序返回

;顺序读子程序,用名称spicrd调用

spicrdbcfSTATUS,RP0

bcfPORTB,cs;片选

bcfPORTB,SCK;模式0

movlwE8H;加载操作码

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfPA1,w;加载第一字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfBA1,w

xorwfPA2,w;获得第二字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfBA2,w;加载第三字节地址

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfDCRE,w;加载任意位字节

movwfspi_out;置入寄存器

callspiout;调用子程序输出

movfDCRE,w;共需4个任意位字节

movwfspi_out

callspiout

movfDCRE,w

a

movwfspi_out

callspiout

movfDCRE,w

movwfspi_out

callspiout

retlw0;从子程序返回

篇7:C语言实现串行通信接口程序

C语言实现串行通信接口程序

摘 要 本文说明了异步串行通信(RS-232)的工作方式,探讨了查询和中断两种软件接口利弊,并给出两种方式的C语言源程序。

的I/O通道之一,以最简单方式组成的串行双工线路只需两条信号线和一条公共地线,因此串行通信既有线路简单的优点同时也有它的缺点,即通信速率无法同并行通信相比,实际上EIA RS-232C在标准条件下的最大通信速率仅为20Kb/S。

尽管如此,大多数外设都提供了串行口接口,尤其在工业现场RS-232C的应用更为常见。IBM PC及兼容机系列都有RS-232的适配器,操作系统也提供了编程接口,系统接口分为DOS功能调用和BIOS功能调用两种:DOS INT 21H的03h和04h号功能调用为异步串行通信的接收和发送功能;而BIOS INT 14H有4组功能调用为串行通信服务,但DOS和BIOS功能调用都需握手信号,需数根信号线连接或彼此间互相短接,最为不便的是两者均为查询方式,不提供中断功能,难以实现高效率的通信程序,为此本文采用直接访问串行口硬件端口地址的方式,用C语言编写了串行通信查询和中断两种方式的接口程序。

1.串行口工作原理

微机串行通信采用EIA RS-232C标准,为单向不平衡传输方式,信号电平标准±12V,负逻辑,即逻辑1(MARKING)表示为信号电平-12V,逻辑0(SPACING)表示为信号电平+12V,最大传送距离15米,最大传送速率19.6K波特,其传送序列如图1,平时线路保持为1,传送数据开始时,先送起始位(0),然后传8(或7,6,5)个数据位(0,1),接着可传1位奇偶校验位,最后为1~2个停止位(1),由此可见,传送一个ASCII字符(7位),加上同步信号最少需9位数据位。

@@T8S12300.GIF;图1@@

串行通信的工作相当复杂,一般采用专用芯片来协调处理串行数据的发送接收,称为通用异步发送/接收器(UART),以节省CPU的时间,提高程序运行效率,IBM PC系列采用8250 UART来处理串行通信。

在BIOS数据区中的头8个字节为4个UART的端口首地址,但DOS只支持2个串行口:COM1(基地址0040:0000H)和COM2(基地址0040:0002H)。8250 UART共有10个可编程的单字节寄存器,占用7个端口地址,复用地址通过读/写操作和线路控制寄存器的第7位来区分。这10个寄存器的具体功能如下:

COM1(COM2) 寄存器

端口地址 功能 DLAB状态

3F8H(2F8H) 发送寄存器(写) 0

3F8H(2F8H) 接收寄存器(读) 0

3F8H(2F8H) 波特率因子低字节 1

3F9H(2F9H) 波特率因子高字节 1

3F9H(2F9H) 中断允许寄存器 0

3FAH(2FAH) 中断标志寄存器

3FBH(2FBH) 线路控制寄存器

3FCH(2FCH) MODEM控制寄存器

3FDH(2FDH) 线路状态寄存器

3FEH(2FEH) MODEM状态寄存器

注:DLAB为线路控制寄存器第七位在编写串行通信程序时,若采用低级方式,只需访问UART的.这10个寄存器即可,相对于直接控制通信的各个参量是方便可靠多了。其中MODEM控制/状态寄存器用于调制解调器的通信控制,一般情况下不太常用;中断状态/标志寄存器用于中断方式时的通信控制,需配合硬件中断控制器8259的编程;波特率因子高/低字节寄存器用于初始化串行口时通信速率的设定;线路控制/状态寄存器用于设置通信参数,反映当前状态;发送/接收寄存器通过读写操作来区分,不言而喻用于数据的发送和接收。

UART可向CPU发出一个硬件中断申请,此中断信号接到中断控制器8259,其中COM1接IRQ4(中断OCH),COM2接IRQ3(中断OBH)。用软件访问8259的中断允许寄存器(地址21H)来设置或屏蔽串行口的中断,需特别指出的是,设置中断方式串行通信时,MODEM控制寄存器的第三位必须置1,此时CPU才能响应UART中断允许寄存器许可的任何通信中断。

2.编程原理

程序1为查询通信方式接口程序,为一典型的数据采集例程。其中bioscom函数初始化COM1(此函数实际调用BIOS INT 14H中断0号功能)。这样在程序中就避免了具体设置波特率因子等繁琐工作,只需直接访问发送/接收寄存器(3F8H)和线路状态寄存器(3FDH)来控制UART的工作。线路状态寄存器的标志内容如下:

第0位 1=收到一字节数据

第1位 1=所收数据溢出

第2位 1=奇偶校验错

第3位 1=接收数据结构出错

第4位 1=断路检测

第5位 1=发送保存寄存器空

第6位 1=发送移位寄存器空

第7位 1=超时

当第0位为1时,标志UART已收到一完整字节,此时应及时将之读出,以免后续字符重叠,发生溢出错误,UART有发送保持寄存器和发送移位寄存器。发送数据时,程序将数据送入保持寄存器(当此寄存器为空时),UART自动等移位寄存器为空时将之写入,然后把数据转换成串行形式发送出去。

本程序先发送命令,然后循环检测,等待接收数据,当超过一定时间后视为数据串接收完毕。若接收到数据后返回0,否则返回1。

若以传送一个ASCII字符为例,用波特率9600 b/s,7个数据位,一个起始位,一个停止位来初始化UART,则计算机1秒可发送/接收的最大数据量仅为9600/9=1074字节,同计算机所具有的高速度是无法相比的,CPU的绝大部分时间耗费在循环检测标志位上。在一个有大量数据串行输入/输出的应用程序中,这种消耗是无法容忍的,也不是一种高效率通信方式,而且可以看到,在接收一个长度未知的数据串时,有可能发生遗漏。

程序2是一组中断方式通信接口程序。微机有两条用于串行通信的硬件中断通道IRQ3(COM2)和IRQ4(COM1),对应中断向量为OBH和OCH,可通过设置中断屏蔽寄存器(地址21H)来开放中断。置1时屏蔽该中断,否则开放中断。硬件中断例程必须在程序末尾往中断命令寄存器(地址20H)写入20H,即

MOV AL, 20H

OUT 20H, AL用以将当前中断服务寄存器清零,避免中断重复响应。

每路UART有4组中断,程序可通过中断允许寄存器(3F9H)来设置开放那路中断。这4组中断的位标志如下:

第0位 1=接收到数据

第1位 1=发送保持寄存器为空

第2位 1=接收数据出错

第3位 1=MODEM状态寄存器改变

第4~7位为0

在中断例程中检查UART的中断标志寄存器(3FAH),确定是哪一组事件申请中断。该寄存器第0位为0时表示有中断申请,响应该中断并采取相应措施后,UART自动复位中断标志;第2,1位标志中断类型,其位组合格式如下:代码 中断类型 复位措施11接收出错读线路状态寄存器10接收到数据读接收寄存器01发送寄存器空输出字符至发送寄存器00MODEM状态改变读MODEM状态寄存器这4组中断

的优先级为0号最低,3号最高。

在本组程序中,函数setinterrupt()和clearinterrupt()设置和恢复串行通信中断向量;cominit()初始化指定串行口并开放相应中断;sendcomdata()和getcomeomdata()用于发送和接收数据串;com1()和com2()为中断例程,二者均调用fax2()函数,fax2()函数为实际处理数据接收和发送的例程。明确了串行口的工作原理,就不难理解其具体程序。

3.结论

上述程序采用C语言编写,在BORLAND C++2.0集成环境中调试通过,为简单起见,只考虑了使用发送/接收两条信号线的情况,并未考虑使用握手信号线。

在实际应用中这两组程序尚有一些可修改之处。比如,中断接收程序中的缓冲区可改为循环表,以防数据溢出,尽可能保留最新数据。由于笔者水平所限,文中不足疏漏之处尚希行家指正。

程序1:

static int receive_delay=10000;

int may(unsigned par,char *comm,char *ss)

{int cs=0,j=0;

char *p;

bioscom(0,par,0); //com1

loop:p=comm;

inportb(0x3f8); //reset

do{ while((inportb(0x3f8+5)&0x20)==0); outportb(0x3f8,*p++);

}while(*p); //send command

os=0;j=0;

do{ if((inportb(0x3fd)&0x01)==0)

if(os〉receive_delay) break;

else { cs++;

continue; } ss[j++]=inportb(0x3f8); cs=0;

}while(l);

ss[j]='';

if(j) return 0;

else return 1;

程序2:

#include

#include

#include

#include

#inolude

#define maxsize 4096

#define SEND 2

#define RECEIVE 1

#define COM1 0

#define COM2 1

static unsigned char Hardinterrupt=0;

struct ComInterrupt

{int portadd;

int intbit;

char buf[maxsize],*comm;

int bufh,recount,sendcount;

}com[2]={{0x3f8,0x0c,“”,“”,0,0,0},

{0x2f8,0x0b,“”,“”,0,0,0} };

void static interrupt (*old_com[2])(void);

vold interrupt coml(vold);

void interrupt com2(void);

void fax2(int comnum);

void setinterrupt(int comnum);

void clearinterrupt(int comnum);

void cominit(int comnum, int para, int interruptmark);

void sendcomdata (int comnum,char *command);

int getcomdata (int comnum, char *buf);

void interrupt com1(void)

{fax2(0);}

void interrupt com2(void)

{fax2(1);}

// set cominterrupt, comnum 0=com1, 1=com2

void setinterrupt (int comnum)

{

old_com[comnum]=getvect(com[comnum].intbit);

if (!oomnum)

setvect(com[comnum].intbit,coml); //com1

else

setvect(com[comnum].intbit,com2); //com2

//set hard int

Hardinterrupt = inportb(0x21);

if(comnum)

outportb(0x21,Hardinterrupt&0xf7); //com2 ,0

else

outportb(0x21,Hardinterrupt&0xef); //com1 0,

}

void clear interrupt(int comnum)

{

if(comnum)

outportb(0x21,Hardinterrupt | 0x08); //COM2

else

outportb(0x21,Hardinterrupt|0x10); //COM1

setvect(com[comnum].intbit,old_com[comnum]);

for( i=0;i

com[comnum].sendcount=com[comnum].recount=com[comnum].bufh=0;

outportb(com[comnum].portadd+1,0);

outportb(com[comnum].por tadd+4,0x0);

}

void fax2(int i)//i=o,com1; i=1, com2

{ unsigned char mark;

mark=inport(com[i].portadd+2);

do

{

if(mark&0x4)// receive data

{ if (com[i].bufh==maxsize)

com[i].bufh=0; com[i].buf[com[i].bufh++]=inportb(com[i].portadd); com[

i].recount++;}

else if(mark&0x2)// send command

{ if(*com[i].comm)

outportb(com[i].p

ortadd,*com[

i].comm++);

com[i],sendcount++;}

else

outportb(com[i].portadd+1,1);

}

}while ((mark=inport([1]. portadd+2))!=1);

outportb(ox20,0x20); //hard int return

}

// interruptmark 1= reoeive, 2=send, 3=rec&send

void comint(int com, char para, int interruptmark)

{

bioscom(0, par, com);

//open com interrupt

outportbv (com[comnum]. portadd+4,0x8;

outportb (com[comnum].portadd+1,interruptmark);

}

void sendcomdata(int comnum,char * command)

{ unsigned char interruptmark;

com[comnum],comm=command;

com[comnum],sendcount=0;

//set send interrupt

interruptmark=inportb (com[comnum].portadd_1);

outportb (com[comnum].portadd+1.(interruptmark|2));

}

//get com_receivedate and clear com_receivebuf,

int getcomdata (int comnum, char * buf)

{ int result=com[comnum]. recount,i:

if(buf)

strncpy(buf,com[comnum].buf,com

[comnum].bufh);

buf[com[comnum].bufh]='';

com[comnum].recount=com [comnum].bufh=0;

retun(result);

}

篇8:C语言实现串行通信接口程序

C语言实现串行通信接口程序

摘 要 本文说明了异步串行通信(RS-232)的工作方式,探讨了查询和中断两种软件接口利弊,并给出两种方式的C语言源程序。

的I/O通道之一,以最简单方式组成的串行双工线路只需两条信号线和一条公共地线,因此串行通信既有线路简单的优点同时也有它的缺点,即通信速率无法同并行通信相比,实际上EIA RS-232C在标准条件下的最大通信速率仅为20Kb/S。

尽管如此,大多数外设都提供了串行口接口,尤其在工业现场RS-232C的应用更为常见。IBM PC及兼容机系列都有RS-232的适配器,操作系统也提供了编程接口,系统接口分为DOS功能调用和BIOS功能调用两种:DOS INT 21H的03h和04h号功能调用为异步串行通信的接收和发送功能;而BIOS INT 14H有4组功能调用为串行通信服务,但DOS和BIOS功能调用都需握手信号,需数根信号线连接或彼此间互相短接,最为不便的是两者均为查询方式,不提供中断功能,难以实现高效率的通信程序,为此本文采用直接访问串行口硬件端口地址的方式,用C语言编写了串行通信查询和中断两种方式的接口程序。

1.串行口工作原理

微机串行通信采用EIA RS-232C标准,为单向不平衡传输方式,信号电平标准±12V,负逻辑,即逻辑1(MARKING)表示为信号电平-12V,逻辑0(SPACING)表示为信号电平12V,最大传送距离15米,最大传送速率19.6K波特,其传送序列如图1,平时线路保持为1,传送数据开始时,先送起始位(0),然后传8(或7,6,5)个数据位(0,1),接着可传1位奇偶校验位,最后为1~2个停止位(1),由此可见,传送一个ASCII字符(7位),加上同步信号最少需9位数据位。

@@T8S12300.GIF;图1@@

串行通信的工作相当复杂,一般采用专用芯片来协调处理串行数据的发送接收,称为通用异步发送/接收器(UART),以节省CPU的时间,提高程序运行效率,IBM PC系列采用8250 UART来处理串行通信。

在BIOS数据区中的头8个字节为4个UART的端口首地址,但DOS只支持2个串行口:COM1(基地址0040:0000H)和COM2(基地址0040:0002H)。8250 UART共有10个可编程的单字节寄存器,占用7个端口地址,复用地址通过读/写操作和线路控制寄存器的第7位来区分。这10个寄存器的具体功能如下:

COM1(COM2) 寄存器

端口地址 功能 DLAB状态

3F8H(2F8H) 发送寄存器(写) 0

3F8H(2F8H) 接收寄存器(读) 0

3F8H(2F8H) 波特率因子低字节 1

3F9H(2F9H) 波特率因子高字节 1

3F9H(2F9H) 中断允许寄存器 0

3FAH(2FAH) 中断标志寄存器

3FBH(2FBH) 线路控制寄存器

3FCH(2FCH) MODEM控制寄存器

3FDH(2FDH) 线路状态寄存器

3FEH(2FEH) MODEM状态寄存器

注:DLAB为线路控制寄存器第七位在编写串行通信程序时,若采用低级方式,只需访问UART的这10个寄存器即可,相对于直接控制通信的各个参量是方便可靠多了。其中MODEM控制/状态寄存器用于调制解调器的通信控制,一般情况下不太常用;中断状态/标志寄存器用于中断方式时的通信控制,需配合硬件中断控制器8259的编程;波特率因子高/低字节寄存器用于初始化串行口时通信速率的设定;线路控制/状态寄存器用于设置通信参数,反映当前状态;发送/接收寄存器通过读写操作来区分,不言而喻用于数据的'发送和接收。

UART可向CPU发出一个硬件中断申请,此中断信号接到中断控制器8259,其中COM1接IRQ4(中断OCH),COM2接IRQ3(中断OBH)。用软件访问8259的中断允许寄存器(地址21H)来设置或屏蔽串行口的中断,需特别指出的是,设置中断方式串行通信时,MODEM控制寄存器的第三位必须置1,此时CPU才能响应UART中断允许寄存器许可的任何通信中断。

2.编程原理

程序1为查询通信方式接口程序,为一典型的数据采集例程。其中bioscom()函数初始化COM1(此函数实际调用BIOS INT 14H中断0号功能)。这样在程序中就避免了具体设置波特率因子等繁琐工作,只需直接访问发送/接收寄存器(3F8H)和线路状态寄存器(3FDH)来控制UART的工作。线路状态寄存器的标志内容如下:

第0位 1=收到一字节数据

第1位 1=所收数据溢出

第2位 1=奇偶校验错

第3位 1=接收数据结构出错

第4位 1=断路检测

[1] [2] [3] [4]

篇9:异步串行通信接口的IP核设计

异步串行通信接口的IP核设计

摘要:异步串行通信接口(SCI)因其结构简洁、使用方便,因而在各类MCU、DSP和MPU芯片设计中获得广泛的应用。本文给出一种以状态机为控制核心、以数据流为执行中心的异步串行通信接口IP核结构设计的通用方法。此方法已在笔者所设计的DSP芯片中得到验证。

关键词:SCI IP核设计 状态机 数据流

引言

目前,基于传统IC芯片的微电子应用系统设计技术正在转向基于知识产权(IP,Intellectual Property)核的片上系统(SoC,System on Chip)技术发展。另外,IC设计在国内的发展很快,各种规模的IC设计中心和公司不断出现。因此,IP核的设计已开始逐渐成为国内微电子系统设计的一项支撑技术。从应用功能角度划分IP核有两大类:微处理器IP核(如8位8051核、32位ARM核等)和各种接口IP核(如LCD控制器、各种串行总线接口IP核等)。本文以异步串行通信接口(SCI,Serial Communication Interface)接口IP核结构设计为例,说明SCI、UART、SPI、USB等接口IP核的设计方法。

SCI的通信方式采用标准NRZ格式来进行外设间的异步数字通信。因其结构简法,通常嵌入到DSP、MCU和MPU或外设控制芯片内部,作为芯片的一个接口功能模块。SCI通常由三个功能单元构成:波特率脉冲产生单元、发送单元和接收单元。其结构如图1所示。在SCI数据收发中,数据帧的数据格式要比地址帧的数据格式复杂得多。在不同的通信方式下,数据帧的格式是不同 的。为此在发送器和接收器中各引入了与数据帧格式相对应的状态机来实现数据流的控制。本文所介绍的就是基于这种设计思想的一种通用设计方法。

(本网网收集整理)

1 SCI数据发送单元

数据发送单元主要功能是完成数据的并/串转换及发送,同时产生发送标志位。其结构如图2所示,字符发送状态机如图3所示。下面简要介绍发送单元各功能模块及其状态转换。

(1)TXD时钟八分频器

对基于波特率时钟进行八分频,并输出两个基本脉冲―TXD_CLK_WORK(用于计数、移位等)和TXD_CLK_END(用于标志位的生成和数据流输出)。

(2)TXD状态寄存器

通过此状态寄存器设置通信控制寄存器2的两个控制位―TXEMPTY和TXRDY位,以表示数据写入SCI_TXBUF和启动发送过程。

(3)发送字符计数器

当字符状态机的输出状态为允许字符计数时,其开始对发送的字符计数。当计数器值等于编程的字符数时,输出TX_CHAP_REACH信号作为字符状态机激励,使之进入非字符输出状态。

(4)发送空闲线计数器

当字符状态机进入发送空闲线数据状态时,开始工作。当计数到一定值时,输出信号TX_IDLECOUT_REACH作为字符状态机激励,使之进入非空闲线数据计数状态。

(5)发送数据流的形成

在TXBUF2SHIFT的高电平脉冲作用下,在SCI_TXBUF中待发送数据,经过选择器选择指定位数的数据送入SCI_TXSHIFT低位,不足的高位清“0”。与此同时,TXWAKE数据也送到WUT寄存器,在地址位模式情况下,由ADDR_IDLE控制在WUT中形成地址位;并由SCI_TXSHIFT数据位、地址位和奇偶方式位三者逻辑或形成奇偶校验位。

(6)当前发送字符状态机

在启动、控制位、计数器溢出等激励作用下,实现发送字符状态的输出和转换。发送字符状态机的激励有:TXEMPTY(为“0”时启动TXD发送)、ADDR_IDLE(地址/空闲线模式选择位)、PARENA(奇偶校验使能位)、STOPBIT(选择1或2个停止位)、WUT(发送空闲位数据允许位)、TX_CHARCOUT_REACH(发送字符数目已够位)、TX_IDLECOUT_REACH(发送空闲数目已够位)。发送字符状态机(见图3)的状态有:1为帧停止位(1位),3为帧第1停止位(2位),5为帧第2停止位(2位),8位帧起始位

,9为待机状态,A为帧数据位,B为空闲线模式起始位,C为帧地址位,E为帧奇偶校验位,F为空闲线模式停止位,D为空闲线模式计数0~7。

2 SCI数据接收单元

数据接收单元的功能是完成串行数据接收及接收标志位的生成。其结构如图4所示,接收起始位检测和接收字符状态机如图5、图6所示。

接收单元各功能模块及状态转换说明如下。

(1)RXD时钟八分频器

对波特率时钟进行八分频,并保持其与所接收串行数据流的.字符同步。其输出两个时钟脉冲:RXD_CLK_WORK,用于计数、移位等;RXD_CLK_END,为数据流各种方式的停止位前一个字节时间段内提供脉冲。

图4 SCI数字接收单元

(2)起始位检测模块

是一种三位四状态机。其激励有两个:RXD_1_VALUE―接收的串行数据流激励;RXD_END_CHK―一次接收完毕的脉冲激励。其状态有如下几种(见图5):0(待机状态)、1(空状态)、2(空状态)、3(发现“1”到“0”的跳变状态)、4(输出时钟同步信号)、5(字符接收过程中输出RXD_CLK_AYN和RXD_START_DRV)。

(3)字符检测模块

主要功能是接收数据流。其在采样时钟驱动下数据流通过三个寄存器,随后在RXD_CLK_WORK脉冲作用下,三个寄存器的数据通过表决电路,把数据送到接收数据缓冲器RXD_VALUE中,为把数据送到移位寄存器RX_SHIFT做准备。

(4)当前接收字符状态机

用来标识当前所接收的数据是哪一种字符,以及在下一个RXD_CLK_WORK字符周期将转换到哪一种状态,并且根据当前接收字符的状态,驱动其它部件进行合适的操作。其激励有:RXD_START_DRV(RXD起始位有效激励)、RX_CHAR_REACH(RXD字符接收数目已够)、CCR3_ADDR_IDLE(地址/空闲线模式选择)、CCR5_PARENA(奇偶校验使能)。其状态(见图6)有:0(待机状态)、1(帧数据位)、2(帧起始位)、3(帧地址位)、4(帧奇偶校验位)、5(空状态)、6(帧停止位)。

(5)接收字符计数器

当接收字符状态机处于帧数据位阶段时,其开始计数;当与可编程的数据相同时,输出RX_CHAR_REACH给接收字符状态机。

(6)接收空闲线计数器

当处于待机状态时,开始计数器,当计数到一定时,输出一个脉冲,将RXSP1_RXWAKE置位为1;在下一个字符即将接收、读取SCI_RXBUF寄存器或SCI复位的情况下,RXST1_RXWAKE被复位为0。

(7)接收数据移位寄存器(SCI_RXSHIFT)

根据接收字符状态机的状态接收与检测的串行数据流,将所接收的正确数据送入SCI_RXBUF并置相应的标志,否则置出错标志。

(8)BRKDT间断检测计数器

当产生RXST4_FE帧错误时,开始工作。当RXD_VALUE为“1”时,其被复位;当RXD_VALUE为“0”时,表示没有数据接收,开始计数;当计到一定值时,输出计数满信号,此时间断检测标志RXST5_BRKDT被置位。

结语

综上所述,在各种串行接口IP核设计中,可将其内部单元结构划分为控制和执行两大部分。其中,控制逻辑的设计采用以单极或多级状态机为核心,并配合其各种激励单元的结构设计,可以做到结构清晰,并可实现较复杂的逻辑;执行机构的设计采用以控制逻辑输出的状态为中心,来设计数据选择器或数据分配器,可实现数据流的复杂流向(请见网络补充版:收集整理)。

单片机通信性能分析和评价方法

TMS320C54XX系列DSP与PC机间串行通信的实现

TM1300 DSP系统的以太网通信接口的设计与实现

用于粘性流场计算的一种改进的模糊控制方法

一种用于碘熏法提取指纹的实验装置论文

一种用于单片机的红外串行通信接口(精选9篇)

欢迎下载DOC格式的一种用于单片机的红外串行通信接口,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式

相关文章

热门推荐

HOT

猜你喜欢

NEW
点击下载本文文档