|
//***********************************************************************
// 包含文件
//***********************************************************************
#include <string.h>
#include <stdio.h>
#define F_CPU 16000000 // 單片機主頻為16MHz,用于延時子程序,熔絲位必須設置到外部高頻晶振才行
#include <util/delay.h>
#include <avr/io.h>
#include <avr/iom128.h>
#include <avr/interrupt.h> //中斷信號頭文件
#include "Config.h"
//***********************************************************************
// 定義變量區
//***********************************************************************
uint tx_count=200,tx_flag=0xff;
static uchar A1,A2,A3;
uchar usart_rx_data=0xff;
//***********************************************************************
// IO端口初始化
//***********************************************************************
void system_init()
{
LED = 0xFF; //數據口為輸出
LEDDDR=0xFF; //設置為輸出
}
//*************************************************************************
// 將收到的串口數據顯示到LED發光二極管,可以根據自己的情況更改
//*************************************************************************
void Display_Uart(uint Data_Rev)
{
LED = Data_Rev;
}
void usart_init()
{
UCSR0A=0x00; //單倍速模式
UCSR0B=0x98; //接收中斷允許,發送結束和寄存器空中斷關閉,采用查詢發送模式
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); //寫UCSRC寄存器,異步通信無校驗,8位數據1位停止位
UBRR0H=baud_h; //寫波特率的值
UBRR0L=baud_l;
}
//*************************************************************************
// 數據處理函數
//*************************************************************************
void data_do(uchar temp_d)
{
uchar A2t;
A1=temp_d/100; //分出百,十,和個位
A2t=temp_d%100;
A2=A2t/10;
A3=A2t%10;
}
//*************************************************************************
// 串口相關中斷服務子程序
//*************************************************************************
//數據發送結束中斷向量
ISR(USART0_TX_vect) //中斷服務程序
{
delay_ms(10); //相關操作
}
//數據接收結束中斷向量
ISR(USART0_RX_vect) //中斷服務程序
{
usart_rx_data=UDR0; //將接收到的數據取出
Send_SingleChar(usart_rx_data); //接收到的數據再發回電腦,顯示在串口調試助手上
}
//數據寄存器空中斷向量
void Send_SingleChar(uchar usart_tx_data)
{
while(!(UCSR0A&(1<<UDRE0))); //等待發送寄存器空
UDR0=usart_tx_data; //寫入發送數據
while(!(UCSR0A&(1<<TXC0))); //等待發送完畢
UCSR0A|=(1<<TXC0);
}
//*************************************************************************
// 主程序
//*************************************************************************
int main(void)
{
uchar i;
system_init(); //系統初始化
usart_init(); //usart串口初始化配置
for(i=1;i<=200;i++)
{
Send_SingleChar(i); //發送01到200
}
SREG|=0x80; //開啟全局中斷
while(1);
}
|
-
-
USART.zip
2019-7-25 14:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
111.76 KB, 下載次數: 9, 下載積分: 黑幣 -5
|