首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

24c02 程序只运行成功过一次,不知错在哪里,请高人指教,多谢

2012-02-16 
24c02 程序只运行成功过一次,不知错在哪里,请高人指教,谢谢!#include reg52.h#include absacc.h#inclu

24c02 程序只运行成功过一次,不知错在哪里,请高人指教,谢谢!
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;

sbit SDA = P1^0; /* iic数据传送位 */
sbit SCL = P1^1; /* iic时钟控制位 */
sbit P1_4 = P1^4;
sbit P1_3 = P1^3;
sbit P1_5 = P1^5;
/* 函数声明 */
void iic_wait(void); /* iic延时 */
void iic_start(void); /* 开启iic总线 */
void iic_stop(void); /* 关闭iic总线 */
void iic_ack(void); /* 发送ACK信号 */
void iic_no_ack(void); /* 发送NOACK信号 */
bit iic_wait_ack(void); /* 等待ACK信号 */
void iic_send_byte(uchar demand); /* MCU向iic设备发送一个字节 */
uchar iic_receive_byte(void); /* MCU从iic设备接收一个字节 */
/* 声明结束 */
void delay_1s(void)
{
  uchar i;
  uchar j;

  for(i=0;i<100;i++)
  for(j=0;j<100;j++);
}
/* iic延时 */
void iic_wait(void)
{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
}
/* 开启iic总线 */
void iic_start(void)
{
  SDA = 1;
  SCL = 1;
  iic_wait();
  SDA = 0;
  iic_wait();
  SCL = 0;
}
/* 关闭iic总线 */
void iic_stop(void)
{
  SDA=0;
  SCL=0;
  iic_wait();
  SCL=1;
  iic_wait();
  SDA=1;
}
/* 发送ACK信号 */
void iic_ack(void)
{
  SDA=0;
  iic_wait();
  SCL=1;
  iic_wait();
  SCL=0;
}
/* 发送NOACK信号 */
void iic_no_ack(void)
{
  SDA=1;
  iic_wait();
  SCL=1;
  iic_wait();
  SCL=0;
}
/********************************************************************
函 数 名:iic_wait_ack  
功 能:等待ACK信号
说 明:
入口参数:
返 回 值:1-ACK 0-ERROR
设 计:蓝海微芯  
***********************************************************************/
bit iic_wait_ack(void)
{
  uchar errtime=255;
  //uint errtime = 1000;

  SDA=1;
  iic_wait();
  SCL=1;
  iic_wait();

  while(SDA)
  {
  errtime--;
  if(!errtime)
  return 0;
  }
  SCL=0;
  return 1;
}
/********************************************************************
函 数 名:iic_send_byte  
功 能:MCU向iic设备发送一个字节 
说 明:
入口参数:sbyte 待发送的字节数据
返 回 值:
设 计:蓝海微芯  
***********************************************************************/
void iic_send_byte(uchar sbyte)
{
  uchar i = 8;

  while(i--)
  {
  SCL = 0;
  _nop_();
  SDA = (bit)(sbyte&0x80);
  sbyte <<= 1;
  iic_wait();
  SCL = 1;
  iic_wait();
  }
 SCL=0;
}
/********************************************************************
函 数 名:iic_receive_byte  
功 能:MCU从iic设备接收一个字节
说 明:
入口参数:
返 回 值:ddata 接收数据
设 计:蓝海微芯  
***********************************************************************/
uchar iic_receive_byte(void)
{
  uchar i=8;
  uchar ddata=0;

  SDA=1;
  while(i--)
  {
  ddata <<= 1;
  SCL=0;
  iic_wait();
  SCL=1;
  iic_wait();
  ddata |= SDA;
  }
  SCL=0;
  return ddata;
}



/**********************主程序**********************/
main()
{
while(1){


  
  uint i;
  uchar j;
  P1_4=1;
  P1_4=0;
  P1_5=1;
  P1_3=1;

iic_start();
iic_send_byte(0xa0);
iic_wait_ack();
iic_send_byte(0x00);
iic_wait_ack();
iic_send_byte(0xcc);
iic_wait_ack();
iic_stop();
for(i=100;i>0;i--);
for(i=100;i>0;i--);
for(i=100;i>0;i--);


iic_start();
  iic_send_byte(0xa0);
  iic_wait_ack();
  iic_send_byte(0x00);
  iic_wait_ack();
  iic_start();
  iic_send_byte(0xa1);
  iic_wait_ack();
  j=iic_receive_byte();
  iic_stop();
  P2=j;
  while(1);

}
}




[解决办法]

探讨

[解决办法]
mark ,有时间看看。
[解决办法]
原理图很关键哦

热点排行