在传统的控制系统中,人们经常使用单片机作为控制核心。
但是,该方法的硬件连接复杂且可靠性差,并且单片机的端口,内部定时器和中断源的数量受到限制。
在实际应用中,通常需要外部扩展芯片。
这无疑给系统的设计带来很多不便。
现在,许多系统都使用可编程逻辑器件CPLD作为控制核心。
与传统设计相比,它不仅简化了界面和控制,提高了系统的整体性能和工作可靠性,而且为系统集成创造了条件。
但是可编程逻辑器件的D触发器资源非常有限,可编程逻辑器件在控制时序方面不如微控制器那么方便。
许多不熟悉的用户经常发现很难申请。
由可编程逻辑器件和单片机组成的双向通信控制器克服了两者的缺点,并最大限度地发挥了两者的优势。
1 CPLD与MCU AT89C51的双向串行通信原理1.1单片机至可编程逻辑器件的串行通信单片机至CPLD的串行通信接口电路是使用VHDL语言在CPLD中设计串行输入和并行输出8位移位寄存器,其端口与单片机的P1.4〜P1.7连接,如图1所示。
CS为单片机选择信号。
当它为低时,使能8位寄存器。
当DCLOCK信号的上升沿到达clk端口时,8位移位寄存器将单片机输出的数据移位一位到cxin。
当单片机A寄存器时当将A中的八位数据传输到CPLD时,在P1.6处将产生八个连续的上升沿,并且微控制器将A中的数据依次移至cxin。
八次之后,A中的数据段将出现在CPLD中。
Cxout。
VHDL源程序如下:•实体存储端口(clk,cxin,cs:in std_logic; cxout:out std_logic_vector(7降至0));结尾;建筑0;建筑0;临时变量并行输出开始处理(clk)开始(if(cs =& lsquo; 0& rsquo;))然后然后shift& lt; ==(others =& ls" lsamp; 0& rsquo;);如果未选择,则输出所有零lselsif(clk& quo; event clk =& rsquo; 1& lsquo;),然后输出;如果上升沿达到clk,则将其选中。
shift(7降低到1)< = shift(6降低到0);将八位数据向前移位一位(0)< = cxin;最低位由cxin端输入,如果;结束过程; cxout& lt; = shift;位变量发送到端口rtl;相应的微控制器控制子程序如下(要发送的数据存储在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,C;发送到端口ACALL YS1MS SETB DCLOCK;给一个上升沿,将数据移入移位寄存器ACALL YS1MS CLR DCLOCK DJNZ R7,JXL;如果尚未达到8次,请发送下一个SETB EN;移动所有八位命令字,使EN上升沿以使CPLD执行相应的操作ACALL YS1MS POP 07H RET