找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9505|回复: 27
收起左侧

as608与51单片机通信失败原因,求大神

  [复制链接]
ID:497242 发表于 2019-4-16 23:21 | 显示全部楼层 |阅读模式
    这两天在学习as608指纹模块,商家送的例程正在研究学习。发现模块通过串口与电脑上位机可以正常使用,增删查指纹。但是与51单片机一直卡在单片机发送校对命令,不能成功接收返回的数据包。想了很久弄不明白什么问题,在这里请教大神。(个人考虑还是中断不能成功进入导致的)
附上部分代码:
  1. void FPM10A_Cmd_Send_Pack_Head(void)
  2. {
  3.         int i;        
  4.         for(i=0;i<6;i++) //包头
  5.    {
  6.      Uart_Send_Byte(FPM10A_Pack_Head[i]);   
  7.     }               
  8. }
  9. //发送指令
  10. void FPM10A_Cmd_Check(void)
  11. {
  12.         int i=0;
  13.         FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
  14.         for(i=0;i<10;i++)
  15.          {               
  16.                 Uart_Send_Byte(FPM10A_Get_Device[i]);
  17.           }
  18. }
  19. //接收反馈数据缓冲
  20. void FPM10A_Receive_Data(unsigned char ucLength)
  21. {
  22.   unsigned char i;

  23.   for (i=0;i<ucLength;i++)
  24.      FPM10A_RECEICE_BUFFER[i] = Uart_Receive_Byte();

  25. }



  26. void Device_Check(void)
  27. {
  28.                 unsigned char i=0,j,k,m;
  29.                 FPM10A_RECEICE_BUFFER[9]=1;                                           //串口数组第九位可判断是否通信正常
  30.                 LCD1602_Display(0xc0,"Loading",0,7);                   //设备加载中界面                                                           
  31.                 for(i=0;i<8;i++)                                                           //进度条式更新,看起来美观
  32.                 {
  33.                         lcd_wdat(42);                               //42对应ASIC码的 *
  34.                         delay(200);                                                           //控制进度条速度
  35.                 }                                                                        
  36. //                LCD1602_Display(0xc0,"Docking  failure",0,16);      //液晶先显示对接失败,如果指纹模块插对的话会将其覆盖        


  37.                 FPM10A_Cmd_Check();                                                                        //单片机向指纹模块发送校对命令
  38.                 [b]FPM10A_Receive_Data(12);[/b]                                                        //将串口接收到的数据转存,不能成功接收数据
  39.                 LCD1602_Display(0xc0,"Docking  failure",0,16);

  40.                 if(FPM10A_RECEICE_BUFFER[9] == 13)                                        //判断数据低第9位是否接收到0
  41.                 {
  42.                         LCD1602_Display(0xc0,"Docking  success",0,16);        //符合成功条件则显示对接成功
  43.                 }                    
  44. }
复制代码


另附上中断程序:
  1. void Uart_Init(void)
  2. {
  3.     SCON=0x50;   //UART方式1:8位UART;   REN=1:允许接收
  4.     PCON=0x00;   //SMOD=0:波特率不加倍
  5.     TMOD=0x20;   //T1方式2,用于UART波特率
  6.     TH1=0xFD;
  7.     TL1=0xFD;   //UART波特率设置:FDFD,9600;FFFF,57600
  8.     TR1=1;         //允许T1计数
  9.     EA=1;
  10. }


  11. void Uart_Send_Byte(unsigned char c)//UART Send a byte
  12. {
  13.         SBUF = c;
  14.         while(!TI);                //发送完为1
  15.         TI = 0;
  16. }

  17. unsigned char Uart_Receive_Byte()//UART Receive a byteg
  18. {        
  19.         unsigned char dat;
  20.         while(!RI);         //接收完为1
  21.         RI = 0;
  22.         dat = SBUF;
  23.         return (dat);
  24. }
复制代码

实在想不明白了,求大神指教一二。

回复

使用道具 举报

ID:294657 发表于 2019-12-4 21:34 | 显示全部楼层
我知道你的问题出现在哪里!!!!
我也是玩指纹模块,同样的问题,折磨了我两天了,就在刚刚解决了,刚好之前查百度看到有人在这里问,过来分享下。
具体情况是这样的:使用上位机可以录指纹,验证指纹啥的,但是跑源码就总是弹出错误,提示返回码错误,用串口助手有时候有消息返回,有时候没有,后来终于发现问题所在了,问题就在于使用上位机成功的那个波特率是自动检测的,但是你程序里面的波特率是写死了的,所以上位机不论哪个波特率都可以检测到,但是程序就是不行,所以必须波特率对应才行;修改方法,使用上位机查看出指纹模块波特率,之后修改代码里面的波特率;方法二在上位机上修改指纹模块波特率为程序中的波特率,对应上就行了

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2019-4-17 06:21 | 显示全部楼层
本帖最后由 wulin 于 2019-4-17 10:14 编辑

void Uart_Init(void)
{
    SCON=0x50;   //UART方式1:8位UART;   REN=1:允许接收
    PCON&=0x7F;   //SMOD=0:波特率不加倍
    TMOD=0x20;   //T1方式2,用于UART波特率
    TH1=0xFD;
    TL1=0xFD;   //UART波特率设置:FDFD,9600;FFFF,57600
    TR1=1;         //允许T1计数
        ET1 = 0;                //禁止定时器1中断
    EA=1;
}
回复

使用道具 举报

ID:514285 发表于 2019-4-17 09:53 | 显示全部楼层
想要响应串口中断,先在初始化里加上串口中断使能:ES    = 1;                  //打开串口中断
回复

使用道具 举报

ID:497242 发表于 2019-4-17 22:47 | 显示全部楼层
caodaxia 发表于 2019-4-17 09:53
想要响应串口中断,先在初始化里加上串口中断使能:ES    = 1;                  //打开串口中断

加上这个以后整个程序就直接乱掉了,直接进到后面的部分了,握手还是没有成功,上位机测试也没有返回包
回复

使用道具 举报

ID:497242 发表于 2019-4-17 22:48 | 显示全部楼层
wulin 发表于 2019-4-17 06:21
void Uart_Init(void)
{
    SCON=0x50;   //UART方式1:8位UART;   REN=1:允许接收

这样改啥意思啊,没看懂这样改的原因
回复

使用道具 举报

ID:522554 发表于 2019-4-26 20:33 | 显示全部楼层
楼主  请问你的问题解决了么?我也遇到了相同的问题
回复

使用道具 举报

ID:354697 发表于 2019-5-13 13:11 | 显示全部楼层
楼主解决了么,我也一直卡在这。
回复

使用道具 举报

ID:445153 发表于 2019-5-17 01:54 | 显示全部楼层
1.检查晶振是否为11.0592M,12M晶振在使用9600波特率时会有误差,导致数据发送错误,11.0592M晶振在波特率为9600到57600之间发送的数据都是准确的。可以使用串口助手进行调试,发送一个字节看发送的数据是否正确。
2.把AS608的波特率设置为9600,我也不知道为什么,我i这样设置后就可以通信了。
回复

使用道具 举报

ID:564892 发表于 2019-6-21 20:37 | 显示全部楼层
Masrer 发表于 2019-4-26 20:33
楼主  请问你的问题解决了么?我也遇到了相同的问题

兄弟你这个问题解决了吗,卡在这半天了
回复

使用道具 举报

ID:632286 发表于 2019-11-6 16:56 | 显示全部楼层
解决了吗?求指教
回复

使用道具 举报

ID:641226 发表于 2019-11-16 19:31 | 显示全部楼层
楼主,这个问题你解决了吗?我也遇到了
回复

使用道具 举报

ID:294657 发表于 2019-12-4 21:26 | 显示全部楼层
我知道你的问题可能出在哪里!!!!我也是指纹模块同样的问题,折磨了我两天,刚刚终于发现问题了,
回复

使用道具 举报

ID:683881 发表于 2020-3-7 10:02 | 显示全部楼层
一定要注意晶振 不然可能会出现缺位或者无法响应  设置波特率为9600传输正常
回复

使用道具 举报

ID:645983 发表于 2020-3-21 19:27 | 显示全部楼层
az2152869 发表于 2019-5-17 01:54
1.检查晶振是否为11.0592M,12M晶振在使用9600波特率时会有误差,导致数据发送错误,11.0592M晶振在波特率 ...

设置成9600后直接就显示模块接入失败了········
回复

使用道具 举报

ID:645983 发表于 2020-3-22 16:32 | 显示全部楼层
大魔王小张 发表于 2020-3-7 10:02
一定要注意晶振 不然可能会出现缺位或者无法响应  设置波特率为9600传输正常

在普中单核的51开发板上,设置9600在最开始的时候校对模块接入都直接显示失败了······按正常的56700,可以通信,但是指纹就是扫不出来。
回复

使用道具 举报

ID:719116 发表于 2020-3-30 21:35 | 显示全部楼层
楼主问题解决了吗,我也遇到这个问题了,上位机测试没问题,波特率也设置了9600,但是就是无法与单片机通信
回复

使用道具 举报

ID:602576 发表于 2020-3-30 22:43 | 显示全部楼层
1、确认单片机的晶振和你选用的波特率匹配,
2、注意通信协议中的奇偶校验位,停止位,校验和
回复

使用道具 举报

ID:706454 发表于 2020-3-30 23:17 | 显示全部楼层
戈戈登 发表于 2020-3-30 21:35
楼主问题解决了吗,我也遇到这个问题了,上位机测试没问题,波特率也设置了9600,但是就是无法与单片机通信

我的也是这样
回复

使用道具 举报

ID:718485 发表于 2020-5-3 21:39 来自手机 | 显示全部楼层
请问楼主这个问题解决了么?上位机测试、串口助手调试都正常,波特率也设置成9600,依然不能与单片机进行通信
回复

使用道具 举报

ID:714012 发表于 2020-12-4 10:37 | 显示全部楼层
HAYA 发表于 2020-5-3 21:39
请问楼主这个问题解决了么?上位机测试、串口助手调试都正常,波特率也设置成9600,依然不能与单片机进行通 ...

我也遇到了这个问题,请问你解决了吗
回复

使用道具 举报

ID:853787 发表于 2020-12-4 10:41 | 显示全部楼层
超级无敌磊果果 发表于 2019-12-4 21:34
我知道你的问题出现在哪里!!!!
我也是玩指纹模块,同样的问题,折磨了我两天了,就在刚刚解决了,刚好 ...

奖励40 个了 哦
回复

使用道具 举报

ID:900239 发表于 2021-5-7 00:07 来自手机 | 显示全部楼层
hello_syl 发表于 2020-3-22 16:32
在普中单核的51开发板上,设置9600在最开始的时候校对模块接入都直接显示失败了······按正常的5670 ...

请问您的问题解决了吗?我指纹一直识别不出。和你的情况一样
回复

使用道具 举报

ID:396513 发表于 2022-12-27 19:23 | 显示全部楼层
2022年了   这个问题我来回答    这百分百是你指纹模块的波特率不是9600导致的  用上位机设置一下波特率就行了
回复

使用道具 举报

ID:463392 发表于 2023-3-13 16:33 | 显示全部楼层
清风慕雨 发表于 2022-12-27 19:23
2022年了   这个问题我来回答    这百分百是你指纹模块的波特率不是9600导致的  用上位机设置一下波特率就 ...

2023年,要怎么设置波特率
回复

使用道具 举报

ID:1067133 发表于 2023-3-18 15:24 | 显示全部楼层
郑伟雄 发表于 2023-3-13 16:33
2023年,要怎么设置波特率

我也是一样的问题,请问解决了吗?
回复

使用道具 举报

ID:1067133 发表于 2023-3-18 15:40 | 显示全部楼层
az2152869 发表于 2019-5-17 01:54
1.检查晶振是否为11.0592M,12M晶振在使用9600波特率时会有误差,导致数据发送错误,11.0592M晶振在波特率 ...

AS608的默认的波特率是57600,请问怎么更改模块的波特率?谢谢指点!
回复

使用道具 举报

ID:1073993 发表于 2023-4-25 12:46 | 显示全部楼层
请问您解决了吗,我也出现这种问题了一直无法实现通信。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表