📄 main.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 + -