📄 project.lst
字号:
0218 91900067 LDS R25,__idata_end+3
021A 3081 CPI R24,1
021B E0E0 LDI R30,0
021C 079E CPC R25,R30
021D F449 BNE 0x0227
(0150) {
(0151) if((PINB & (1 << cKey2)) == 0) //Key Pressed
021E 99B1 SBIC 0x16,1
021F C01A RJMP 0x023A
(0152) {
(0153) wKeyStatus = 0;
0220 2422 CLR R2
0221 2433 CLR R3
0222 92300067 STS __idata_end+3,R3
0224 92200066 STS __idata_end+2,R2
(0154) }
(0155) }
0226 C013 RJMP 0x023A
(0156) else if(wKeyStatus == 0)
0227 90200066 LDS R2,__idata_end+2
0229 90300067 LDS R3,__idata_end+3
022B 2022 TST R2
022C F469 BNE 0x023A
022D 2033 TST R3
022E F459 BNE 0x023A
(0157) {
(0158) if(PINB & (1 << cKey2)) //Key Released
022F 9BB1 SBIS 0x16,1
0230 C009 RJMP 0x023A
(0159) {
(0160) wKeyStatus = 1;
0231 E081 LDI R24,1
0232 E090 LDI R25,0
0233 93900067 STS __idata_end+3,R25
0235 93800066 STS __idata_end+2,R24
(0161) return(true);
0237 E001 LDI R16,1
0238 E010 LDI R17,0
0239 C002 RJMP 0x023C
(0162) }
(0163) }
(0164) return(false);
023A 2700 CLR R16
023B 2711 CLR R17
023C 9508 RET
(0165) }
(0166)
(0167) //******************************************************************************
(0168) // Function : swGet_Key3
(0169) // Input : none
(0170) // Output : true - Key3 active; false - Key3 - passitive
(0171) // Description : Key3 Detection,rising edge active
(0172) //******************************************************************************
(0173) INT16U swGet_Key3(void)
(0174) {
(0175) static INT16U wKeyStatus = 1;
(0176) if(wKeyStatus == 1)
_swGet_Key3:
023D 91800068 LDS R24,0x68
023F 91900069 LDS R25,0x69
0241 3081 CPI R24,1
0242 E0E0 LDI R30,0
0243 079E CPC R25,R30
0244 F449 BNE 0x024E
(0177) {
(0178) if((PINB & (1 << cKey3)) == 0) //Key Pressed
0245 99B2 SBIC 0x16,2
0246 C01A RJMP 0x0261
(0179) {
(0180) wKeyStatus = 0;
0247 2422 CLR R2
0248 2433 CLR R3
0249 92300069 STS 0x69,R3
024B 92200068 STS 0x68,R2
(0181) }
(0182) }
024D C013 RJMP 0x0261
(0183) else if(wKeyStatus == 0)
024E 90200068 LDS R2,0x68
0250 90300069 LDS R3,0x69
0252 2022 TST R2
0253 F469 BNE 0x0261
0254 2033 TST R3
0255 F459 BNE 0x0261
(0184) {
(0185) if(PINB & (1 << cKey3)) //Key Released
0256 9BB2 SBIS 0x16,2
0257 C009 RJMP 0x0261
(0186) {
(0187) wKeyStatus = 1;
0258 E081 LDI R24,1
0259 E090 LDI R25,0
025A 93900069 STS 0x69,R25
025C 93800068 STS 0x68,R24
(0188) return(true);
025E E001 LDI R16,1
025F E010 LDI R17,0
0260 C002 RJMP 0x0263
(0189) }
(0190) }
(0191) return(false);
0261 2700 CLR R16
0262 2711 CLR R17
0263 9508 RET
(0192) }
(0193)
(0194) //******************************************************************************
(0195) // Function : swGet_Key4
(0196) // Input : none
(0197) // Output : true - Key4 active; false - Key4 - passitive
(0198) // Description : Key4 Detection,rising edge active
(0199) //******************************************************************************
(0200) INT16U swGet_Key4(void)
(0201) {
(0202) static INT16U wKeyStatus = 1;
(0203) if(wKeyStatus == 1)
_swGet_Key4:
0264 9180006A LDS R24,0x6A
0266 9190006B LDS R25,0x6B
0268 3081 CPI R24,1
0269 E0E0 LDI R30,0
026A 079E CPC R25,R30
026B F449 BNE 0x0275
(0204) {
(0205) if((PINB & (1 << cKey4)) == 0) //Key Pressed
026C 99B3 SBIC 0x16,3
026D C01A RJMP 0x0288
(0206) {
(0207) wKeyStatus = 0;
026E 2422 CLR R2
026F 2433 CLR R3
0270 9230006B STS 0x6B,R3
0272 9220006A STS 0x6A,R2
(0208) }
(0209) }
0274 C013 RJMP 0x0288
(0210) else if(wKeyStatus == 0)
0275 9020006A LDS R2,0x6A
0277 9030006B LDS R3,0x6B
0279 2022 TST R2
027A F469 BNE 0x0288
027B 2033 TST R3
027C F459 BNE 0x0288
(0211) {
(0212) if(PINB & (1 << cKey4)) //Key Released
027D 9BB3 SBIS 0x16,3
027E C009 RJMP 0x0288
(0213) {
(0214) wKeyStatus = 1;
027F E081 LDI R24,1
0280 E090 LDI R25,0
0281 9390006B STS 0x6B,R25
0283 9380006A STS 0x6A,R24
(0215) return(true);
0285 E001 LDI R16,1
0286 E010 LDI R17,0
0287 C002 RJMP 0x028A
(0216) }
(0217) }
(0218) return(false);
0288 2700 CLR R16
0289 2711 CLR R17
028A 9508 RET
(0219) }
(0220)
(0221) //******************************************************************************
(0222) // Function : Key_Detection
(0223) // Input : none
(0224) // Output : none
(0225) // Description : Keys Detection.if active,send Key Event to task
(0226) //******************************************************************************
(0227) void Key_Detection(void)
(0228) {
(0229) if(swGet_Key1() == true)
_Key_Detection:
028B DF63 RCALL _swGet_Key1
028C 3001 CPI R16,1
028D E0E0 LDI R30,0
028E 071E CPC R17,R30
028F F429 BNE 0x0295
(0230) {
(0231) OS_Event_Post(cPrioTask1,eTask1_Key);
0290 E021 LDI R18,1
0291 E030 LDI R19,0
0292 2700 CLR R16
0293 940E00A1 CALL _OS_Event_Post
(0232) }
(0233) if(swGet_Key2() == true)
0295 DF80 RCALL _swGet_Key2
0296 3001 CPI R16,1
0297 E0E0 LDI R30,0
0298 071E CPC R17,R30
0299 F429 BNE 0x029F
(0234) {
(0235) OS_Event_Post(cPrioTask2,eTask2_Key);
029A E021 LDI R18,1
029B E030 LDI R19,0
029C E001 LDI R16,1
029D 940E00A1 CALL _OS_Event_Post
(0236) }
(0237) if(swGet_Key3() == true)
029F DF9D RCALL _swGet_Key3
02A0 3001 CPI R16,1
02A1 E0E0 LDI R30,0
02A2 071E CPC R17,R30
02A3 F429 BNE 0x02A9
(0238) {
(0239) OS_Event_Post(cPrioTask3,eTask3_Key);
02A4 E021 LDI R18,1
02A5 E030 LDI R19,0
02A6 E002 LDI R16,2
02A7 940E00A1 CALL _OS_Event_Post
(0240) }
(0241) if(swGet_Key4() == true)
02A9 DFBA RCALL _swGet_Key4
02AA 3001 CPI R16,1
02AB E0E0 LDI R30,0
02AC 071E CPC R17,R30
02AD F429 BNE 0x02B3
(0242) {
(0243) OS_Event_Post(cPrioTask4,eTask4_Key);
02AE E021 LDI R18,1
02AF E030 LDI R19,0
02B0 E003 LDI R16,3
02B1 940E00A1 CALL _OS_Event_Post
(0244) }
(0245) }
02B3 9508 RET
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\多任务模拟系统设计\Task.c
(0001) //******************************************************************************
(0002) // File Name : Task.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 declaration
(0012) void Task1_Init(void);
(0013) void Task2_Init(void);
(0014) void Task3_Init(void);
(0015) void Task4_Init(void);
(0016) void Task1(void);
(0017) void Task2(void);
(0018) void Task3(void);
(0019) void Task4(void);
(0020)
(0021) //******************************************************************************
(0022) // Function : Task1_Init
(0023) // Input : none
(0024) // Output : none
(0025) // Description : Initialization of task1,off LED1
(0026) //******************************************************************************
(0027) void Task1_Init(void)
(0028) {
(0029) LED_OFF(cLED1);
_Task1_Init:
02B4 E004 LDI R16,4
(0030) }
02B5 940C0166 JMP _LED_OFF
(0031)
(0032) //******************************************************************************
(0033) // Function : Task2_Init
(0034) // Input : none
(0035) // Output : none
(0036) // Description : Initialization of task2,off LED2
(0037) //******************************************************************************
(0038) void Task2_Init(void)
(0039) {
(0040) LED_OFF(cLED2);
_Task2_Init:
02B7 E005 LDI R16,5
(0041) }
02B8 940C0166 JMP _LED_OFF
(0042)
(0043) //******************************************************************************
(0044) // Function : Task3_Init
(0045) // Input : none
(0046) // Output : none
(0047) // Description : Initialization of task3,off LED3
(0048) //******************************************************************************
(0049) void Task3_Init(void)
(0050) {
(0051) LED_OFF(cLED3);
_Task3_Init:
02BA E006 LDI R16,6
(0052) }
02BB 940C0166 JMP _LED_OFF
(0053)
(0054) //******************************************************************************
(0055) // Function : Task4_Init
(0056) // Input : none
(0057) // Output : none
(0058) // Description : Initialization of task4,off LED4
(0059) //******************************************************************************
(0060) void Task4_Init(void)
(0061) {
(0062) LED_OFF(cLED4);
_Task4_Init:
02BD E007 LDI R16,7
(0063) }
02BE 940C0166 JMP _LED_OFF
_Task1:
wTask_Event --> R20
02C0 940E03D6 CALL push_gset1
(0064)
(0065) //******************************************************************************
(0066) // Function : Task1
(0067) // Input : none
(0068) // Output : none
(0069) // Description : Task1 process,Control LED1
(0070) //******************************************************************************
(0071) void Task1(void)
(0072) {
02C2 C042 RJMP 0x0305
(0073) INT16U wTask_Event;
(0074) static INT8U bKey_Status = cOFF_Status;
(0075) while(1)
(0076) {
(0077) //task switch
(0078) if(OS_Task_Switch(cPrioTask1) == true)
02C3 2700 CLR R16
02C4 940E00CF CALL _OS_Task_Switch
02C6 3001 CPI R16,1
02C7 E0E0 LDI R30,0
02C8 071E CPC R17,R30
02C9 F409 BNE 0x02CB
(0079) {
(0080) return;
02CA C03B RJMP 0x0306
(0081) }
(0082) //get event
(0083) wTask_Event = OS_Event_Pend(cPrioTask1);
02CB 2700 CLR R16
02CC 940E0081 CALL _OS_Event_Pend
02CE 01A8 MOVW R20,R16
(0084) //event check
(0085) if(wTask_Event == 0)
02CF 3000 CPI R16,0
02D0 0701 CPC R16,R17
02D1 F409 BNE 0x02D3
(0086) {
(0087) return;
02D2 C033 RJMP 0x0306
(0088) }
(0089) //event parsing : timer event
(0090) if(wTask_Event & (1 << eTask1_Timer))
02D3 FF40 SBRS R20,0
02D4 C017 RJMP 0x02EC
(0091) {
(0092) if(bKey_Status == cOFF_Status)
02D5 9020006C LDS R2,0x6C
02D7 2022 TST R2
02D8 F421 BNE 0x02DD
(0093) {
(0094) LED_OFF(cLED1);
02D9 E004 LDI R16,4
02DA 940E0166 CALL _LED_OFF
(0095) }
02DC C00F RJMP 0x02EC
(0096) else if(bKey_Status == cON_Status)
02DD 9180006C LDS R24,0x6C
02DF 3081 CPI R24,1
02E0 F421 BNE 0x02E5
(0097) {
(0098) LED_ON(cLED1);
02E1 E004 LDI R16,4
02E2 940E0173 CALL _LED_ON
(0099) }
02E4 C007 RJMP 0x02EC
(0100) else if(bKey_Status == cTOGGLE_Status)
02E5 9180006C LDS R24,0x6C
02E7 3082 CPI R24,2
02E8 F419 BNE 0x02EC
(0101) {
(0102) LED_TOGGLE(cLED1);
02E9 E004 LDI R16,4
02EA 940E0182 CALL _LED_TOGGLE
(0103) }
(0104) }
(0105) //event parsing : key event
(0106) if(wTask_Event & (1 << eTask1_Key))
02EC FF41 SBRS R20,1
02ED C017 RJMP 0x0305
(0107) {
(0108) if(bKey_Status == cOFF_Status)
02EE 9020006C LDS R2,0x6C
02F0 2022 TST R2
02F1 F421 BNE 0x02F6
(0109) {
(0110) bKey_Status = cTOGGLE_Status;
02F2 E082 LDI R24,2
02F3 9380006C STS 0x6C,R24
(0111) }
02F5 C00F RJMP 0x0305
(0112) else if(bKey_Status == cTOGGLE_Status)
02F6 9180006C LDS R24,0x6C
02F8 3082 CPI R24,2
02F9 F421 BNE 0x02FE
(0113) {
(0114) bKey_Status = cOFF_Status;
02FA 2422 CLR R2
02FB 9220006C STS 0x6C,R2
(0115) }
02FD C007 RJMP 0x0305
(0116) else if(bKey_Status == cON_Status)
02FE 9180006C LDS R24,0x6C
0300 3081 CPI R24,1
0301 F419 BNE 0x0305
(0117) {
(0118) bKey_Status = cOFF_Status;
0302 2422 CLR R2
0303 9220006C STS 0x6C,R2
0305 CFBD RJMP 0x02C3
(0119) }
(0120) }
(0121) }
(0122) }
0306 940E03D9 CALL pop_gset1
0308 9508 RET
_Task2:
wTask_Event --> R20
0309 940E03D6 CALL push_gset1
(0123)
(0124) //******************************************************************************
(0125) // Function : Task2
(0126) // Input : none
(0127) // Output : none
(0128) // Description : Task2 process,Control LED2
(0129) //******************************************************************************
(0130) void Task2(void)
(0131) {
030B C03A RJMP 0x0346
(0132) INT16U wTask_Event;
(0133) static INT8U bKey_Status = cOFF_Status;
(0134) while(1)
(0135) {
(0136) //task switch
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -