⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 avr m128 双串口通讯,实现数据的转发功能,晶振为11.0592MHz,波特率为96
💻 C
字号:

#include<avr/io.h>
#include <avr/interrupt.h> 


#define uchar unsigned char
#define uint unsigned int
#define baud 9600


void    put(uchar c);
uchar   get(void);

void    usart_init(void);

void    putstring(uchar *s);


uchar   temp;

int    main(void)
{
    cli();
    usart_init();
    sei();	
	//while(1)put(0xaa);
    while(1)asm("nop");
	return 0;
}

//***************************************
void    usart_init()
{

	UCSR0A=0X00;
    UCSR0B=((1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0)|(1<<TXCIE0));
    
	UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);
    UBRR0L=(F_CPU/16/baud-1)%256;
    UBRR0H=(F_CPU/16/baud-1)/256;
	
	UCSR1A=0X00;
    UCSR1B=((1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1)|(1<<TXCIE1));
    
	UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);
    UBRR1L=(F_CPU/16/baud-1)%256;
    UBRR1H=(F_CPU/16/baud-1)/256;
}
//***************************************

void   put(uchar c)
{
    while(!(UCSR0A&(1<<UDRE0)));
    UDR0=c;
	
}


//***************************************

void    putstring(uchar *s)
{
    while(*s)
    {
        put(*s);
        s++;
    }
    put(0x0a);
    put(0x0d);
}

//***************************************
uchar   get(void)
{
    while(!(UCSR0A&(1<<RXC0)));
        return UDR0;
}

SIGNAL(SIG_UART0_RECV)
{
    temp=UDR0;
	//put(temp);
	UDR1=temp;
	temp=0;
}

SIGNAL(SIG_UART0_TRANS)

{
    if(temp!=0)
    {
        UDR0=temp;   
    }
	temp=0;
}

SIGNAL(SIG_UART1_RECV)
{
    temp=UDR1;
	put(temp);
	temp=0;
}

SIGNAL(SIG_UART1_TRANS)

{
    if(temp!=0)
    {
        UDR1=temp;   
    }
	temp=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -