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

📄 main.c

📁 时间触发式51单片机嵌入式多任务系统
💻 C
字号:
/*------------------------------------------------------------------*-

   Main.c (v1.01)

  ------------------------------------------------------------------

   Test program for menu-driven PC link library, generic version.

   Required linker options (see Chapter 14 for details):


   COPYRIGHT
   ---------

   This code is from the book:

   PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS by Michael J. Pont
   [Pearson Education, 2001; ISBN: 0-201-33138-1].

   This code is copyright (c) 2001 by Michael J. Pont.

   See book for copyright details and other information.

   编译参数:
   memory model: XDATA
   Code Rom Size: 64K
   BL51 Misc:
        OVERLAY (main ~ (IO_Update, AD_Update, Keypad_RS232_Update, LCD_Update, DEBUG_LED_RUN_update),
        hSCH_Dispatch_Tasks ! (IO_Update, AD_Update, Keypad_RS232_Update, LCD_Update, DEBUG_LED_RUN_update))

   定时器2作调度器,定时器1作波特率发生器
-*------------------------------------------------------------------*/
#include "../../public/includes.h"
#include "../../l/inc_l.h"
#include "../inc_a.h"


/* ............................................................... */
/* ............................................................... */


/*------------------------------------------------------------------*-

  System_Init()

  系统设备初始化

-*------------------------------------------------------------------*/
void System_Init(void)
{

    ALE_OFF(); // close ALE out

    delay(500);
    in_timerinit();
    IO_Init();
    Sio_Init();
    X25165_Init();
    watchdog_on();
    I2C_init();
    RTC_Init();

    Init_MruCode();
    Init_DauType();
    Time_RUN_Init();

    Pulse_Init();

    EX0 = 1;
    EX1 = 1;
}


/*------------------------------------------------------------------*-

  DEBUG_LED_RUN_update()

  LED闪烁(1s)

-*------------------------------------------------------------------*/
void DEBUG_LED_RUN_update(void)
{
    static bit bOut_run;
    static tByte bISP_wait = 0, bISP_EN = 0;
    static tByte ContDate = 0;

    // 看门狗处理
    Check_Watchdog();

    // 更新系统时间(10s刷新一次系统日期)
    if(ContDate == 0)
    {
       ContDate = 10;
       SysDate_Update();
    }
    else ContDate--;
    SysTime_Update();

    // LED闪烁控制
	bOut_run = ~bOut_run;
    IO_LED_PL(bOut_run);
    //IO_LED_Up(OFF);
    //IO_LED_Down(OFF);

    // 判断ISP
    if(Rec_PC_ISP_EN() == 0xaa)
    {
       if(bISP_EN == 0 && bISP_wait == 0)
       {
          bISP_EN = 0x55;
          bISP_wait = 0xaa;
       }
       else if(bISP_EN == 0x55 && bISP_wait == 0xaa)
       {
          bISP_EN = 0;
          bISP_wait = 0;
          Rec_PC_ISP_EN_clr();
          // 软复位到ISP区,开始ISP
          ISP_CONTR = B0110_0000;
       }
       else
       {
          bISP_EN = 0;
          bISP_wait = 0;
          Rec_PC_ISP_EN_clr();
       }
    }
}

/*------------------------------------------------------------------*-

  main()

  主程序

-*------------------------------------------------------------------*/
void main(void)
{

    // Init System value
    System_Init();

    // Set up the scheduler
    hSCH_Init();

    // Task ID = 0
    // 脉冲输入处理
    hSCH_Add_Task(mTASK_ID_Pulse_Update,         Pulse_Update,         100 / mFosc_Tick,  mPULSE_UPDATE_TIME / mFosc_Tick,1);

    // Task ID = 1
    // 上行通讯处理
    hSCH_Add_Task(mTASK_ID_UpTR_Update,          UpTR_Update,          150 / mFosc_Tick,  mUPTR_UPDATE_TIME / mFosc_Tick, 1);

    // Task ID = 2
    // 下行通讯处理
    hSCH_Add_Task(mTASK_ID_DownTR_Update,        DownTR_Update,        200 / mFosc_Tick,  mDOWNTR_UPDATE_TIME / mFosc_Tick, 1);

    // Task ID = 3
    // LED显示处理
    hSCH_Add_Task(mTASK_ID_IO_Update,            IO_Update,            250 / mFosc_Tick,  mIO_UPDATE_TIME / mFosc_Tick,   1);

    // Task ID = 4
    // 定时预抄处理
    hSCH_Add_Task(mTASK_ID_TIME_RUN_update,      Time_RUN_update,      300 / mFosc_Tick,  mTIME_UPDATE_TIME / mFosc_Tick,  1);

    // Task ID = 5
    // 测试系统LED
    hSCH_Add_Task(mTASK_ID_DEBUG_LED_RUN_update, DEBUG_LED_RUN_update, 50 / mFosc_Tick,   mLED_UPDATE_TIME / mFosc_Tick,  1);

    // 启动任务
    hSCH_Start();

    while(1)
    {
       // 切换任务(see hSch51.C)
       hSCH_Dispatch_Tasks();
	   // 进入休眠模式
	   hSCH_Go_To_Sleep();
    }

}

/*------------------------------------------------------------------*-
  ---- END OF FILE -------------------------------------------------
-*------------------------------------------------------------------*/

⌨️ 快捷键说明

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