搜索
bottom↓
回复: 2

关于PIC16F886与24C01通信的问题

[复制链接]

出0入0汤圆

发表于 2009-9-19 15:43:17 | 显示全部楼层 |阅读模式
这是小弟写的程序,就是没有返回的数据请大家帮忙看看那里错拉?
#include "pic.h"

#define uchar   unsigned char
#define nop()  asm("nop")

#define    PORTCIT(adr,bit) ((unsigned)(&adr)*8+(bit))
  static          bit SDA      @ PORTCIT (PORTC,4);
  static          bit SCL      @ PORTCIT (PORTC,3);

void start_i2c();
void stop_i2c();
void send_byte(uchar c);
uchar receive_byte();
void I_send_str(void);
void delay_250ms();
void i2c_error ();

uchar ack;

void  main_int(void)
{
PORTA=0X00;
PORTB=0X1f;      
PORTC=0X00;
TRISA=0X00;
TRISB=0X00;   
TRISC=0X00;      
}
/****************************************

****************************************/
void main(void)
{
uchar data;
  
main_int();

I_send_str();  
  
delay_250ms();
  

while (1)
  {
      start_i2c();
      send_byte(0xa0);      
        if (ack==0) i2c_error();  
      send_byte(0x00);         
        if (ack==0) i2c_error();
      start_i2c();         
      send_byte(0xa1);      
        if (ack==0) i2c_error();
      data=receive_byte();
      stop_i2c();
        if(data==0x1f)
        delay_250ms();
        else  
        PORTA=data;
        delay_250ms();
   
  }
}


/*******************************************************************
起动总线函数

*******************************************************************/
void start_i2c()
{
SDA=1;        nop();
SCL=1;
nop();nop();nop();nop();nop();
SDA=0;                     
nop();nop();nop();nop();nop();
SCL=0;                       
nop();nop();
}


/*******************************************************************
停止总线函数

*******************************************************************/
void stop_i2c()
{
  
SDA=0;  
nop();
SCL=1;
nop();nop();nop();nop();nop();
SDA=1;
nop();nop();nop();nop();
}

/*=================================================================
字节数据传送函数
==================================================================*/
void send_byte(uchar c)
{
uchar bit_count;
for (bit_count=0;bit_count<8;bit_count++)
  {
   if ((c<<bit_count)&0x80) {SDA=1;}
   else {SDA=0;}
   nop();
   SCL=1;
   nop();nop();nop();nop();nop();
   SCL=0;
  }
  nop();nop();
  TRISC4=1;

  nop();nop();
  SCL=1;
  nop();nop();nop();
  if (RC4==1) ack=0;
  else ack=1;
  SCL=0;
  nop();nop();
  TRISC4=0;
}

/*==================================================================
字节数据接收函数
===================================================================*/
uchar receive_byte()
{
  uchar retc,bit_count;
  retc=0;
  TRISC4=1;
  SDA=1;
  for (bit_count=0;bit_count<8;bit_count++)
  {
     nop();
     SCL=0;
     nop();nop();nop();nop();nop();
     SCL=1;
     nop();nop();
     retc=retc<<1;
     if (RC4==1)  retc=retc+1;
     nop();nop();
   }
   SCL=0;
   nop();nop();
  TRISC4=0;
   return (retc);
}


/*================================================================

=================================================================*/
void I_send_str(void)
{
  uchar i;
  start_i2c();
  send_byte(0xa0);
  if (ack==0)  i2c_error();
  send_byte(0x00);
  if (ack==0)  i2c_error();
  send_byte(0x1f);
  if (ack==0)  i2c_error();
   stop_i2c();

}

/*****************************************************************
延时函数
*****************************************************************/
void delay_250ms()
{
unsigned int d=24999;
while (--d);
}

/*****************************************************************
总线错误函数

*****************************************************************/
void i2c_error ()
{
uchar i;
for (i=0;i<8;i++)
{
  while(1);
   
}
  
}
/**********END**************/

出0入0汤圆

发表于 2009-9-21 09:14:43 | 显示全部楼层
TRISC设成1

出0入0汤圆

发表于 2014-8-5 07:01:28 | 显示全部楼层
楼主,问题解决了吗?硬件IIC 效率怎么样可靠?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 01:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表