Atmega128单片机串口中断程序无法正常执行

//前略
//接收中断服务
#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的输出也没有改变。我怀疑是进了中断但没执行中断服务子程序,请问如何解决?

第1个回答  2013-08-19
从你的情况来看,程序应该死在了 while (!(UCSR0A & (1<<UDRE0))); 这一行

有可能是串口寄存器没有配置好。。追问

我觉得不是……因为在它前面的data = UDR0; PORTA = data;似乎都没有执行

追答

那就是中断寄存器没有配置正确

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网