模块化编程出了问题 求大神

2019-07-16 04:58发布

本帖最后由 非法菜鸟 于 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 inti()        //初始化
{
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 分 这是仿真图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
jn_zj
1楼-- · 2019-07-17 04:37
 精彩回答 2  元偷偷看……
非法菜鸟
2楼-- · 2019-07-17 09:55
jn_zj 发表于 2012-8-4 16:32
把每个模块写成一个.c文件,.c文件中只能写函数的实现和变量的定义,把函数和全局变量的声明写进同名的.h文 ...

谢谢 你
王旭王
3楼-- · 2019-07-17 15:51
我是舞世界
4楼-- · 2019-07-17 19:58
路过帮顶一个,正在学IIC总线
翔翼01
5楼-- · 2019-07-17 20:43
{:1:}看看

一周热门 更多>