📄 main.c
字号:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include "type.h"
//#define F_CPU 11059200
#define BAUD 9600
/* ---------------------------------- */
//函数名称: void init_usart(void)
//功 能: 串口0初始化函数
//参 数: 无
//返回值 : 无
/*------------------------------------*/
void init_usart(void)
{
UBRR0H = (F_CPU /BAUD/16-1)/256;
UBRR0L = (F_CPU /BAUD/16-1)%256;
// UCSR0A |= (1 << RXC0);
UCSR0B |= (1 << RXEN0 )|(1 << TXEN0)|(1 << RXCIE0);
UCSR0C |= (1 << UCSZ01 )|(1 <<UCSZ00);//设置UCSZ0,8位字符长度
}
/* ---------------------------------- */
//函数名称: void send_char(uchar *data)
//功 能: 串口0发送字符串函数
//参 数: *data
//返回值 : 无
/*------------------------------------*/
void send_char(uchar *data)
{
while(*data)
{
while(!(UCSR0A&(1<<UDRE0)))//等待发送缓冲区为空
{
}
UDR0 = *data;
data ++;
}
}
/* ---------------------------------- */
//函数名称: void send_char_hex(uchar hex)
//功 能: 串口0发送十六进制数字函数
//参 数: hex
//返回值 : 无
/*------------------------------------*/
void send_char_hex(uchar hex)
{
while(!(UCSR0A&(1<<UDRE0)))//等待发送缓冲区为空
{
}
UDR0 = hex;
}
/* ---------------------------------- */
//函数名称: void receive_char_hex(void)
//功 能: 串口0接收十六进制数字函数
//参 数: 无
//返回值 : recv_data
/*------------------------------------*/
uchar receive_char_hex(void)
{
while(!(UCSR0A&(1<<RXC0)))//等待接收标志位置位
{
}
return UDR0;
}
/*
volatile uchar recv_data;
SIGNAL(SIG_UART_RECV)
{
recv_data = UDR0;
}
*/
//------------------------------------
//------------------------------------
int main(void)
{
uchar i;
LED_INIT();
cli(); //关全局中断
init_usart();//USART初始化
sei(); //开全局中断
// send_char("MY USART IS OK!");
// send_char_hex(0xff);
i = receive_char_hex();
send_char_hex(i);
while(1)
{
LED_SET(0x0a);//发送结束指示
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -