?? 1233.c
字號:
#include <reg52.h>
#include <intrins.h>
#define BYTE unsigned char
#define WORD unsigned int
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char INT8U;
typedef unsigned int INT16U;
sfr P1_ADC_EN =0x97;
sfr ADC_CONSTR =0xC5;
sfr ADC_DATA =0xC6;
BYTE R_ARRAY[15];
BYTE RS232;
BYTE blnRev;
BYTE RL_DO[8];
BYTE K_DO;
BYTE PT_DO[8];
unsigned char chrI2c; // 1:BUS_1 2:BUS_2 3:BUS_3 4:BUS_4
unsigned char tmpI2c;
bit ack;
bit blnT;
bit bitS;
//==================================================================================================
//NO.1 I2C BUS
sbit scl_1=P3^5;
sbit sda_1=P3^4;
//==================================================================================================
//NO.2 I2C BUS
sbit scl_2=P3^7;
sbit sda_2=P3^6;
//==================================================================================================
//NO.3 I2C BUS
sbit scl_3=P3^7;
sbit sda_3=P3^6;
//==================================================================================================
//==================================================================================================
//NO.4 I2C BUS
sbit scl_4=P3^7;
sbit sda_4=P3^6;
//==================================================================================================
//==================================================================================================
//Sleep time Program STRAT
void nc(int n);
void delay(WORD n);
//Sleep time Program STOP
//==================================================================================================
//==================================================================================================
//MUC INI INIT START
void int_init(void);
void config_init(void);
void port_init(void);
//MUC INI INIT START
//==================================================================================================
//==================================================================================================
void incept_int(void);
void Send_String(BYTE Str_Array[],BYTE Int_Len);//MCU RS23 SEND N BYTES
void Send(BYTE chrI);//MCU RS23 SEND BYTE
//==================================================================================================
bit even(BYTE my_byte);
//==================================================================================================
void RS232_INI();
//==================================================================================================
bit Execute_Command_0x01(BYTE intOut);
bit Execute_Command_0x02(BYTE intInput);
//==================================================================================================
//==================================================================================================
//I2C FUNCTION START
void i2c_start(void); //I2C BUS WORK START
void i2c_stop(void); //I2C BUS WORK STOP
void i2c_ack(bit a1); //I2C BUS RESPONSE
void SendByte(uchar c); //I2C BUS SEND BYTE SUB FUNCTION
uchar RcvByte(); //I2C BUS RECEIVE BYTE SUB FUNCTION
void i2c_updata(uchar bln_scl_sda,uchar chr_data); //I2C BUS UPDATA
bit ISendByte(uchar sla,uchar c); //I2C BUS SEND BYTE
bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no); //I2C BUS SEND STRING
bit IRcvByte(uchar sla,uchar *c); //I2C BUS RECEIVE BYTE
bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no); //I2C BUS RECEIVE STRING
bit Nsend(uchar sla,uchar suba,uchar *s,uchar no); //I2C BUS SEND N BYTES
bit NRead(uchar sla,uchar suba,uchar *s,uchar no); //I2C BUS READ N BYTES
bit PCF8574_Write(BYTE bWrite_Data,BYTE bWrite_Address);
uchar PCF8574_Read(BYTE bWrite_Address);
//I2C FUNCTION STOP
//==================================================================================================
void delay(WORD n)
{
unsigned int k,j;
for(k=0;k<n;k++)
for(j=0;j<209;j++);
}
void nc(int n)
{
unsigned int i;
for(i=0;i<n;i++)
_nop_();
}
bit even(BYTE my_byte)
{
int i;
BYTE bT;
BYTE bT1;
bT1=my_byte;
bT=0;
for(i=0;i<8;i++)
{
if((bT1&0x80)==0x80)
bT++;
bT1<<=1;
}
bT1=bT % 2;
return(bT1);
}
//***************************MCU RS23 SEND BYTE***************************
void Send(BYTE chrI)//MCU RS23 SEND BYTE
{
bit tag;
TI=0;
tag=even(chrI);
TB8=tag;
nc(10);
SBUF=chrI;
while(TI==0);
TI=0;
nc(10);
}
//***************************MCU RS23 SEND BYTE***************************
//***************************MCU RS23 SEND N BYTES***************************
void Send_String(BYTE Str_Array[],BYTE Int_Len)//MCU RS23 SEND N BYTES
{
BYTE i;
for(i=0;i<Int_Len;i++)
{
Send(Str_Array[i]);
nc(10);
}
}
//***************************MCU RS23 SEND N BYTES***************************
//==================================================================================================
//MCU INI INIT START
//***************************MCU INT INIT***************************
void int_init(void)//MCU INT INIT
{
//IT0=1;
//ET0=1;
//EX0=1;
ES=1;
EA=1;
}
//***************************MCU INT INIT***************************
//***************************MCU RS232 INIT***************************
void config_init(void)//MCU RS232 INIT
{
TMOD=0x20;
TL1=250;
TH1=250;
SCON=0xD8;
PCON=0x80;
TR1=1;
}
//***************************MCU RS232 INIT***************************
//***************************MCU PROT INIT***************************
void port_init(void)//MCU PROT INIT
{
BYTE i;
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
RS232=0;
for(i=0;i<15;i++)
R_ARRAY[i]=1;
chrI2c=1;
RL_DO[0]=0xFF;
PCF8574_Write(RL_DO[0],0);
RL_DO[1]=0xFF;
PCF8574_Write(RL_DO[1],1);
RL_DO[2]=0xFF;
PCF8574_Write(RL_DO[2],2);
}
//***************************MCU PROT INIT***************************
//MCU INI INIT STOP
unsigned char AD_Read(unsigned char iCH)
{
INT8U AD_finished;
delay(100);
ADC_DATA=0;
ADC_CONSTR=iCH;
delay(3);
ADC_CONSTR |=0x08;
AD_finished=0;
while(AD_finished==0)
{
delay(2);
AD_finished=(ADC_CONSTR & 0x10);
}
ADC_CONSTR &=0xF7;
AD_finished=ADC_DATA;
return(AD_finished);
}
//==================================================================================================
//***************************MCU RS23 RECEIVE BYTES***************************
void incept_int(void) interrupt 4 using 0
{
BYTE R_Count;
if(TI==1)
return;
if(RI==1)
{
while(RI==0);
RI=0;
R_Count=SBUF;
if(RS232>=15)
return;
R_ARRAY[RS232]=R_Count;
RS232++;
if(R_Count==0x0D)
blnRev=1;
}
return;
}
//***************************MCU RS23 RECEIVE BYTES***************************
//==================================================================================================
//I2C FUNCTION START
//***************************I2C BUS UPDATA***************************
void i2c_updata(uchar bln_scl_sda,uchar chr_data)//I2C BUS UPDATA
{
if(bln_scl_sda==0)//updata scl
{
switch(chrI2c)
{
case 1:
scl_1=chr_data;
break;
case 2:
scl_2=chr_data;
break;
case 3:
scl_3=chr_data;
break;
case 4:
scl_4=chr_data;
break;
default:
break;
}
}
else if(bln_scl_sda==1)
{
switch(chrI2c)
{
case 1:
sda_1=chr_data;
break;
case 2:
sda_2=chr_data;
break;
case 3:
sda_3=chr_data;
break;
case 4:
sda_4=chr_data;
break;
default:
break;
}
}
return;
}
//***************************I2C BUS UPDATA***************************
//***************************I2C BUS WORK START***************************
void i2c_start(void)//I2C BUS WORK START
{
nc(4);
i2c_updata(0,0);
nc(4);
i2c_updata(1,1);
nc(4);
i2c_updata(0,1);
nc(12);
i2c_updata(1,0);
nc(12);
i2c_updata(0,0);
nc(4);
}
//***************************I2C BUS WORK START***************************
//***************************I2C BUS WORK STOP***************************
void i2c_stop(void) //I2C BUS WORK STOP
{
i2c_updata(1,0);
_nop_();
_nop_();
i2c_updata(0,1);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
i2c_updata(1,1);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
//***************************I2C BUS WORK STOP***************************
//***************************I2C BUS RESPONSE***************************
void i2c_ack(bit a1)//I2C BUS RESPONSE
{
if (a1==0)
i2c_updata(1,0);
else
i2c_updata(1,1);
nc(6);
nc(6);
i2c_updata(0,1);
nc(6);
nc(6);
i2c_updata(0,0);
nc(6);
}
//***************************I2C BUS RESPONSE***************************
//***************************I2C BUS SEND BYTE SUB FUNCTION***************************
void SendByte(uchar c)//I2C BUS SEND BYTE SUB FUNCTION
{
uchar BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++)
{
if ((c<<BitCnt)&0x80)
i2c_updata(1,1);
else
i2c_updata(1,0);
nc(6);
i2c_updata(0,1);
nc(6);
i2c_updata(0,0);
nc(6);
}
nc(6);
i2c_updata(1,1);
nc(15);
i2c_updata(0,1);
nc(5);
switch(chrI2c)
{
case 1:
{if(sda_1==1)
ack=0;
else
ack=1;}
break;
case 2:
{if(sda_2==1)
ack=0;
else
ack=1;}
break;
case 3:
{if(sda_3==1)
ack=0;
else
ack=1;}
break;
case 4:
{if(sda_4==1)
ack=0;
else
ack=1;}
break;
default:
break;
}
i2c_updata(0,0);
nc(6);
}
//***************************I2C BUS SEND BYTE SUB FUNCTION***************************
//***************************I2C BUS RECEIVE BYTE SUB FUNCTION***************************
uchar RcvByte()//I2C BUS RECEIVE BYTE SUB FUNCTION
{
uchar retc;
uchar BitCnt;
retc=0;
i2c_updata(1,1);
for(BitCnt=0;BitCnt<8;BitCnt++)
{
nc(6);
i2c_updata(0,0);
nc(6);
i2c_updata(0,1);
nc(6);
retc=retc<<1;
switch(chrI2c)
{
case 1:
if(sda_1==1) retc=retc+1;
break;
case 2:
if(sda_2==1) retc=retc+1;
break;
case 3:
if(sda_3==1) retc=retc+1;
break;
case 4:
if(sda_4==1) retc=retc+1;
break;
default:
break;
}
nc(6);
}
i2c_updata(0,0);
nc(6);
return(retc);
}
//***************************I2C BUS RECEIVE BYTE SUB FUNCTION***************************
//***************************I2C BUS SEND BYTE***************************
bit ISendByte(uchar sla,uchar c)//I2C BUS SEND BYTE
{
i2c_start();
SendByte(sla);
if(ack==0)
return(0);
SendByte(c);
if(ack==0)
return(0);
i2c_stop();
return(1);
}
//***************************I2C BUS SEND BYTE***************************
//***************************I2C BUS SEND STRING***************************
bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)//I2C BUS SEND STRING
{
uchar i;
i2c_start();
SendByte(sla);
if(ack==0)
return(0);
SendByte(suba);
if(ack==0)
return(0);
for(i=0;i<no;i++)
{
SendByte(*s);
if(ack==0)
return(0);
s++;
}
i2c_stop();
return(1);
}
//***************************I2C BUS SEND STRING***************************
//***************************I2C BUS RECEIVE BYTE***************************
bit IRcvByte(uchar sla,uchar *c)//I2C BUS RECEIVE BYTE
{
i2c_start();
SendByte(sla);
if(ack==0)
return(0);
*c=RcvByte();
i2c_ack(1);
i2c_stop();
return(1);
}
//***************************I2C BUS RECEIVE BYTE***************************
//***************************I2C BUS RECEIVE STRING***************************
bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)//I2C BUS RECEIVE STRING
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -