atmega128串口通信.rar

  • soll
    了解作者
  • C/C++
    开发工具
  • 3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 1
    下载次数
  • 2020-09-05 14:16
    上传日期
开发平台ICC FOR AVR,利用定时器超时来接收串口,并输出
atmega128串口通信.rar
  • atmega128串口通信
  • uart0.h
    900B
  • uart0.c
    2.8KB
  • main.c
    751B
  • timer0.h
    141B
  • timer0.c
    528B
内容介绍
#include "uart0.h" uchar uart0_rx_buf[UART0_RX_BUFFER_SIZE]={0};//串口接收缓冲区 uchar uart0_tx_buf[UART0_RX_BUFFER_SIZE]={0x00,0x01,0x00,0x01,0x00,0x01,0x01, 0x00,0x02,0x00};//串口发送缓冲区 volatile uint uart0_rx_size=0;//串口接收大小 volatile uchar uart0_rx_time=0;//串口超时完成 volatile uchar dynamic_diagram_flag=0;//1为标志采集功图数据 uchar dynamic_diagram_buf[BUFFER_SIZE]={0}; //****************清空缓冲区***************************** void UsartResetByffer(uchar *buf) { memset(buf, 0, strlen( buf)); } //****************发送一个字符****************************** void Usart0_SendByte(uchar i) { // while(!(UCSR0A&(1<<5/*UDRE0*/))); while (!(UCSR0A & (1 <<5))); // 等待发送寄存器空 UDR0 = i; // 发送数据 } /******************发送一个字符串*************************/ void Usart0_SendString(char *s) { while(*s) { Usart0_SendByte(*s); s++; } } /*********************发送一个字符串**********************/ void Usart0_SendStringArray(uchar *p,uchar len) { uchar i;TCCR0 =0; for(i=0;i<len;i++) //控制字符个数 { Usart0_SendByte(*p); p++; } TCCR0 =(1<<CS01) | (1<<CS00);//T0/C0 0000 0011======32分频 } /*****************串口初始化*********************************/ void Uart0_Init(void) { //UCSR0B = 0x00; UCSR0B =0x98;//(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0); UCSR0A = 0x00; UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop UBRR0H=0x00; UBRR0L=0x31; } /*********************中断发送服务处理子程序**************************/ /* #pragma interrupt_handler usart0_TX_interrupt:iv_USART0_TX // 21 void usart0_TX_interrupt(void) { _NOP(); UCSR0A |= (1<<6); //发送结束清零 } */ /****************中断接收服务处理子程序 //iv_USART0_RX // 19*******************************/ #pragma interrupt_handler usart0_RX_interrupt:iv_USART0_RX void usart0_RX_interrupt(void) { uchar data_temp; uchar status; // UCSR0B=0x00; //禁止发送和接收 data_temp = UDR0; //从数据缓冲器中接收数据 // UCSR0B=0xD8 ; //允许发送和接收,接收和发送结束中断使能 // status = UCSR0A; // if((status & 0x18) == 0x00) { if(uart0_rx_size >= UART0_RX_BUFFER_SIZE) uart0_rx_size = 0; uart0_rx_buf[uart0_rx_size] = data_temp; uart0_rx_size ++; uart0_rx_time=0; } } /***************************89013模块数据的处理***********************************/ void F89013D_Data(uchar *buf,uint size) { if(debug) Usart0_SendStringArray(buf, size); } /*********************串口接收完成处理函数*************************/ void Usart0_Handle(void) { if(uart0_rx_size && uart0_rx_time>=UART0_RX_TIMEOVER) { // Usart0_SendStringArray(uart0_rx_buf, uart0_rx_size); //判断数据 F89013D_Data(uart0_rx_buf,uart0_rx_size); uart0_rx_size=0; uart0_rx_time=0; UsartResetByffer(uart0_rx_buf); } }
评论
    相关推荐