⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm.c

📁 用PICC开发的RC500的完整C源程序。单片机用PIC16f73。
💻 C
字号:
//comm.c
char CommCheckBCC(void)
{
unsigned char Len,i;
    BCC=0;
    i=0;
    Len=CommBuff[0];
    while(Len)
    {
        BCC^=CommBuff[i];
        i++;
        Len--;
    }
    if ((CommBuff[1]==0x50)&&(CommBuff[4]==0x52))
    {
        return 1;
    }
    if ((BCC!=CommBuff[i])||(CommBuff[0]!=(cRxCunt-1)))
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
void CommTxAnser(unsigned char Len,unsigned char Sta)
{
    unsigned char i;
    CommBuff[0]=Len;
    CommBuff[1]=Sta;
    BCC=0;
    i=0;
    Len--;
    while(Len)
    {
        clrwdt();
        while (!TRMT){;}
        TXREG=CommBuff[i];
        BCC^=CommBuff[i];
        i++;
        Len--;
    }
    BCC^=MyAddr;
    while (!TRMT){;}
    TXREG=MyAddr;
    while (!TRMT){;}
    TXREG=BCC;
    while (!TRMT){;}
   // LED_R_Flash(2,10);//通信正常,红灯闪2次,亮1s,灭1s
    LedHoldTmr=20;
    LEDcunt=1;
}

// 设置波特率,存储在0x10~0x11
unsigned SetBaud(unsigned char Mode)
{
    if (Mode==3)
    {
        Baud=35;//19200bps
    }
    else if(Mode==2)
    {
        Baud=71;//9600bps
    }
    else
    {
        return 0;
    }
    RCSTA=0;
    TXSTA=0;
    SPBRG=Baud;
//     Write24C32(E2Addr_Baud,1,&Baud);
    RCSTA=rxdsta_ini;          //串口初始化
    TXSTA=txdsta_ini;
    return 1;
}

// 设置通信地址,存储在0x12~0x13位置
// void SetCommAddr(unsigned char Addr)
// {
//     MyAddr=Addr;
//     PcdWriteE2(0x30,1,&MyAddr);
// }

void CommRx(void)
{
unsigned char i,Addr;
    Addr=CommBuff[cRxCunt-2];
    // 检查通信地址是否匹配//检查数据校验是否正确
//     if ((MyAddr==Addr)||(Addr==0))
    if (Addr==MyAddr)
    {
        if (CommCheckBCC())
        {
            switch(CommBuff[1])
            {
                case 0x50://设备复位
                    CommTxAnser(3,0);
                    while(1) {;}
                    break;
                case 0x52://波特率设定
                    CommTxAnser(3,0);
                    if (SetBaud(CommBuff[2]))
                    {
                        ;
                    }
                    else
                    {
                        CommTxAnser(3,0xff);
                    }
                    break;
//                 case 0x53://通信地址设定
//                     SetCommAddr(CharToHex(CommBuff[2],CommBuff[3]));
//                     CommTxAnser(4,0);
//                     while(1) {;}
//                     break;
                case 0x55://设备版本
                    CommBuff[2]='0';
                    CommBuff[3]='0';
                    CommBuff[4]='0';
                    CommBuff[5]='0';
                    CommBuff[6]='0';
                    CommBuff[7]='0';
                    CommBuff[8]='H';
                    CommBuff[9]='C';
                    CommBuff[10]='R';
                    CommBuff[11]='0';
                    CommBuff[12]='1';
                    CommBuff[13]='0';
                    CommBuff[14]='1';
                    CommBuff[15]='0';
                    CommBuff[16]='0';
                    CommBuff[17]='2';
                    CommTxAnser(0x13,0);
                    break;
                case 0x57://有效卡指示
                    BeepBeep(1,8);//蜂鸣器响一声短声
                    LED_R_Flash(1,5);//红灯闪1次0.5s,灭1s
                    CommTxAnser(3,0);
                    Flag.CardIn=0;
                    Snr_Temp[0]=0xff;
                    Snr_Temp[1]=0xff;
                    Snr_Temp[2]=0xff;
                    Snr_Temp[3]=0xff;
                    break;
                case 0x58://无效卡指示
                    BeepBeep(1,15);//蜂鸣器响一声长音
                    LED_R_Flash(2,5);//红灯闪2次,0.5s,灭0.5s
                    CommTxAnser(3,0);
                    break;
                case 0x88://获得卡号
                    if (Flag.CardIn)
                    {
                        CommBuff[2]='0';
                        CommBuff[3]='0';
                        CommBuff[4]='0';
                        CommBuff[5]='0';
                        CommBuff[6]='0';
                        CommBuff[7]='0';
                        CommBuff[8]='0';
                        CommBuff[9]='0';
                        CommBuff[10]=HexToChar((Snr_Temp[0]>>4)&0x0f);
                        CommBuff[11]=HexToChar(Snr_Temp[0]&0x0f);
                        CommBuff[12]=HexToChar((Snr_Temp[1]>>4)&0x0f);
                        CommBuff[13]=HexToChar(Snr_Temp[1]&0x0f);
                        CommBuff[14]=HexToChar((Snr_Temp[2]>>4)&0x0f);
                        CommBuff[15]=HexToChar(Snr_Temp[2]&0x0f);
                        CommBuff[16]=HexToChar((Snr_Temp[3]>>4)&0x0f);
                        CommBuff[17]=HexToChar(Snr_Temp[3]&0x0f);
                        CommTxAnser(0x13,0);
                        LED_R_Flash(1,10);//红灯闪1次,1s,灭1s
//                         Flag.CardIn=0;
//                         Snr_Temp[0]=0xff;
//                         Snr_Temp[1]=0xff;
//                         Snr_Temp[2]=0xff;
//                         Snr_Temp[3]=0xff;

                    }
                    else
                    {
                        CommTxAnser(3,0xf0);
                    }
                    break;
                default:
                        CommTxAnser(3,0xff);
                    break;
            }
            Sta.CommErr=0;
            tmrCommErr=0;
        }
        else
        {
            Sta.CommErr=1;
//             LED_R_Flash(2,5);//红灯闪2次,500ms,灭500ms
        }
    }
    else
    {
        Sta.CommErr=1;
    }

    cRxCunt=0;
    for (i=0;i<24;i++)
    {
        CommBuff[i]=0;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -