//******************启动IIC总线**************************
void IICStart(void)
{
SCL=0
SDA=1
SCL=1
SDA=0
SCL=0
SDA=1
}
//*************************停止IIC总线********************
void IICStop(void)
{
SCL=0
SDA=0
SCL=1
SDA=1
SCL=0
}
//************************检查应答位**********************
bit IICRecAck(void)
{
SCL=0
SDA=1
SCL=1
CY=SDA //返回值放在CY中
SCL=0
return(CY)
}
//***************************对IIC总线产生应答**********
void IICACK(void)
{
SDA=0
SCL=1
SCL=0
SDA=1
}
//****************************不对IIC总线产生应答************
void IICNoAck(void)
{
SDA=1
SCL=0
SCL=0
}
//*************************向IIC总线写数***********
void IICSendByte(uchar sendbyte)
{
uchar data j=8
for(j>0j--)
{
SCL=0
sendbyte<<=1 //会使CY=sendbyte^7
SDA=CY
SCL=1
}
SCL=0
}
//***********************从IIC总线读数据****************
uchar IICReceiveByte(void)
{
register receivebyte,i=8
SCL=0
while(i--)
{
SCL=1
receivebyte=(receivebyte<<1)|SDA
SCL=0
}
return(receivebyte)
}
process(clr)--- 进程语句,不过括号中要写入进程中所有的输入信号,因此应该改成(clr,clk,clkdiv)
begin --进程开始
if(clr='1') then --如果复位信号=1,clkdiv每一位全为0
clkdiv <= (others =>'0')
elsif(rising_edge(clk)) then --否则在时钟上升沿到来
clkdiv <= clkdiv + 1 clkdiv+1
end if--if语句结束
end process ---进程结束
这段进程就是实现clkdiv的计数功能,在清零信号clr有效时,对clkdiv清零,否则加1
std_logic_vector type does not match integer literal这个错误是说std_logic_vector类型与整形不匹配 主要原因是因为你的q1<= q1+1这句 std_logic_vector不能直接做加法运算。需要先转换成整型,运算之后再转换回来,这需要调用conv_integer 和 conv_std_logic_vector这两个函数。至于其他还有很多语法错误 不多赘述 我在程序中直接给你做了更改 注意if的匹配
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
USE IEEE.STD_LOGIC_ARITH.ALL --添加一个库 使用它里面的函数
USE IEEE.STD_LOGIC_UNSIGNED.ALL
ENTITY cnt315 IS
PORT(clk , clrn : IN STD_LOGIC
q : out std_logic_vector(11 downto 0)) --定义十二位
END cnt315
ARCHITECTURE one OF cnt315 IS
SIGNAL q1 : STD_LOGIC_VECTOR (3 downto 0)
SIGNAL q2 : STD_LOGIC_VECTOR (3 downto 0)
SIGNAL q3 : STD_LOGIC_VECTOR (3 downto 0)
BEGIN
PROCESS(clk,clrn)
--variable cnt : INTEGER RANGE 0 TO 315不知道你设这个变量干嘛
begin
if(clrn = '1') then
q1<= "0000"
q2<= "0000"
q3<= "0000"
elsif(clk'EVENT AND clk = '1') then
if q1= "0100" and q2= "0001" and q3= "0011" then
q1<= "0000"
q2<= "0000"
q3<= "0000"
elsif q1="1001" then
q1<= "0000"
if q2 = "1001" then
q2<= "0000"
q3<= conv_logic_vector(conv_integer(q3) + 1,4)--conv_logic_vector(x,y) x是value y是size
else
q2<= conv_logic_vector(conv_integer(q2) + 1,4)
end if
else
q1<= conv_logic_vector(conv_integer(q1) + 1,4)
end if
q <= q3&q2&q1
end if
end process
end one
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)