简析PLD和单片机构成的双向通信控制器

发布者:变形金刚最新更新时间:2014-02-17 来源: elecfans关键字:PLD  单片机  双向通信控制器 手机看文章 扫描二维码
随时随地手机看文章

  在传统的控制系统中,人们常常采用单片机作为控制核心。但这种方法硬件连线复杂,可靠性差,且单片机的端口数目、内部定时器和中断源的个数都有限,在实际应用中往往需要外加扩展芯片。这无疑对系统的设计带来诸多不便。现在有很多系统采用可编程逻辑器件CPLD作为控制核心。它与传统设计相比较,不仅简化了接口和控制,提高了系统的整体性能及工作可靠性,也为系统集成创造了条件。但可编程逻辑器件的D触发器资源非常有限,而且可编程逻辑器件在控制时序方面不如单片机那样方便,很多不熟悉的应用者往往感到应用起来非常的困难。利用可编程逻辑器件和单片机构成的双向通信控制器克服了两者的缺点,且把二者的长处最大限度地发挥出来。

  1 CPLD与单片机AT89C51双向串行通信原理

  单片机到可编程逻辑器件的串行通信

  单片机到CPLD的串行通信接口电路是利用VHDL语言在CPLD中设计一个串行输入并行输出的八位移位寄存器,其端口与单片机的P1.4~P1.7相连,如图1所示。CS 为单片机选信号,当其为低时使能八位寄存器;当DCLOCK信号的上升沿到达clk端口时,八位移位寄存器就会将单片机输出到cxin的一位数据移入;当单片机A寄存器中的八位数据欲传送给CPLD时,就在P1.6连续产生八次上升沿,单片机便顺次地将A中的数据移到cxin,八次后A中的数据段就会出现在CPLD的cxout中。其VHDL源程序如下:

  entity cuanxing is

  port (clk,cxin,cs:in std_logic;

  cxout:out std_logic_vector(7 downto 0));

  end;

  architecture rtl of cuanxing is

  signal shift:std_logic_vector(7 downto 0) ;八位暂存变量并行输出

  begin

  process(clk)

  begin

  if(cs=‘’0‘’)then

  shift《=(others=》‘’0‘’);若未被选中,输出全零

  elsif(clk‘’event and clk=‘’1‘’)then ;若上升沿到达clk时,被选中。

  shift(7 downto 1)《=shift(6 downto 0) ;八位数据前移一位

  shift(0)《=cxin;最低位由cxin输入

  end if;

  end process;

  cxout《=shift;将八位变量送至端口

  end rtl;[page]

  与之相对应的单片机控制子程序如下(待发数据存放在A中):

  CS EQU P1.4

  EN EQU P1.5

  DCLOCK EQU P1.6

  DOUT EQU P1.7

  CONV:PUSH 07H

  MOV R7,#8 ;将移位个数8存入R7

  CLR DCLOCK

  SETB CS ;选中移位寄存器

  CLR EN

  CLR C

  JXL:RLC A ;左移一位,将待发数据送至CY

  MOV DOUT,C ;送至端口

  ACALL YS1MS

  SETB DCLOCK ;给一个上升沿,将数据移入移位寄存器

  ACALL YS1MS

  CLR DCLOCK

  DJNZ R7,JXL ;若未到8次则传送下一位

  SETB EN ;八位命令字全部移入,给EN一个上升沿,使CPLD执行相应操作

  ACALL YS1MS

  POP 07H

  RET

   可编程逻辑器件到单片机的串行通信

  可编程逻辑器件到单片机的串行通信与单片机到可编程逻辑器件的串行通信类似,只不过八位寄存器改为并入串出,其端口如图2所。当单片机的cs=1时,寄存器被选中;当load=1时,待发的数据被加载到bxin上;当clk上升沿到来时,将数据一位一位移出至bxout上,与此同时,单片机一位一位接收到自 bxout上的数据。在clk八个上升沿后,加载到bxin的数据便被传送至单片机的A寄存器中

  2 双控制系统的实现原理

  由于单片机端口有限,所以大部分外围器件的连线靠CPLD来完成,而对时序控制要求较高的那些外围器件则靠单片机来间接控制。所谓间接控制就是指应用者可以自定义很多个命令字,每个命令字对应着CPLD一项或一系列操作。当单片机想让某外部器件实现某种功能时,可以通过串行通信把命令字传送给可编程逻辑器件 CPLD。CPLD收到该命令字关判断命令字后,便在EN的上升沿到来后执行相应的操作。这里值得一提的是:命令字传送给CPLD后,只有在EN的上升到来后CPLD才能执行相应操作。这是为了防止命令字在字传送期间使CPLD误动作。

  当外部器件有中断信号反馈到控制器时,也可将特定的命令字由CPLD传送给AT89C51,使 AT89C51产生中断进行处理。但无论有多少个外围器件需产生中断控制。在AT89CF51中断子程序中,运行由CPLD向单片机的串行通信程序,将特定的命令字读到A寄存器中,从而可知是如个外围器件产生的中断(由应用者自行定义),进而可知需何种外部操作。

  本双控制系统在项目设计中应用起来非常灵活方便,这里采用的是八位命令字,最多可自定义256个命令字。由于同时采用了单片机和CPLD,因此编程非常灵活方便,工程人员可根据自身特点而相应选择。例如,有些人的单片机编程能力要比CPLD语言编程略好一些,那他可在VHDL语言编程中把命令字对应的操作定义得简单一些(最简单的莫过于使某个管脚变为高电平或低电平);若是想简化单片机的编程,则可使高电平或低电平);若是想简化单片机的编程,则可使VHDL语言编程中特定命令字对应的操作复杂一些。

  单片机的编程过程就是对A寄存器写不同命令字,然后调用串行通信子程序的过程。若是VHDL的命令字,然后调用串行通信子程序的过程。若是VHDL的命令字对应程序简单些,则要完成对某特定外围器件的操作所需要的命令字调用就会多一些。反之亦然,仅此而已。总之,用单片机与CPLD构成的双控制器,此用它们各自独立开发项目要容易得多。

关键字:PLD  单片机  双向通信控制器 引用地址:简析PLD和单片机构成的双向通信控制器

上一篇:如何扭转电压比较器不被重视的问题
下一篇:锁相环控制及初始化简析

推荐阅读最新更新时间:2024-03-16 13:35

stm32单片机休眠模式后无法下载程序怎么办
利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒,导致下一次程序烧不进去。通常的解决办法是:一般的开发板或单片机最小系统都会有复位键,按住复位键,点下载,然后松开复位键即可。 我遇到的问题是:误入了stm32(STM32L051C6T6)的STOP模式,又没有写入相应的唤醒方法,导致后续的程序不能下载。使用MDK5 点击load时总会出现No target connected。自己设计的最小系统又没有加入复位键。。。 有以下几种解决办法: 1、可以将单片机的NRST引脚引出来,外接复位键。(关于引脚查看可用ST官方软件STM32cubeMX,很方便) 2、通过ISP的方式
[单片机]
STM8单片机学习总结初步03
实物焊接及对应驱动程序全部调试完成,视屏地址为: 自制蓝牙灯操作视屏 网络地址:http://v.youku.com/v_show/id_XMjk0ODk1MjUyMA==.html; 实物图01为: 实物图02为: --------------- 对程序代码均使用“函数分割”形式实现,并添加“适当注释”,这种代码编写方式在初期编写时,会很繁琐,因为其将本可使用“1个函数”实现的代码分割为“2个或2个以上”的“函数”,但在后期维护或是别人接手你的“代码”时,会大大缩短所需时间; 在实际工作中,个人建议,所有东西留2份,若你是个好人,请直接忽略“02”所说内容!!!: 01、第一份:带详细内容注释、问题注释、注意
[单片机]
STM8<font color='red'>单片机</font>学习总结初步03
STM32外设有哪些?
STM32系列是ST公司基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核的32位单片机。按内核架构分为不同产品: 其中STM32F系列有:STM32F103“增强型”系列、STM32F101“基本型”系列、STM32F105、STM32F107“互联型”系列。 增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是32位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,相当于0.5mA/
[嵌入式]
智能化数字电源系统的优化设计
0 引言   目前,开关电源正朝着智能化、数字化的方向发展。最近刚问世的智能数字电源系统以其优良的特性和完备的监控功能,正引起人们的关注。数字电源提供了智能化的适应性与灵活性,具备直接监控、处理并适应系统条件的能力,能满足任何复杂的电源要求。此外,数字电源还可通过远程诊断来确保系统长期工作的可靠性,包括故障管理、过电流保护以及避免停机等。 1 数字电源系统的主要特点及发展现状 l.1 数字电源系统的主要特点   数字电源系统具有以下特点。   1)它是以数字信号处理器(DSP)或微控制器(MCU)为核心,将数字电源驱动器及PWM控制器作为控制对象而构成的智能化开关电源系统。传统的由微控制器(μP或μC)控制的开关电源,一般只
[电源管理]
STM8单片机学习总结05-蓝牙模块
本次操作使用的“蓝牙模块”为“HC-06”,主要注意以下几点: 01)、“HC-06”(蓝牙模块)而言,其与“HC-05”一样,均采样“AT指令”控制,但需注意: i)、“HC-06”为“串口”连接,电压为“+5.0V”,“波特率”默认“9600”,“设备名称”默认“HC-06”,“配对密码”默认“1234”; ii)、“HC-06”发送“AT指令”时,末尾不需加“\r\n”(Enter键); iii)、需与“手机app”配合使用,推荐“蓝牙串口助手 Pro”; 02)、“HC-06”对应“AT指令”主要操作为以下4项: i)、“测试通信”:发送“AT”,返回“OK”; ii)、修改“波特率”:发送“AT+BAUDx”,“x”为“
[单片机]
用老电脑设计的单片机系统通用键盘的方法
计算器品种繁多、制造精美、触发灵敏、价格便宜。用旧计算器改制成单片机系统的通用键盘,可以方便地与任意的单片机应用系统连接,不管是在实验制作还是实际应用中,都不失为一种简捷方便的方法。 笔者用计算器做了一个通用键盘,在几个应用系统中使用。效果比用普通的按键好,使用非常方便。 电路见图1、图2。先选择一个外观适宜美观的计算器(本文以RS-3890型计算器为例),打开后盖,找出键盘矩阵的行线和列线,并做上标记。画一张该 矩阵键盘 和符号的对应图,如图2所示。 把原键盘的行线和列线通往掩膜芯片的印刷线路切断,然后用细漆包线将行线和列线接到AT89C2051单片机的相应L/O口上,作为新键盘的检测线。 本文用P1.0~P1.
[单片机]
用老电脑设计的<font color='red'>单片机</font>系统通用键盘的方法
freescale飞思卡尔 HCS12 系列单片机bootloader详解(一)
  最近在做freescale HCS12系列单片机的bootloader,毕竟是新手,对这方面的入门知识还是欠缺。尽管NXP官网已经有了相当丰富的文档与例程,可是无奈例程太过复杂,不知道如何下手第一行代码。这里先感谢经验丰富的某位高人醍醐灌顶的指导,为了让再入门的新学者能够有个参考,所以就将本次开发bootloader的过程学习过程记录下来以其能够对大家有所启发。因为本人自己也是新学者,所以有问题可以留言讨论。   这里单片机的bootloader与我们广义的Linux以及windows的bootloader是不同的。这种大型操作系统的bootloader是为了做操作系统与硬件之间的桥梁:初始化硬件系统、为操作系统的引导做准
[单片机]
Microchip推出集成微型FPGA的PIC16 微控制器,售价不到 50 美分
编译自EEJOURNAL Microchip 现在提供一款基于闪存的微控制器,集成可编程逻辑块,其售价不到50美分。 Microchip PIC16F13145 系列的九个新产品,与其他型号16F系列采用相同的 8 位 RISC 微处理器架构,但它们还集成了一个新的可编程逻辑块,称为可配置逻辑块 (CLB)。 PIC16F13145 微控制器系列中的器件采用 8、14 和 20 引脚封装,具有 3.5 至 14 KB 闪存和 256 至 1024 字节 RAM。 Microchip PIC1613145 微控制器系列的九个成员具有相同的内部架构,但具有不同数量的 RAM 和闪存,并提供不同的封装,具体取决于您应用的 I/O
[单片机]
Microchip推出集成微型FPGA的PIC16 <font color='red'>微控制器</font>,售价不到 50 美分
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved