| 串口助手发送数据,mega16接收然后改变PORTA 问题表现为PORTA始终为初始化的值0xff,似乎不能发生中断
 若改用软件查询则可以实现预期效果
 
 
 #include <avr/io.h>
 #include <avr/delay.h>
 #include <avr/interrupt.h>
 volatile unsigned char flag_rxc;        //串口接收完成标志
 //接收完成中断服务程序
 ISR(USART_RXC_vect){
 flag_rxc = 1;                                        //置位接收完成标志等待主程序处理
 }
 //初始化
 void init(void){
 //IO口初始化
 DDRA  = 0xff;                        //PA输出0
 PORTA = 0x00;
 DDRC  = 0xff;                        //PC输出0
 PORTC = 0x00;
 DDRB  = 0x10;                        //PB7~5用于ISP,PB4输出0,PB3~1输入且上拉使能
 PORTB = 0x0f;
 DDRD  = 0x0c;                        //PD7~4输入且上拉使能,PD3~2输出0,PD1~0用于USART
 PORTD = 0xf0;
 //串口初始化
 //UCSRA:   RXC | TXC |UDRE | FE  | DOR | PE  | U2X |MPCM
 //UCSRB:  RXCIE|TXCIE|UDRIE|RXEN |TXEN |UCSZ2|RXB8 |TXB8
 //UCSRC:  URSEL|UMSEL|UPM1 |UPM0 |USBS |UCSZ1|UCSZ0|UCPOL
 UCSRB = 0x00;                        //禁止中断,禁止发送接收数据
 UCSRA = 0x00;                        //正常波特率,接收器正常接收
 UCSRC = 0x86;                        //异步模式,8位数据位,1位停止位,无效验位
 UBRRL = 0x47;                        //波特率9600
 UBRRH = 0x00;                        //115200:0x0003,19200:0x0017,9600:0x002f,4800:0x005f,2400:0x00bf
 UCSRB = 0x90;                        //允许RXC中断,允许接收
 sei();                                        //开全局中断
 }
 //
 int main(void){
 init();                                        //初始化
 PORTA=0xff;
 _delay_ms(1000);
 while(1){                                //主循环
 if(flag_rxc){
 PORTA=0x08;
 }
 }
 return 0;
 }
 
 |