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

📄 mcom98.c

📁 关于与计算机超级终端通讯的小程序.(RS232)
💻 C
📖 第 1 页 / 共 2 页
字号:
//
#include "mb90540.h"
//
unsigned char       uart0_rl[64],uart0_tl[128];    //,*uart0_ra,*uart0_ta;
unsigned char       uart0_rc,uart0_tc,command_bak,rc0,tc0,e_rc;
unsigned int        uart0_time;
unsigned char       uart0_ttime,uart0_rtime,uart0_data;
unsigned int        uart0_pointer;
unsigned long int   uart0_address;
__far unsigned char *uart0_p;
extern unsigned int  eeprom_ram[128];
extern IO_BYTE  eep_in_count;

////////////////////////////////////////////////////////
unsigned char   uart0_hco[]={"\n\r"
                 "               使  用  说  明  \n\r"
                 "        [A]----循环显示某区数据。\n\r$"
                 "        [B]----显示并行通讯下行数据。\n\r"
                 "        [C]----显示某站遥测数据。\n\r$"
                 "        [D]----显示某地址的数据。\n\r"
                 "        [E]----字节显示修改内存。\n\r"
                 "        [F]----填充某数据区。\n\r$"
                 "        [G]----显示某站遥信屏蔽状态。\n\r"
                 "        [H]----帮助。\n\r"
                 "        [I]----字显示修改内存。\n\r$"
                 "        [R]----读串行EEPROM数据。\n\r"
                 "        [X]----清除串行EEPROM数据。\n\r"
                 "        [W]----写串行EEPROM数据。\n\r$$"
                            };
unsigned char   uart0_unxsq[]={"\n\r命令没发现$"};
unsigned char   uart0_eadr[]={"\n\r请输入地址:$"};
unsigned char   uart0_error[]={"\n\r命令格式错$"};
unsigned char   uart0_pass[]={"\n\r请输入口令:$"};
unsigned char   uart0_passerr[]={"\n\r口令错  $"};

void uart0_init (void);
void cl_ad1 (void);
void cl_enabletxd (void);

//UART1中断服务程序
//接收中断

__interrupt     void    irqsvruart0_rx(void)
{
    unsigned char i;
    if ((USR0_RDRF==1)&&(USR0_ORFE==0))
    {
        i=UIDR0;
        if (i>='a'&&i<='z') i=i-0x20;
        if (i=='\b')
        {
            if (rc0!=0)
            {
                rc0--;
                uart0_rc--;
                uart0_tl[0]='\b';
                uart0_tl[1]=' ';
                uart0_tl[2]='\b';
                tc0=0;
                uart0_tc=0x03;
                USR0_TIE=1;
            }
        }
        else
        {
            if (uart0_mark1_a4==0)
            {
                uart0_rl[rc0]=i;
                rc0++;
                uart0_rc++;
                UODR0=i;
            }
            else
            {
                if (((i>='0')&&(i<='9'))||((i>='A')&&(i<='F')))
                {
                    if ((uart0_mark2_a1!=1)||(uart0_rc<2))
                    {
                    uart0_rl[rc0]=i;
                    rc0++;
                    uart0_rc++;
                    UODR0=i;
                    }
                }
                else
                {
                    if ((i=='\r')||(i==' ')||(i=='-'))
                    {
                    uart0_rl[rc0]=i;
                    rc0++;
                    uart0_rc++;
                    }
                }
            }
        }
        if (uart0_rc>63)
        {
            rc0=0x00;
            uart0_rc=0x00;
        }
    }
    else
    {
        UMC0_RFC=0;
        rc0=0x00;
        uart0_rc=0x00;
    }
    uart0_rtime=0x00;
    uart0_time=0;
}

//发送中断

__interrupt     void    irqsvruart0_tx(void)
{
        if (USR0_TDRE==1)
        {
                if (uart0_tc!=0x00)
                {
                        UODR0=uart0_tl[tc0];
                        tc0++;
                        uart0_tc--;
                }
                else
                {
                        UMC0_RFC=0;
                        tc0=0;
                        uart0_tc=0;
                        USR0_TIE=0;
                        uart0_mark1_a0=0;
                }
    uart0_time=0;
    uart0_ttime=0;
        }
}

//UART1初始化

void    inituart0       (void)
{
        DDR4_D42=0;
        UMC0=0x19;
        URD0=0x0C;
        USR0=0x08;
        uart0_init();
}

void uart0_init (void)
{
        rc0=tc0=0x00;
        uart0_rc=uart0_tc=uart0_ttime=uart0_rtime=0x00;
        uart0_mark1=0x00;
        uart0_mark2=0x00;
        uart0_time=0x0000;
        e_rc=0x00;
}

void uart0_cltime (void)
{
    uart0_time++;
    uart0_rtime++;
    uart0_ttime++;
}

///////////////////////////////////////
//送显示

void cl_xsc (void)
{
    unsigned char i;

    i=*uart0_p;
    while (i!='$')
    {
        uart0_tl[tc0]=i;
        tc0++;
        *uart0_p++;
        uart0_tc++;
        i=*uart0_p;
    }
    *uart0_p++;
}

//送回车换行'>'

void cl_ad (void)
{
    uart0_tl[tc0]=0x0a;
    tc0++;
    uart0_tc++;
    uart0_tl[tc0]=0x0d;
    tc0++;
    uart0_tc++;
}
void cl_ad1 (void)
{
    uart0_tl[tc0]=0x0a;
    tc0++;
    uart0_tc++;
    uart0_tl[tc0]=0x0d;
    tc0++;
    uart0_tc++;
    uart0_tl[tc0]='>';
    tc0++;
    uart0_tc++;
}

//允许发送

void cl_enabletxd(void)
{
    tc0=rc0=0x00;
    uart0_rc=0;
    USR0_TIE=1;
    uart0_mark1_a0=1;
}

//送地址

void cl_xsdata_address(void)
{
    unsigned long int    i;

    i=uart0_address>>20;
    i=(i&0x0f)+'0';
    if (i>'9') i=i+7;
    uart0_tl[tc0]=i;
    tc0++;
    uart0_tc++;

    i=uart0_address>>16;
    i=(i&0x0f)+'0';
    if (i>'9') i=i+7;
    uart0_tl[tc0]=i;
    tc0++;
    uart0_tc++;

    i=uart0_address>>12;
    i=(i&0x0f)+'0';
    if (i>'9') i=i+7;
    uart0_tl[tc0]=i;
    tc0++;
    uart0_tc++;

    i=uart0_address>>8;
    i=(i&0x0f)+'0';
    if (i>'9') i=i+7;
    uart0_tl[tc0]=i;
    tc0++;
    uart0_tc++;

    i=uart0_address>>4;
    i=(i&0x0f)+'0';
    if (i>'9') i=i+7;
    uart0_tl[tc0]=i;
    tc0++;
    uart0_tc++;

    i=uart0_address;
    i=(i&0x0f)+'0';
    if (i>'9') i=i+7;
    uart0_tl[tc0]=i;
    tc0++;
    uart0_tc++;

    uart0_tl[tc0]=':';
    tc0++;
    uart0_tc++;

    uart0_tl[tc0]=' ';
    tc0++;
    uart0_tc++;

}

//送数据

void cl_dszc(void)
{
    unsigned char   l;

        l=*uart0_p;
        l>>=4;
        l=(l&0x0f)+'0';
        if (l>'9') l=l+0x07;
        uart0_tl[tc0]=l;
        tc0++;
        uart0_tc++;

        l=*uart0_p;
        l=(l&0x0f)+'0';
        if (l>'9') l=l+0x07;
        uart0_tl[tc0]=l;
        tc0++;
        uart0_tc++;

        uart0_tl[tc0]=' ';
        tc0++;
        uart0_tc++;

        *uart0_p++;
}

void cl_eszc(void)
{
    unsigned char   l;

        l=*uart0_p;
        l>>=4;
        l=(l&0x0f)+'0';
        if (l>'9') l=l+0x07;
        uart0_tl[tc0]=l;
        tc0++;
        uart0_tc++;

        l=*uart0_p;
        l=(l&0x0f)+'0';
        if (l>'9') l=l+0x07;
        uart0_tl[tc0]=l;
        tc0++;
        uart0_tc++;

        uart0_tl[tc0]='.';
        tc0++;
        uart0_tc++;
}

//清除串行EEPROM
void cl_clear_eeprom(void)
{
    IO_WORD i;

    for (i=0;i<4096;i++) systemconfig_para(i)=0xffff;
    eeprom_ram[eep_in_count++]=(unsigned int)&systemconfig_para(0);
    eeprom_ram[eep_in_count++]=256;
}

//输入地址处理

void cl_address(void)
{
    unsigned char       j,k;
    unsigned long int   l;

    l=0x0000;
    for (j=0;j<uart0_rc;j++)
    {
        switch (uart0_rl[j])
        {
            case ' ':
                if (uart0_mark1_a4==0)
                {
                    switch (uart0_mark1_a7)
                    {
                    case 0: uart0_mark1_a7=1;
                            uart0_address=l;
                            l=0x0000;
                            break;
                    case 1: if (uart0_mark1_a6==0)
                            {
                                uart0_mark1_a6=1;
                                uart0_pointer=l-uart0_address;
                                if (uart0_pointer>0x8000) uart0_pointer=0x0100;
                                l=0x0000;
                            }
                            else
                            {
                                uart0_mark1_a5=1;
                                return;
                            }
                    }
                }
                    break;
            case '\r':
                if (uart0_mark1_a4==0)
                {
                switch (uart0_mark1_a7)
                {
                    case 0:
                        uart0_pointer=0x100;
                        if (uart0_rc!=1) uart0_address=l;
                        break;
                    case 1: if (uart0_mark1_a6==1) uart0_data=l;
                        break;
                }
                uart0_p=(__far unsigned char *)uart0_address;
                return;
                }
                break;
            default :
                l=l<<4;
                if ((uart0_rl[j]>='0')&&(uart0_rl[j]<='9'))
                {
                    k=uart0_rl[j]-'0';
                    l=l|k;
                }
                else
                {
                    if ((uart0_rl[j]>='a')&&(uart0_rl[j]<='f'))
                    {
                        k=uart0_rl[j]-0x57;
                        l=l|k;
                    }
                    else

⌨️ 快捷键说明

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