本帖最后由 非法菜鸟 于 2012-8-3 20:40 编辑
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sck=P3^3;
sbit sda=P3^4;
void delay1()
{
uchar i,j;
for(i=255;i>0;i--)
for(j=110;j>0;j--);
}
void delay()
{
uchar i,j;
for(i=1;i>0;i--)
for(j=110;j>0;j--);
}
void in
ti() //初始化
{
sck=1;
delay();
sda=1;
delay();
}
void ks() //开始
{
sda=1;
delay();
sck=1;
delay();
sda=0;
}
void zz() //终止
{
sda=0;
delay();
sck=1;
delay();
sda=1;
delay();
}
void xy() //响应
{
uchar i;
sck=1;
delay();
while((sda==1)&&(i<255))i++;
sck=0;
delay();
}
void xie(uchar date) //写入
{
uchar temp,i;
temp=date;
for(i=0;i<8;i++)
{
temp<<=1;
sck=0;
delay();
sda=CY;
delay();
sck=1;
}
delay();
sck=0;
delay();
sda=1;
delay();
}
uchar du() //读出
{
uchar date,i,j;
sck=0;
delay();
sda=1;
for(i=0;i<8;i++)
{
sck=1;
delay();
j=sda;
date=(date<<1)|j;
//date=(date|j)<<1;
sck=0;
delay();
}
return date;
}
void xiezi(uchar add1,uchar add,uchar date)//写入一个字节
{
ks();
xie(add1);
xy();
xie(add);
xy();
xie(date);
xy();
zz();
}
uchar duzi(uchar add1,uchar add,uchar add2)//读出一个字节
{
uchar date;
ks();
xie(add1);
xy();
xie(add);
xy();
ks();
xie(add2);
xy();
date=du();
zz();
return date;
}
void main()
{
inti();
xiezi(0xae,20,0x0f);
xiezi(0xa0,20,0xf0);
while(1)
{
P0=duzi(0xae,20,0xaf);
delay1();
P0=duzi(0xa0,20,0xa1);
delay1();
//P0=0xff;
}
}
以上的是个正确的程序 程序用来给两个AT24C02写入内容并读出的
有问题的是下面的
1.iic总线模块
#include<iic.h>
#include<time.h>
void iic_inti() //初始化
{
sck=1;
delayms(1);
sda=1;
delayms(1);
}
void iic_kaishi() //开始
{
sda=1;
delayms(1);
sck=1;
delayms(1);
sda=0;
}
void iic_zongzi() //终止
{
sda=0;
delayms(1);
sck=1;
delayms(1);
sda=1;
delayms(1);
}
void iic_ack() //响应
{
unsigned char i;
sck=1;
delayms(1);
while((sda==1)&&(i<255))i++;
sck=0;
delayms(1);
}
void iic_nack() //非响应
{
sda=1;
sck=1;
delayms(1);
sck=0;
}
void iic_xie(unsigned char date) //写入
{
unsigned char temp,i;
temp=date;
for(i=0;i<8;i++)
{
temp<<=1;
sck=0;
delayms(1);
sda=CY;
delayms(1);
sck=1;
}
delayms(1);
sck=0;
delayms(1);
sda=1;
delayms(1);
}
unsigned char iic_du() //读出
{
unsigned char date,i,j;
sck=0;
delayms(1);
sda=1;
for(i=0;i<8;i++)
{
sck=1;
delayms(1);
j=sda;
date=(date<<1)|j;
sck=0;
delayms(1);
}
return date;
}
2.iic模块声明
#ifndef __IIC_H__
#define __IIC_H__
#include<reg52.h>
sbit sck=P3^3; //时钟端
sbit sda=P3^4; //数据段
void iic_inti();
void iic_kaishi();
void iic_zongzi();
void iic_ack();
void iic_nack();
void iic_xie(unsigned char date);
unsigned char iic_du();
#endif
-
-
对两个AT24C02读写的电路.DSN
下载积分: 积分 -1 分
109.05 KB, 下载次数: 12, 下载积分: 积分 -1 分
这是仿真图
谢谢 你
一周热门 更多>