這兩天在學習as608指紋模塊,商家送的例程正在研究學習。發現模塊通過串口與電腦上位機可以正常使用,增刪查指紋。但是與51單片機一直卡在單片機發送校對命令,不能成功接收返回的數據包。想了很久弄不明白什么問題,在這里請教大神。(個人考慮還是中斷不能成功進入導致的)
附上部分代碼:
- void FPM10A_Cmd_Send_Pack_Head(void)
- {
- int i;
- for(i=0;i<6;i++) //包頭
- {
- Uart_Send_Byte(FPM10A_Pack_Head[i]);
- }
- }
- //發送指令
- void FPM10A_Cmd_Check(void)
- {
- int i=0;
- FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭
- for(i=0;i<10;i++)
- {
- Uart_Send_Byte(FPM10A_Get_Device[i]);
- }
- }
- //接收反饋數據緩沖
- void FPM10A_Receive_Data(unsigned char ucLength)
- {
- unsigned char i;
- for (i=0;i<ucLength;i++)
- FPM10A_RECEICE_BUFFER[i] = Uart_Receive_Byte();
- }
- void Device_Check(void)
- {
- unsigned char i=0,j,k,m;
- FPM10A_RECEICE_BUFFER[9]=1; //串口數組第九位可判斷是否通信正常
- LCD1602_Display(0xc0,"Loading",0,7); //設備加載中界面
- for(i=0;i<8;i++) //進度條式更新,看起來美觀
- {
- lcd_wdat(42); //42對應ASIC碼的 *
- delay(200); //控制進度條速度
- }
- // LCD1602_Display(0xc0,"Docking failure",0,16); //液晶先顯示對接失敗,如果指紋模塊插對的話會將其覆蓋
- FPM10A_Cmd_Check(); //單片機向指紋模塊發送校對命令
- [b]FPM10A_Receive_Data(12);[/b] //將串口接收到的數據轉存,不能成功接收數據
- LCD1602_Display(0xc0,"Docking failure",0,16);
- if(FPM10A_RECEICE_BUFFER[9] == 13) //判斷數據低第9位是否接收到0
- {
- LCD1602_Display(0xc0,"Docking success",0,16); //符合成功條件則顯示對接成功
- }
- }
復制代碼
另附上中斷程序:
- void Uart_Init(void)
- {
- SCON=0x50; //UART方式1:8位UART; REN=1:允許接收
- PCON=0x00; //SMOD=0:波特率不加倍
- TMOD=0x20; //T1方式2,用于UART波特率
- TH1=0xFD;
- TL1=0xFD; //UART波特率設置:FDFD,9600;FFFF,57600
- TR1=1; //允許T1計數
- EA=1;
- }
- void Uart_Send_Byte(unsigned char c)//UART Send a byte
- {
- SBUF = c;
- while(!TI); //發送完為1
- TI = 0;
- }
- unsigned char Uart_Receive_Byte()//UART Receive a byteg
- {
- unsigned char dat;
- while(!RI); //接收完為1
- RI = 0;
- dat = SBUF;
- return (dat);
- }
復制代碼
實在想不明白了,求大神指教一二。
|