如何用Labview编程实现并口模拟IIC总线

如何用Labview编程实现并口模拟IIC总线,第1张

设定一个线为时钟,把你的数据转换为十六进制然后在时钟低进行反转。

读取时别忘了地址加一,另外程序要使用串行结构这样才能同步。

并口焊接一个330OHM电阻限流。

暂时就想到这么多

你这个单片机是带I2C接口的

那个SMBus就是,我用这个系列的单片机写过,模拟的还没有借口直接来的好。 我的空间里面有我调好的一篇247519442

你说的全部是0xff也是正常的,因为外部存储一般都是高电平为空,也就是说你的数据没有写进去

我给你一个模拟的看看

#include<reg51h>

#include <Intrinsh>

#define uchar unsigned char

#define uint unsigned int

sbit pcf8563_scl=P0^5;//时钟频率

sbit pcf8563_sda=P0^4;//串行数据传输脚

bit busy=0;

uchar sg;//时高位

uchar sd;//时低位

uchar fg;//分高位

uchar fd;//分低位

uchar mg;//秒高位

uchar md;//秒低位

uchar hou=0;

uchar min=0;

uchar sec=0;

uchar subadd;//地址

uchar dat;//数据

uchar number;

void start_pcf8563();//开始数据

void send_pcf8563_byte();//发送

void stop_pcf8563();//结束数据

void receive_pcf8563_byte();//接收

void spit_time();//分别计算时、分、秒的各位数字

void spit_time()//分别计算时、分、秒的各位数字

{

sg=(int)hou/10;

sd=(int)hou%10;

fg=(int)min/10;

fd=(int)min%10;

mg=(int)sec/10;

md=(int)sec%10;

}

void Send_pcf8563_byte(uchar bb) //向PCF8563发送一个字节

{

uchar aa;

pcf8563_scl=0;

for(aa=0;aa<8;aa++)

{

if((bb&0x80)==0x80)

{

pcf8563_sda=1;

}

else

{

pcf8563_sda=0;

}

pcf8563_scl=1;

pcf8563_scl=0;

bb=bb<<1;

}

_nop_();

_nop_();

pcf8563_sda=1;

pcf8563_scl=1;

busy=0;

if(pcf8563_sda)

{

busy=1;

}

else

{

_nop_();

_nop_();

pcf8563_scl=0;

busy=0;

}

}

void write_pcf8563(uchar subadd,uchar dat)// 向PCF8563对应地址写数据

{

start_pcf8563();

Send_pcf8563_byte(0xa2);

if(!busy)

{

Send_pcf8563_byte(subadd);

if(!busy)

{

Send_pcf8563_byte(dat);

}

}

stop_pcf8563();

}

void read_pcf8563() //读当时的时,分,钞

{

start_pcf8563();

Send_pcf8563_byte(0xa2);

if(!busy)

{

Send_pcf8563_byte(0x02);

if(!busy)

{

start_pcf8563();

Send_pcf8563_byte(0xa3);

receive_pcf8563_byte();

sec=number&0x7f;

start_pcf8563();

Send_pcf8563_byte(0xa3);

receive_pcf8563_byte();

min=number&0x7f;

start_pcf8563();

Send_pcf8563_byte(0xa3);

receive_pcf8563_byte();

hou=number&0x3f;

}

}

stop_pcf8563();

}

void receive_pcf8563_byte() //从PCF8563接受一个字节

{uchar cc;

pcf8563_sda=1;

number=0;

for(cc=0;cc<8;cc++)

{

number<<=1;

pcf8563_scl=0;

pcf8563_scl=1;

_nop_();

_nop_();

number= number|pcf8563_sda;

}

pcf8563_scl=0;

_nop_();

_nop_();

}

void start_pcf8563() //开启PCF8563IIC

{

pcf8563_sda=1;

pcf8563_scl=1;

pcf8563_sda=0;//SCL为高,SDA执行一个下跳

pcf8563_scl=0;//SCL为低,嵌住数据线

}

void stop_pcf8563() //关闭PCF8563IIC

{

pcf8563_sda=0;

pcf8563_scl=1;

pcf8563_sda=1;//SCL为高,SDA执行一个上跳

pcf8563_scl=0;//SCL为低,嵌住数据线

}

void main(void)

{

write_pcf8563(0x02,sec); //写钞

write_pcf8563(0x03,min); //写分

write_pcf8563(0x04,hou); //写时

while(1)

{

read_pcf8563();//读当前时间

spit_time(); //切换时间,为显示做准备

}

}

如果还是不行,你把你的代码给我看看,看我能不能看出来

当然可以,但做起来还是要了解蛮多知识的,最好的办法是先找原理性的书先搞懂了他们之间是怎么通信的,然后再去看IIC和C8563的资料,一般都会告诉你怎么做,不好意思,我不专门搞这具的,没有现成的程序给你,自己慢慢试吧

以上就是关于如何用Labview编程实现并口模拟IIC总线全部的内容,包括:如何用Labview编程实现并口模拟IIC总线、谁有单片机io口模拟i2c读写AT24C256的程序、单片机模拟IIC与PCF8563通信等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10643389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存