打印

求用过PIC模拟I2C的大神指导!用过DS3231的更佳!

[复制链接]
3008|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
loyou1993|  楼主 | 2012-11-29 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
虽然PIC单片机大部分都有I2C,但是我就像学习写模拟的,但是我用的又是单片机自带的两个引脚,SDA,SCL。各位大神不要骂我,就是想学习下模拟的写法,顺带学习下DS3231!毕竟不是每块单片机都有这功能的!有以下几点:
1.无应答信号,之前执行写命令的时候,调用了写非应答!结果数据发送都对!(示波器看波形的,但是没有应答位),后来检查出来了,改成了应答位读取!结果一个地址数发24遍。检查过程序的每个细节,没发现那里会循环!
2.我用的是16F72的单片机,有I2C这个功能的!
3.是对TRIS寄存器操作,还是对PORT操作,在网上下载了,几个PIC模拟I2C的示例程序。都是对TRIS操作的,写出的程序能测到时序!但是不明白,为什么要对TRIS操作,看过了I/O的结构了!
望各位大神指点!搞了11天了!
沙发
yewuyi| | 2012-11-30 08:31 | 只看该作者
对TRIS操作主要是防止一些经验不够的工程师乱操作IO口搞出读-修改-写现象,这样操作TRIS的话,可以在出现问题的时候快速判定

使用特权

评论回复
板凳
NE5532| | 2012-11-30 16:45 | 只看该作者
TRIS是方向寄存器吧,你不操作,怎么读入呢??

使用特权

评论回复
地板
loyou1993|  楼主 | 2012-11-30 20:03 | 只看该作者
TRIS是方向寄存器吧,你不操作,怎么读入呢??
NE5532 发表于 2012-11-30 16:45
对啊,我没说明白,我的意思是,为什么可以直接对TRIS寄存器操作,而不需要通过TRIS设方向后,再对PORT寄存器操作?

使用特权

评论回复
5
NE5532| | 2012-11-30 20:06 | 只看该作者
看不懂你的程序是怎么写的,但是TRIS方向更改后,PORT的设置就失效了啊。这两个并不矛盾。

使用特权

评论回复
6
ocon| | 2012-12-1 21:55 | 只看该作者
通过TRIS设方向就是直接对TRIS寄存器操作,既然看过了I/O的结构,那就是没看过I2C的基本结构。
另外,CCSC编译器有现成的模拟I2C函数,找两个引脚指定一下就能用,很方便:
#use I2C(MASTER,SDA=PIN_B4,SCL=PIN_B6,fast=350000,FORCE_SW)
void Setup_Write_HT16K33(char REG_data)
{
    i2c_start();                  //起始信号
    i2c_write(SlaveAddress);   //发送设备地址+写信号,请参考pdf27页
    i2c_write(REG_data);       //内部寄存器数据,请参考pdf28页
    i2c_stop();                   //发送停止信号
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:默默的学习……慢慢的成长!

23

主题

333

帖子

3

粉丝