📄 uart.c
字号:
/*******************************
内部RC 8 M Hz
*******************************/
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
///宏定义
#define uchar unsigned char
#define uint unsigned int
#define send_byte send_data
#define rec_byte rec_data
uchar rec_buff[8]={0};
uchar m=0,overflag=0;
uchar recive;
uchar flag=0;
void device_init(void)
{
DDRB =0XFF;
DDRC =0XFF;
DDRD =0XFF;
PORTD=0XFF;
PORTC=0XFF;
PORTB=0XFF;
}
void delay(uint t)
{
uchar i=0,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
/*****************************
串口传送
******************************/
void uart_trans(uchar send_data)
{
uint i=0;
i++;
while(!(UCSRA&(1<<UDRE)));
UDR=send_data;
if(i==3)
{PORTB=0XA0;}
}
/**********************************
串口中断接收
**********************************/
SIGNAL(SIG_UART_RECV)
{
uchar m=0,k=0,temp;
while(!(UCSRA)&(1<<RXC));
for(m=0;m<20;m++)
temp=UDR;
k++;
rec_buff[k]=temp;
recive=temp;
if(k==8) {overflag=1;}
PORTB=0Xaa;
flag=1;
}
void UART_init(void)
{
UBRRH=0; //先写高位寄存器 再写低位
UBRRL=51; //8MHz BAUD=9600 bps
UCSRB|=_BV(RXEN)|_BV(TXEN)|_BV(RXCIE); //接收 发送 接收中断使能
/* 设置帧格式: 8 个数据位, 2 个停止位*/
}
int main(void)
{
device_init();
UART_init();
sei();
delay(100);
uart_trans(0Xff);
PORTB=0XF0;
delay(100);
delay(100);
uart_trans(0Xff);
delay(100);
while(1)
{
if(flag==1)
{uart_trans(recive);flag=0;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -