⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ic24lc.h

📁 上载的程序可以用于PIC单片机,也可以用于430单片机,本人原创,到至今还没有发现哪位网友想出这种办法,希望站长能多加分.
💻 H
字号:
//文件名:_ic24LC.h
//正常操作时返回位值为0,有故障时返回位值为1.
//unsigned char *DataBuff数据缓冲区指针,char ByteQuantity字节数量,
//unsigned int Address IC片内地址,
//unsigned char ControlByte芯片控制字节-IC地址/读写位
#define uchar unsigned char
#define uint unsigned int  
unsigned char IIC(unsigned char *DataBuff,char ByteQuantity,unsigned int Address, unsigned char ControlByte);
// IIC总线模拟程序
//使用方式:以涵数方式调用,使用时程序关闭总中断,使用完后打开总中断.
//占用资源为:使用两个IO口,本程序CPU主时钟MCLK=800K.

#define  XF_MCU    1       //定义用哪一种单片机,1时,用于PIC; 0时,用于MSP430;

#if XF_MCU==0

#include<msp430x14x.h>

#define IIC_DIR P3DIR
#define IIC_OUT P3OUT
#define IIC_IN  P3IN
  
#define SCL BIT3
#define SDA BIT1 

#define SDA_MOV_BIT 1           //SDA 数据调整移位
                                //根据SDA所在管脚,如为0脚,则为0,如为7脚,则为7,     
//--------------------------------------
//SDA 数据线定义
#define SDAOUT IIC_DIR |= SDA
#define SDAIN  IIC_DIR &= ~SDA
#define SDA1   IIC_OUT |= SDA
#define SDA0   IIC_OUT &= ~SDA
//SCL 时钟线定义
#define SCLOUT IIC_DIR |= SCL
#define SCL1   IIC_OUT |= SCL
#define SCL0   IIC_OUT &= ~SCL

#define SDA_STATE IIC_IN & SDA   //读入SDA状态
//--------------------------------------
#define OPE_INT   _EINT()         //开中断
#define NOT_INT  _DINT()         //关中断

#else

//文件名:ic24LC.h
#include<pic.h>
extern uchar pa_out;
extern uchar pb_out;
extern uchar pc_out;
extern uchar pd_out;
extern uchar pe_out;


#define  LC24_TEMP     pc_out

#define LC24_SDA      0B00010000          //io所属管脚位;0b00000001
#define LC24_SCL      0B00001000          //clk所属管脚位;0b00000010

#define SDA_MOV_BIT 4           //SDA 数据调整移位
                                //根据SDA所在管脚,如为0脚,则为0,如为7脚,则为7,

#define  LC24_SDA_0    ~LC24_SDA
#define  LC24_SDA_1    LC24_SDA

#define  LC24_SCL_0     ~LC24_SCL   
#define  LC24_SCL_1     LC24_SCL

#define  LC24_DIR  TRISC
#define  LC24_OUT  PORTC

#define SDA_STATE  LC24_OUT&LC24_SDA   //读入SDA状态
     
//--------------------------------------
//SDA 数据线定义
#define SDAIN   LC24_DIR |= LC24_SDA
#define SDAOUT  LC24_DIR &= ~LC24_SDA

#define SDA1    LC24_OUT=(LC24_TEMP|= LC24_SDA)
#define SDA0    LC24_OUT=(LC24_TEMP&= ~LC24_SDA)
//SCL 时钟线定义
#define SCLOUT LC24_DIR &= ~LC24_SCL
#define SCL1   LC24_OUT =(LC24_TEMP|= LC24_SCL)
#define SCL0   LC24_OUT =(LC24_TEMP&= ~LC24_SCL)

#define OPE_INT   ei()         //开中断
#define NOT_INT  di()         //关中断

#endif



//从器件接收方的应答返回标志
#define OK 0x01                 //表示从器件有应答
#define NO 0x00                 //表示从器件无应答  

//IIC总线操作成失标志
 #define error 0x01              //错误
 #define right 0x00              //正确

 #define AT24_ADD      0xA0      //24c02芯片地址          

 #define write          0x00     //写
 #define read           0x01     //读

 #define Quantity        8      //读写字节数量
 #define incept_add      0x00   //读写24LC内部地址首址
 
 #define ic24_adr   0           //0代表8位地址,1代表16位地址,

//........................ic24LC.C...............
extern unsigned char write_table[8];  //写入AT24C02数据
extern unsigned char read_Buff[8];    //读出AT24C02数据
extern unsigned char iic_check;       //检查标志,可选的.
//........................ic24LC.C...............


//........................ic24LC.C...............
nop_();                               //小延时*
SomeNOP();                            //延时
void I2C_QUERY(void);                 //查询本次数据是否已写完;
void I2CStart(void);                  //起始信号
void I2CStop(void);                   //结束信号
unsigned char WaitAck(void);          //等待从器件接收方的应答
void SendAck(void);                   //主器件为接收方,从器件为发送方时,单片机发出应答信号
void SendNotAck(void);                //主器件为接收方,从器件为发送方时,非应答信号
void I2CSendByte(unsigned char ch);   //发送字节
unsigned char I2CReceiveByte(void);    //接收字节
unsigned char IIC(unsigned char *DataBuff,char ByteQuantity,unsigned int Address,
         unsigned char ControlByte);

//void init (void);                      //MSP430F14初始化
void delay(unsigned int n);            //软延时
unsigned char data_check(unsigned char *Data_REF, unsigned char *Data_CHK, 
                         unsigned char n);
                                       //检验两组数据是否正确,如在检验数据中有一组不正确,则退出.
                                       //并返回一个成败标志.
//........................ic24LC.C...............




 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -