⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p89c51rd2_iap.c

📁 基于P89C51RD2实现IAP基于应用程序在线编成
💻 C
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//																										 //
// 																										 //
//																										 //
//																										 //
///////////////////////////////////////////////////////////////////////////////////////////////////////////
#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 + -