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

📄 appli.c.bak

📁 压缩包中包括多个常用的汇编
💻 BAK
📖 第 1 页 / 共 3 页
字号:

                default:
                    break;
            }
            break;

        case MSG_GET_LIMIT:           /* 请求当前报警阈值   */

            send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
            send_buf[1] = ADDRESS[1]; /* 开发板地址 */
            send_buf[2] = 0x05;       /* 数据长度低字节 */
            send_buf[3] = 0x00;       /* 数据长度高字节 */
            send_buf[4] = 0x32;       /* 消息类型:报警阈值 */

            send_buf[5] = alarm_limit.temp_uthreshold;  /* 超低温度 */
            send_buf[6] = alarm_limit.temp_othreshold;  /* 超高温度 */
            send_buf[7] = alarm_limit.lumin_uthreshold; /* 超低光强 */
            send_buf[8] = alarm_limit.lumin_othreshold; /* 超高光强 */

            send_buf[9] = 0x03;

            crc_data = CalCRC16_1021(send_buf, 10);

            send_buf[10] = ( crc_data & 0x00ff );         /* 校验位低字节 */
            send_buf[11] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */

            com_send_command(SYN);    /* 发送数据 */
            com_send_command(SYN);
            com_send_command(STX);
            for (i=0; i<12; i++)
            {
                com_send_command(send_buf[i]);
            }
            break;

        case MSG_READ_DATE:           /* 读取日期消息处理   */

            send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
            send_buf[1] = ADDRESS[1]; /* 开发板地址 */
            send_buf[2] = 0x08;       /* 数据长度低字节 */
            send_buf[3] = 0x00;       /* 数据长度高字节 */
            send_buf[4] = 0x34;       /* 消息类型:时间数据 */
            for (i=0; i<7; i++)
            {
                send_buf[i+5] = date[i];  /* 时间数据7位:年,月,日,星期,时,分,秒*/
            }
            send_buf[12] = 0x03;

            crc_data = CalCRC16_1021(send_buf, 13);

            send_buf[13] = ( crc_data & 0x00ff );         /* 校验位低字节 */
            send_buf[14] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */

            com_send_command(SYN);    /* 发送数据 */
            com_send_command(SYN);
            com_send_command(STX);
            for (i=0; i<15; i++)
            {
                com_send_command(send_buf[i]);
            }
            break;

        case MSG_CUR_DATA :           /* 请求当前数据 */

            analog_in_data = adc_1549();

            send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
            send_buf[1] = ADDRESS[1]; /* 开发板地址 */
            send_buf[2] = 0x06;       /* 数据长度低字节 */
            send_buf[3] = 0x00;       /* 数据长度高字节 */
            send_buf[4] = 0x35;       /* 消息类型:当前数据 */

            send_buf[5] = cur_lumin;  /* 当前光强 */
            send_buf[6] = cur_temp;   /* 当前温度 */
            send_buf[7] = (analog_in_data & 0x00ff);          /* 模拟量输入低字节 */
            send_buf[8] = ( (analog_in_data >> 8) & 0x00ff ); /* 模拟量输入高字节 */

            if (SWITCH_IN)
                send_buf[9] = 0x00;     /* 当前开关量为1,断开 */
            else
                send_buf[9] = 0x01;     /* 当前开关量为0,闭合 */

            send_buf[10] = 0x03;

            crc_data = CalCRC16_1021(send_buf, 11);

            send_buf[11] = ( crc_data & 0x00ff );         /* 校验位低字节 */
            send_buf[12] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */

            com_send_command(SYN);    /* 发送数据 */
            com_send_command(SYN);
            com_send_command(STX);
            for (i=0; i<13; i++)
            {
                com_send_command(send_buf[i]);
            }
            break;

        case MSG_WATCHDOG :           /* 请求看门狗信息 */

            send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
            send_buf[1] = ADDRESS[1]; /* 开发板地址 */
            send_buf[2] = 0x08;       /* 数据长度低字节 */
            send_buf[3] = 0x00;       /* 数据长度高字节 */
            send_buf[4] = 0x36;       /* 消息类型:看门狗信息 */

            for (i=0; i<7; i++)
            {
                send_buf[i+5] = watchdog_date[i];  /* 看门狗数据7位:年,月,日,星期,时,分,秒*/
            }
            send_buf[12] = 0x03;

            crc_data = CalCRC16_1021(send_buf, 13);

            send_buf[13] = ( crc_data & 0x00ff );         /* 校验位低字节 */
            send_buf[14] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */

            com_send_command(SYN);    /* 发送数据 */
            com_send_command(SYN);
            com_send_command(STX);
            for (i=0; i<15; i++)
            {
                com_send_command(send_buf[i]);
            }
            break;

        case MSG_ALARM_STATE :        /* 请求报警情况 */

            send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
            send_buf[1] = ADDRESS[1]; /* 开发板地址 */
            send_buf[2] = 0x02;       /* 数据长度低字节 */
            send_buf[3] = 0x00;       /* 数据长度高字节 */
            send_buf[4] = 0x37;       /* 消息类型:报警状态 */

            send_buf[5] = 0x00;
            if (SWITCH_IN)
            {
                send_buf[5] |= 0x01;  /* 开关量输入为1 */
            }
            else
            {
                send_buf[5] &= 0xfe;  /* 开关量输入为0 */
            }


            if (cur_temp <= alarm_limit.lumin_uthreshold) /* 当前光强小于超低光强阈值 */
            {
                send_buf[5] |= 0x02;
            }
            else if (cur_temp >= alarm_limit.lumin_othreshold) /* 当前光强大于超高光强阈值 */
            {
                send_buf[5] |= 0x04;
            }
            else
            {
                send_buf[5] &= 0xf9;   /* 光强无报警 */
            }

            if (cur_temp <= alarm_limit.temp_uthreshold) /* 当前温度小于超低温度阈值 */
            {
                send_buf[5] |= 0x08;
            }
            else if (cur_temp >= alarm_limit.temp_othreshold) /* 当前温度大于超高温度阈值 */
            {
                send_buf[5] |= 0x10;
            }
            else
            {
                send_buf[5] &= 0xe7;   /* 温度无报警 */
            }

            send_buf[6] = 0x03;

            crc_data = CalCRC16_1021(send_buf, 7);

            send_buf[7] = ( crc_data & 0x00ff );         /* 校验位低字节 */
            send_buf[8] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */

            com_send_command(SYN);    /* 发送数据 */
            com_send_command(SYN);
            com_send_command(STX);
            for (i=0; i<9; i++)
            {
                com_send_command(send_buf[i]);
            }
            break;

        case MSG_GET_ADDRESS :        /* 请求设备地址 */

            send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
            send_buf[1] = ADDRESS[1]; /* 开发板地址 */
            send_buf[2] = 0x03;       /* 数据长度低字节 */
            send_buf[3] = 0x00;       /* 数据长度高字节 */
            send_buf[4] = 0x39;       /* 消息类型:设备地址 */

            send_buf[5] = ADDRESS[0]; /* 通讯组地址 */
            send_buf[6] = ADDRESS[1]; /* 开发板地址 */

            send_buf[7] = 0x03;

            crc_data = CalCRC16_1021(send_buf, 8);

            send_buf[8] = ( crc_data & 0x00ff );         /* 校验位低字节 */
            send_buf[9] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */

            com_send_command(SYN);    /* 发送数据 */
            com_send_command(SYN);
            com_send_command(STX);
            for (i=0; i<10; i++)
            {
                com_send_command(send_buf[i]);
            }
            break;

        case MSG_ACK:
            send_command(ACK);
            break;

        case MSG_NAK:
            send_command(NAK);
            break;

        default:
            break;
    }
}

/* 系统上电初始化 */
void system_init(void)
{
    u_char loop;

    EA = 0;           /* CPU关中断      */
    pint_read  = 0;   /* 串口中断读指针 */
    pint_write = 0;   /* 串口中断写指针 */
    msg_readp  = 0;   /* msg读指针      */
    msg_writep = 0;   /* msg写指针      */
    msg_number = 0;   /* 消息数         */
    prec_num=0;

    /* 初始化定时器变量 */
    for (loop=0; loop<MAX_TNUM; loop++)
    {
        timer_sign[loop]  = 0;    /* 定时标志 1:开始        */
        timer_type[loop]  = 0;    /* 定时类型 0:一般 1:循环 */
        timer_len[loop]   = 0;    /* 时长 100ms 的倍数      */
        timer_count[loop] = 0;    /* 定时计数               */
        timer_map[loop]   = loop;
        timer_id[loop] = 0;
    }
    timer_number = 0;
    timer_int = 0;
    int_times = 0;
    /* 初始化定时器变量结束 */

    SCON = 0x48;
    PCON = 0x80;
    TMOD = 0x21;
    TCON = 0x54;
    TH1  = 0xFD;    /* 波特率为19200  */
    TL1  = 0xFD;
    TR1  = 1;       /* 定时器1启动计数*/
    TH0 = -(46080 / 256);/* 定时50毫秒*/
    TL0 = -(46080 % 256);
    TR0  = 1;       /* 定时器0启动计数*/
    ES   = 1;       /* 串口开中断     */
    ET0  = 1;       /* 定时器0开中断  */
    PT0  = 1;       /* 定时器高优先级 */
    PS   = 0;       /* 串口低优先级   */
    REN  = 1;       /* 串口接收允许   */
    EX1  = 1;       /* 开外部中断1    */
    EA   = 1;       /* 开CPU中断      */

    loop = SBUF;    /* 清串口缓冲区   */
    for (loop=0; loop<MAX_RINTL; loop++)
    {
        pint_buf[loop] = 0;
    }
}

/* 查询是否有系统消息 */
u_char msg_get(void)
{
    if (msg_number != 0)
    {
        msg_nowtype  = msg_type[msg_readp];
        msg_nowvalue = msg_value[msg_readp];
        msg_readp = msg_readp + 1;

        if (msg_readp >= MAX_MSGNUM)
        {
            msg_readp=0;
        }

        msg_number = msg_number-1;
        return 1;
    }
    return 0;
}

main()
{
    u_char i = 0;
    system_init();
    lcd_init();
    show_title();
    WDI = ~WDI;            /* 喂狗 */
    
    sd2300_write_config();/* 写sd2300状态寄存器 */

    WDI = ~WDI;            /* 喂狗 */

    read_iic_data(ADDRESS, 0, 2); /* 读eeprom中的通讯组地址与开发板地址 */
    if (ADDRESS[0] == 0xFF)
    {
    	ADDRESS[0] = 0x01; /* 默认通讯组地址 */
    	ADDRESS[1] = 0x01; /* 默认开发板地址 */
    }

    sd2300_read_date();
    for (i=0; i<7; i++)
    {
        watchdog_date[i] = date[i];
    }

    WDI = ~WDI;            /* 喂狗 */

    set_timer(WD_TIMER_LEN, 0, T_WATCHDOG);
    set_timer(LUMIN_TIMER_LEN, 0, T_LUMIN);
    set_timer(QUERY_TIMER_LEN,0,T_SAMPLE);

    while(1)
    {
        message_loop();  /* 主消息循环 */
        if (msg_get())   /* 是否有消息 */
        {
            main_message_process();   /* 主消息处理子程序 */
        }
    }
}

⌨️ 快捷键说明

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