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

📄 main.c

📁 此文件为GPS源代码
💻 C
字号:
//#include "nf_drv.h"
//#include "stc89c52.h"
#include "main.h"
#include "nf.h"
idata Byte gl_buffer[GL_BUF_SIZE];       // global buffer of 256 bytes 

Uchar iGPS=0;							//标记接收了多少个字符
Uchar iBT =0;
bit GPS_flag=0;			//结束标记 标记是否接收完GPS发送过来的数据


void sendData();
/***********************   初始化串口   **************************************/
void INIT_SCI()
{
/*
	SCON:SM0,SM1,SM2,REN,TB8,RB8,TI,RI
	SM0,SM1:串口接口操作方式 01 8bitUART,可变
	REN: Receive Enable
	TI: The flag of transmission Interrupter 
	RI: The flag of Receive Interrupter
*/
		SCON=0x70;		// 0111 0000 串口初始化为8位变波特率UART,允许串行接收
		ES=1;			//允许串口中断
		EA=1;			//允许CPU响应中断
}
/***********************  初始化定时器 ****************************************/
void INIT_TMR()
{
/*
	TMOD: GATE,C/T,M1,M0,GATE,C/T,M1,M0
		  |<--Timer1-->| |<--Timer2-->|
	M1,M0 方式
	0 ,0 	0	13bit			
	0 ,1	1  	16bit
	1 ,0	2	8bit automatically loading
	1 ,1 	3	T0分为两个8位计数器,T1停止工作
	C/T=1计数器;C/T=0 定时器
	GATE=0,TR0(or TR1)=1,T0(orT1)开始计数,GATE=1,TR0(orTR1)=1,and INT0(orInT1)=1,开始计数
*/
	TMOD=0x20;	// 0010 0000 16bit automatically loading
	TH1=0xfd;	// 4800(b/s)=0xfa,9600(b/s)=0xfd,1200(b/s)=0xe8,2400(b/s)=0xf4 
	TL1=0xfd;
	TR1=1;		//start counting
}

/*********************  serial interrupter service subroutine   ***************************/
void serial_int(void) interrupt 4{
	unsigned char data c;
	if(_testbit_(TI))	//_testbit_(TI)测试TI,判断是否是发送中断
	{
		TI=0;
	}
	if(_testbit_(RI))			//判断是否是接收中断
	{ 					
		c=SBUF;					//读取接收的字符
		if(c=='$'){				//有效数据开始标记;
			recGPSData();		// 开串口中断,重新接收					
		}
	}
}

/************* 接收GPS发送过来的数据************************/
void recGPSData(){
	char i;
	ES=0;				//关闭串口中断
	RI=0;							//连续接收三个字符,用来判断是否是要接收的有效数据
	gl_buffer[0]='$';
	for(i=1;i<6;i++)
	{				//接收五个字符
		while(!RI);
		gl_buffer[i]=SBUF;	//接收字符G
		RI=0;
	}
	if(gl_buffer[3]=='R' && gl_buffer[4]=='M' && gl_buffer[5]=='C')
	{	
		iGPS=6;		
		do
		{
			while(!RI);
			gl_buffer[iGPS++]=SBUF;
			RI=0;
				// 因为iGPS做加加,所以判断条件为 iGPS-1
		}while(gl_buffer[iGPS-1]!='*' && iGPS<GL_BUF_SIZE);
		record_size=iGPS;	//记录接收了多少个字节
		write_bytes();
		for(i=0;i<GL_BUF_SIZE;i++)	//清空buffer
			gl_buffer[i]=0x00;
		GPS_flag=1;			// 置GPS数据接收完标志位
		iGPS=0;				// 从置iGPS
	}
	ES=1;
}
/************* 向串口发送一串数据   **************************/
void sendData(){
	unsigned char i=1;
	ES=0;		// 关串口中断
	while(gl_buffer[i]!='*' && i<GL_BUF_SIZE-1)
	{	
		SBUF=gl_buffer[i++];
		while(!TI);
		TI=0;
	}
	SBUF=gl_buffer[i];		//送出字符'*'
	while(!TI);
	TI=0;

	ES=1;		//开串口中断
}
void main(void)
{	

//	all_blocks_erase();
/*
	Byte i=0;
	nf_block_page_add=0x40;
	nf_column_add=0xc8;
	nf_ptr_operation=0x01;
	for(i=0;i<68;i++)
	{
		nf_read_bytes(100);
		nf_block_page_add++;
	}
*/
/*
	nf_block_page_add=0x00;
	nf_column_add=0x00;
	nf_ptr_operation=0x00;	
	nf_block_erase();
	nf_block_page_add+=0x20;
	nf_block_erase();
	nf_block_page_add+=0x20;
	nf_block_erase();
	nf_block_page_add+=0x20;
	nf_block_erase();
	nf_block_page_add+=0x20;
	nf_block_erase();
*/
	initGLVar();
	INIT_TMR();
	INIT_SCI();

	ES=0;				//关中断
	send_GPS();
	ES=1;				//块中断
//	*/
	while(1)
	{
		if(GPS_flag)
		{
			GPS_flag=0;			//重置接收完GPS数据标志位
		//	sendData();
		}
	}
}

⌨️ 快捷键说明

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