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

📄 mmi.lst

📁 《时间触发嵌入式系统设计模式》一书中的合作式调度器的算法
💻 LST
字号:
C51 COMPILER V8.08   MMI                                                                   10/02/2007 07:17:23 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MMI
OBJECT MODULE PLACED IN MMI.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MMI.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*--------------------------------------------------------------------*-
   2          
   3                  MMI.C (V1.00)
   4          
   5                   
   6          -*---------------------------------------------------------------------*/
   7          
   8          /*
   9           * Copyright (c) 2006,wsl
  10           * All rights reserved
  11           * 
  12           * 文件名称: MMI.C 
  13           * 文件标识: 
  14           * 摘    要: 人机接口
  15           * 
  16           * 当前版本: V1.0               * 取代版本:
  17           * 作     者: wsl            * 修     改:  
  18           * 版本信息: 2006-09-14         * 修改信息: 
  19           */
  20           //***********************************************************************
  21           
  22          #include"main.H"
  23          #include"Port.H"
  24          #include"MMI.h"
  25          #include"SCH51.H"
  26          #include"Uart.h"
  27          
  28          
  29          
  30          
  31          /*实时时间*/ 
  32          time_str now={17,56,50};
  33          
  34          alarm_str Ring[MAX_RING_NUMBER];
  35          /*打铃标记D0 ~ D7*/
  36          unsigned char RingIDRegister = 0;
  37          /*备份打铃标记,24小时后在时钟函数中恢复*/       
  38          unsigned char BackupRingID = 0;
  39          
  40          
  41          /*-----------------------------------------------------------------------*-
  42           * 函数名称: FLASH_LED()
  43           * 参    数: XX
  44           * 返    回: XX
  45           * 函数功能: 闪烁灯,作为系统指示
  46           *              
  47           * 说     明: 
  48           *
  49           * 当前版本: V1.0               * 取代版本:
  50           * 作     者: wsl            * 修     改:  
  51           * 版本信息: 2006-09-14         * 修改信息: 
  52          -*-----------------------------------------------------------------------*/
  53          void FLASH_LED(void)
  54          {
  55   1              D1 = ~D1;
C51 COMPILER V8.08   MMI                                                                   10/02/2007 07:17:23 PAGE 2   

  56   1      }
  57          
  58           /*-----------------------------------------------------------------------*-
  59           * 函数名称: OpenBuzzer()
  60           * 参    数: XX
  61           * 返    回: XX
  62           * 函数功能: 打开蜂鸣器
  63           *              
  64           * 说     明: 
  65           *
  66           * 当前版本: V1.0               * 取代版本:
  67           * 作     者: wsl            * 修     改:  
  68           * 版本信息: 2006-09-14         * 修改信息: 
  69          -*-----------------------------------------------------------------------*/
  70          void OpenBuzzer(void)
  71          {
  72   1              BUZZER = 0;
  73   1              D2 = 0;
  74   1      }
  75           /*-----------------------------------------------------------------------*-
  76           * 函数名称: CloseBuzzer()
  77           * 参    数: XX
  78           * 返    回: XX
  79           * 函数功能: 关闭蜂鸣器
  80           *              
  81           * 说     明: 
  82           *
  83           * 当前版本: V1.0               * 取代版本:
  84           * 作     者: wsl            * 修     改:  
  85           * 版本信息: 2006-09-14         * 修改信息: 
  86          -*-----------------------------------------------------------------------*/
  87          void CloseBuzzer(void)
  88          {
  89   1              BUZZER = 1;
  90   1              D2 = 1;
  91   1      }
  92           
  93           /*-----------------------------------------------------------------------*-
  94           * 函数名称: RTC_Soft_clock()
  95           * 参    数: XX
  96           * 返    回: XX
  97           * 函数功能: 走时时钟
  98           *              
  99           * 说     明: 
 100           *
 101           * 当前版本: V1.0               * 取代版本:
 102           * 作     者: wsl            * 修     改:  
 103           * 版本信息: 2006-09-14         * 修改信息: 
 104          -*-----------------------------------------------------------------------*/
 105          void RTC_Soft_clock(void)
 106          {
 107   1              now.sec++;      
 108   1              if (now.sec > 59)
 109   1              {
 110   2                      now.sec = 0;    /*一秒钟*/
 111   2                      now.min++;
 112   2                      if (now.min > 59)
 113   2                      {
 114   3                              now.min = 0;    /*一分钟*/
 115   3                              now.hour++;
 116   3      
 117   3                              if (now.hour > 23)
C51 COMPILER V8.08   MMI                                                                   10/02/2007 07:17:23 PAGE 3   

 118   3                              {
 119   4                                      now.hour = 0;   /*一小时*/
 120   4                                      RingIDRegister = BackupRingID;  /*恢复打铃点*/
 121   4                              }
 122   3                      }
 123   2              }
 124   1      }
 125           /*-----------------------------------------------------------------------*-
 126           * 函数名称: SetRing()
 127           * 参    数: 时,分和第几个打铃点
 128           * 返    回: 打铃点位数
 129           * 函数功能: 设置打铃点(最大8个)
 130           *              
 131           * 说     明: : 2005.6.2 by wangsw
 132           *
 133           * 当前版本: V1.0               * 取代版本:
 134           * 作     者: wsl            * 修     改:  
 135           * 版本信息: 2006-09-14         * 修改信息: 
 136          -*-----------------------------------------------------------------------*/
 137          #if 0
              unsigned char SetRing(const unsigned char hour, const unsigned char min)
              {
                      unsigned char i;
                      for (i=0; i<MAX_RING_NUMBER; i++)
                      {
                              if(!GETBIT(RingIDRegister, i))
                              {
                                      SETBIT(RingIDRegister, i);      /*设置打铃标记*/
                                      SETBIT(BackupRingID, i);        /*备份打铃标记*/
                                      Ring[i].hour = hour;
                                      Ring[i].min = min;
                                      return (i+1);   /*主要是C语言变量从0开始*/
                              }
                      }
                      // 否则返回错误
              }
              #endif
 155          unsigned char SetRing(const unsigned char hour, const unsigned char min, const unsigned char AlarmCnt)
 156          {
 157   1              if (AlarmCnt < MAX_RING_NUMBER)
 158   1              {
 159   2                      SETBIT(RingIDRegister, AlarmCnt);       /*设置打铃标记*/
 160   2                      SETBIT(BackupRingID, AlarmCnt); /*备份打铃标记*/
 161   2                      Ring[AlarmCnt].hour = hour;
 162   2                      Ring[AlarmCnt].min = min;
 163   2                      return (AlarmCnt);      /*主要是C语言变量从0开始*/
 164   2              }
 165   1      }
 166           /*-----------------------------------------------------------------------*-
 167           * 函数名称: RingStop()
 168           * 参    数: 打铃点
 169           * 返    回: XX
 170           * 函数功能: 删除打铃点(最大<8),但并不删除备份打铃标记
 171           *              
 172           * 说     明: : 2005.6.2 by wangsw
 173           *
 174           * 当前版本: V1.0               * 取代版本:
 175           * 作     者: wsl            * 修     改:  
 176           * 版本信息: 2006-09-14         * 修改信息: 
 177          -*-----------------------------------------------------------------------*/
 178          void RingStop(const unsigned char val)
 179          {
C51 COMPILER V8.08   MMI                                                                   10/02/2007 07:17:23 PAGE 4   

 180   1              if(val < MAX_RING_NUMBER)
 181   1              {
 182   2                      RESETBIT(RingIDRegister, val);
 183   2              }
 184   1              else
 185   1              {
 186   2              //      ERRprintf("RingStop\n");
 187   2              }
 188   1      }
 189           /*-----------------------------------------------------------------------*-
 190           * 函数名称: RingGetID()
 191           * 参    数: XX
 192           * 返    回: return ID
 193           * 函数功能: GetID(获取打铃点个数)
 194           *              
 195           * 说     明: : 2005.6.2 by wangsw
 196           *
 197           * 当前版本: V1.0               * 取代版本:
 198           * 作     者: wsl            * 修     改:  
 199           * 版本信息: 2006-09-14         * 修改信息: 
 200          -*-----------------------------------------------------------------------*/
 201          unsigned char RingGetID(void)
 202          {
 203   1              unsigned char i;
 204   1              for(i = 0; i < MAX_RING_NUMBER; i++)
 205   1              {
 206   2                      if(!GETBIT(RingIDRegister, i))
 207   2                      {
 208   3                              return(i);
 209   3                      }
 210   2              }
 211   1              
 212   1              return(0);
 213   1      }
 214           /*-----------------------------------------------------------------------*-
 215           * 函数名称: Ring_server()
 216           * 参    数: XX
 217           * 返    回: XX
 218           * 函数功能: 打铃服务程序
 219           *              
 220           * 说     明: : 2005.6.2 by wangsw
 221           *
 222           * 当前版本: V1.0               * 取代版本:
 223           * 作     者: wsl            * 修     改:  
 224           * 版本信息: 2006-09-14         * 修改信息: 
 225          -*-----------------------------------------------------------------------*/
 226          void Ring_server(void)
 227          {
 228   1              unsigned char i = 0;
 229   1              unsigned char hour, min;
 230   1              unsigned char RingIDRegisterMap;
 231   1              RingIDRegisterMap = RingIDRegister;
 232   1              
 233   1              while(RingIDRegisterMap)
 234   1              {
 235   2                      if((RingIDRegisterMap & 0x01) == 1)
 236   2                      {
 237   3                              hour = now.hour/10;
 238   3                              hour = (hour<<4) | (now.hour%10);
 239   3                              min  = now.min/10;
 240   3                              min  = (min<<4) | (now.min%10);
 241   3                              /*实时时间与设置的打铃点时间相同*/
C51 COMPILER V8.08   MMI                                                                   10/02/2007 07:17:23 PAGE 5   

 242   3                              if( (Ring[i].hour == hour) && (Ring[i].min == min) )
 243   3                              {
 244   4                                      OpenBuzzer();                                                   /*响铃*/
 245   4                                      SCH_Add_Task(CloseBuzzer, 12000, 0);    /*一分钟后关闭*/
 246   4                                      /*铃声响过后,在此删除此打铃点,24小时后从新恢复*/
 247   4                                      RingStop(i);                                                    
 248   4                              }
 249   3                      }
 250   2                      RingIDRegisterMap = RingIDRegisterMap >> 1;
 251   2                      i++;
 252   2              }
 253   1      }
 254          
 255          
 256          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    246    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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