同样的程序,串口调试助手向下发0x55,在atmega128上就能正常接收,在at90can128里接收到的一直是0xFF,偶尔还不能引起中断。
调了半个星期了,毫无进展,还请各位帮忙看看。
开发平台为as7,串口设置代码如下
void record_gyro()
{
UCSR0B=0x00; //设置前关闭串口
UCSR0A=0x00; //单倍速模式
UCSR0C=(1<<UCSZ11)|(1<<UCSZ10); //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
UBRR0H=baud_h; //写波特率的值
UBRR0L=baud_l;
UCSR0B=0x90;
}
接收服务程序如下
ISR(USART0_RX_vect) //中断服务程序
{
Re_buf[counter_gyro]=UDR0; //将接收到的数据取出
if(counter_gyro==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头,跳过
counter_gyro++;
if(counter_gyro==8) //接收到8个数据
{
counter_gyro=0; //重新赋值,准备下一帧数据的接收
if(Re_buf[1]==0x53) //判断角度包包头
{
UCSR0B=0x00; //关闭接收陀螺仪数据
sign_gyro=1; //置位标志位
}
}
}
用mk2调试,每次都不能收到调试助手发的0x55信号,直接return出去。如果改成0xFF才往下走。
调试助手换了好几种,usb转ttl的也换过。同样的程序在mega上就能行,快崩溃了,。。 |