?? extemp1.c
字號(hào):
/***************************************************************
* 用LPC932模擬24WC02
* 用其硬件I2C從工作方式模擬,從地址為0A0H,存儲(chǔ)器地址00H--2FH(48字節(jié))
* 可字節(jié)寫/連續(xù)字節(jié)寫操作
***************************************************************/
#include <Reg51.h>
#include "Hi2cSla_C51.H"
#define uchar unsigned char
/* 定義LPC932的I2C相關(guān)寄存器的定義 */
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分頻設(shè)置寄存器 */
sfr P1M1 = 0x91;
sfr P1M2 = 0x92;
sfr IEN1 = 0xE8;
sbit EI2C = IEN1^0;
#define CSI24WC02 0xA0 /* 定義器件從地址 */
uchar EEPROM[48]; /* 定義EEPROM存儲(chǔ)空間,對(duì)應(yīng)存儲(chǔ)地址為00H-2FH */
uchar eeprom_adr; /* EEPROM的操作地址指針 */
sbit LEDCON = P1^6; /* 工作狀態(tài)指示燈 */
/****************************************************************
* I2C 中斷服務(wù)函數(shù)
* 功能:用于監(jiān)控總線上的信號(hào),并對(duì)主機(jī)作出響應(yīng)。
* 注: 要打開(kāi)中斷允許,最好把I2C中斷優(yōu)先級(jí)設(shè)置高一點(diǎn)。
* 接收到對(duì)本器件操作的尋址信號(hào)時(shí),進(jìn)入中斷
* I2C中斷入口地址為0033H,即interrupt 6
****************************************************************/
void I2c_Int(void) interrupt 6
{ uchar indata;
switch(I2STAT)
{ case RDSLA: /* 主機(jī)讀EEPROM操作 */
while(1)
{ if( SendByte(EEPROM[eeprom_adr])==0 ) break;
eeprom_adr++;
if( eeprom_adr>0x2f ) eeprom_adr = 0;
}
break;
case WRSLA: /* 主機(jī)寫EEPROM操作 */
if( RcvByte(&indata)==0 ) break; /* 讀取存儲(chǔ)地址 */
eeprom_adr = indata;
if( eeprom_adr>0x2f ) eeprom_adr = 0;
while(1)
{ if( RcvByte(&indata)==0 ) break; /* 若接收到總線結(jié)束則退出 */
EEPROM[eeprom_adr] = indata;
eeprom_adr++;
if( eeprom_adr>0x2f ) eeprom_adr = 0;
}
break;
default:
break;
}
I2CON = 0x44; /* 開(kāi)放總線 */
}
/****************************************************************
* 主函數(shù)
* 功能:設(shè)置總線及從機(jī)地址,并設(shè)置I2C中斷。
* 注: 要進(jìn)行I2C接口的IO設(shè)置。
****************************************************************/
void main(void)
{ uchar i;
DIVM = 2;
for(i=0; i<255; i++);
/* 由于上電復(fù)位時(shí)所用IO口設(shè)置為高阻態(tài),所以要進(jìn)行IO設(shè)置 */
P1M1 = 0x2C;
P1M2 = 0x0C;
LEDCON = 0;
eeprom_adr = 0; /* 存儲(chǔ)器地址指針,初化為00H */
EI2C = 1; /* 開(kāi)I2C中斷 */
EA = 1;
SetBus(CSI24WC02); /* 初始化總線,設(shè)置器件從地址 */
while(1); /* 等待I2C中斷 */
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -