📄 project.lst
字号:
0111 01F0 MOVW R30,R0
0112 E782 LDI R24,0x72
0113 E090 LDI R25,0
0114 0FE8 ADD R30,R24
0115 1FF9 ADC R31,R25
0116 2422 CLR R2
0117 2433 CLR R3
0118 8231 STD Z+1,R3
0119 8220 STD Z+0,R2
(0108) OS_Event_Post(bTemp,0);
011A 2722 CLR R18
011B 2733 CLR R19
011C 2F04 MOV R16,R20
011D DF83 RCALL _OS_Event_Post
011E 9543 INC R20
011F 3044 CPI R20,4
0120 F408 BCC 0x0122
0121 CFCD RJMP 0x00EF
(0109) }
(0110) }
(0111) }
0122 940E03D9 CALL pop_gset1
0124 9508 RET
(0112)
(0113) //******************************************************************************
(0114) // Function : OS_Init
(0115) // Input : none
(0116) // Output : none
(0117) // Description : Initlization of TCBs
(0118) //******************************************************************************
(0119) void OS_Init(void)
(0120) {
(0121) INT8U bTemp;
(0122) for(bTemp = 0;bTemp < cMaxTask;bTemp++)
_OS_Init:
bTemp --> R16
0125 2700 CLR R16
0126 C01E RJMP 0x0145
(0123) {
(0124) OSTCB[bTemp].wTimerPeriod = 0;
0127 E086 LDI R24,6
0128 9F80 MUL R24,R16
0129 01F0 MOVW R30,R0
012A E780 LDI R24,0x70
012B E090 LDI R25,0
012C 0FE8 ADD R30,R24
012D 1FF9 ADC R31,R25
012E 2422 CLR R2
012F 2433 CLR R3
0130 8231 STD Z+1,R3
0131 8220 STD Z+0,R2
(0125) OSTCB[bTemp].wTimerCount = 0;
0132 E086 LDI R24,6
0133 9F80 MUL R24,R16
0134 01F0 MOVW R30,R0
0135 E782 LDI R24,0x72
0136 E090 LDI R25,0
0137 0FE8 ADD R30,R24
0138 1FF9 ADC R31,R25
0139 8231 STD Z+1,R3
013A 8220 STD Z+0,R2
(0126) OSTCB[bTemp].wEvent = 0;
013B E086 LDI R24,6
013C 9F80 MUL R24,R16
013D 01F0 MOVW R30,R0
013E E784 LDI R24,0x74
013F E090 LDI R25,0
0140 0FE8 ADD R30,R24
0141 1FF9 ADC R31,R25
0142 8231 STD Z+1,R3
0143 8220 STD Z+0,R2
0144 9503 INC R16
0145 3004 CPI R16,4
0146 F300 BCS 0x0127
(0127) }
(0128) }
0147 9508 RET
(0129)
(0130) //******************************************************************************
(0131) // Function : OS_Start
(0132) // Input : none
(0133) // Output : none
(0134) // Description : Initlization of tasks and Start Kernel
(0135) //******************************************************************************
(0136) void OS_Start(void)
(0137) {
(0138) Task_Init();
_OS_Start:
0148 940E03CF CALL _Task_Init
(0139) Task_Start();
(0140) }
014A 940C03C8 JMP _Task_Start
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\多任务模拟系统设计\main.c
(0001) //***************************************************************
(0002) // File Name : main.c
(0003) // Author : Steaven
(0004) // Created : 2008-06-09
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "app.h"
(0010)
(0011) void main(void)
(0012) {
(0013) //hardware initialization
(0014) Hardware_Init();
_main:
014C 940E0053 CALL _Hardware_Init
(0015) //os initialization
(0016) OS_Init();
014E 940E0125 CALL _OS_Init
(0017) //create task
(0018) OS_Task_Create(cPrioTask1,cKernel_1S);
0150 E624 LDI R18,0x64
0151 E030 LDI R19,0
0152 2700 CLR R16
0153 940E00BB CALL _OS_Task_Create
(0019) OS_Task_Create(cPrioTask2,cKernel_2S);
0155 EC28 LDI R18,0xC8
0156 E030 LDI R19,0
0157 E001 LDI R16,1
0158 940E00BB CALL _OS_Task_Create
(0020) OS_Task_Create(cPrioTask3,cKernel_5S);
015A EF24 LDI R18,0xF4
015B E031 LDI R19,1
015C E002 LDI R16,2
015D 940E00BB CALL _OS_Task_Create
(0021) OS_Task_Create(cPrioTask4,cKernel_10S);
015F EE28 LDI R18,0xE8
0160 E033 LDI R19,3
0161 E003 LDI R16,3
0162 940E00BB CALL _OS_Task_Create
(0022) //os start
(0023) OS_Start();
(0024) }
0164 940C0148 JMP _OS_Start
_LED_OFF:
Index --> R20
0166 940E03D6 CALL push_gset1
0168 2F40 MOV R20,R16
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\多任务模拟系统设计\misc.c
(0001) //******************************************************************************
(0002) // File Name : Gpio.c
(0003) // Author : Steaven
(0004) // Created : 2008-06-09
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //******************************************************************************
(0008)
(0009) #include "app.h"
(0010)
(0011) //local function(s) declaration
(0012) INT16U swGet_Key1(void);
(0013) INT16U swGet_Key2(void);
(0014) INT16U swGet_Key3(void);
(0015) INT16U swGet_Key4(void);
(0016)
(0017) //***************************************************************
(0018) // Function : LED_OFF
(0019) // Input : Index - LED Index,from 1 to 4
(0020) // Output : none
(0021) // Description : Turn off specific LED indexed by Index variable
(0022) //***************************************************************
(0023) void LED_OFF(INT8U Index)
(0024) {
(0025) PORTD |= (1 << Index);
0169 E001 LDI R16,1
016A 2F14 MOV R17,R20
016B 940E0426 CALL lsl8
016D B222 IN R2,0x12
016E 2A20 OR R2,R16
016F BA22 OUT 0x12,R2
(0026) }
0170 940E03D9 CALL pop_gset1
0172 9508 RET
_LED_ON:
Index --> R20
0173 940E03D6 CALL push_gset1
0175 2F40 MOV R20,R16
(0027)
(0028) //***************************************************************
(0029) // Function : LED_ON
(0030) // Input : Index - LED Index,from 1 to 4
(0031) // Output : none
(0032) // Description : Turn on specific LED indexed by Index variable
(0033) //***************************************************************
(0034) void LED_ON(INT8U Index)
(0035) {
(0036) PORTD &= ~(1 << Index);
0176 E001 LDI R16,1
0177 2F14 MOV R17,R20
0178 940E0426 CALL lsl8
017A 2E20 MOV R2,R16
017B 9420 COM R2
017C B232 IN R3,0x12
017D 2032 AND R3,R2
017E BA32 OUT 0x12,R3
(0037) }
017F 940E03D9 CALL pop_gset1
0181 9508 RET
_LED_TOGGLE:
Index --> R20
0182 940E03D6 CALL push_gset1
0184 2F40 MOV R20,R16
(0038)
(0039) //***************************************************************
(0040) // Function : LED_ON
(0041) // Input : Index - LED Index,from 1 to 4
(0042) // Output : none
(0043) // Description : Turn on specific LED indexed by Index variable
(0044) //***************************************************************
(0045) void LED_TOGGLE(INT8U Index)
(0046) {
(0047) static INT8U bLED1_Status = cOFF_Status;
(0048) static INT8U bLED2_Status = cOFF_Status;
(0049) static INT8U bLED3_Status = cOFF_Status;
(0050) static INT8U bLED4_Status = cOFF_Status;
(0051) switch(Index)
0185 2755 CLR R21
0186 3044 CPI R20,4
0187 E0E0 LDI R30,0
0188 075E CPC R21,R30
0189 F071 BEQ 0x0198
018A 3045 CPI R20,5
018B E0E0 LDI R30,0
018C 075E CPC R21,R30
018D F101 BEQ 0x01AE
018E 3046 CPI R20,6
018F E0E0 LDI R30,0
0190 075E CPC R21,R30
0191 F189 BEQ 0x01C3
0192 3047 CPI R20,7
0193 E0E0 LDI R30,0
0194 075E CPC R21,R30
0195 F409 BNE 0x0197
0196 C041 RJMP 0x01D8
0197 C054 RJMP 0x01EC
(0052) {
(0053) case cLED1 :
(0054) {
(0055) if(bLED1_Status == cOFF_Status)
0198 90200060 LDS R2,0x60
019A 2022 TST R2
019B F431 BNE 0x01A2
(0056) {
(0057) LED_ON(cLED1);
019C E004 LDI R16,4
019D DFD5 RCALL _LED_ON
(0058) bLED1_Status = cON_Status;
019E E081 LDI R24,1
019F 93800060 STS 0x60,R24
(0059) }
01A1 C04A RJMP 0x01EC
(0060) else if(bLED1_Status = cON_Status)
01A2 E081 LDI R24,1
01A3 93800060 STS 0x60,R24
01A5 2388 TST R24
01A6 F409 BNE 0x01A8
01A7 C044 RJMP 0x01EC
(0061) {
(0062) LED_OFF(cLED1);
01A8 E004 LDI R16,4
01A9 DFBC RCALL _LED_OFF
(0063) bLED1_Status = cOFF_Status;
01AA 2422 CLR R2
01AB 92200060 STS 0x60,R2
(0064) }
(0065) break;
01AD C03E RJMP 0x01EC
(0066) }
(0067) case cLED2 :
(0068) {
(0069) if(bLED2_Status == cOFF_Status)
01AE 90200061 LDS R2,0x61
01B0 2022 TST R2
01B1 F431 BNE 0x01B8
(0070) {
(0071) LED_ON(cLED2);
01B2 E005 LDI R16,5
01B3 DFBF RCALL _LED_ON
(0072) bLED2_Status = cON_Status;
01B4 E081 LDI R24,1
01B5 93800061 STS 0x61,R24
(0073) }
01B7 C034 RJMP 0x01EC
(0074) else if(bLED2_Status = cON_Status)
01B8 E081 LDI R24,1
01B9 93800061 STS 0x61,R24
01BB 2388 TST R24
01BC F179 BEQ 0x01EC
(0075) {
(0076) LED_OFF(cLED2);
01BD E005 LDI R16,5
01BE DFA7 RCALL _LED_OFF
(0077) bLED2_Status = cOFF_Status;
01BF 2422 CLR R2
01C0 92200061 STS 0x61,R2
(0078) }
(0079) break;
01C2 C029 RJMP 0x01EC
(0080) }
(0081) case cLED3 :
(0082) {
(0083) if(bLED3_Status == cOFF_Status)
01C3 90200062 LDS R2,0x62
01C5 2022 TST R2
01C6 F431 BNE 0x01CD
(0084) {
(0085) LED_ON(cLED3);
01C7 E006 LDI R16,6
01C8 DFAA RCALL _LED_ON
(0086) bLED3_Status = cON_Status;
01C9 E081 LDI R24,1
01CA 93800062 STS 0x62,R24
(0087) }
01CC C01F RJMP 0x01EC
(0088) else if(bLED3_Status = cON_Status)
01CD E081 LDI R24,1
01CE 93800062 STS 0x62,R24
01D0 2388 TST R24
01D1 F0D1 BEQ 0x01EC
(0089) {
(0090) LED_OFF(cLED3);
01D2 E006 LDI R16,6
01D3 DF92 RCALL _LED_OFF
(0091) bLED3_Status = cOFF_Status;
01D4 2422 CLR R2
01D5 92200062 STS 0x62,R2
(0092) }
(0093) break;
01D7 C014 RJMP 0x01EC
(0094) }
(0095) case cLED4 :
(0096) {
(0097) if(bLED4_Status == cOFF_Status)
01D8 90200063 LDS R2,0x63
01DA 2022 TST R2
01DB F431 BNE 0x01E2
(0098) {
(0099) LED_ON(cLED4);
01DC E007 LDI R16,7
01DD DF95 RCALL _LED_ON
(0100) bLED4_Status = cON_Status;
01DE E081 LDI R24,1
01DF 93800063 STS 0x63,R24
(0101) }
01E1 C00A RJMP 0x01EC
(0102) else if(bLED4_Status = cON_Status)
01E2 E081 LDI R24,1
01E3 93800063 STS 0x63,R24
01E5 2388 TST R24
01E6 F029 BEQ 0x01EC
(0103) {
(0104) LED_OFF(cLED4);
01E7 E007 LDI R16,7
01E8 DF7D RCALL _LED_OFF
(0105) bLED4_Status = cOFF_Status;
01E9 2422 CLR R2
01EA 92200063 STS 0x63,R2
(0106) }
(0107) break;
(0108) }
(0109) default : break;
(0110) }
(0111) }
01EC 940E03D9 CALL pop_gset1
01EE 9508 RET
(0112)
(0113) //****************************************************************
(0114) // Function : swGet_Key1
(0115) // Input : none
(0116) // Output : true - Key1 active; false - Key1 - passitive
(0117) // Description : Key1 Detection,rising edge active
(0118) //****************************************************************
(0119) INT16U swGet_Key1(void)
(0120) {
(0121) static INT16U wKeyStatus = 1;
(0122) if(wKeyStatus == 1)
_swGet_Key1:
01EF 91800064 LDS R24,__idata_end
01F1 91900065 LDS R25,__idata_end+1
01F3 3081 CPI R24,1
01F4 E0E0 LDI R30,0
01F5 079E CPC R25,R30
01F6 F449 BNE 0x0200
(0123) {
(0124) if((PINB & (1 << cKey1)) == 0) //Key Pressed
01F7 99B0 SBIC 0x16,0
01F8 C01A RJMP 0x0213
(0125) {
(0126) wKeyStatus = 0;
01F9 2422 CLR R2
01FA 2433 CLR R3
01FB 92300065 STS __idata_end+1,R3
01FD 92200064 STS __idata_end,R2
(0127) }
(0128) }
01FF C013 RJMP 0x0213
(0129) else if(wKeyStatus == 0)
0200 90200064 LDS R2,__idata_end
0202 90300065 LDS R3,__idata_end+1
0204 2022 TST R2
0205 F469 BNE 0x0213
0206 2033 TST R3
0207 F459 BNE 0x0213
(0130) {
(0131) if(PINB & (1 << cKey1)) //Key Released
0208 9BB0 SBIS 0x16,0
0209 C009 RJMP 0x0213
(0132) {
(0133) wKeyStatus = 1;
020A E081 LDI R24,1
020B E090 LDI R25,0
020C 93900065 STS __idata_end+1,R25
020E 93800064 STS __idata_end,R24
(0134) return(true);
0210 E001 LDI R16,1
0211 E010 LDI R17,0
0212 C002 RJMP 0x0215
(0135) }
(0136) }
(0137) return(false);
0213 2700 CLR R16
0214 2711 CLR R17
0215 9508 RET
(0138) }
(0139)
(0140) //******************************************************************************
(0141) // Function : swGet_Key2
(0142) // Input : none
(0143) // Output : true - Key2 active; false - Key2 - passitive
(0144) // Description : Key1 Detection,rising edge active
(0145) //******************************************************************************
(0146) INT16U swGet_Key2(void)
(0147) {
(0148) static INT16U wKeyStatus = 1;
(0149) if(wKeyStatus == 1)
_swGet_Key2:
0216 91800066 LDS R24,__idata_end+2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -