📄 iic_slave.c
字号:
#include "mxREG52.H"
#include "i2cm.h"
sbit data_ready = P2^7;
extern unsigned char power_down_status;
extern unsigned char volumn_left_status ;
extern unsigned char volumn_right_status;
extern unsigned char program_left_status;
extern unsigned char program_right_status;
extern unsigned char menu_status;
extern unsigned char source_in_status;
extern unsigned char Power_status;
unsigned char Power_off_1;
unsigned char PWM_status;
bit PWM_flag;
unsigned char num = 0x00;
unsigned char idata DATA[2]={0x32};
unsigned char command;
extern unsigned char data keydata;
unsigned char keypad_received;
unsigned char RTC_receied;
unsigned char data RTCDATA[4];
unsigned char trans_done;
unsigned char idata Slave_Adr;
unsigned char idata FReceive_Done;
unsigned char idata FTransmitted_Done;
extern unsigned char action_ready_to_handle;
extern unsigned char Power_off;
//------------------------------------------------------
//i2c interrupt service routine
//------------------------------------------------------
void i2c_isr(void) interrupt 5
{
switch(S1STA)
{
case Bus_error:
transreg(Bus_error);
break;
//=====SLAVE RECEIVE mode===================
case SR_SLAW_ACK: //0x60
// transreg(SR_SLAW_ACK);
num = 0;
S1CON=RELEASE_BUS_ACK;
break;
case SR_DATA_ACK: //0x80
// transreg(SR_DATA_ACK);
if(Power_off_1 == 0x01)
{
if(S1DAT == 0xF1)
{
Power_off = 0x01;
}
Power_off_1 = 0x00;
}
else
{
if(PWM_flag == 0)
{
if(S1DAT == 0x32)
{
keypad_received = 1;
}
else
if(S1DAT == 0xF0)
{
Power_off_1 = 0x01;
}
else
if(S1DAT == 0x37)
{
P2 = 0x55;
PWM_flag = 1;
}
}
else
{
PWM_status = S1DAT;
P2 = 0x57;
}
}
num++;
S1CON=RELEASE_BUS_ACK;
break;
case SR_STOP_ACK: //0xA0 receive has done
// transreg(SR_STOP_ACK);
S1CON=RELEASE_BUS_ACK;
FReceive_Done = 1;
break;
//==========================================
//=====SLAVE TRANSMITTER mode===============
case ST_SLAR_ACK: //0xA8
// transreg(ST_SLAR_ACK);
if(keypad_received)
{S1DAT = 0x32;
// transreg(S1DAT);
}
S1CON=RELEASE_BUS_ACK;
break;
case ST_DATA_ACK: //0xB8
// transreg(ST_DATA_ACK);
if(power_down_status==0x01)
{
S1DAT = 0x51;
// transreg(S1DAT);
power_down_status = 0x00;
}
if(menu_status == 0x01)
{
S1DAT = 0X55;
// transreg(S1DAT);
menu_status = 0x00;
}
if(source_in_status == 0x01)
{
S1DAT = 0X56;
// transreg(S1DAT);
source_in_status = 0x00;
}
if(volumn_left_status == 0x01)
{
S1DAT = 0x57;
// transreg(S1DAT);
volumn_left_status = 0x00;
}
if(volumn_right_status == 0x01)
{
S1DAT = 0x58;
// transreg(S1DAT);
volumn_right_status = 0x00;
}
if(program_left_status == 0x01)
{
S1DAT = 0X59;
// transreg(S1DAT);
program_left_status = 0x00;
}
if(program_right_status == 0x01)
{
S1DAT = 0X54;
// transreg(S1DAT);
program_right_status = 0x00;
}
S1CON = RELEASE_BUS_ACK;
break;
case ST_STOP_NONACK : //0xC0
// transreg(ST_STOP_NONACK);
S1CON=RELEASE_BUS_ACK;
FTransmitted_Done =1;
data_ready = 0x01;
break;
//==========================================
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -