找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4360|回復(fù): 0
收起左側(cè)

DMAVR-L的USART串口發(fā)送與接收數(shù)據(jù)示例程序

[復(fù)制鏈接]
ID:559337 發(fā)表于 2019-7-25 14:02 | 顯示全部樓層 |閱讀模式
//***********************************************************************
//                        包含文件
//***********************************************************************

#include <string.h>
#include <stdio.h>
#define         F_CPU        16000000                // 單片機(jī)主頻為16MHz,用于延時(shí)子程序,熔絲位必須設(shè)置到外部高頻晶振才行
#include <util/delay.h>
#include <avr/io.h>
#include <avr/iom128.h>
#include <avr/interrupt.h>           //中斷信號(hào)頭文件
#include "Config.h"

//***********************************************************************
//                        定義變量區(qū)
//***********************************************************************
uint   tx_count=200,tx_flag=0xff;
static uchar A1,A2,A3;                                 
uchar usart_rx_data=0xff;


//***********************************************************************
//                        IO端口初始化
//***********************************************************************

void system_init()
{
    LED = 0xFF;                                 //數(shù)據(jù)口為輸出

    LEDDDR=0xFF;                                                //設(shè)置為輸出
}

//*************************************************************************
//   將收到的串口數(shù)據(jù)顯示到LED發(fā)光二極管,可以根據(jù)自己的情況更改
//*************************************************************************

void Display_Uart(uint Data_Rev)
{

        LED = Data_Rev;
}


void usart_init()
{
  UCSR0A=0x00;                                 //單倍速模式

  UCSR0B=0x98;                                 //接收中斷允許,發(fā)送結(jié)束和寄存器空中斷關(guān)閉,采用查詢發(fā)送模式                              

  UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);              //寫(xiě)UCSRC寄存器,異步通信無(wú)校驗(yàn),8位數(shù)據(jù)1位停止位

  UBRR0H=baud_h;                               //寫(xiě)波特率的值

  UBRR0L=baud_l;
}

//*************************************************************************
//                數(shù)據(jù)處理函數(shù)
//*************************************************************************
void data_do(uchar temp_d)
{
     uchar A2t;

         A1=temp_d/100;                                 //分出百,十,和個(gè)位

         A2t=temp_d%100;

         A2=A2t/10;

         A3=A2t%10;
}

//*************************************************************************
//                串口相關(guān)中斷服務(wù)子程序
//*************************************************************************
                                //數(shù)據(jù)發(fā)送結(jié)束中斷向量
ISR(USART0_TX_vect)             //中斷服務(wù)程序
{
   delay_ms(10);                            //相關(guān)操作
}

                                    //數(shù)據(jù)接收結(jié)束中斷向量
ISR(USART0_RX_vect)             //中斷服務(wù)程序
{
    usart_rx_data=UDR0;             //將接收到的數(shù)據(jù)取出
        Send_SingleChar(usart_rx_data); //接收到的數(shù)據(jù)再發(fā)回電腦,顯示在串口調(diào)試助手上
}
                                    //數(shù)據(jù)寄存器空中斷向量

void Send_SingleChar(uchar usart_tx_data)
{
        while(!(UCSR0A&(1<<UDRE0)));                //等待發(fā)送寄存器空

        UDR0=usart_tx_data;                                        //寫(xiě)入發(fā)送數(shù)據(jù)

        while(!(UCSR0A&(1<<TXC0)));                        //等待發(fā)送完畢

        UCSR0A|=(1<<TXC0);

}

//*************************************************************************
//                        主程序
//*************************************************************************
int main(void)
{
  uchar i;

  system_init();                             //系統(tǒng)初始化

  usart_init();                              //usart串口初始化配置

  for(i=1;i<=200;i++)
  {
          Send_SingleChar(i);                                                 //發(fā)送01到200
  }

  SREG|=0x80;                               //開(kāi)啟全局中斷

  while(1);

}

USART.zip

111.76 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表