打印

新人求助!atmega16串口通信问题

[复制链接]
740|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小弟要做一个老人跌倒报警器,目前买到一个可以串口输出的模块,还有一个mega16的模块,以及一套51开发工具箱,遇到一个问题,mega16串口读不出模块的信号,电脑做上位机时模块正常,mega16的晶振我选择8m(模块的比特率9600),熔丝位配置好了,在图片里。程序附在下边#include<iom16v.h>
#include<macros.h>
unsigned char Re_buf[11],counter=0;
unsigned char sign;
#define fosc 8000000
#define baud 9600

       
#pragma interrupt_handler uart_rx_isr:12//iv_USART_RXC
void uart_rx_isr(void)
{ PORTB=0XFF;//此处是为了验证能进入中断
Re_buf[counter]=UDR;//不同单片机略有差异
if(counter==0&&Re_buf[0]!=0x55) return; //第 0 号数据不是帧头,跳过
counter++;
if(counter==11) //接收到 11 个数据
{
counter=0; //重新赋值,准备下一帧数据的接收
sign=1;
}
}
//****************************************************************************************
void uart_init(void)  //初始化COM0
{
     DDRD|=0x02;   
     DDRD&=0xfe;          //IO端口设置
     PORTD|=0x01;

     UCSRA=0x00;
     UCSRB=0x90;          //使能接收、接受中断,发送使能
     UCSRC=0x86;          //异步、无奇偶校验、8字符、1停止位
     UBRRL=25;
     UBRRH=0;
}
//********************************************************************************************
void main()
{
float angle[3],T;
uart_init();
DDRB=0XFF;
PORTB=0X00;
SEI();
while(1)
{
            if(sign)
          {
                             sign=0;
              if(Re_buf[0]==0x55)
                          {
                          if(Re_buf[1]==0x53)
                          {
                          angle[0]=(Re_buf[3]<<8|Re_buf[2])/32768.0*180;
                          angle[1]=(Re_buf[5]<<8|Re_buf[4])/32768.0*180;
                          angle[2]=(Re_buf[7]<<8|Re_buf[6])/32768.0*180;
                          }
                          }
                          if(angle[0]<=0)
                          {
                          }
          }
}
}


QQ图片20160413201722.png (31.83 KB )

QQ图片20160413201722.png

相关帖子

沙发
dirtwillfly| | 2016-4-13 20:59 | 只看该作者
用逻辑分析仪观察一下时序

使用特权

评论回复
板凳
不认真没资格输|  楼主 | 2016-4-13 21:46 | 只看该作者
dirtwillfly 发表于 2016-4-13 20:59
用逻辑分析仪观察一下时序

手边没有,明天去实验室借一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝