找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10711|回復(fù): 27
收起左側(cè)

as608與51單片機通信失敗原因,求大神

  [復(fù)制鏈接]
ID:497242 發(fā)表于 2019-4-16 23:21 | 顯示全部樓層 |閱讀模式
    這兩天在學(xué)習(xí)as608指紋模塊,商家送的例程正在研究學(xué)習(xí)。發(fā)現(xiàn)模塊通過串口與電腦上位機可以正常使用,增刪查指紋。但是與51單片機一直卡在單片機發(fā)送校對命令,不能成功接收返回的數(shù)據(jù)包。想了很久弄不明白什么問題,在這里請教大神。(個人考慮還是中斷不能成功進入導(dǎo)致的)
附上部分代碼:
  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. //發(fā)送指令
  10. void FPM10A_Cmd_Check(void)
  11. {
  12.         int i=0;
  13.         FPM10A_Cmd_Send_Pack_Head(); //發(fā)送通信協(xié)議包頭
  14.         for(i=0;i<10;i++)
  15.          {               
  16.                 Uart_Send_Byte(FPM10A_Get_Device[i]);
  17.           }
  18. }
  19. //接收反饋數(shù)據(jù)緩沖
  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;                                           //串口數(shù)組第九位可判斷是否通信正常
  30.                 LCD1602_Display(0xc0,"Loading",0,7);                   //設(shè)備加載中界面                                                           
  31.                 for(i=0;i<8;i++)                                                           //進度條式更新,看起來美觀
  32.                 {
  33.                         lcd_wdat(42);                               //42對應(yīng)ASIC碼的 *
  34.                         delay(200);                                                           //控制進度條速度
  35.                 }                                                                        
  36. //                LCD1602_Display(0xc0,"Docking  failure",0,16);      //液晶先顯示對接失敗,如果指紋模塊插對的話會將其覆蓋        


  37.                 FPM10A_Cmd_Check();                                                                        //單片機向指紋模塊發(fā)送校對命令
  38.                 [b]FPM10A_Receive_Data(12);[/b]                                                        //將串口接收到的數(shù)據(jù)轉(zhuǎn)存,不能成功接收數(shù)據(jù)
  39.                 LCD1602_Display(0xc0,"Docking  failure",0,16);

  40.                 if(FPM10A_RECEICE_BUFFER[9] == 13)                                        //判斷數(shù)據(jù)低第9位是否接收到0
  41.                 {
  42.                         LCD1602_Display(0xc0,"Docking  success",0,16);        //符合成功條件則顯示對接成功
  43.                 }                    
  44. }
復(fù)制代碼


另附上中斷程序:
  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波特率設(shè)置:FDFD,9600;FFFF,57600
  8.     TR1=1;         //允許T1計數(shù)
  9.     EA=1;
  10. }


  11. void Uart_Send_Byte(unsigned char c)//UART Send a byte
  12. {
  13.         SBUF = c;
  14.         while(!TI);                //發(fā)送完為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. }
復(fù)制代碼

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

回復(fù)

使用道具 舉報

ID:294657 發(fā)表于 2019-12-4 21:34 | 顯示全部樓層
我知道你的問題出現(xiàn)在哪里。。!
我也是玩指紋模塊,同樣的問題,折磨了我兩天了,就在剛剛解決了,剛好之前查百度看到有人在這里問,過來分享下。
具體情況是這樣的:使用上位機可以錄指紋,驗證指紋啥的,但是跑源碼就總是彈出錯誤,提示返回碼錯誤,用串口助手有時候有消息返回,有時候沒有,后來終于發(fā)現(xiàn)問題所在了,問題就在于使用上位機成功的那個波特率是自動檢測的,但是你程序里面的波特率是寫死了的,所以上位機不論哪個波特率都可以檢測到,但是程序就是不行,所以必須波特率對應(yīng)才行;修改方法,使用上位機查看出指紋模塊波特率,之后修改代碼里面的波特率;方法二在上位機上修改指紋模塊波特率為程序中的波特率,對應(yīng)上就行了

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 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波特率設(shè)置:FDFD,9600;FFFF,57600
    TR1=1;         //允許T1計數(shù)
        ET1 = 0;                //禁止定時器1中斷
    EA=1;
}
回復(fù)

使用道具 舉報

ID:514285 發(fā)表于 2019-4-17 09:53 | 顯示全部樓層
想要響應(yīng)串口中斷,先在初始化里加上串口中斷使能:ES    = 1;                  //打開串口中斷
回復(fù)

使用道具 舉報

ID:497242 發(fā)表于 2019-4-17 22:47 | 顯示全部樓層
caodaxia 發(fā)表于 2019-4-17 09:53
想要響應(yīng)串口中斷,先在初始化里加上串口中斷使能:ES    = 1;                  //打開串口中斷

加上這個以后整個程序就直接亂掉了,直接進到后面的部分了,握手還是沒有成功,上位機測試也沒有返回包
回復(fù)

使用道具 舉報

ID:497242 發(fā)表于 2019-4-17 22:48 | 顯示全部樓層
wulin 發(fā)表于 2019-4-17 06:21
void Uart_Init(void)
{
    SCON=0x50;   //UART方式1:8位UART;   REN=1:允許接收

這樣改啥意思啊,沒看懂這樣改的原因
回復(fù)

使用道具 舉報

ID:522554 發(fā)表于 2019-4-26 20:33 | 顯示全部樓層
樓主  請問你的問題解決了么?我也遇到了相同的問題
回復(fù)

使用道具 舉報

ID:354697 發(fā)表于 2019-5-13 13:11 | 顯示全部樓層
樓主解決了么,我也一直卡在這。
回復(fù)

使用道具 舉報

ID:445153 發(fā)表于 2019-5-17 01:54 | 顯示全部樓層
1.檢查晶振是否為11.0592M,12M晶振在使用9600波特率時會有誤差,導(dǎo)致數(shù)據(jù)發(fā)送錯誤,11.0592M晶振在波特率為9600到57600之間發(fā)送的數(shù)據(jù)都是準確的?梢允褂么谥诌M行調(diào)試,發(fā)送一個字節(jié)看發(fā)送的數(shù)據(jù)是否正確。
2.把AS608的波特率設(shè)置為9600,我也不知道為什么,我i這樣設(shè)置后就可以通信了。
回復(fù)

使用道具 舉報

ID:564892 發(fā)表于 2019-6-21 20:37 | 顯示全部樓層
Masrer 發(fā)表于 2019-4-26 20:33
樓主  請問你的問題解決了么?我也遇到了相同的問題

兄弟你這個問題解決了嗎,卡在這半天了
回復(fù)

使用道具 舉報

ID:632286 發(fā)表于 2019-11-6 16:56 | 顯示全部樓層
解決了嗎?求指教
回復(fù)

使用道具 舉報

ID:641226 發(fā)表于 2019-11-16 19:31 | 顯示全部樓層
樓主,這個問題你解決了嗎?我也遇到了
回復(fù)

使用道具 舉報

ID:294657 發(fā)表于 2019-12-4 21:26 | 顯示全部樓層
我知道你的問題可能出在哪里!。!我也是指紋模塊同樣的問題,折磨了我兩天,剛剛終于發(fā)現(xiàn)問題了,
回復(fù)

使用道具 舉報

ID:683881 發(fā)表于 2020-3-7 10:02 | 顯示全部樓層
一定要注意晶振 不然可能會出現(xiàn)缺位或者無法響應(yīng)  設(shè)置波特率為9600傳輸正常
回復(fù)

使用道具 舉報

ID:645983 發(fā)表于 2020-3-21 19:27 | 顯示全部樓層
az2152869 發(fā)表于 2019-5-17 01:54
1.檢查晶振是否為11.0592M,12M晶振在使用9600波特率時會有誤差,導(dǎo)致數(shù)據(jù)發(fā)送錯誤,11.0592M晶振在波特率 ...

設(shè)置成9600后直接就顯示模塊接入失敗了········
回復(fù)

使用道具 舉報

ID:645983 發(fā)表于 2020-3-22 16:32 | 顯示全部樓層
大魔王小張 發(fā)表于 2020-3-7 10:02
一定要注意晶振 不然可能會出現(xiàn)缺位或者無法響應(yīng)  設(shè)置波特率為9600傳輸正常

在普中單核的51開發(fā)板上,設(shè)置9600在最開始的時候校對模塊接入都直接顯示失敗了······按正常的56700,可以通信,但是指紋就是掃不出來。
回復(fù)

使用道具 舉報

ID:719116 發(fā)表于 2020-3-30 21:35 | 顯示全部樓層
樓主問題解決了嗎,我也遇到這個問題了,上位機測試沒問題,波特率也設(shè)置了9600,但是就是無法與單片機通信
回復(fù)

使用道具 舉報

ID:602576 發(fā)表于 2020-3-30 22:43 | 顯示全部樓層
1、確認單片機的晶振和你選用的波特率匹配,
2、注意通信協(xié)議中的奇偶校驗位,停止位,校驗和
回復(fù)

使用道具 舉報

ID:706454 發(fā)表于 2020-3-30 23:17 | 顯示全部樓層
戈戈登 發(fā)表于 2020-3-30 21:35
樓主問題解決了嗎,我也遇到這個問題了,上位機測試沒問題,波特率也設(shè)置了9600,但是就是無法與單片機通信

我的也是這樣
回復(fù)

使用道具 舉報

ID:718485 發(fā)表于 2020-5-3 21:39 來自觸屏版 | 顯示全部樓層
請問樓主這個問題解決了么?上位機測試、串口助手調(diào)試都正常,波特率也設(shè)置成9600,依然不能與單片機進行通信
回復(fù)

使用道具 舉報

ID:714012 發(fā)表于 2020-12-4 10:37 | 顯示全部樓層
HAYA 發(fā)表于 2020-5-3 21:39
請問樓主這個問題解決了么?上位機測試、串口助手調(diào)試都正常,波特率也設(shè)置成9600,依然不能與單片機進行通 ...

我也遇到了這個問題,請問你解決了嗎
回復(fù)

使用道具 舉報

ID:853787 發(fā)表于 2020-12-4 10:41 | 顯示全部樓層
超級無敵磊果果 發(fā)表于 2019-12-4 21:34
我知道你的問題出現(xiàn)在哪里!。。
我也是玩指紋模塊,同樣的問題,折磨了我兩天了,就在剛剛解決了,剛好 ...

獎勵40 個了 哦
回復(fù)

使用道具 舉報

ID:900239 發(fā)表于 2021-5-7 00:07 來自觸屏版 | 顯示全部樓層
hello_syl 發(fā)表于 2020-3-22 16:32
在普中單核的51開發(fā)板上,設(shè)置9600在最開始的時候校對模塊接入都直接顯示失敗了······按正常的5670 ...

請問您的問題解決了嗎?我指紋一直識別不出。和你的情況一樣
回復(fù)

使用道具 舉報

ID:396513 發(fā)表于 2022-12-27 19:23 | 顯示全部樓層
2022年了   這個問題我來回答    這百分百是你指紋模塊的波特率不是9600導(dǎo)致的  用上位機設(shè)置一下波特率就行了
回復(fù)

使用道具 舉報

ID:463392 發(fā)表于 2023-3-13 16:33 | 顯示全部樓層
清風(fēng)慕雨 發(fā)表于 2022-12-27 19:23
2022年了   這個問題我來回答    這百分百是你指紋模塊的波特率不是9600導(dǎo)致的  用上位機設(shè)置一下波特率就 ...

2023年,要怎么設(shè)置波特率
回復(fù)

使用道具 舉報

ID:1067133 發(fā)表于 2023-3-18 15:24 | 顯示全部樓層
鄭偉雄 發(fā)表于 2023-3-13 16:33
2023年,要怎么設(shè)置波特率

我也是一樣的問題,請問解決了嗎?
回復(fù)

使用道具 舉報

ID:1067133 發(fā)表于 2023-3-18 15:40 | 顯示全部樓層
az2152869 發(fā)表于 2019-5-17 01:54
1.檢查晶振是否為11.0592M,12M晶振在使用9600波特率時會有誤差,導(dǎo)致數(shù)據(jù)發(fā)送錯誤,11.0592M晶振在波特率 ...

AS608的默認的波特率是57600,請問怎么更改模塊的波特率?謝謝指點!
回復(fù)

使用道具 舉報

ID:1073993 發(fā)表于 2023-4-25 12:46 | 顯示全部樓層
請問您解決了嗎,我也出現(xiàn)這種問題了一直無法實現(xiàn)通信。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表