{ isda=1;
iscl=1;
}
void i2cstart(void) /*i2c总线启动,在串行时钟iscl为高电平时,串行数据isda出现一个下降沿*/
{
isda=1;
iscl=1;
i2cwait();
isda=0;
i2cwait();
iscl=0;
}
void i2cstop(void) /*i2c总线停止,在串行时钟iscl为高电平时,isda出现一个上升沿*/
{
isda=0;
i2cwait();
iscl=1;
i2cwait();
isda=1;
//i2cwait(); /*加两条语句,保证串行时钟iscl为低电平,准备数据,即isda只能在iscl为低电平期间改变*/
//iscl=0;
}
unsigned char i2csentbyte(unsigned char b) /*发送一个字节*/
{
unsigned char i,ack=1;
for (i=0;i<8;i++)
{
if (b & 0x80) /*i2c总线,先发送最高位(总共八位),通过&运算测试最高位*/
isda=1;
else
isda=0;
b<<=1;
i2cwait();
iscl=1; /*在串行时钟iscl为高电平期间,串行数据isda线上的数据必须稳定,否则被认为是启停控制信号*/
i2cwait();
iscl=0;
i2cwait();
};
isda=1; /*代替接收方发送一个应答位,这种情况出现在CPU发送数据时*/
i2cwait();
iscl=1;
i2cwait();
ack=isda;
iscl=0;
i2cwait();
return ack ;
}
void sendacknowlege(unsigned char ack) /*在每个字节后必须跟一个应答位,由接收方发送*/
{
isda=ack;
iscl=1;
i2cwait();
iscl=0;
i2cwait();
}
unsigned char i2creceivebyte(void) /*接收一个字节*/
{unsigned char i,a=0;
for (i=0;i<8;i++)
{
iscl=1; /*在正常数据传送状态下,iscl的高电平都对应于isda的稳定数据状态*/
i2cwait();
a<<=1;
if (isda==1)
a|=0x01; /*通过按位或|和按位与&及循环运算,将数据读出并赋给变量a*/
else
a=a&0xfe;
iscl=0;
i2cwait();
};
return a;
}
void writecmd7290(unsigned char i,unsigned char k) /*ZLG7290寄存器映象控制*/
{
EA=0; /*CPU屏蔽所有的中断申请*/
delay_ms(1);
i2cinit();
i2cstart();
i2csentbyte(0x70); /*ZLG7290的从地址为70H*/
i2csentbyte(i);
i2csentbyte(k);
i2cstop();
EA=1; /*CPU开放所有的中断申请*/
}
void writedata7290(unsigned char i,unsigned char k) /*ZLG7290命令解释控制*/
{
EA
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/13/13
实验一转速测量与控制(二)由毕业论文网(www.huoyuandh.com)会员上传。