atmega128uartreceiveGPS.rar

  • owesky100
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 3
    下载次数
  • 2014-10-13 20:05
    上传日期
atmega128串口接受GPS数据,AVR开发环境,经过调试,下载到开发板上可用。
atmega128uartreceiveGPS.rar
  • atmega128串口接受gps数据
  • GPS格林威治时间程序.txt
    6.2KB
内容介绍
#include <avr/io.h rel='nofollow' onclick='return false;'> //#include<avr/macros.h rel='nofollow' onclick='return false;'> #include<avr/interrupt.h rel='nofollow' onclick='return false;'> //#include<avr/signal.h rel='nofollow' onclick='return false;'> #define fosc 8000000 #define baud 9600 #define uchar unsigned char #define WS_UCSR1A UCSR1A #define WS_UDR1 UDR1 #define SET_01 PORTE&=~_BV(PE2) #define CLR_01 PORTE|=_BV(PE2) #define SET_02 PORTE&=~_BV(PE3) #define CLR_02 PORTE|=_BV(PE3) #define SET_03 PORTE&=~_BV(PE4) #define CLR_03 PORTE|=_BV(PE4) #define SET_04 PORTE&=~_BV(PE5) #define CLR_04 PORTE|=_BV(PE5) #define SET_05 PORTE&=~_BV(PE6) #define CLR_05 PORTE|=_BV(PE6) unsigned char trdata_buff[90]; unsigned char rxd_count=0; //unsigned char fla=0; //接受gps具体数据标志 //unsigned char receive=0; //接受gps具体数据完成标志判断 unsigned char rxdcheck_fla=0x0; //作为gps的具体数据的检测 unsigned char txdcheck_do=0x0; //作为接受完gps数据后要发送的数据的标记 unsigned char rxdcheck_s=0x0; //作为gps的数据接受标记的检测 unsigned char rxdcheck_g=0x0; unsigned char rxdcheck_p=0x0; unsigned char rxdcheck_r=0x0; unsigned char rxdcheck_m=0x0; unsigned char rxdcheck_c=0x0; uint8_t status,res; uint8_t rdata; //void USART0_Init(); //void send0(uchar data); void USART0_Init(void) //初始化串口 { unsigned long int ubrr0; UCSR0B=0x00; UCSR0A=0x00; //控制寄存器清零 UCSR0C=0x06; //0000 0110 ubrr0=fosc/baud/16-1; //波特率设置 UBRR0L=(uchar)(ubrr0%256); UBRR0H=(uchar)(ubrr0/256); UCSR0B=(1<<3)|(1<<4)|(1<<7); //接收、发送使能,接收中断使能 SREG|=0x80;//sei() //全局中断开放 DDRE|=0x02; //配置TX为输出(很重要) } void send0(uint8_t rdata) { while(!(UCSR0A&(1<<UDRE0))); //查询:UDRE为1 说明缓冲器为空 UDR0=rdata; while(!(UCSR0A&(1<<TXC0))); //等待发送完毕 UCSR0A|=0x40; } void USART1_Init(void) //初始化串口 { unsigned short int ubrr1; UCSR1B=0x00; UCSR1A=0x00; //控制寄存器清零 //UCSR1A=0X04; UCSR1C=0x06; //0000 0110 ubrr1=fosc/baud/16-1; //波特率设置 UBRR1L=(uchar)(ubrr1%256); UBRR1H=(uchar)(ubrr1/256); UCSR1B=(1<<3)|(1<<4)|(1<<7); //接收、发送使能,接收中断使能 SREG|=0x80;//sei(); //全局中断开放 DDRD|=0xFB; //配置TX为输出(很重要) } void FlashA(void); void FlashB(void); void FlashC(void); void FlashD(void); void FlashE(void); void Delay(void); void send1(unsigned char*p) { while(*p) { send0(*p++); } } //中断接受 ISR(USART1_RX_vect) { FlashE(); if(!(WS_UCSR1A & 0x80)) ; //no data to be received 接收缓冲器为空 { unsigned char temp; //status = WS_UCSR1A; temp = WS_UDR1; if(txdcheck_do==1) { if(rxdcheck_fla==0x0) { ++rxd_count; trdata_buff[rxd_count]=temp; if(temp==0x0D) rxdcheck_fla=0xff; } } if(txdcheck_do==0) { if(rxdcheck_s==0) { if(temp=='$') { rxdcheck_s=0xff; rxd_count=0x0; trdata_buff[rxd_count]=temp; } else { rxd_count=0x0; rxdcheck_s=0; } } else if(rxdcheck_g==0) { if(temp=='G') { rxdcheck_g=0xff; ++rxd_count; trdata_buff[rxd_count]=temp; } else { rxd_count=0x0; rxdcheck_s=0x0; rxdcheck_g=0x0; } } else if(rxdcheck_p==0) { if(temp=='P') { rxdcheck_p=0xff; ++rxd_count; trdata_buff[rxd_count]=temp; } else { rxd_count=0x0; rxdcheck_s=0x0; rxdcheck_g=0x0; rxdcheck_p=0x0; } } else if(rxdcheck_r==0) { if(temp=='R') { rxdcheck_r=0xff; ++rxd_count; trdata_buff[rxd_count]=temp; } else { rxd_count=0x0; rxdcheck_s=0x0; rxdcheck_g=0x0; rxdcheck_p=0x0; rxdcheck_r=0x0; } } else if(rxdcheck_m==0) { if(temp=='M') { rxdcheck_m=0xff; ++rxd_count; trdata_buff[rxd_count]=temp; } else { rxd_count=0x0; rxdcheck_s=0x0; rxdcheck_g=0x0; rxdcheck_p=0x0; rxdcheck_r=0x0; rxdcheck_m=0x0; } } else if(rxdcheck_c==0) { if(temp=='C') { rxdcheck_c=0xff; ++rxd_count; trdata_buff[rxd_count]=temp; txdcheck_do=1; } else { rxd_count=0x0; rxdcheck_s=0x0; rxdcheck_g=0x0; rxdcheck_p=0x0; rxdcheck_r=0x0; rxdcheck_m=0x0; rxdcheck_c=0x0; } } else { //rxdcheck_fla=0xff; //++rxd_count; //trdata_buff[rxd_count]=temp; txdcheck_do=0; rxd_count=0x0; rxdcheck_s=0x0; rxdcheck_g=0x0; rxdcheck_p=0x0; rxdcheck_r=0x0; rxdcheck_m=0x0; rxdcheck_c=0x0; } } } } int main (void) { USART0_Init(); USART1_Init(); SREG=(1<<7); DDRB=_BV(PB1); PORTB&=~(0x02); PORTE=_BV(PE2)|_BV(PE3)|_BV(PE4)|_BV(PE5)|_BV(PE6); DDRE=_BV(PE2)|_BV(PE3)|_BV(PE4)|_BV(PE5)|_BV(PE6); while(1) { FlashA(); if(rxdcheck_fla==0xff) { send1(trdata_buff); txdcheck_do=0; rxd_count=0; rxdcheck_fla=0x0; } } } void Delay() { uchar i=0; TCNT0=0; // T/C0 开始值 TCCR0=_BV(CS02); // 预分频 ck/64 ,计数允许 //查询定时器方式等待0.5秒 //7372800 /64 /256 /225 = 2Hz for(i=0;i<25;i++) { loop_until_bit_is_set(TIFR,TOV0); //写入逻辑1 清零TOV0 位 TIFR|=_BV(TOV0); } } void FlashA(void) { SET_01; Delay(); CLR_01; Delay(); } void FlashB(void) { SET_02; Delay(); CLR_02; Delay(); } void FlashC(void) { SET_03; } void FlashD(void) { SET_04; } void FlashE(void) { SET_05; }
评论
    相关推荐
    • gps_nema018.rar
      ATmega128GPS例子,可供参考使用
    • AVR8GPS.rar
      ATMEGA16+诺基亚3310屏解析显示GPS的C语言源程序
    • ATmega8.rar
      Atmega8中文手册 AVR已被广泛用于: 空调控制板 打印机控制板 智能电表 智能手电筒 LED控制屏 医疗设备 GPS
    • GPS.rar
      基于arduino的GPS地图导航系统 SPI接口。采用Atmega 328为主控芯片 需要采用滤波算法过滤
    • mega128gps.rar
      gps定位主控单片机代码,使用mega128主控
    • ATmega128Lv02_201111031649.rar
      this is the gps-trecking project
    • gps.zip
      gps using microcontller atmega
    • 基于Atmega328的GPS追踪器设计(原理图+PCB源文件+Arduino源码)-电路方案
      GPS跟踪器基于Arduino Pro MiniATmega328(ATmega328数据手册)设计,该Arduino开发板支持3.3V 8Mhz。外接基于TP4056设计的Lipo充电电池,该Lipo电池支持USB进行充电,同时外接微型SD和RGB led。该硬件电路设计采用...
    • Atmega128-GPS
      Atmega128GPS程序,用于单片机和GPS的通讯,并通过显示把定位数据显示到12864屏幕上
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路