📄 extemp1.c
字号:
/***************************************************************
* 用LPC932模拟24WC02
* 用其硬件I2C从工作方式模拟,从地址为0A0H,存储器地址00H--2FH(48字节)
* 可字节写/连续字节写操作
***************************************************************/
#include <Reg51.h>
#include "Hi2cSla_C51.H"
#define uchar unsigned char
/* 定义LPC932的I2C相关寄存器的定义 */
sfr I2ADR = 0xDB;
sfr I2DAT = 0xDA;
sfr I2CON = 0xD8;
sfr I2STAT = 0xD9;
sfr I2SCLH = 0xDD;
sfr I2SCLL = 0xDC;
sbit STA = I2CON^5;
sbit SI = I2CON^3;
/* 定义LPC932的部分特殊寄存器 */
sfr TRIM = 0x96;
sfr DIVM = 0x95; /* CPU分频设置寄存器 */
sfr P1M1 = 0x91;
sfr P1M2 = 0x92;
sfr IEN1 = 0xE8;
sbit EI2C = IEN1^0;
#define CSI24WC02 0xA0 /* 定义器件从地址 */
uchar EEPROM[48]; /* 定义EEPROM存储空间,对应存储地址为00H-2FH */
uchar eeprom_adr; /* EEPROM的操作地址指针 */
sbit LEDCON = P1^6; /* 工作状态指示灯 */
/****************************************************************
* I2C 中断服务函数
* 功能:用于监控总线上的信号,并对主机作出响应。
* 注: 要打开中断允许,最好把I2C中断优先级设置高一点。
* 接收到对本器件操作的寻址信号时,进入中断
* I2C中断入口地址为0033H,即interrupt 6
****************************************************************/
void I2c_Int(void) interrupt 6
{ uchar indata;
switch(I2STAT)
{ case RDSLA: /* 主机读EEPROM操作 */
while(1)
{ if( SendByte(EEPROM[eeprom_adr])==0 ) break;
eeprom_adr++;
if( eeprom_adr>0x2f ) eeprom_adr = 0;
}
break;
case WRSLA: /* 主机写EEPROM操作 */
if( RcvByte(&indata)==0 ) break; /* 读取存储地址 */
eeprom_adr = indata;
if( eeprom_adr>0x2f ) eeprom_adr = 0;
while(1)
{ if( RcvByte(&indata)==0 ) break; /* 若接收到总线结束则退出 */
EEPROM[eeprom_adr] = indata;
eeprom_adr++;
if( eeprom_adr>0x2f ) eeprom_adr = 0;
}
break;
default:
break;
}
I2CON = 0x44; /* 开放总线 */
}
/****************************************************************
* 主函数
* 功能:设置总线及从机地址,并设置I2C中断。
* 注: 要进行I2C接口的IO设置。
****************************************************************/
void main(void)
{ uchar i;
DIVM = 2;
for(i=0; i<255; i++);
/* 由于上电复位时所用IO口设置为高阻态,所以要进行IO设置 */
P1M1 = 0x2C;
P1M2 = 0x0C;
LEDCON = 0;
eeprom_adr = 0; /* 存储器地址指针,初化为00H */
EI2C = 1; /* 开I2C中断 */
EA = 1;
SetBus(CSI24WC02); /* 初始化总线,设置器件从地址 */
while(1); /* 等待I2C中断 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -