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

📄 i2c在cpld上的模拟实现源程序.txt

📁 I2C在CPLD上的模拟实现源程序,I2C在CPLD上的模拟实现源程序
💻 TXT
字号:
I2C在CPLD上的模拟实现源程序

程序1:
type clock_type is (s0,s1,s2,s3);
signal state0:clock_type;
signal state1:state_type;
case state is
when s0=>
da<='1';
scl<='1';
state<=s1;
when s1=>
da<='1';
scl<='1';
state<=s2;
when s2=>
da<='0';
scl<='1';
state<=s3;
when s3=>
da<='0';
scl<='0';
state<=s0;
state1<=s_byte;
when others=>
state<=s0;
end case;


下面是利用case…when语句编写的移位及输入、输出字节模块。
inoutdata:block
signal code:std_logic_vector(2 downto 0);
begin
process(read,endata,cl) --cl与scl同步
begin
code<=read & endata & flag;
if cl'event and cl='1'then
case code is 
when "010"|"011" => --从MCU读入一个要发送的数据
datain<=data;
when "001"=> --8位左移寄存器,将要输出的位存于data7
data7<=datain(7);
datain(0)<='1';
for i in 1 to 7 loop
datain(i)<=datain(i-1);
end loop;
when "101"=> --将向MCU发送的数据暂存于dataout
dataout<=data1;
when "100"=> --8位右移寄存器,data0为从SDA接收的值
data1(0)<=data0;
for i in 1 to 7 loop
data1(i)<=data1(i-1);
end loop;
when others=>
null;
end case;
end if; 
end process;
end block inoutdata;


--------------------------------------------------------------------------------

⌨️ 快捷键说明

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