//=============头文件=========== #include <iom64v.h> //chip----ATMEGA64 #include <eeprom.h> #include <macros.h> #include <stdlib.h> #include <math.h>
//========================================== void init_timer0(void); void init_uart0(void); void init_uart1(void); void init_port(void); //========================================= //RAM define.
unsigned char Buf0[10]; unsigned char count=0;
//================================================================== //==================================================================
//=============定时器T0初始化函数============ void init_timer0(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0x70; //set count OCR0 = 0x90; TCCR0 = 0x06; //start timer }
/*****************************************************/ //calculating register UBRR reult . //algorithm:if(u2x=0) ubrr=fosc/(16*baud)-1. // if(u2x=1) ubrr=fosc/(8*baud)-1 . //UART0初始化函数,晶体:7.37258M //==================== void init_uart0(void) { UCSR0B=(1<<RXEN0)|(1<<TXEN0); //允许发送和接收 UBRR0L=47; //设置波特率寄存器的低位 (7.3728MHz 47=9600 23=19200) UBRR0H=0; //设置波特率寄存器的高位 UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);//8位数据+1位STOP位 UCSR0B=0xD8; } //=================================== //UART0发送中断处理函数 9200 baudrate #pragma interrupt_handler uart0_tx_isr:iv_USART0_TX void uart0_tx_isr(void) { while(count<=10) {UDR0=Buf0[count]; count++; while(!(UCSR0A&(1<<UDRE0))) ; } } /*{ F0_TxEnd=0; if(TxBuf0_end!=TxBuf0_begin) { UDR0=TxBuf0[TxBuf0_begin]; F0_TxEnd=1; TxBuf0_begin++; if (TxBuf0_begin>=UART_TX0_BUFFER_SIZE) TxBuf0_begin=0; } }*/ //=================================== //UART0接收中断处理函数 #pragma interrupt_handler uart0_rx_isr:iv_USART0_RX void uart0_rx_isr(void) { Buf0[count]=UDR0; count++; if(count>=10) count=0; } /* RxBuf0[RxBuf0_end]=UDR0; RxBuf0_end++; if(RxBuf0_end>=UART_RX0_BUFFER_SIZE) RxBuf0_end=0; }*/
/*************************************************************/ //calculating register UBRR reult . //algorithm:if(u2x=0) ubrr=fosc/(16*baud)-1. // if(u2x=1) ubrr=fosc/(8*baud)-1 . //UART1(PC)初始化函数,晶体:7.37258M. //=================================== void init_uart1(void) { UCSR1B=(1<<RXEN1)|(1<<TXEN1);//允许发送和接收 UBRR1L=95;//设置波特率寄存器的低位 (7.3728MHz 95=4800 47=9600 23=19200) UBRR1H=0;//设置波特率寄存器的高位 UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);//8位数据+1位STOP位 UCSR1B=0xD8; } //===================================== //UART1(GPS)发送中断处理函数 /*#pragma interrupt_handler uart1_tx_isr:iv_USART1_TXC void uart1_tx_isr(void) { F1_TxEnd=0; if(TxBuf1_end!=TxBuf1_begin) { UDR1=TxBuf1[TxBuf1_begin]; F1_TxEnd=1; TxBuf1_begin++; if (TxBuf1_begin>=UART_TX1_BUFFER_SIZE) TxBuf1_begin=0; } }*/ //================================= //UART1(GPS)接收中断处理函数 /*#pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC void uart1_rx_isr(void) { RxBuf1[RxBuf1_end]=UDR1;RxBuf1_end++; if(RxBuf1_end>=UART_RX1_BUFFER_SIZE) RxBuf1_end=0; }*/ /*************************************************************/ void init_port(void) { DDRA = 0x00; //INPUT DDRB = 0x00; //INPUT DDRC = 0x00; //INPUT DDRD = 0x00; //INPUT DDRE = 0x00; //INPUT DDRF = 0x00; //INPUT DDRG = 0x00; //INPUT
PORTA = 0xFF; //上拉电阻 PORTB = 0xFF; PORTC = 0xFF; PORTD = 0xFF; PORTE = 0xFF; PORTF = 0xFF; PORTG = 0xFF;
// DDRG |= BIT(RUN); //RUN // DDRB |= BIT(LED_WXCHCY); // DDRG |= BIT(LED_GPS); }
/**************************************************************/ //===========================================================// void main(viod) { init_uart0(); // init_uart1(); // init_timer0(); init_port(); MCUCR=0x00; TIMSK=0x00; TIMSK |= BIT(TOIE0); // SEI(); UDR0=Buf0[count]; while(1) {; } } |