?? iic.lst
字號(hào):
C51 COMPILER V7.07 IIC 12/01/2003 15:27:33 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe IIC.c DB OE SMALL ROM(LARGE)
stmt level source
1
2 #include "golbal.h"
3
4 sbit SCL2 = P1^6;
5 sbit SDA2 = P1^7;
6
7 union {
8 BYTE ByteArray[32];
9 WORD WordArray[16];
10 LWORD DWordArray[8];
11 }idata IICBuf; // IIC data Address
12
13 BYTE idata IICWait;
14
15 BYTE * data IICBufPtr;
16
17 bit error;
18
19 void I2cStop(void)
20 {
21 1 byM230_IIC_CTR=0x00;
22 1 ShortDelay(1);
23 1 byM230_IIC_CTR=byM230_IIC_CTR|0x02; //P rise
24 1 }
25
26 void InitialIIC(void)
27 {
28 1 #ifdef SOFTIIC2
SCL2=1;
SDA2=1;
#else
32 1 I2cStop();
33 1 //HSCL=1; //han 4.3
34 1 //HSDA=1;
35 1 #endif
36 1 IICBufPtr=IICBuf.ByteArray;
37 1 }
38
39 #ifdef SOFTIIC2
void CheckIIC2Bus(void)
{
error=0;
if((SDA2!=1)||(SCL2!=1))
{
DelayX1ms(2);
if((SDA2!=1)||(SCL2!=1))
{
error=1;
return;
}
}
}
void IIC2_Start(void) {
C51 COMPILER V7.07 IIC 12/01/2003 15:27:33 PAGE 2
SDA2=1;
IIC2Delay();
SCL2=1;
IIC2Delay(); //start condition setup time :4.7 us
_nop_();
_nop_();
_nop_();
_nop_();
SDA2=0;
IIC2Delay(); //start condition hold time :4 us
_nop_();
_nop_();
_nop_();
_nop_();
SCL2=0;
IIC2Delay();// bus free time for next transmission :4.7 us
}
void IIC2_Stop(void) {
SDA2=0;
IIC2Delay();
SCL2=1;
IIC2Delay();
_nop_();
_nop_();
_nop_();
_nop_();
SDA2=1;
IIC2Delay();
}
bit IIC2_Data_In(BYTE bytedata) {
BYTE data i;
bit ack;
for(i=0; i<8; i++) {
SDA2=bytedata & 0x80;
IIC2Delay(); //Clock Low Period : 4.7 us
SCL2=1;
IIC2Delay(); //Clock High Period
_nop_();
_nop_();
bytedata<<=1;
SCL2=0;
}
_nop_();
_nop_();
IIC2Delay();
SDA2=1;
IIC2Delay();
SCL2=1;
IIC2Delay();
_nop_();
_nop_();
ack=SDA2;
SCL2=0;
IIC2Delay();
//SDA2=0;
return ack;
C51 COMPILER V7.07 IIC 12/01/2003 15:27:33 PAGE 3
}
//==============================================================================
BYTE IIC2_Data_Out(void) {
BYTE data i;
BYTE data bytedata=0;
SDA2=1;
for(i=0; i<8; i++) {
SCL2=1;
bytedata<<=1;
bytedata|=SDA2;
IIC2Delay();
SCL2=0;
IIC2Delay();
}
return bytedata;
}
void Send2_Acknowledge(bit ack) {
SDA2=ack;
IIC2Delay();
SCL2=1;
IIC2Delay();
SCL2=0;
IIC2Delay();
}
void IICWrite(BYTE device, BYTE address, BYTE count)
{
//CheckIIC2Bus();
//if(error)
//{
// IIC2_Stop();
// return;
///}
IIC2_Start();
error=IIC2_Data_In(device);
if(error)
{
IIC2_Stop();
return;
}
error=IIC2_Data_In(address);
if(error)
{
IIC2_Stop();
return;
}
while(count!=0)
{
error=IIC2_Data_In(*IICBufPtr);
if(error) break;
count--;
IICBufPtr++;
}
IIC2_Stop();
}
C51 COMPILER V7.07 IIC 12/01/2003 15:27:33 PAGE 4
void IICRead(BYTE device, BYTE address, BYTE count)
{
//CheckIIC2Bus();
//if(error)
//{
// IIC2_Stop();
// return;
//}
IIC2_Start();
error=IIC2_Data_In(device);
if(error)
{
IIC2_Stop();
return;
}
error=IIC2_Data_In(address);
if(error)
{
IIC2_Stop();
return;
}
IIC2_Start();
error=IIC2_Data_In(device|1);
if(error)
{
IIC2_Stop();
return;
}
while(count!=0)
{
*IICBufPtr=IIC2_Data_Out();
if(count==1) // last byte
{
Send2_Acknowledge(1);
}
else
{
Send2_Acknowledge(0);
}
count--;
IICBufPtr++;
}
IIC2_Stop();
}
//iic write function with two byte address
void IIC_Write2(BYTE device, WORD address, BYTE count)
{
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -