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