⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tongbuchuankoujieshou.tdf

📁 用AHDL语言编写,MAXPULS开发.通信不受外部时钟速率和数据字节数目限制.
💻 TDF
字号:
%
管脚:			方向,		特性。
clk:			输入,		20MHz
clr				入			低清零
data			出
dataclk			出
dataenable		出
d[]				出			数据总线
adr[]			入			地址总线(20,21,22,23,24)详见65行。
rd				入			读选通,单片机的读信号。
serialclk		入
serialdata		入
interrupt		出			给单片机的中断请求信号
geli[]			不用关心。
%
include	"serialrcpt";
--用于测试孙建的同步串口软件
SUBDESIGN	tongbuchuankoujieshou
(clk,clr						:input;
data,dataclk,dataenable			:output;
d[7..0]							:output;
adr[4..0]						:input;
rd								:input;
serialclk,serialdata			:input;
interrupt						:output;
--cs								:input;
geli[3..0]						:output;
)

variable
xinxi[4..0][7..0]				:node;
zongjishuqi[15..0]				:dff;
jishuqi[5..0]					:dff;
data							:node;
shizhong[2..0]					:dff;
serialclr						:node;
serialreg[4..0][7..0]			:node;
geli[3..0]						:tri;
pin[7..0]						:tri;
zhongduanjishu[7..0]			:dff;
serialinterrupt					:node;


begin
zhongduanjishu[].clrn=clr;
zhongduanjishu[].clk=shizhong2;

if serialinterrupt==vcc then
zhongduanjishu[]=zhongduanjishu[]+1;
elsif(zhongduanjishu[]==0 or zhongduanjishu[]==200) then
zhongduanjishu[]=0;
else
zhongduanjishu[]=zhongduanjishu[]+1;
end if;

if zhongduanjishu[]>100  then
interrupt=gnd;
else
interrupt=vcc;
end if;

geli[].oe=gnd;
geli[].in=gnd;

d[]=pin[].out;

(serialreg[][],serialinterrupt)=serialrcpt(serialclk,serialdata,serialclr);

-----------------------------------------------------------
if	(adr[]>19 and adr[]<25)	then
	pin[].oe=!rd;
	case adr[] is
		when 20 =>
				pin[].in=serialreg[0][];
		when 21 =>
				pin[].in=serialreg[1][];
		when 22 =>
				pin[].in=serialreg[2][];
		when 23=>
				pin[].in=serialreg[3][];
		when 24 =>
	 			pin[].in=serialreg[4][];
	end case;
end if;
-----------------------------------------------------------				
shizhong[].clrn=clr;
shizhong[].clk=clk;
shizhong[]=shizhong[]+1;



xinxi[0][]=h"48";--收到为"1234567890"
xinxi[1][]=h"2c";
xinxi[2][]=h"6a";
xinxi[3][]=h"1e";
xinxi[4][]=h"09";

zongjishuqi[].clrn=clr;
zongjishuqi[].clk=shizhong2;

if zongjishuqi[]>=25000 then
zongjishuqi[]=0;
else
zongjishuqi[]=zongjishuqi[]+1;
end if;

jishuqi[].clrn=clr;
jishuqi[].clk=shizhong2;


serialclr=clr;--同步串口复位

if	(zongjishuqi[]<250 and zongjishuqi[]>0)	then
	if	jishuqi[]>=49	then
	jishuqi[].d=0;
	else
	jishuqi[].d=jishuqi[].q+1;
	end if;
else
	jishuqi[].d=0;
end if;

for i in 42 to 49	generate
	if	jishuqi[]==i	then
		if	zongjishuqi[]<50	then
			data=xinxi[0][i-42];
		elsif	zongjishuqi[]<100	then
			data=xinxi[1][i-42];
		elsif	zongjishuqi[]<150	then
			data=xinxi[2][i-42];
		elsif	zongjishuqi[]<200	then
			data=xinxi[3][i-42];
		elsif	zongjishuqi[]<250	then
			data=xinxi[4][i-42];
		end if;
	end if;
end generate;

--if (jishuqi[]<1 or jishuqi[]>8) then
--	data=gnd;
--end if;

-------------------------------------------------------------------------------
--使能输出
--if zongjishuqi[]<200 then
	if (jishuqi[]>41)	then
	dataenable=gnd;
	else
	dataenable=vcc;
	end if;
%else
	if (jishuqi[]>45)	then
	dataenable=gnd;
	else
	dataenable=vcc;
	end if;
end if;
%
-------------------------------------------------------------------------------
--数据时钟
if	dataenable==gnd then
dataclk=!shizhong2;
else
dataclk=gnd;
end if;
-------------------------------------------------------------------------------
end;
		


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -