📄 p89c51rd2_iap.c
字号:
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// //
// //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "pos.h"
#define EnableInterrup(); EA = 1;
#define DisableInterrup(); EA = 0;
void lldelay(unsigned char i)
{
while( i-- )
LDelay(0xffff);
}
bit int_key;
#define InitXint0(); IT0 = 1;PX0 = 0; // 下降沿触发
#define DisableXint0(); EX0 = 0;
#define EnableXint0(); EX0 = 1;
void INTX0(void) interrupt 0 using 0
{
unsigned char i;
LDelay(0x1fff);
i = GetIntType();
if( i & INTKEY )
int_key = 1;
if(i & INTRF)
wakeup = 1;
}
#define DisableTime0(); TR0 = 0;ET0 = 0;
#define EnableTime0(); TR0 = 1;ET0 = 1;
void Time0_int(void) interrupt 1 using 0
{
TL0 = TimerL0_100us; //18.432mHz 100us
TH0 = TimerH0_100us;
r_timer++;
}
void bit_delay()
{
}
/**********************************************************************/
void delay_1ms()
{
TL0 = TimerL0_100us;
TH0 = TimerH0_100us;
r_timer = 0;
while(r_timer!=10);
r_timer = 0;
}
/*************************************************************************/
void sendcode(unsigned char c)
{
unsigned char test;
SBUF=c;
test=0;
while(TI==0);
TI=0;
}
/************************************************************************/
void sendhex(unsigned char c)
{
unsigned char i,test;
i=c>>4;
if (i<=9)
i+=0x30;
else
i+=0x37;
SBUF=i;
test=0;
while (TI==0);
TI=0;
i=c & 0xf;
if (i<=9)
i+=0x30;
else
i+=0x37;
SBUF=i;
test=0;
while (TI==0);
TI=0;
}
/**********************************************************************/
unsigned char GetCH()
{
unsigned char j;
DisableXint0();
while((j = GetKey()) );
while(!(j = GetKey()) );
switch(j)
{
case 0x01:
j = ENTER;
break;
case 0x02:
j = MENU;
break;
case 0x03:
j = ESC;
break;
case 0x06:
j = DEL;
break;
case 0x07:
j = UP;
break;
case 0x0B:
j = DOWN;
break;
case 0x08:
j = SEND;
break;
case 0x0C:
j = ONE;
break;
case 0x0f:
j = TOW;
break;
case 0x0a:
j = THREE;
break;
case 0x10:
j = FOUR;
break;
case 0x13:
j = FIVE;
break;
case 0x0e:
j = SIX;
break;
case 0x14:
j = SEVEN;
break;
case 0x09:
j =EIGHT;
break;
case 0x12:
j = NINE;
break;
case 0x15:
j = STAR;
break;
case 0x0D:
j = ZERO;
break;
case 0x11:
j = WELL;
break;
default: j=0;
}
return j;
}
/*****************************************************************************************/
void ClearLine(unsigned int xy,unsigned char nlength)
{
while( nlength-- )
{
DispString(" ",xy);
xy += 0x800;
}
}
/*****************************************************************************************/
unsigned char Cursor(unsigned char cole,unsigned char line,unsigned char Length,unsigned char idata *temp)
{
unsigned char code str[2] = {"_"};
unsigned char idata ch,length = 0;
unsigned int idata xy,pos;
xy = line*2;
xy <<= 8;
xy += cole*8;
pos = xy;
DispString(str,xy);
lldelay(8);
while(1){
ch = GetCH();
if(ch == ENTER)
{
ClearLine(pos,1);
length ++;
temp[length - 1] = 0x00;
temp[length] = 0x00;
return ch;
}
if((ch == ESC)||(ch == DOWN)||(ch == MENU)||(ch == UP)||(ch == SEND)||(ch == WELL))
{
temp[0] = 0x00;
ClearLine(xy,1);
return ESC;
}
if(ch == DEL)
{
if(length!=0)
{
ClearLine(pos,1);
pos -= 8;
ClearLine(pos,1);
length --;
temp[length] = str[0];
temp[length + 1] = str[1];
DispString(temp,xy);
}
}
else
{
if(length<Length)
{
if((length+cole) < 15)
{
ClearLine(pos,1);
temp[length] = ch;
temp[length + 1] = str[0];
temp[length + 2] = str[1];
DispString(temp,xy);
pos += 8;
length ++;
}
}
}
}
}
/**********************************************************************************/
// 前4位为地址,高位在前,第5位为读写控制,低为读,高为写,接下来为数据位,长度不定。
// 读数据时序______ ______
// SLE \________________________________________/
// _____ _ _ _ _ _ _ _ _ _ _
// SCK _____\__/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_________
// ___ ___ ___ ___ ___ ___ ___ ___ ___
// SDATA _______/___|___|___|___\___/___|___|___|___|___\________
//读寄存器数据:
/*********************************************************************************/
//unsigned char idata register_rd[4];
void trx_register_rd(unsigned char trx_addr,unsigned char trx_length,unsigned char idata *register_rd)
{
unsigned char *ptrx_data;
unsigned char temp,i;
ptrx_data = register_rd;
trx_addr<<=4;
SCK = 0;
SLE = 0;
for(temp=0;temp<4;temp++){
SDATA = (trx_addr & 0x80)?1:0;
trx_addr<<=1;
bit_delay();
SCK = 1;
bit_delay();
SCK = 0;
bit_delay();
}
SDATA = 0;
bit_delay();
SCK = 1;
bit_delay();
SCK = 0;
bit_delay();
for(temp=0;temp<trx_length/8;temp++){
for( i = 8 ; i> 0 ; i -- )
{
bitC = 0;
SCK = 1;
if(SDATA)
bitC =1;
SCK = 0;
if(bitC)
register_rd[temp] = register_rd[temp]|(1<< i);
else
register_rd[temp] <<= 1;
}
}
for( temp = 0 ; temp<trx_length%8;temp++){
bitC = 0;
SCK = 1;
if(SDATA)
bitC =1;
SCK = 0;
if(bitC)
register_rd[temp] = register_rd[temp]|(1<< i);
else
register_rd[temp] <<= 1;
}
SLE = 1;
}
/******************************************************************************************/
// 写数据时序
// ______ ________
// SLE \________________________________________/
// _____ _ _ _ _ _ _ _ _ _ _
// SCK _____\__/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_________
// ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
// SDATA _______/___|___|___|___|___|___|___|___|___|___\________
//写寄存器数据:
/*******************************************************************************************/
void trx_register_wr(unsigned char trx_length,unsigned char trx_addr,
unsigned char * updata){
unsigned char temp,i,j;
trx_addr <<= 4;
SCK = 0;
SLE = 0;
bit_delay();
for(temp = 0; temp < 4; temp++){
SDATA = (trx_addr & 0x80)?1:0;
trx_addr <<= 1;
bit_delay();
SCK = 1;
bit_delay();
SCK = 0;
bit_delay();
}
SDATA = 1;
bit_delay();
SCK = 1;
bit_delay();
SCK = 0;
bit_delay();
for(temp = 0;temp < trx_length/8;temp++){
i = *updata++;
for( j = 0 ; j < 8 ; j ++ ){
SDATA = (i & 0x80)?1:0;
i <<= 1;
bit_delay();
SCK = 1;
bit_delay();
SCK = 0;
bit_delay();
}
}
i = *updata;
for(temp = 0 ; temp < trx_length%8 ; temp++)
{
SDATA = (i & 0x80)?1:0;
i <<= 1;
bit_delay();
SCK = 1;
bit_delay();
SCK = 0;
bit_delay();
}
SLE = 1;
}
/**************************************************************************************/
void enter_wakeup_mode(){
unsigned char trx_addr,trx_length;
trx_addr = trx_wuc_address;
trx_length = 0x2;
trx_register_wr(trx_length,trx_addr,trx_wake_word);
trx_addr = trx_ctrl1_address;
trx_length = 0x08;
trx_register_wr(trx_length,trx_addr,trx_sleep_mode_data );
}
/*****************************************************************************************/
void trx_init(){
unsigned char trx_addr,count,trx_length;
unsigned char *ptemp ;
SelectRF();
ptemp = &trx_init_data[0];
trx_addr = trx_f0_address;
for(count = 0;count<5; count++){
trx_length = 0x20;
trx_register_wr(trx_length,trx_addr,ptemp);
trx_addr++;
ptemp += 4;
}
trx_addr = trx_dtr_address;
trx_length = 6;
trx_register_wr(trx_length,trx_addr,trx_init_dtr);
trx_addr = trx_wuc_address;
trx_length = 0x20;
trx_register_wr(trx_length,trx_addr,trx_init_wuc);
trx_addr = trx_wur_address;
trx_length = 0x12;
trx_register_wr(trx_length,trx_addr,trx_init_wur);
trx_addr = trx_wua_address;
trx_length = 0x19;
trx_register_wr(trx_length,trx_addr,trx_init_wua);
trx_addr = trx_ctrl2_address;
trx_length = 0x20;
trx_register_wr(trx_length,trx_addr,trx_init_ctrl2);
enter_wakeup_mode();
}
/**************************************************************************************/
void make_receiver_mode(){
unsigned char trx_addr,trx_length;
trx_addr = trx_ctrl1_address;
trx_length = 0x08;
trx_register_wr(trx_length,trx_addr,trx_receiver_mode_data);
DATAMSG = 1;
}
/**************************************************************************************/
void make_transmit_mode()
{
unsigned char trx_addr,trx_length;
// DATAMSG = 0;
trx_addr = trx_ctrl1_address;
trx_length = 0x08;
trx_register_wr(trx_length,trx_addr,trx_transmit_mode_data);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -