#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
/*************************************************
UDR-USART I/O 数据寄存器
USART 控制和状态寄存器A RXC TXC UDRE FE DOR PE U2X MPCM
Bit 7 – RXC: USART 接收结束
Bit 6 – TXC: USART 发送结束
Bit 5 – UDRE: USART 数据寄存器空
Bit 4 – FE:帧错误
Bit 3 – DOR:数据溢出
Bit 2 – PE:奇偶校验错误
Bit 1 – U2X:倍速发送
Bit 0 – MPCM:多处理器通信模式
USART 控制和状态寄存器B RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8
Bit 7 – RXCIE:接收结束中断使能
Bit 6 – TXCIE:发送结束中断使能
Bit 5 – UDRIE: USART 数据寄存器空中断使能
Bit 4 – RXEN:接收使能
Bit 3 – TXEN:发送使能
Bit 2 – UCSZ2:字符长度
Bit 1 – RXB8:接收数据位8
Bit 0 – TXB8:发送数据位8
USART 控制和状态寄存器C URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL
Bit 7 – URSEL:寄存器选择
Bit 6 – UMSEL: USART 模式选择
Bit 5:4 – UPM1:0:奇偶校验模式
Bit 3 – USBS:停止位选择
Bit 2:1 – UCSZ1:0:字符长度
Bit 0 – UCPOL:时钟极性
USART 波特率寄存器-UBRRL和UBRRH
Bit 15 – URSEL:寄存器选择
**************************************************/
void uart_init()
{
UCSRA=0b11000010;//倍速发送
UCSRB=0b10011000;
UCSRC=0b10000110;
UBRRH=0x00;
UBRRL=0x33;
}
void main()
{
DDRB=0xff;
DDRC=0xff;
uart_init();
sei();
while(1)
{
;
// while( !(UCSRA & (1<<RXC)) ); //查询接收
// PORTB=UDR;
}
}
/*SIGNAL(SIG_UART_RECV)
{
char temp;
cli();
temp=UDR;
PORTB=temp;
PORTC=0x0f;
sei();
}
INTERRUPT(_cector_default)
{
PORTC=0x0a;
}*/
INTERRUPT(SIG_INTERRUPT0)
{
PORTB=1;PORTC=UDR;
}
INTERRUPT(SIG_INTERRUPT1)
{
PORTB=2;PORTC=UDR;
}
INTERRUPT(_VECTOR(3))
{
PORTB=3;PORTC=UDR;
}
INTERRUPT(_VECTOR(4))
{
PORTB=4;PORTC=UDR;
}
INTERRUPT(_VECTOR(5))
{
PORTB=5;PORTC=UDR;
}
INTERRUPT(_VECTOR(6))
{
PORTB=6;PORTC=UDR;
}
INTERRUPT(_VECTOR(7))
{
PORTB=7;PORTC=UDR;
}
INTERRUPT(_VECTOR(8))
{
PORTB=8;PORTC=UDR;
}
INTERRUPT(_VECTOR(9))
{
PORTB=9;PORTC=UDR;
}
INTERRUPT(_VECTOR(10))
{
PORTB=10;PORTC=UDR;
}
INTERRUPT(_VECTOR(11))
{
PORTB=11;PORTC=UDR;
}
INTERRUPT(_VECTOR(12))
{
PORTB=12;PORTC=UDR;
}
INTERRUPT(_VECTOR(13))
{
PORTB=13;PORTC=UDR;
}
INTERRUPT(_VECTOR(14))
{
PORTB=14;PORTC=UDR;
}
INTERRUPT(_VECTOR(15))
{
PORTB=15;PORTC=UDR;
}
INTERRUPT(_VECTOR(16))
{
PORTB=16;PORTC=UDR;
}
INTERRUPT(_VECTOR(17))
{
PORTB=17;PORTC=UDR;
}
INTERRUPT(_VECTOR(18))
{
PORTB=18;PORTC=UDR;
}