0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PC机的CPLD串行通信的特点与程序的编写

电子设计 作者:电子设计 2018-11-14 10:15 次阅读

引言

CPLD(复杂可编程逻辑器件)设计乃至仿真、验证、利用ISP(在系统可编程)对硬件调试都非常方便,所以开发周期很短,且I/O口随意设定,故用CPLD设计专用芯片是大势所趋。VB是一种面向对象的高级语言,应用这的通信控件编写上位机的通信程序十分方便,过程简单。本文针对CPLD和PC通信的特点,各编写了上位机和下位机的程序,进行相对高速的串行通信。

PC机的CPLD串行通信的特点与程序的编写

1 上位机和下位机通信特点简介

根据串行通信的协议,发送串行数据一般是:1个起始位、n个数据位,1个或多个停止位。这样,发送起始位以后表明传输开始。传送与接收的双方设定好同样的传输位数,直到n个数据位送完以后,送停止位。上位机和下位机的电平标准不同,它们通过RS-232电平标准转换,在两者之间接入RS-232电平转换芯片即可。上位机和下位机的传输是异步传输,这样就需要有一个参考脉冲代表传输速度即波特率。通信双方取得一样的通信速度bps,指的是每一秒钟所传送的位数。现在仪器和工业场合,一般9600 bps是最常见的速度,而现在个人计算机PC所提供的串行速度可115 200bps(甚至921 600 bps)。因为常用的单片机MCU的软件是过程语言,以其作为下位机,无法提供这么高的波特率,即使是较低的波特率也可能产生误差。所以在传输距离较近而设备也可提供时,使用最高的传输速度也可以。CPLD的软件是非过程语言,也就是说其逻辑段定义的所有动作是同时进行的而不是串行的,所以完全可以提供这样的高速下位机UART(UniversalAsynchronous Receiver Transmitter)。

2 上位机VB程序

上位机软件利用VB6编写。微软的VISUAL

BASIC语言有极其友好的界面,深受广大编程人员的好评。其可视化特点得到了很好的发挥,其中的MSCOMM控件非常方便编写软件,将最低层的部分隐蔽,只要了解自己需要的参数即可顺序编写上位机软件。现在简介该控件的各项参数:

CommPort——指定串行口;

PortOpen——串口是否打开;

InPut——输入寄存器

Output——输出寄存器;

InBufferSize——输入缓冲区大小;

OutBufferSize——输出缓冲区大小;

InputLen——一次由串行端口读入字符串长度或字节个数;

Settings——设备波特率、传输数据位、校验位、停止位;

InputMode——输入的是数据类型(文字形式或是二进制形式)。

上位机程序要和下位机配合起来。主要须考虑的问题是波特率、输入输出数据类型。对于从下位机到上位机输出数据的情况,可作以下处理(反之类似):

Settings 115200,n,8,1(波特率115 200bps,校验位默认,8位数据位,1个停止位)

对于上位机,将输入的数据以二进制数形式获取要通过以下的转换:

Dim data() As Byte

Private Sub Timer1_Timer()

data()=MSComm1.Input

For i=LBound(data)To UBound(data)

Text2.Text=data(i)

Next

End Sub

在串口打开的情况下,利用定时器定时从下位机获取数据,显示在窗口中。通过设置VB定时器控件的interval参数来控制读取时间。可见,上位机利用VB编写程序,十分方便,这是一种成熟的模块化语言,只要把参数给定,很快可以实现编程。

3 下位机通信程序编写

MAXPLUSII里有许多常用的宏单元,如计数器、四则运算、各类逻辑门乃至ROMRAM等;而在这些宏单元里具体的参数都可以由用户来自行设定,这就是上面提到的IP核形式。由于CPLD数字设计中结构化设计的趋势,不同层次的IP(intellectualProperty)核将出现。各个IP核可重复利用,大大提高了设计能力和效率,避免了重复劳动。以下设计的是下位机的IP核,它是一个波特率、起始位、停止位均可设定的宏单元。

MAXPLUSII的AHDL(Altera Hard wareDescription Language)是Altera公司开发的完全集成于MAXPLUSII中的一种模块化高级语言,特别适合于描述复杂的组合逻辑、组运算、状态机和真值表。本文利用AHDL,直接生成IP核。

设计的最终目标是生成如图1所示的Symbol。其参数可以由用户设定(如图1的右上角),选择先送(收)串行数据最高位或最低位、数据宽度、停止位等。

PC机的CPLD串行通信的特点与程序的编写

设计思想是利用状态机的3种状态send(receive)、wait、idle,系统时钟为输入的CLK,在这3种状态间变换。而BAUD为CLK分频后的波特率时间。发送时,当BAUD上升沿时,输出1位串行数据。输出全部结束时,BUSY端出现低电平信号,这时利用LOAD信号可以从D端读取并入的数据。由于使用的是AHDL,这种状态机实现起来非常方便,程序简洁明了。图2所示为状态机图。

程序清单如下:

CASE Ss IS --状态机

WHEN idle =》

IF Load THEN

Ss=wait;

ELSE

Ss=idle;

END IF;

WHEN wait =》

IF Baud THEN

Ss=send;

ELSE

Ss=wait;

END IF;

WHEN send =》

IF count[]!=0 THEN

Ss=wait;

ELSE

Ss=idle;

END IF;

WHEN OTHERS =》

Ss=idle;

END CASE;

TxD=InShift[WIDTH+1]; --TXD串出

IF Ss!=idle THEN --控制BUSY

Busy=VCC;

END IF;

CASE Ss IS

WHEN idle =》

count[]=WIDTH+STOP_BITS; --等传送的位数

WHEN send =》

count[ ]=count[ ]-1;

WHEN OTHERS =》

Count[]=count[];

END CASE;

CASE Ss IS --控制输入寄存器

WHEN idle =》

IF MSB_FIRST= =“YES”GENERATE

DTMP[]=D[];

ELSE GENERATE

FOR each_bit IN 0 TO WIDTH-1 GENERATE

DTMP[WINDTH-1-each_bit]=D[each_bit];

END GENERATE;

END GENERATE;

InShift[]=(1,0,DTMP[]);

WHEN send =》

InSift[WIDTH+1..1]=InShift[WIDTH..0];

InShift[0]=VCC;

WHEN OTHERS=》

InShift[]=InShift[];

END CASE;

图3为仿真波形,系统时钟CLK为6MHz,50分频后得到周期为868ns的时钟BAUD,即波特率为115200 bps。设定为从高位到低位依次传送:起始位1位,低电平;8位数据位,1个停止位,为高电平。图3中显示分别传送十进制数20、21、22、23(即二进制数0001010000010101 00010110 00010111)的情况,LOAD信号一直有效。可见,传送1个数据总共有10位,1个起始位、8个数据位、1个停止位。按照波特率115200 bps,传送1个数据需要的时间为86.8μs。这个数度充分体现了CPLD的优势,比单片机MCU串行传输要快上10倍以上。如果上位机UART允许,这个速度还可以增大到接近MCU串行传输的100倍,即波特率为921600 bps。

PC机的CPLD串行通信的特点与程序的编写

设计完成通过仿真以后,通过编程电磁将生成的pof文件用ISP(在线编程)方式下载到CPLD板EPM7128LC84-6,外接RS-232电平转换芯片HIN232CP。经过电平转换,CPLD和PC机接口通信,上位机用VB编写程序。试验证明,在高速情况下,通信正常。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpld
    +关注

    关注

    32

    文章

    1243

    浏览量

    168279
  • PC
    PC
    +关注

    关注

    9

    文章

    1950

    浏览量

    152785
  • 串行通信
    +关注

    关注

    4

    文章

    534

    浏览量

    35011
收藏 人收藏

    评论

    相关推荐

    基于Visual Basic6.0下PC与MCS-51单片串行通信

    PC控制单片机组成的分级式测控系统有着广泛的应用。以往的PC通信程序多数是通过汇编语言或B
    发表于 03-05 13:05

    求单片PC串行通信

    求单片PC串行通信PROTEUS原理图和程序,谢谢了,各位大侠帮帮我!!QQ:353057
    发表于 05-19 09:32

    单片PC串行通信

    单片PC串行通信
    发表于 05-19 10:11

    单片PC串行通信中波特率的确定

    /s的除数锁存器低8位的值为0CH。  3 用PC的汇编语言设计的串行通信程序中波特率的设定  PC
    发表于 09-05 10:59

    请教:51单片PC串行通信

    这是我画的51单片PC串行通信的原理图,我想实现按下开关S2单片
    发表于 02-09 15:37

    TMS320F24x与PC串行通信接口设计及应用

    中断方式接收pc发送过来的数据包,握手并校验确认后接收有效数据,再将pc所需的数据打包回送。基于dsp功能模块化的特点,其串行通信汇编程序
    发表于 12-28 10:10

    TMS320F240与PC串行通信

    TMS320F240的 XF/IOPC2引脚控制。由于一般PC机上提供的是标准的RS-232C串行接口,因此,需要RS-232C/RS-485转换器进行接口转换。 4 上位PC
    发表于 05-06 09:18

    DSP与PC串行通信接口硬件设计

    异常或需要控制程序重新运行时,可以直接从上位pc发控制指令,达到复位下位的功能。同样,也可以从dsp端复位pc或给pc发特定的命令信号。d
    发表于 06-12 05:00

    急求51单片PC之间进行串行通信程序

    求51单片PC之间进行串行通信程序PC将一帧数据发送给单片
    发表于 12-24 15:24

    如何去编写PC通信程序

    PLC的通讯协议有哪几种格式?如何去编写PC通信程序
    发表于 09-29 08:36

    如何去实现单片PC之间的通信

    单片PC通信一、实验目的二、实验内容三、实验步骤四、C代码如下五、实验结果六、实验体会一、实验目的掌握单片PC或其他非单片
    发表于 12-13 07:34

    PC机与CPLD通信问题的研究

    根据PC 机作为上位机和下位机的CPLD 串行通信特点,简介上位机VB 程序
    发表于 04-15 08:40 17次下载

    PC 机与CPLD 通信问题的研究

    根据PC 机作为上位机和下位机的CPLD 串行通信特点,简介上位机VB 程序
    发表于 05-14 14:15 22次下载

    用VHDL语言在CPLD上实现串行通信

    摘 要: 串行通信是实现远程测控的重要手段。采用VHDL语言在CPLD上实现了串行通信,完全可以脱离单片机使用。 关键词:
    发表于 06-20 12:43 612次阅读
    用VHDL语言在<b class='flag-5'>CPLD</b>上实现<b class='flag-5'>串行</b><b class='flag-5'>通信</b>

    PC机与CPLD通信问题的研究

    PC机与CPLD通信问题的研究
    发表于 01-19 21:22 5次下载