//前略
//接收中断服务
#pragma interrupt_handler uart0_receive: iv_USART0_RX
void uart0_receive(void) {
unsigned char data;
UCSR0B = 0x00;
data = UDR0;
PORTA = data;
UCSR0B = 0x98;
while (!(UCSR0A & (1<<UDRE0)));
UDR0 = data;
}
void main(void) {
int count=0;
CLI();
io_init();
uart0_init();
SEI();
//没有数据传送的时候执行的程序,大约是隔一秒发出的一组方波脉冲↓
while (1) {
if(count==199)
{
PORTB &= (0 << PB7);
count=0;
delay_ms(999);
}
delay_ms(1);
PORTB ^= (1 << PB7);
count++;
}
}
目的是让串口接收到数据后改变PORTA的输出并原样返回一个数据,对PORTB输出不造成太大影响(也就是不会停滞很长时间)
测试的时候串口没送数的时候PORTB正常 但是串口送入数据后PORTB便停止了输出 而且PORTA的输出也没有改变。我怀疑是进了中断但没执行中断服务子程序,请问如何解决?
有可能是串口寄存器没有配置好。。追问
我觉得不是……因为在它前面的data = UDR0; PORTA = data;似乎都没有执行
追答那就是中断寄存器没有配置正确