打印
[AVR单片机]

ATMEGA128与光学指纹模块通信的问题

[复制链接]
1572|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aoxiangzhe|  楼主 | 2013-6-4 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机发送命令过去模块始终不亮,也接受不到数据回来,不知道程序哪块有问题?
128的编程频率fps是用的16M不?
部分程序如下:
//初始化 UART 子程序
void UART_Init(void)
{    UCSR0B  =  0x00;     //设置波特率前关闭USART0
      UCSR0A  =  0x00;     //正常速率,Bit1为1则倍速发送
    UCSR0C  =  0x06;     //数据位为8位
    UBRR0L  =  0x10;     //波特率:57600 Bps   
      UBRR0H  =  0x00;     //  
      UCSR0B  =  0x98;     //接收使能,发送使能
}
//发送八位数据
void UART_Send_Byte( uchar ucData)
{  while(!(UCSR0A&(1<<UDRE0))); //等待缓冲区为空(UDRE0=1)
   UDR0 = ucData;
}

//接收八位数据
uchar  UART_Receive_Byte(void)
{  while(!(UCSR0A&(1<<RXC0)));//等待缓冲区有数据(RXC0=1)
   return UDR0;
}

int main()
{                PORTA=0XFF;
                  DDRA=0XFF;             //LED IO口设为输出

            PORTC=0XFF;
         DDRC=0XFF;             //数码管段选设为输出

            PORTF|=0X0E;
         DDRF |=0X0E;           //LED及数码管锁存IO口设为输出
         PORTF&=0xF9;           //锁存数据关闭数码管
       
         PORTD=0X07;            //3按键IO口
            DDRD=0Xf8;               //按键接口设为输入

            DDRE|=0x02;     //RXD  TXD
                  PORTE|=0x03;

  UART_Init();   
  
  while(1)
  { keyboard();}

}

相关帖子

沙发
aoxiangzhe|  楼主 | 2013-6-4 18:37 | 只看该作者
自顶一个,求解决问题啊

使用特权

评论回复
板凳
huangxz| | 2013-6-4 19:00 | 只看该作者
先测下波特率看对不对

使用特权

评论回复
地板
qin552011373| | 2013-6-4 20:59 | 只看该作者
没看到你发送在哪里

使用特权

评论回复
5
aoxiangzhe|  楼主 | 2013-6-4 21:30 | 只看该作者
qin552011373 发表于 2013-6-4 20:59
没看到你发送在哪里


放一个例子:
uchar FP_1[6];
uchar FP_2[6];
uchar FP_Pack_Head[6]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  //协议包头
uchar FP_Get_Img[6]=       {0x01,0x00,0x03,0x01,0x00,0x05};      //获得指纹图像

//获得指纹图像命令
void Cmd_Get_Img(void)
{   uchar i,j;
    for(i=0;i<6;i++) //发送包头与模块地址
    UART_Send_Byte(FP_Pack_Head);
    for(i=0;i<6;i++) //发送命令
    UART_Send_Byte(FP_Get_Img);
    for(i=0;i<6;i++)
    FP_1=UART_Receive_Byte();
        for(i=0;i<6;i++)
    FP_2=UART_Receive_Byte();
    j=FP_2[3];
   if (j==0x00)                //录入成功
     { PORTA&=0xf0;delayms(200);PORTA|=0xff;}
    else  { PORTA|=0xff; delayms(1000); }
}
这样,哪块的问题呢?

使用特权

评论回复
6
huangxz| | 2013-6-4 22:17 | 只看该作者
aoxiangzhe 发表于 2013-6-4 21:30
放一个例子:
uchar FP_1[6];
uchar FP_2[6];

UART_Send_Byte(FP_Pack_Head);
一直发送第一个的指针;P

使用特权

评论回复
7
aoxiangzhe|  楼主 | 2013-6-4 22:31 | 只看该作者
huangxz 发表于 2013-6-4 22:17
UART_Send_Byte(FP_Pack_Head);
一直发送第一个的指针

不明白
uchar FP_Pack_Head[6]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  //协议包头
uchar FP_Get_Img[6]=       {0x01,0x00,0x03,0x01,0x00,0x05};      //获得指纹图像
    for(i=0;i<6;i++) //发送包头与模块地址
    UART_Send_Byte(FP_Pack_Head);
第一个里面六个字节发完下面发FP_Get_Img内容
    for(i=0;i<6;i++) //发送命令
    UART_Send_Byte(FP_Get_Img);
不是这样吗

使用特权

评论回复
8
aoxiangzhe|  楼主 | 2013-6-4 22:39 | 只看该作者
huangxz 发表于 2013-6-4 22:17
UART_Send_Byte(FP_Pack_Head);
一直发送第一个的指针

刚我一时粘错了,  那个不是真正的问题
for循环内FP_Pack_Head后面都是一位一位的发
UART_Send_Byte(FP_Pack_Head );

for(i=0;i<6;i++) //发送包头与模块地址
    UART_Send_Byte(FP_Pack_Head );
    for(i=0;i<6;i++) //发送命令
    UART_Send_Byte(FP_Get_Img );
    for(i=0;i<6;i++)
    FP_1=UART_Receive_Byte( );
        for(i=0;i<6;i++)
    FP_2=UART_Receive_Byte( );

使用特权

评论回复
9
aoxiangzhe|  楼主 | 2013-6-4 22:43 | 只看该作者
huangxz 发表于 2013-6-4 22:17
UART_Send_Byte(FP_Pack_Head);
一直发送第一个的指针

怎么搞的,就是后面带[ i  ]的( 中括号里面放个i 的) , 一发表在帖子上它就自动消失了

使用特权

评论回复
10
huangxz| | 2013-6-4 22:58 | 只看该作者
aoxiangzhe 发表于 2013-6-4 22:43
怎么搞的,就是后面带[ i  ]的( 中括号里面放个i 的) , 一发表在帖子上它就自动消失了 ...

你用高级模式里面的代码功能就不会出现异常字符了,

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
qin552011373 + 10 很给力!
11
qin552011373| | 2013-6-5 09:30 | 只看该作者
huangxz 发表于 2013-6-4 22:58
你用高级模式里面的代码功能就不会出现异常字符了,

你很熟悉咯

使用特权

评论回复
12
huangxz| | 2013-6-5 09:47 | 只看该作者
qin552011373 发表于 2013-6-5 09:30
你很熟悉咯

:lol来坛子来多了,自然就熟悉了

使用特权

评论回复
13
aliang2007| | 2013-6-5 17:39 | 只看该作者
接收中断使能,但是你没有中断函数

使用特权

评论回复
14
aoxiangzhe|  楼主 | 2013-6-6 13:01 | 只看该作者
aliang2007 发表于 2013-6-5 17:39
接收中断使能,但是你没有中断函数

那怎么写,能给个例子吗?

使用特权

评论回复
15
aliang2007| | 2013-6-6 16:54 | 只看该作者
aoxiangzhe 发表于 2013-6-6 13:01
那怎么写,能给个例子吗?

初始化配置寄存器就不对,而且你用的是查询方式方式发送,要什么中断使能

使用特权

评论回复
16
aoxiangzhe|  楼主 | 2013-6-6 18:16 | 只看该作者
aliang2007 发表于 2013-6-6 16:54
初始化配置寄存器就不对,而且你用的是查询方式方式发送,要什么中断使能 ...

大哥说的对,那就把“UCSR0B  =  0x98;     //接收使能,发送使能”去掉对不

使用特权

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

本版积分规则

1

主题

8

帖子

0

粉丝