📄 ic24lc.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 + -