📄 p89c51rd2_iap.c
字号:
/**************************************************************************************/
void wakeup_data_rd(){
unsigned char idata trx_addr,trx_length,*register_buf;
trx_addr = trx_wud_address;
trx_length = 0x2;
trx_register_rd(trx_addr,trx_length,register_buf);
}
/*****************************************************************************************/
void transmit_wakeup_message(){
unsigned char temp1;
unsigned int idata wakeup_msg_buff;
wakeup_msg_buff = wakeup_message;
r_timer = 0;
for(temp1 = 0; temp1 <10; temp1++)
{
DATAMSG = (wakeup_msg_buff & 0x8000)? 1: 0;
wakeup_msg_buff <<= 1;
while(r_timer != 1);
r_timer = 0;
}
DATAMSG = 0;
}
/*****************************************************************************************/
void transmit_data(unsigned char length,unsigned char *t_Buffer)
{
unsigned char idata temp,temp1;
unsigned char idata IO_Data;
r_timer = 0;
DATAMSG = 1;
TL0 = TimerL0_100us;
TH0 = TimerH0_100us;
while(r_timer != 100); //延时10ms
DATAMSG = 0;
r_timer = 0;
for(temp = 0; temp < length; temp++)
{
IO_Data = *t_Buffer++;
for(temp1 = 0; temp1 <8; temp1++)
{
while (r_timer == 0); //等待100us
r_timer = 0;
bitC = ((IO_Data)&(0x80))? 1:0;
IO_Data <<= 1;
if(bitC == 0)
{
DATAMSG = 1;
while(r_timer == 0);
r_timer = 0;
DATAMSG = 0;
}
else
{
DATAMSG = 0;
while(r_timer == 0);
r_timer = 0;
DATAMSG = 1;
}
}
}
r_timer = 0;
while(r_timer == 0);
DATAMSG = 0;
return;
}
/***************************************************************************************/
void transmit(unsigned char length,unsigned char *t_Buffer)
{
unsigned char idata transmit_count3,transmit_count;
SelectRF();
trx_init();
wakeup_data_rd();
make_transmit_mode();
for(transmit_count3 = 0;transmit_count3<3;transmit_count3++)
{
for(transmit_count = 0; transmit_count < 180;transmit_count++)
{
r_timer = 0;
while(r_timer != 10); //1ms
transmit_wakeup_message();
}
delay_1ms();
transmit_data(length,t_Buffer);
delay_1ms();
transmit_data(length,t_Buffer);
}
EnableXint0();
enter_wakeup_mode();
NoSelect();
return;
}
/****************************************************************************************/
unsigned char receiver_data(unsigned char length,unsigned char *r_Buffer){
unsigned char idata temp,temp1,count,r_count;
signed char idata temp2,temp3;
unsigned char idata IO_Data;
bit MSG_Bit;
start_recerver:
r_timer = 0;
r_count = 0;
count = 0;
while(r_count < 20)
{
if(r_timer == 100)
{
r_timer = 0;
count ++;
if(count == 34)
return (fail);
}
if(DATAMSG == 0)
r_count = 0;
else
r_count ++;
}
r_timer = 0;
count = 0;
while(count < 8)
{
if(r_timer == 110)
goto start_recerver;
if(DATAMSG == 1)
count = 0;
else
count ++;
}
if(r_timer < 80)
goto start_recerver;
r_timer = 0;
for(count = 0; count <length; count ++)
{
for(temp1 = 0; temp1 < 8; temp1++)
{
while(r_timer == 0);
r_timer = 0;
r_count = 0;
for(temp = 0;temp <8; temp++)
{
MSG_Bit = DATAMSG;
if( MSG_Bit == 0)
r_count ++;
}
temp2 = r_count - 5; // sample_gate = 5;
while(r_timer == 0);
r_timer = 0;
r_count = 0;
for(temp = 0;temp < 8; temp++)
{
MSG_Bit = DATAMSG;
if( MSG_Bit == 0)
r_count ++;
}
temp3 = r_count -5;
if(temp2 * temp3 > 0)
goto start_recerver;
IO_Data = IO_Data << 1;
if(temp3 < 0) IO_Data ++;
}
*r_Buffer ++= IO_Data;
}
return (success);
}
/*****************************************************************************************/
unsigned char receiver(unsigned char length,unsigned char *r_Buffer){
unsigned char idata count;
SelectRF();
trx_init();
DisableXint0();
wakeup = 0;
wakeup_data_rd();
make_receiver_mode();
count = receiver_data(length,r_Buffer);
enter_wakeup_mode();
wakeup_data_rd();
EnableXint0();
NoSelect();
return count;
}
/*************************************************************************/
uchar str_length(uchar *num) /* Calculate String Length */
{
uchar i=0;
while( *(num+i) ) i++;
return i;
}
/*************************************************************************/
void Disp_str(uchar *str,uchar x,uchar y,uchar inv)
{
unsigned int idata invxy;
y = y*2;
invxy = (y<<8);
invxy |= x;
if( inv )
invxy |= 0x8000;
DispString(str,invxy);
}
/*****************************************************************************************/
unsigned char select_menu(unsigned char * menu[],unsigned char num,unsigned char cursor)
{
unsigned char idata ch,i,page;
cursor = 0;
page = 0;
while(1)
{
ch = 0;
InitLCD();
if(page<num/4)
{
for(i = 0;i<4;i++)
Disp_str(menu[4*page+i] ,0,i,0);
}
else
{
if(num%4)
for(i = 0;i<num%4;i++)
Disp_str(menu[4*page+i] ,0,i,0) ;
}
Disp_str(menu[4*page+cursor] ,0,cursor,1);
lldelay(8);
ch = GetCH();
if(ch == DOWN)
{
if(4*page+cursor<num-1)
{
cursor++;
if(cursor == 4)
{
page++;
cursor = 0;
}
}
}
if(ch == UP)
{
if(page|cursor)
{
if(cursor == 0)
{
page--;
cursor = 3;
}
else
cursor--;
}
}
if(ch == ESC)
return 0xff;
if( ch == ENTER)
{
ch = 4*page+cursor;
return ch;
}
}
}
/*************************************************************************/
void ShangChuan(void)
{
unsigned char idata t_Buffer[16] = {"学海无崖苦作舟."}; // transmit data
unsigned char code str[] = {"发送成功!"};
unsigned char code str1[] = {"传送信息吗?"};
unsigned char idata r_Buffer[17];
unsigned char idata i,line,state;
InitLCD();
state = fail;
Disp_str(str1,0,1,0);
i = GetCH();
if(i == ENTER)
{
LightOff();
InitLCD();
Disp_str("传送中...",0,2,0);
wakeup = 0;
for(i=0;i<5;i++)
transmit(16,&t_Buffer[0]);
// delay_1ms();
// delay_1ms();
// r_timer = 0;
// while(!wakeup&&r_timer != 250);
// if(r_timer <= 250)
while(!wakeup);
state = receiver(16,&r_Buffer[0]);
wakeup = 0;
InitLCD();
LightOn();
if(state == success)
{
Disp_str(r_Buffer,0,line,0);
line++;
if(line == 4)
line = 0;
GetCH();
InitLCD();
Disp_str(str,1,1,0);
}
else
Disp_str("对方没有响应!",0,2,0);
}
i = GetCH();
}
////////////////////////////////////////////////////////////////////////////
void Init_CPU(void)
{
TMOD=0x21;
PCON=0x80;
TCON=0x51;
SCON=0x70;
TH1 = 0xfb;
TL1 = 0xfb;
TI=0;
RI=0;
}
//////////////////////////////////////////////////////////////////////////
void Init_Device(void)
{
Init_CPU();
InitUART(BAUD38400);
InitXint0();
trx_init();
InitLCD();
EnableInterrup();
EnableTime0();
}
//////////////////////////////////////////////////////////////////////////
//
//
/////////////////////////////////////////////////////////////////////////
void main(void)
{
unsigned char code str1[14] = {"good evening!"};
unsigned char idata ch;
lldelay(5);
Init_Device();
ch=0;
for(;;){
LightOn();
// Beep(2,3);
ch = select_menu(Test_5,6,0);
switch(ch){
case 0:
break;
case 1:
ShangChuan();
break;
case 2:
break;
case 3:
DispLogo(2);
break;
case 4:
InitLCD();
DispString(str1,0);
break;
case 5:
break;
default: ch=0;
}
LightOff();
}
}
/*void main(void)
{
unsigned char i;
unsigned char code str[14] = {"good morning!"};
unsigned char buffer[10] = {1,2,3,4,0,4,0,0,3,0}; // transmit data
unsigned char trx_dtr,trx_addr,trx_length;
Init_CPU();
InitUART(BAUD38400);
InitXint0();
SelectRF();
trx_init();
EnableInterrup();
for(i=0;i<14;i++)
sendcode(str[i]);
EnableTime0();
wakeup = 0;
trx_dtr = 0x01;
while(1){
EnableXint0();
// enter_wakeup_mode();
make_receiver_mode();
trx_addr = trx_dtr_address;
trx_length = 6;
trx_register_wr(trx_length,trx_addr,&trx_dtr);
sendhex(trx_dtr);
r_timer = 0;
while(r_timer!=100);
r_timer = 0;
if(wakeup){
make_receiver_mode();
wakeup = 0;
}
RI = 0;
while(!RI);
trx_dtr ++;
sendcode('O');
sendcode('K');
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -