打印
[Atmel]

atmega16串口通信问题

[复制链接]
1216|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小弟要做一个老人跌倒报警器,目前买到一个可以串口输出的模块,还有一个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 )

熔丝位设置

熔丝位设置

相关帖子

沙发
JY-DX-JY| | 2016-4-14 16:12 | 只看该作者
atmega16是和51通讯吗?

使用特权

评论回复
板凳
efen| | 2016-4-14 16:29 | 只看该作者
中断能进入不?中断里的全局变量改为volatile unsigned char

使用特权

评论回复
地板
一粒尘a_a| | 2016-4-15 09:10 | 只看该作者
楼主,建议你将模块和MAGE16的板子分别与PC通信。PC与前者是测试通信串,并记录下来可用的数据串;PC与后都通信,就要PC模拟前面得到的数据串与MAGE16通信。
通信这个东西,程序上的细节太多。反正我记不住,写完了就试,不对就改。呵呵

使用特权

评论回复
5
不认真没资格输|  楼主 | 2016-4-19 09:15 | 只看该作者
JY-DX-JY 发表于 2016-4-14 16:12
atmega16是和51通讯吗?

是mega16 和一个传感器通讯

使用特权

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

本版积分规则

2

主题

4

帖子

0

粉丝