|
//***********************************************************************
// 包含文件
//***********************************************************************
#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
2019-7-25 14:02 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
111.76 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5
|