|
//***********************************************************************
// 包含文件
//***********************************************************************
#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);
}
|
|