打印

谁能帮我分许一下这个89c52的I2C模拟的问题嘛

[复制链接]
1770|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
421648362|  楼主 | 2011-9-17 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 421648362 于 2011-9-17 19:54 编辑

请问有没有高手能帮我看看这个程序哪有错误啊,这个是关于I2C总线的一个程序,我的本意是发光二级管依次像流水灯一样亮个等,最后第五个灯保持亮,但是这个程序只有第一个灯一直亮,其他都没有反应  


#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit scl=P1^5;
sbit sda=P3^6;
void reply()
{
uchar i,j;
for(i=200;i>0;i--)
for(j=200;j>0;j--);
}

void delay()
{
_nop_();
_nop_();  
_nop_();
_nop_();
_nop_();  
}
void init()
{
sda=1;
scl=1;
}
void start()
{
  sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
scl=0;
delay();
}      
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
scl=0;
delay();
}

void write_byte(uchar byte)
{
uchar i, temp;
temp=byte;
for(i=1;i<9;i++)
{
scl=0;
delay();
temp=(temp<<1);
sda=CY;
delay();
scl=1;
delay();
}
sda=1;
delay();
}

uchar read_byte()
{
uchar i,z=0;
sda=1;
delay();
scl=0;
delay();
for(i=1;i<9;i++)
{

scl=1;
delay();
z=(z|sda);   
z=(z<<1);
scl=0;
delay();
}
return(z);  
}
void ack()
{
uchar j=0;
sda=1;
delay();
scl=0;
delay();
scl=1;
delay();
while((sda==1)&&(j<255))
j++;

}
void main()
{
uchar y,x=0,add0=0xa0,add1=0xa1;
init();
start();
write_byte(add0);
ack();  
write_byte(0);
ack();
while(x<250)
{
write_byte(0);
ack();
x++;
}
stop();
delay();






start();
delay();
  x=0;
write_byte(add0);
ack();
write_byte(0);
ack();
write_byte(add1);
ack();
while(x<250)
{  
P0=read_byte();
ack();
x++;
}
stop();
reply();
reply();
reply();
reply();
reply();







start();
  x=0;
write_byte(add0);
ack();  
write_byte(0) ;
ack();
y=0xfe;
while(x<5)
{

write_byte(y);
ack();
x++;
y=_crol_(y,1);
}
stop();
delay();








start();
delay() ;
x=0;
write_byte(add0);  
ack();
write_byte(0);     
ack();
write_byte(add1);  
ack();



while(x<5)
{
P0=read_byte();  
reply();  
x++;  
}
stop();
while(1);  
}  

HOT-51电路图.pdf

103.6 KB

相关帖子

沙发
NE5532| | 2011-9-17 16:02 | 只看该作者
楼主啊,模拟I2C和5个LED之间是啥关系啊?我咋看不懂呢?

使用特权

评论回复
板凳
liang7143| | 2011-9-17 16:43 | 只看该作者
没看懂 5个LED有啥关系?
最后的
while(1);
确实没有其他操作了,你LED在哪里操作啊??

使用特权

评论回复
地板
421648362|  楼主 | 2011-9-17 19:51 | 只看该作者
3# NE5532 我传一份电路图你应该就懂了吧 HOT-51电路图.pdf (103.6 KB)

使用特权

评论回复
5
421648362|  楼主 | 2011-9-17 19:52 | 只看该作者
4# liang7143 我传一份电路图你应该就懂了吧 HOT-51电路图.pdf (103.6 KB)

使用特权

评论回复
6
421648362|  楼主 | 2011-9-17 19:52 | 只看该作者
谢谢大家了

使用特权

评论回复
7
421648362|  楼主 | 2011-9-17 19:58 | 只看该作者
3# NE5532 我传一份电路图你应该就懂了吧[local]1[/local]

使用特权

评论回复
8
NE5532| | 2011-9-17 20:09 | 只看该作者
报告楼主,偶看了图了,还是不懂!

使用特权

评论回复
9
Linda_008| | 2011-9-18 16:33 | 只看该作者
你读出I2C数据时序有错

使用特权

评论回复
10
Linda_008| | 2011-9-18 16:34 | 只看该作者
void write_add(uchar address,uchar date)
{
        start();
        write_byte(0xa0);
        respons();
        write_byte(address);
        respons();
        write_byte(date);
        respons();
        stop();
}

uchar read_add(uchar address)
{
        uchar date;
        start();
        write_byte(0xa0);
        respons();
        write_byte(address);
        respons();
        start();
        write_byte(0xa1);
        respons();
        date=read_byte();
        stop();
        return date;
}

使用特权

评论回复
11
yu515301489| | 2011-10-3 16:28 | 只看该作者
不懂……

使用特权

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

本版积分规则

1

主题

14

帖子

1

粉丝