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

📄 tlight_a.lst

📁 PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS by Michael J. Pont This code is copyright (c) 200
💻 LST
📖 第 1 页 / 共 4 页
字号:
  56          static eLight_State Light_state_G;
  57          
  58          // ------ Private function prototypes ------------------------------
  59          
  60          bit TRAFFIC_LIGHTS_Check_Local_Bulb(void);
  61          
  62          /*------------------------------------------------------------------*-
  63          
  64            TRAFFIC_LIGHTS_Init()
  65          
  66            Prepare for scheduling.
  67          
  68          -*-----------------------------------------------------------------*/
  69          void TRAFFIC_LIGHTS_Init(void)
  70             {
  71   1         // Master and slave must start in opposite states
  72   1         if (MASTER_SLAVE == MASTER)
  73   1            {
  74   2            Light_state_G = RED;
  75   2            }
  76   1         else
  77   1            {
  78   2            Light_state_G = GREEN;
  79   2            }
  80   1      
  81   1         // Display safe output until scheduler starts
  82   1         TRAFFIC_LIGHTS_Display_Safe_Output();
  83   1         }
  84          
  85          /*------------------------------------------------------------------*-
  86          
  87            TRAFFIC_LIGHTS_Update()
  88          
  89            Must be scheduled once per second.
  90          
  91          -*------------------------------------------------------------------*/
  92          void TRAFFIC_LIGHTS_Update(void)
  93             {
  94   1         static tWord Time_in_state;
  95   1      
  96   1         // Check for blown bulbs on this node
  97   1         TRAFFIC_LIGHTS_Check_Local_Bulb();
  98   1      
  99   1         // This is the main update code
 100   1         switch (Light_state_G)
 101   1            {
 102   2            case RED: 
 103   2               {
 104   3               Red_light = ON;
 105   3               Amber_light = OFF;
C51 COMPILER V6.10  TLIGHT_A                                                               04/18/2001 16:49:09 PAGE 10  

 106   3               Green_light = OFF;
 107   3      
 108   3               if (++Time_in_state == RED_DURATION)
 109   3                  {
 110   4                  Light_state_G = RED_AMBER;
 111   4                  Time_in_state = 0;
 112   4                  }
 113   3      
 114   3               break;
 115   3               }
 116   2      
 117   2            case RED_AMBER: 
 118   2               {
 119   3               Red_light = ON;
 120   3               Amber_light = ON;
 121   3               Green_light = OFF;
 122   3      
 123   3               if (++Time_in_state == RED_AND_AMBER_DURATION)
 124   3                  {
 125   4                  Light_state_G = GREEN;
 126   4                  Time_in_state = 0;
 127   4                  }
 128   3      
 129   3               break;
 130   3               }
 131   2      
 132   2            case GREEN: 
 133   2               {
 134   3               Red_light = OFF;
 135   3               Amber_light = OFF;
 136   3               Green_light = ON;
 137   3      
 138   3               if (++Time_in_state == GREEN_DURATION)
 139   3                  {
 140   4                  Light_state_G = AMBER;
 141   4                  Time_in_state = 0;
 142   4                  }
 143   3      
 144   3               break;
 145   3               }
 146   2      
 147   2            case AMBER: 
 148   2               {
 149   3               Red_light = OFF;
 150   3               Amber_light = ON;
 151   3               Green_light = OFF;
 152   3      
 153   3               if (++Time_in_state == AMBER_DURATION)
 154   3                  {
 155   4                  Light_state_G = RED;
 156   4                  Time_in_state = 0;
 157   4                  }
 158   3      
 159   3               break;
 160   3               }
 161   2      
 162   2            case BULB_BLOWN: 
 163   2               {
 164   3               // Blown bulb detected
 165   3               // Switch all bulbs off
 166   3               // (Drivers won't be happy, but it will be clear
 167   3               //  that something is wrong)
C51 COMPILER V6.10  TLIGHT_A                                                               04/18/2001 16:49:09 PAGE 11  

 168   3               Red_light = OFF;
 169   3               Amber_light = OFF;
 170   3               Green_light = OFF;
 171   3      
 172   3               // We remain in this state until state
 173   3               // is changed manually, or system is reset
 174   3               break;
 175   3               }
 176   2            }
 177   1         }
 178          
 179          /*------------------------------------------------------------------*-
 180          
 181            TRAFFIC_LIGHTS_Check_Local_Bulb()
 182          
 183            Check the status of the local bulbs (DUMMY FUNCTION HERE)
 184          
 185          -*------------------------------------------------------------------*/
 186          bit TRAFFIC_LIGHTS_Check_Local_Bulb(void)
 187              {
 188   1          // This dummy function confirms the bulbs are OK
 189   1          //
 190   1          // - See Chapter 32 for further info.
 191   1          return RETURN_NORMAL;
 192   1          }
 193          
 194          /*------------------------------------------------------------------*-
 195          
 196            TRAFFIC_LIGHTS_Display_Safe_Output()
 197          
 198            Used in the event of system failure, etc.
 199          
 200          -*------------------------------------------------------------------*/
 201          void TRAFFIC_LIGHTS_Display_Safe_Output(void)
 202             {
 203   1         if (TRAFFIC_LIGHTS_Check_Local_Bulb() == RETURN_NORMAL)
 204   1            {
 205   2            // Bulbs are OK 
 206   2            // - best thing to do is to display STOP
 207   2            Red_light = ON;
 208   2            Amber_light = OFF;
 209   2            Green_light = OFF;
 210   2            }
 211   1         else
 212   1            {
 213   2            // At least one bulb has blown 
 214   2            // - best thing we can do is extinguish all bulbs
 215   2            Red_light = OFF;
 216   2            Amber_light = OFF;
 217   2            Green_light = OFF;
 218   2            } 
 219   1         }
 220          
 221          /*------------------------------------------------------------------*-
 222            ---- END OF FILE -------------------------------------------------
 223          -*------------------------------------------------------------------*/
C51 COMPILER V6.10  TLIGHT_A                                                               04/18/2001 16:49:09 PAGE 12  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION TRAFFIC_LIGHTS_Init (BEGIN)
                                           ; SOURCE LINE # 69
                                           ; SOURCE LINE # 70
                                           ; SOURCE LINE # 72
                                           ; SOURCE LINE # 73
                                           ; SOURCE LINE # 74
0000 E4                CLR     A
0001 F500        R     MOV     Light_state_G,A
                                           ; SOURCE LINE # 75
                                           ; SOURCE LINE # 77
                                           ; SOURCE LINE # 78
                                           ; SOURCE LINE # 79
0003         ?C0002:
                                           ; SOURCE LINE # 82
0003 120000      R     LCALL   TRAFFIC_LIGHTS_Display_Safe_Outp
                                           ; SOURCE LINE # 83
0006 22                RET     
             ; FUNCTION TRAFFIC_LIGHTS_Init (END)

             ; FUNCTION TRAFFIC_LIGHTS_Update (BEGIN)
                                           ; SOURCE LINE # 92
                                           ; SOURCE LINE # 93
                                           ; SOURCE LINE # 97
0000 120000      R     LCALL   TRAFFIC_LIGHTS_Check_Local_Bulb
                                           ; SOURCE LINE # 100
0003 E500        R     MOV     A,Light_state_G
0005 14                DEC     A
0006 6029              JZ      ?C0007
0008 14                DEC     A
0009 6042              JZ      ?C0009
000B 14                DEC     A
000C 605B              JZ      ?C0011
000E 14                DEC     A
000F 6073              JZ      ?C0013
0011 2404              ADD     A,#04H
0013 7075              JNZ     ?C0014
                                           ; SOURCE LINE # 101
                                           ; SOURCE LINE # 102
0015         ?C0005:
                                           ; SOURCE LINE # 103
                                           ; SOURCE LINE # 104
0015 C2A0              CLR     Red_light
                                           ; SOURCE LINE # 105
0017 D2A1              SETB    Amber_light
                                           ; SOURCE LINE # 106
0019 D2A2              SETB    Green_light
                                           ; SOURCE LINE # 108
001B 0500        R     INC     Time_in_state+01H
001D E500        R     MOV     A,Time_in_state+01H
001F 7002              JNZ     ?C0019
0021 0500        R     INC     Time_in_state
0023         ?C0019:
0023 640A              XRL     A,#0AH
0025 4500        R     ORL     A,Time_in_state
0027 7061              JNZ     ?C0014
                                           ; SOURCE LINE # 109
                                           ; SOURCE LINE # 110
0029 750001      R     MOV     Light_state_G,#01H
                                           ; SOURCE LINE # 111
C51 COMPILER V6.10  TLIGHT_A                                                               04/18/2001 16:49:09 PAGE 13  

002C F500        R     MOV     Time_in_state,A
002E F500        R     MOV     Time_in_state+01H,A
                                           ; SOURCE LINE # 112
                                           ; SOURCE LINE # 114
0030 22                RET     
                                           ; SOURCE LINE # 115
                                           ; SOURCE LINE # 117
0031         ?C0007:
                                           ; SOURCE LINE # 118
                                           ; SOURCE LINE # 119
0031 C2A0              CLR     Red_light
                                           ; SOURCE LINE # 120
0033 C2A1              CLR     Amber_light
                                           ; SOURCE LINE # 121
0035 D2A2              SETB    Green_light
                                           ; SOURCE LINE # 123
0037 0500        R     INC     Time_in_state+01H
0039 E500        R     MOV     A,Time_in_state+01H
003B 7002              JNZ     ?C0020
003D 0500        R     INC     Time_in_state
003F         ?C0020:
003F 640A              XRL     A,#0AH
0041 4500        R     ORL     A,Time_in_state
0043 7045              JNZ     ?C0014
                                           ; SOURCE LINE # 124

⌨️ 快捷键说明

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