这两天在学习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);
- }
复制代码
实在想不明白了,求大神指教一二。
|