首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

并口模拟IIC的经验之谈(5)

并口模拟IIC的经验之谈(5)

(四)编程:通过上面分析,要用并口来模拟I2C总线来读写 AT24C01 ,程序需有以下几部分:
发送I2C开始信号:SCL和 SDA都为高电平,延时一段时间后,向378H写入"0XFD"(其它脚状态不变,只是将位 1 置为低电平),使SDA由高电平变为低电平,即产生了I2C的开始信号。最后将在378H中写入"0XFC"(即其它脚不变,将位0和位1置为低电平)使SCL为低电平,以完成一个时钟,也为后面的读写作准备。

发送I2C停止信号:I2C的停止信号是在SCL为高时,SDA由低变高。程序可按下面步骤来写,用写端口函数
向378H写入"0XFC",使SCL和SDA为低电平,延时一段时间,向378H写入"0XFD",使SCL变为高电平,SDA为低电平,延时,向378H写入"0XFF"SCL保持不变,使SDA由原来的低电平变为高电平,即产生了一个停止信号。延时一段时间,最后向378H写入"0XFE",使SCL为低电平,以完成一个时钟。

发送数据:先把要发送的数据放在一个变量里,然后按位发送。方法为,通过位运算求得欲发送位的值(
1或0),然后用写端口函数模拟出SCL和SDA,并按I2C的写时序将一位数据发送出去,程序中可用while循环语句来控制发送的位数和字节数。

主机(并口)发送应答:I2C总线,主机发送应答用在连续读时序中,每读取一字节(8位)后,主机使SDA
保持一个时钟周期的低电平。可以用写端口函数先将SDA、SCL置为 0,然后将SCL变高,SDA保持低电平,一个应答信号既被发送,最后将SCL置低,完成一个时钟。

接收数据:并口读取I2C总线的数据时,必须让 T1截止,使用并口的13脚来接收SDA上的数据。可按下面步
骤操作,先用写端口函数使SCL为低电平,同时在并口3脚输出高电平使 T1 截止。然后用写端口函数单独将SCL置1,其它位保持不变,模拟出时钟上升沿,IC1 将把一位数据放到数据线SDA上,用读端口函数 读
取‘打印机状态'寄存器379H当前的值,将结果赋值给一个变量,然后对这个变量进行先右移4位,再左移7位
的运算(用以获得13 脚电平状态,即打印机状态寄存器的位 4 的值),判断该变量是否为0,最后将判断结果
移入另外的一个用于存放‘已读取数据'的变量中,完成读取一位数据的操作,用写端口函数使SCL为低电平,
在下一个SCL的上升沿,同样用上面的方法将一位数据加入‘已读取数据'变量中。可用while循环控制要读的
位数和字节数。注意以上过程都是在 T1 为截止态时进行的。
继承事业,薪火相传
返回列表