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

📄 mcom98.c

📁 关于与计算机超级终端通讯的小程序.(RS232)
💻 C
📖 第 1 页 / 共 2 页
字号:
                    {
                        if ((uart0_rl[j]>='A')&&(uart0_rl[j]<='F'))
                        {
                            k=uart0_rl[j]-0x37;
                            l=l|k;
                        }
                        else
                        {
                            if (uart0_mark1_a4!=1)
                            {
                            uart0_mark1_a5=1;
                            return;
                            }
                        }
                    }
                }
                uart0_data=l;
        }
    }
}

//命令处理

void rx_cl_command(unsigned char i)
{
    unsigned char   k;
    unsigned int    l;

    tc0=0x00;
    uart0_tc=0x00;
    if (i>='a'&&i<='z') i=i-0x20;
    switch (i)
    {
        case 'D':           //D命令
            {
                if (uart0_mark2_a0!=1)
                {
                    uart0_mark1_a3=1;
                    uart0_mark2_a0=1;
                    uart0_p=(__far unsigned char*)&uart0_eadr[0];
                    cl_ad();
                    cl_xsc();
                    cl_enabletxd();
                }
                else
                {
                    if (uart0_mark1_a4==0)
                    {
                        if (uart0_rl[uart0_rc-1]=='\r')
                        {
                            cl_address();
                            if (uart0_mark1_a5==0)
                            {
                                uart0_mark1_a4=1;
                                cl_ad();
                                cl_ad();
                                cl_xsdata_address();
                                l=uart0_address&0x0f;
                                k=0x10;
                                if (l==0)
                                {
                                    if (uart0_pointer<0x10) k=uart0_pointer;
                                    uart0_pointer-=k;
                                    uart0_address+=k;
                                    while (k!=0)
                                    {
                                        k--;
                                        cl_dszc();
                                    }
                                }
                                else
                                {
                                    k=k-(unsigned char)l;
                                    while (l!=0)
                                    {
                                        uart0_tl[tc0]=' ';
                                        tc0++;
                                        uart0_tc++;
                                        uart0_tl[tc0]=' ';
                                        tc0++;
                                        uart0_tc++;
                                        uart0_tl[tc0]=' ';
                                        tc0++;
                                        uart0_tc++;
                                        l--;
                                    }
                                    uart0_pointer-=k;
                                    uart0_address+=k;
                                    while (k!=0)
                                    {
                                        cl_dszc();
                                        k--;
                                    }
                                }
                                cl_enabletxd();
                            }
                            else
                            {
                                uart0_p=(__far unsigned char*)&uart0_error[0];
                                cl_ad();
                                cl_ad();
                                cl_xsc();
                                cl_ad1();
                                uart0_mark2=uart0_mark3=0x00;
                                uart0_mark1=0x01;
                                cl_enabletxd();
                            }
                        }
                    }
                    else
                    {
                        k=0x10;
                        cl_ad();
                        cl_xsdata_address();
                        if (uart0_pointer<0x10) k=uart0_pointer;
                        uart0_address+=k;
                        uart0_pointer-=k;
                        while (k!=0)
                        {
                            k--;
                            cl_dszc();
                        }
                        if (uart0_pointer==0)
                        {
                            cl_ad1();
                            uart0_mark2=uart0_mark3=0x00;
                            uart0_mark1=0x01;
                        }
                        cl_enabletxd();
                    }
                }
                break;
            }
        case 'E':           //E命令
            {
                if (uart0_mark2_a1!=1)
                {
                    uart0_mark1_a3=1;
                    uart0_mark2_a1=1;
                    uart0_p=(__far unsigned char*)&uart0_eadr[0];
                    cl_ad();
                    cl_xsc();
                    cl_enabletxd();
                    e_rc=0x00;
                }
                else
                {
                    if (uart0_mark1_a4==0)
                    {
                        if (uart0_rl[uart0_rc-1]=='\r')
                        {
                            cl_address();
                            if (uart0_mark1_a5==0)
                            {
                                uart0_mark1_a4=1;
                                cl_ad();
                                cl_xsdata_address();
                                cl_eszc();
                                e_rc++;
                            }
                            else
                            {
                                uart0_p=(__far unsigned char*)&uart0_error[0];
                                cl_ad();
                                cl_xsc();
                                cl_ad1();
                                uart0_mark2=uart0_mark3=0x00;
                                uart0_mark1=0x01;
                            }
                            cl_enabletxd();
                        }
                    }
                    else
                    {
                        cl_address();
                        if (uart0_mark1_a5==0)
                        {
                        switch (uart0_rl[rc0-1])
                        {
                            case ' ':
                                if (uart0_rc!=1) *uart0_p=uart0_data;
                                *uart0_p++;
                                uart0_address++;
                                if (e_rc>7)
                                {
                                cl_ad();
                                cl_xsdata_address();
                                cl_eszc();
                                e_rc=0x01;
                                }
                                else
                                {
                                uart0_tl[tc0]='\t';
                                tc0++;
                                uart0_tc++;
                                cl_eszc();
                                e_rc++;
                                }
                                cl_enabletxd();
                                break;
                            case '\r':
                                if (uart0_rc!=1) *uart0_p=uart0_data;
                                cl_ad();
                                cl_ad1();
                                uart0_mark2=uart0_mark3=0x00;
                                uart0_mark1=0x01;
                                cl_enabletxd();
                                break;
                            case '-':
                                cl_ad();
                                uart0_address--;
                                *uart0_p--;
                                cl_xsdata_address();
                                cl_eszc();
                                e_rc=0x01;
                                cl_enabletxd();
                        }
                        }
                        else
                        {
                                uart0_p=(__far unsigned char*)&uart0_error[0];
                                cl_ad();
                                cl_xsc();
                                cl_ad1();
                                uart0_mark2=uart0_mark3=0x00;
                                uart0_mark1=0x01;
                                cl_enabletxd();
                        }
                    }
                }
                break;
            }
        case 'F':           //F命令
            {
                if (uart0_mark2_a2!=1)
                {
                    uart0_mark1_a3=1;
                    uart0_mark2_a2=1;
                    uart0_p=(__far unsigned char*)&uart0_eadr[0];
                    cl_ad();
                    cl_xsc();
                    cl_enabletxd();
                }
                else
                {
                    if (uart0_rl[uart0_rc-1]=='\r')
                    {
                        cl_address();
                        if ((uart0_mark1_a6==1)&&(uart0_mark1_a5==0))
                        {
                            cl_ad();
                            cl_ad1();
                            uart0_mark2=uart0_mark3=0x00;
                            uart0_mark1=0x01;
                            while (uart0_pointer)
                            {
                                *uart0_p=uart0_data;
                                *uart0_p++;
                                uart0_pointer--;
                            }
                        }
                        else
                        {
                            uart0_p=(__far unsigned char*)&uart0_error[0];
                            cl_ad();
                            cl_xsc();
                            cl_ad1();
                            uart0_mark2=uart0_mark3=0x00;
                            uart0_mark1=0x01;
                        }
                        cl_enabletxd();
                    }
                }
                break;
            }
        case 'H':           //H命令
            {
                if (uart0_mark2_a3!=1)
                {
                    uart0_mark1_a3=1;
                    uart0_mark2_a3=1;
                    uart0_p=(__far unsigned char*)&uart0_hco[0];
                    cl_ad();
                    cl_xsc();
                }
                else
                {
                    cl_xsc();
                    if (*uart0_p=='$')
                    {
                        cl_ad1();
                        uart0_mark2=uart0_mark1=0x00;
                    }
                }
                cl_enabletxd();
                break;
            }
        case 'X':           //X命令,清除串行EEPROM
            if (uart0_mark2_a4==0)
            {
                uart0_mark2_a4=1;
                uart0_mark1_a3=1;
                uart0_p=(__far unsigned char*)&uart0_pass[0];
                cl_ad();
                cl_xsc();
                cl_enabletxd();
            }
            else
            {
                if (uart0_rl[uart0_rc-1]='\r')
                {
                    if ((uart0_rl[0]=='E')&&(uart0_rl[1]=='A')&&(uart0_rl[2]=='R')&&(uart0_rl[3]=='\r'))
                    {
                        cl_clear_eeprom();
                        cl_ad();
                        cl_ad1();
                        uart0_mark2=uart0_mark3=0x00;
                        uart0_mark1=0x01;
                    }
                    else
                    {
                        uart0_p=(__far unsigned char*)&uart0_passerr[0];
                        cl_ad();
                        cl_xsc();
                        cl_ad1();
                        uart0_mark2=uart0_mark3=0x00;
                        uart0_mark1=0x01;
                    }
                    cl_enabletxd();
                }
            }
            break;
//        case 'A':           //A命令
//                uart0_mark2_a5=1;
//                break;
//        case 'C':           //C命令
//                uart0_mark2_a6=1;
//                break;
        default :
                if ((i==' ')||(i=='\r'))
                {
                    cl_ad1();
                    uart0_mark2=uart0_mark3=0x00;
                    uart0_mark1=0x01;
                }
                else
                {
                    uart0_p=(__far unsigned char*)&uart0_unxsq[0];
                    cl_ad();
                    cl_xsc();
                    cl_ad1();
                    uart0_mark2=uart0_mark3=0x00;
                    uart0_mark1=0x01;
                }
                cl_enabletxd();
    }
}

//接收处理

void rx_cl(void)
{
    unsigned char i;

    if (uart0_rtime>6)
    {
        if (uart0_mark1_a2!=1)
        {
            i=uart0_rl[0];
            command_bak=i;
            uart0_mark1_a2=1;
        }
        else i=command_bak;
        if (uart0_mark1_a0==0) rx_cl_command(i);
    }
}

//发送处理

void tx_cl(void)
{
}

//串口处理

void uart0_cl (void)
{
        if ((uart0_rc!=0x00)||(uart0_mark1_a3==1))
        {
            rx_cl();
            return;
        }
        if (uart0_mark1_a1==1)
        {
            tx_cl();
            return;
        }
/*        if (uart0_time>50000)
        {
            inituart0();
        }*/
}

⌨️ 快捷键说明

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