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

📄 getsong.c

📁 Gps数据的获得及处理
💻 C
字号:
#include "reg51.h"
#include "absacc.h"
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uInt2;
sfr AUXR    = 0x8E;
#define Select8M		{CS244=1; CS1024=1; CLK377=0; P0=0xfe;  CLK377=1; }

#define uInt2Hi(uInputVal)		( *((uchar *)(&(uInputVal))) )
#define uInt2Lo(uInputVal)		( *(((uchar *)(&(uInputVal)))+1) )
#define dMemPageCnt		512

#define NF_READ_A_AREA_CMD	0x00
#define NF_READ_B_AREA_CMD	0x01
#define NF_READ_C_AREA_CMD	0x50

#define NF_READ_ID_CMD		0x90 
#define NF_READ_STAUS_CMD	0x70 
#define NF_RESET_CMD		0xFF 
#define NF_PAGE_PROGRAM_CMD 	0x80 
#define NF_PAGE_PROGRAM_END 	0x10 
#define NF_PAGE_COPYBACK_CMD 	0x8A 
#define NF_BLOCK_ERASE_CMD 	0x60 
#define NF_BLOCK_ERASE_END 	0xD0

uchar xdata pFlashBuffer[512] _at_ 0x0000;
uchar id[2]={0x22 ,0x22};
volatile bit bSerialFlag=0;
uchar PageNo[2] ={ 0 ,0};
unsigned int PageNumber=0 ;
uchar ReceiveTimeout = 8;
uchar ReceiveState = 0;

/*****************Function Declaration(Internal)**************/
void Nf_send_command(uchar command);
void Nf_send_address(uchar address);
uchar Nf_rd_byte(void);
void Nf_wr_byte(uchar dat);
bit  Nf_check_status(void);
bit  Nf_write_page(uInt2 page);
bit Nf_read_page(uInt2 page);
bit Nf_wait_busy(void);
void MemReadId(uchar *pInputId);

sbit SFRD  = P1^7;
sbit SFWR  = P3^4;
sbit SFCLE = P3^3;
sbit SFALE = P3^2;
sbit SFRB  = P1^6;
sbit CS244 = P1^5;
sbit CS1024 = P1^1;
sbit CLK377 = P1^0;
sbit DIR = P3^5;

void SendCharToSerial(uchar dat)
{
		SBUF=dat;
		while(!TI);
		TI=0;

}

void SendCharsToSerial(uchar *buffer,uInt2 count)
{
	unsigned int i ;
	for(i=0 ;i<count; i++)
	{
		SBUF=*buffer;
		while(!TI);
		TI=0;
		buffer++;
	}
		
}


void Speaker(uchar time)
{
	uchar i,j,k;
	for(i=0 ;i<time; i++)
		for(k=0 ;k<100; k++)
		{	
			for(j=0 ;j<40; j++)
			{	
				CLK377=0;
				P0=0x00;
				CLK377=1;
			}
			for(j=0 ;j<40; j++)
			{	
				CLK377=0;
				P0=0xff;
				CLK377=1;
			}
		}		
}

void main(void)
{
	TMOD=0x21;	
	TH1=0xfd;
	TL1=0xfd;
	ET1=0;
 	PCON=0x00;		
	SCON=0x50;
	RI=TI=0;
	ES=1;
	TR1=1;
	EA=1; 
	AUXR = 0x01;
	ET0=1;
	TH0 = 0xd8;
	TL0 = 0x8c;
	TR0=1 ;
	while(1)
	{
		if(bSerialFlag)
		{
			bSerialFlag=0;
			uInt2Hi(PageNumber) = PageNo[1];
			uInt2Lo(PageNumber) = PageNo[0];
			Select8M
		 	MemReadId(id);
			Nf_read_page(PageNumber);
			SendCharsToSerial(PageNo,2);
			SendCharsToSerial(pFlashBuffer,sizeof(pFlashBuffer));

		}

	}

}
void SerInt(void) interrupt 4 using 2
{
	uchar tTempRcv;
	if(_testbit_(RI))
	{	
		tTempRcv = SBUF ;
		switch(ReceiveState)
		{
			case 0 :
			{
				if(tTempRcv !=0xee)
					ReceiveState = 0;
				else
					ReceiveState = 1;
				ReceiveTimeout= 20 ;
				break;
			}
			case 1 :
			{	
				if(!ReceiveTimeout)
				{
					ReceiveState = 0;
				
				}else
				{
					ReceiveTimeout = 20;
					ReceiveState = 2;
					PageNo[ 0 ]=tTempRcv;
				}
				break;
			}
			case 2:	
			{	
				if(!ReceiveTimeout)
				{
					ReceiveState = 0;

				}else
				{
					ReceiveState = 0;
					PageNo[ 1 ]=tTempRcv;
					bSerialFlag=1;
				}
				break;
			}		
			
		}
	
	}
	RI=0;
}
void timer0() interrupt 1 using 1
//10ms
{
	TR0=0;
	TH0 = 0x0c;
	TL0 = 0x8c;
	TR0=1 ;
	if(ReceiveTimeout)
			ReceiveTimeout--; //serial receive timeout 
}

/**********************Function Bodies for flash*******************/

bit Nf_wait_busy(void)
{
	uchar i;
	for(i=0 ;i<100; i++); 
	return 0;
}

void Nf_send_command(uchar command)
{
	SFALE=0;
	SFCLE=1;
	SFRD =1;
	SFWR =0;
	DIR = 1;
	P0=command;
	SFWR =1;
	SFCLE=0;
}

void Nf_send_address(uchar address)
{
	SFCLE=0;
	SFALE=1;
	SFRD =1;
	SFWR =0;
	DIR = 1;
	P0=address;
	SFWR =1;
	SFALE=0;
}	

uchar Nf_rd_byte(void)
{
	uchar in;

	SFALE=0;
	SFCLE=0;
	SFWR =1;
	DIR = 1;
	P0=0xFF;
	SFRD =0;
	SFRD =0;
	DIR = 0;
	in = P0;
	SFRD =1;
	return(in);
}

void Nf_wr_byte(uchar dat)
{
	SFALE=0;
	SFCLE=0;
	SFRD =1;
	SFWR =0;
	DIR = 1;
	P0 =dat;
	SFWR =1;
}


bit Nf_check_status(void)	
{
	if( Nf_wait_busy() )
		return 1;
	Nf_send_command(NF_READ_STAUS_CMD);
	if( Nf_wait_busy() )
		return 1;
	if((Nf_rd_byte()&0x01)==0x00)  
		return 0;
	return 1;
}


void MemReadId(uchar *pInputId)
{
	AUXR = 0x01;			
	AUXR = 0x01;			
	Nf_wait_busy();
	Nf_send_command(NF_READ_ID_CMD);
	Nf_send_address(0x00);
	Nf_wait_busy();
	pInputId[0]=Nf_rd_byte();
	pInputId[1]=Nf_rd_byte();
	
}

bit Nf_read_page(uInt2 page)
{
	uInt2 i;
	uchar uTemp;
	

	if( Nf_wait_busy() )
		goto Nf_read_page_Error;
	
	Nf_send_command(NF_READ_A_AREA_CMD);
	
	Nf_send_address(0x00);			
	Nf_send_address( uInt2Lo(page) );	
	Nf_send_address( uInt2Hi(page) );
	if( Nf_wait_busy() )
		goto Nf_read_page_Error;
	
	for(i=0;i<dMemPageCnt;i++)
	{
		uTemp=Nf_rd_byte();
		XBYTE[i]=uTemp;
	}

	if( Nf_wait_busy() )
		goto Nf_read_page_Error;

	return 0;

Nf_read_page_Error:
	return 1;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -