📄 main.lst
字号:
=3 // - see Chapter 14.
=3 //------------------------------------------------------------------
=3
=3 #define ERROR_SCH_TOO_MANY_TASKS (1)
=3 #define ERROR_SCH_CANNOT_DELETE_TASK (2)
=3
=3 #define ERROR_SCH_WAITING_FOR_SLAVE_TO_ACK (3)
=3 #define ERROR_SCH_WAITING_FOR_START_COMMAND_FROM_MASTER (3)
=3
=3 #define ERROR_SCH_ONE_OR_MORE_SLAVES_DID_NOT_START (4)
=3 #define ERROR_SCH_LOST_SLAVE (5)
=3
=3 #define ERROR_SCH_CAN_BUS_ERROR (6)
=3
=3 #define ERROR_I2C_WRITE_BYTE (10)
=3 #define ERROR_I2C_READ_BYTE (11)
=3 #define ERROR_I2C_WRITE_BYTE_AT24C64 (12)
=3 #define ERROR_I2C_READ_BYTE_AT24C64 (13)
=3 #define ERROR_I2C_DS1621 (14)
=3
=3 #define ERROR_USART_TI (21)
=3 #define ERROR_USART_WRITE_CHAR (22)
=3
=3 #define ERROR_SPI_EXCHANGE_BYTES_TIMEOUT (31)
=3 #define ERROR_SPI_X25_TIMEOUT (32)
=3 #define ERROR_SPI_MAX1110_TIMEOUT (33)
=3
=3 #define ERROR_ADC_MAX150_TIMEOUT (44)
=3
=3 #endif
115 =3
116 =3 /*------------------------------------------------------------------*-
117 =3 ---- END OF FILE -------------------------------------------------
118 =3 -*------------------------------------------------------------------*/
C51 COMPILER V7.06 MAIN 12/25/2007 19:33:30 PAGE 12
28 =2
29 =2 // ------ Public data type declarations ----------------------------
30 =2
31 =2 // Store in DATA area, if possible, for rapid access
32 =2 // Total memory per task is 7 bytes
33 =2 typedef data struct
34 =2 {
35 =2 // Pointer to the task (must be a 'void (void)' function)
36 =2 void (code * pTask)(void);
37 =2
38 =2 // Delay (ticks) until the function will (next) be run
39 =2 // - see SCH_Add_Task() for further details
40 =2 tWord Delay;
41 =2
42 =2 // Interval (ticks) between subsequent runs.
43 =2 // - see SCH_Add_Task() for further details
44 =2 tWord Period;
45 =2
46 =2 // Incremented (by scheduler) when task is due to execute
47 =2 tByte RunMe;
48 =2 } sTask;
49 =2
50 =2 // ------ Public function prototypes -------------------------------
51 =2
52 =2 // Core scheduler functions
53 =2 void SCH_Dispatch_Tasks(void);
54 =2 tByte SCH_Add_Task(void (code*) (void), const tWord, const tWord);
55 =2 bit SCH_Delete_Task(const tByte);
56 =2 void SCH_Report_Status(void);
57 =2
58 =2 // ------ Public constants -----------------------------------------
59 =2
60 =2 // The maximum number of tasks required at any one time
61 =2 // during the execution of the program
62 =2 //
63 =2 // MUST BE ADJUSTED FOR EACH NEW PROJECT
64 =2 #define SCH_MAX_TASKS (2)
65 =2
66 =2 #endif
67 =2
68 =2 /*------------------------------------------------------------------*-
69 =2 ---- END OF FILE -------------------------------------------------
70 =2 -*------------------------------------------------------------------*/
71 =2
26 =1
27 =1 // ------ Public function prototypes -------------------------------
28 =1
29 =1 void SCC_A_MASTER_Init_T2_CAN(void);
30 =1 void SCC_A_MASTER_Start(void);
31 =1
32 =1 // ------ Public constants -----------------------------------------
33 =1
34 =1 #define NUMBER_OF_SLAVES 1
35 =1
36 =1 // CAN #defines &c - mainly from Infineon DaVE output
37 =1
38 =1 // Control Register
39 =1 #define CAN_cr (*((tByte volatile xdata *) 0xF700))
40 =1
41 =1 // Status Register
42 =1 #define CAN_sr (*((tByte volatile xdata *) 0xF701))
43 =1
C51 COMPILER V7.06 MAIN 12/25/2007 19:33:30 PAGE 13
44 =1 // Bit Timing Register
45 =1 #define CAN_btr0 (*((tByte volatile xdata *) 0xF704))
46 =1 #define CAN_btr1 (*((tByte volatile xdata *) 0xF705))
47 =1
48 =1 // Global Mask Short
49 =1 #define CAN_gms0 (*((tByte volatile xdata *) 0xF706))
50 =1
51 =1 // Global Mask Short
52 =1 #define CAN_gms1 (*((tByte volatile xdata *) 0xF707))
53 =1
54 =1 // Upper Global Mask Long
55 =1 #define CAN_ugml0 (*((tByte volatile xdata *) 0xF708))
56 =1 #define CAN_ugml1 (*((tByte volatile xdata *) 0xF709))
57 =1
58 =1 // Lower Global Mask Long
59 =1 #define CAN_lgml0 (*((tByte volatile xdata *) 0xF70A))
60 =1 #define CAN_lgml1 (*((tByte volatile xdata *) 0xF70B))
61 =1
62 =1 // ------ Private data type declarations ---------------------------
63 =1
64 =1 // Data structure representing a single CAN message
65 =1 struct sCAN_message
66 =1 {
67 =1 tByte MCR0; // Message Control Register 0
68 =1 tByte MCR1; // Message Control Register 1
69 =1 tByte UAR0; // Upper Arbit. Reg. 0
70 =1 tByte UAR1; // Upper Arbit. Reg. 1
71 =1 tByte LAR0; // Lower Arbit. Reg. 0
72 =1 tByte LAR1; // Lower Arbit. Reg. 1
73 =1 tByte MCFG; // Message Configuration Register
74 =1 tByte Data[8]; // Message Data 0 .. 7
75 =1 tByte Customer; // Reserved for application specific data
76 =1 };
77 =1
78 =1 // ------ Private variables ----------------------------------------
79 =1
80 =1 // A total of 15 CAN message structures exist
81 =1 // (starting at at address 0xF710)
82 =1 #define CAN_messages ((struct sCAN_message volatile xdata *) 0xF710)
83 =1
84 =1 /*------------------------------------------------------------------*-
85 =1 ---- END OF FILE -------------------------------------------------
86 =1 -*------------------------------------------------------------------*/
87 =1
33 #include "TLight_B.h"
1 =1 /*------------------------------------------------------------------*-
2 =1
3 =1 TLight_B.H (v1.00)
4 =1
5 =1 ------------------------------------------------------------------
6 =1
7 =1 - See TLight_B.C for details.
8 =1
9 =1
10 =1 COPYRIGHT
11 =1 ---------
12 =1
13 =1 This code is from the book:
14 =1
15 =1 PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS by Michael J. Pont
16 =1 [Pearson Education, 2001; ISBN: 0-201-33138-1].
17 =1
C51 COMPILER V7.06 MAIN 12/25/2007 19:33:30 PAGE 14
18 =1 This code is copyright (c) 2001 by Michael J. Pont.
19 =1
20 =1 See book for copyright details and other information.
21 =1
22 =1 -*------------------------------------------------------------------*/
23 =1
24 =1 // ------ Public data type declarations ----------------------------
25 =1
26 =1 // Possible system states
27 =1 typedef
28 =1 enum {RED, RED_AMBER, GREEN, AMBER, BULB_BLOWN} eLight_State;
29 =1
30 =1
31 =1 // ------ Public constants -----------------------------------------
32 =1
33 =1 #define MASTER 1
34 =1 #define SLAVE 0
35 =1
36 =1 // ------ Public function prototypes -------------------------------
37 =1
38 =1 void TRAFFIC_LIGHTS_Init(void);
39 =1 void TRAFFIC_LIGHTS_Update(void);
40 =1
41 =1 void TRAFFIC_LIGHTS_Display_Safe_Output(void);
42 =1
43 =1 /*------------------------------------------------------------------*-
44 =1 ---- END OF FILE -------------------------------------------------
45 =1 -*------------------------------------------------------------------*/
34
35 /* ............................................................... */
36 /* ............................................................... */
37
38 void main(void)
39 {
40 1 // Prepare for the traffic light task
41 1 TRAFFIC_LIGHTS_Init();
42 1
43 1 // Set up the scheduler
44 1 SCC_A_MASTER_Init_T2_CAN();
45 1
46 1 // Set up the flash LED task
47 1 LED_Flash_Init();
48 1
49 1 // TIMING IS IN TICKS (6 ms tick interval)
50 1 // Add a 'flash LED' task (on for 1002 ms, off for 1002 ms)
51 1 SCH_Add_Task(LED_Flash_Update, 0, 167);
52 1
53 1 // Add the traffic-light task
54 1 SCH_Add_Task(TRAFFIC_LIGHTS_Update, 30, 167);
55 1
56 1 // Start the scheduler
57 1 SCC_A_MASTER_Start();
58 1
59 1 while(1)
60 1 {
61 2 SCH_Dispatch_Tasks();
62 2 }
63 1 }
64
65 /*------------------------------------------------------------------*-
66 ---- END OF FILE -------------------------------------------------
67 -*------------------------------------------------------------------*/
C51 COMPILER V7.06 MAIN 12/25/2007 19:33:30 PAGE 15
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION main (BEGIN)
; SOURCE LINE # 38
; SOURCE LINE # 39
; SOURCE LINE # 41
0000 120000 E LCALL TRAFFIC_LIGHTS_Init
; SOURCE LINE # 44
0003 120000 E LCALL SCC_A_MASTER_Init_T2_CAN
; SOURCE LINE # 47
0006 120000 E LCALL LED_Flash_Init
; SOURCE LINE # 51
0009 7E00 E MOV R6,#HIGH LED_Flash_Update
000B 7F00 E MOV R7,#LOW LED_Flash_Update
000D 7BA7 MOV R3,#0A7H
000F 7A00 MOV R2,#00H
0011 E4 CLR A
0012 FD MOV R5,A
0013 FC MOV R4,A
0014 120000 E LCALL _SCH_Add_Task
; SOURCE LINE # 54
0017 7E00 E MOV R6,#HIGH TRAFFIC_LIGHTS_Update
0019 7F00 E MOV R7,#LOW TRAFFIC_LIGHTS_Update
001B 7BA7 MOV R3,#0A7H
001D 7A00 MOV R2,#00H
001F 7D1E MOV R5,#01EH
0021 7C00 MOV R4,#00H
0023 120000 E LCALL _SCH_Add_Task
; SOURCE LINE # 57
0026 120000 E LCALL SCC_A_MASTER_Start
0029 ?C0001:
; SOURCE LINE # 59
; SOURCE LINE # 60
; SOURCE LINE # 61
0029 120000 E LCALL SCH_Dispatch_Tasks
; SOURCE LINE # 62
002C 80FB SJMP ?C0001
002E 22 RET
; FUNCTION main (END)
C51 COMPILER V7.06 MAIN 12/25/2007 19:33:30 PAGE 16
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
P4 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00E8H 1
tLong. . . . . . . . . . . . . . . . . TYPEDEF ----- U_LONG ----- 4
sTask. . . . . . . . . . . . . . . . . TYPEDEF DATA STRUCT ----- 7
pTask. . . . . . . . . . . . . . . . MEMBER ----- PTR 0000H 2
Delay. . . . . . . . . . . . . . . . MEMBER ----- U_INT 0002H 2
Period . . . . . . . . . . . . . . . MEMBER ----- U_INT 0004H 2
RunMe. . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0006H 1
BULB_BLOWN . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1
tByte. . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
IEN0 . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
IEN1 . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
sCAN_message . . . . . . . . . . . . . * TAG * ----- STRUCT ----- 16
MCR0 . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0000H 1
MCR1 . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0001H 1
UAR0 . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0002H 1
UAR1 . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0003H 1
LAR0 . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0004H 1
LAR1 . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0005H 1
MCFG . . . . . . . . . . . . . . . . MEMBER ----- U_CHAR 0006H 1
Data . . . . . . . . . . . . . . . . MEMBER ----- ARRAY 0007H 8
Customer . . . . . . . . . . . . . . MEMBER ----- U_CHAR 000FH 1
tWord. . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
ADCON0 . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D8H 1
SCC_A_MASTER_Start . . . . . . . . . . EXTERN CODE PROC ----- -----
LED_Flash_Init . . . . . . . . . . . . EXTERN CODE PROC ----- -----
_SCH_Add_Task. . . . . . . . . . . . . EXTERN CODE PROC ----- -----
RED_AMBER. . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
TRAFFIC_LIGHTS_Init. . . . . . . . . . EXTERN CODE PROC ----- -----
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
SCC_A_MASTER_Init_T2_CAN . . . . . . . EXTERN CODE PROC ----- -----
eLight_State . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
RED. . . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1
SCH_Dispatch_Tasks . . . . . . . . . . EXTERN CODE PROC ----- -----
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
AMBER. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1
LED_Flash_Update . . . . . . . . . . . EXTERN CODE PROC ----- -----
GREEN. . . . . . . . . . . . . . . . . E_CONST ----- U_CHAR ----- 1
TRAFFIC_LIGHTS_Update. . . . . . . . . EXTERN CODE PROC ----- -----
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
IRCON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 47 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -