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

📄 processor.c

📁 GPS 与 GSM协议C语言实现源码,为了大家能够更好的理解神秘的导航和手机通讯。
💻 C
字号:
#include <iom128v.h>
#include "board.h"
#include "datatype.h"
#include "processor.h"
#include "cc1000.h" 

//---------------------------------处理器设置-----------------------------------
//---------------------------------FIRST PART-----------------------------------
//--------------------------------   ADC     -----------------------------------
void init_adc(void)
     {
	  ADCSRA  = 0X00;
	  ADCSRA |= CONTINUE;                                                       //使ADC工作于连续模式
	  ADMUX   = 0x00;             
	  ADMUX  |= INVREF;                                                         //将ADC的参考电压设置成内部的
	  ADMUX  |= RSSI;                                                           //将ADC0设置成单端模拟输入端口
	 }
void open_adc(void)                                                             //开启ADC
     {
	  ADCSRA |= 0x80;
	 }
void close_adc(void)                                                            //关闭ADC
     {
	  ADCSRA &= 0x7F;
	 }
int conv_end(void)
     {
	  if(ADCSRA & 0x10 == 0x10)return 1;
	  else return 0;
	 }	 	 
void rssi_vbat(BYTE adc_td)                                                     //银行系统中两路模-->数之间的切换
     {
	  if (adc_td == RSSI)
	    {
	     //while (ADCSRA & 0x10 == 0x10)                                        //判断ADC转换是否结束,直到结束再转换通道
		        ADMUX |= RSSI;
		}
	  if (adc_td == VBATC) 	  
	     //while (ADCSRA & 0x10 == 0x10)
		       	ADMUX |= VBATC;  
	 }	
void adc_int_enable(void)
     {
	  SREG  |= E_GLOBLE_INT ;
	  ADCSRA|= 0x40;
	 }
ADCTYPE adc_result_reading(BYTE adc_tl,ADCTYPE adc_result)                                         //完成AD转换,结果应用HEX数据表示,数据传递靠数组传递
    {
	 int t;
	 BYTE adc_h,adc_l;
	 init_adc();	                                                            //初始化                                              
	 rssi_vbat(adc_tl);                                                         //通路选择
	 open_adc();                                                                //打开ADC
 	 t=conv_end();                                                              
	 while (t == NO );                                                          //判断转换结束
	 //delay(15) ; 
	 adc_l = ADCL,adc_h   = ADCH;
	 adc_result.high2bit = ADCL;
	 adc_result.low8bit  = ADCH;
	 return adc_result;
	                                                                            //读取结果                                       	  
	}
/*--------------------------第二部分------------------------*/
/*-------------------------GPS_USART0-----------------------*/
BYTE  GPRMC[6] ={'G','P','R','M','C'};
BYTE  GPGAA[6] ={'G','P','G','A','A'};
BYTE  GPVTG[6] ={'G','P','V','T','G'};
BYTE is(BYTE c)
{
 if (USART0_Receive() ==c)return 0x01;
 return 0x00;
 
}
/*first:USART0 initializtion*/
void init_usart0(void)
{
 UCSR0B = 0x00;                                                                 //disable while setting baud rate
 UCSR0A = 0x20;
 UCSR0C = 0x06;
 UBRR0L = USART_BOUD;                                                           //set baud rate lo
 UBRR0H &= 0xF0;                                                                 //set baud rate hi  BOUD_RATE 4800
 UCSR0B = 0x18;
}
BYTE USART0_Receive(void)                                                       //USART0接收数据
{
   while ((UCSR0A&(1<<RXC0))==(1<<RXC0)) return UDR0; 
   return 0; 
       
} 
/*second: GPS message  detect*/
BYTE gps_data_format(BYTE gps_data_buf[],BYTE message_id[],int message_id_length)                   
 {
   int i,right_cnt;
   for(i=0;i<=message_id_length;i++)
  	 {
	  if(gps_data_buf[i]==message_id[i])right_cnt++;	     
	 }
	if(right_cnt==message_id_length)return OK ;
	   else return NO; 
 }	 

 
/*third : pick_up GPS valid data*/
GPS  pickup_valid_data(void)
 {
  int i;
  BYTE buf[GPS_MESSAGE_LENGTH];
  GPS  gps_data;
  if(is('$'))
    {
	 for(i=0;i<=GPS_MESSAGE_LENGTH-1;i++)
	 { 
	  buf[i]=USART0_Receive();
	 }
	 {PORTC=0x00;delay(300);PORTC=0xff;delay(300);PORTC=0x00;delay(300);PORTC=0xff;delay(300);PORTC=0x00;delay(300);PORTC=0xff;delay(300);PORTC=0x00;delay(300);PORTC=0xff;delay(300);}
	}
	
   if (gps_data_format(buf,GPRMC,5))
    {
     PORTC=0x00;delay(10000)  ;
	 gps_data.utc[0] = buf[6] ;
	 gps_data.utc[1] = buf[7] ;
	 gps_data.utc[2] = buf[8] ;
	 gps_data.utc[3] = buf[10];
	 gps_data.utc[4] = buf[11];
	 gps_data.status = buf[13];
     gps_data.latitude.degree    = buf[15];
	 gps_data.latitude.minute[0] = buf[16];
	 gps_data.latitude.minute[1] = buf[18];
	 gps_data.latitude.minute[2] = buf[19];
	 gps_data.latitude.direction = buf[21];
	 gps_data.longitude.degree[0]= buf[23];
	 gps_data.longitude.degree[1]= buf[24];
	 gps_data.longitude.minute[0]= buf[25];
	 gps_data.longitude.minute[1]= buf[27];
	 gps_data.longitude.minute[2]= buf[28];
	 gps_data.longitude.direction= buf[30];
	 gps_data.speed = buf[34];
	}
   if (gps_data_format(buf,GPGAA,5))
  {
   ;
  }
   if (gps_data_format(buf,GPVTG,5))
  {
   ;
  }
   return gps_data; 
 }     	

⌨️ 快捷键说明

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