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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0137) 		if(OS_Task_Switch(cPrioTask2) == true)
    030C E001      LDI	R16,1
    030D 940E00CF  CALL	_OS_Task_Switch
    030F 3001      CPI	R16,1
    0310 E0E0      LDI	R30,0
    0311 071E      CPC	R17,R30
    0312 F409      BNE	0x0314
(0138) 		{
(0139) 			return;
    0313 C033      RJMP	0x0347
(0140) 		}
(0141) 		//get event
(0142) 		wTask_Event = OS_Event_Pend(cPrioTask2);
    0314 E001      LDI	R16,1
    0315 940E0081  CALL	_OS_Event_Pend
    0317 01A8      MOVW	R20,R16
(0143)         if(wTask_Event == 0)
    0318 3000      CPI	R16,0
    0319 0701      CPC	R16,R17
    031A F409      BNE	0x031C
(0144)         {
(0145)             return;
    031B C02B      RJMP	0x0347
(0146)         }
(0147) 		//event parsing : timer event
(0148) 		if(wTask_Event & (1 << eTask2_Timer))
    031C FF40      SBRS	R20,0
    031D C017      RJMP	0x0335
(0149) 		{
(0150) 			if(bKey_Status == cOFF_Status)
    031E 9020006D  LDS	R2,0x6D
    0320 2022      TST	R2
    0321 F421      BNE	0x0326
(0151) 			{
(0152) 				LED_OFF(cLED2);
    0322 E005      LDI	R16,5
    0323 940E0166  CALL	_LED_OFF
(0153) 			}
    0325 C00F      RJMP	0x0335
(0154) 			else if(bKey_Status == cON_Status)
    0326 9180006D  LDS	R24,0x6D
    0328 3081      CPI	R24,1
    0329 F421      BNE	0x032E
(0155) 			{
(0156) 				LED_ON(cLED2);
    032A E005      LDI	R16,5
    032B 940E0173  CALL	_LED_ON
(0157) 			}
    032D C007      RJMP	0x0335
(0158) 			else if(bKey_Status == cTOGGLE_Status)
    032E 9180006D  LDS	R24,0x6D
    0330 3082      CPI	R24,2
    0331 F419      BNE	0x0335
(0159) 			{
(0160) 				LED_TOGGLE(cLED2);
    0332 E005      LDI	R16,5
    0333 940E0182  CALL	_LED_TOGGLE
(0161) 			}
(0162) 		}
(0163) 		//event parsing : key event
(0164) 		if(wTask_Event & (1 << eTask2_Key))
    0335 FF41      SBRS	R20,1
    0336 C00F      RJMP	0x0346
(0165) 		{
(0166) 			if(bKey_Status == cOFF_Status)
    0337 9020006D  LDS	R2,0x6D
    0339 2022      TST	R2
    033A F421      BNE	0x033F
(0167) 			{
(0168) 				bKey_Status = cTOGGLE_Status;
    033B E082      LDI	R24,2
    033C 9380006D  STS	0x6D,R24
(0169) 			}
    033E C007      RJMP	0x0346
(0170) 			else if(bKey_Status == cTOGGLE_Status)
    033F 9180006D  LDS	R24,0x6D
    0341 3082      CPI	R24,2
    0342 F419      BNE	0x0346
(0171) 			{
(0172) 				bKey_Status = cOFF_Status;
    0343 2422      CLR	R2
    0344 9220006D  STS	0x6D,R2
    0346 CFC5      RJMP	0x030C
(0173) 			}
(0174) 		}
(0175) 	}
(0176) }
    0347 940E03D9  CALL	pop_gset1
    0349 9508      RET
_Task3:
  wTask_Event          --> R20
    034A 940E03D6  CALL	push_gset1
(0177) 
(0178) //******************************************************************************
(0179) // Function    : Task3
(0180) // Input       : none
(0181) // Output      : none
(0182) // Description : Task3 process,Control LED3
(0183) //******************************************************************************
(0184) void Task3(void)
(0185) {
    034C C036      RJMP	0x0383
(0186) 	INT16U wTask_Event;
(0187)     static INT8U bKey_Status = cOFF_Status;
(0188)     while(1)
(0189) 	{
(0190) 		//task switch
(0191) 		if(OS_Task_Switch(cPrioTask3) == true)
    034D E002      LDI	R16,2
    034E 940E00CF  CALL	_OS_Task_Switch
    0350 3001      CPI	R16,1
    0351 E0E0      LDI	R30,0
    0352 071E      CPC	R17,R30
    0353 F409      BNE	0x0355
(0192) 		{
(0193) 			return;
    0354 C02F      RJMP	0x0384
(0194) 		}
(0195) 		//get event
(0196) 		wTask_Event = OS_Event_Pend(cPrioTask3);
    0355 E002      LDI	R16,2
    0356 940E0081  CALL	_OS_Event_Pend
    0358 01A8      MOVW	R20,R16
(0197) 		//event parsing : timer event
(0198) 		if(wTask_Event & (1 << eTask3_Timer))
    0359 FF00      SBRS	R16,0
    035A C017      RJMP	0x0372
(0199) 		{
(0200) 			if(bKey_Status == cOFF_Status)
    035B 9020006E  LDS	R2,0x6E
    035D 2022      TST	R2
    035E F421      BNE	0x0363
(0201) 			{
(0202) 				LED_OFF(cLED3);
    035F E006      LDI	R16,6
    0360 940E0166  CALL	_LED_OFF
(0203) 			}
    0362 C00F      RJMP	0x0372
(0204) 			else if(bKey_Status == cON_Status)
    0363 9180006E  LDS	R24,0x6E
    0365 3081      CPI	R24,1
    0366 F421      BNE	0x036B
(0205) 			{
(0206) 				LED_ON(cLED3);
    0367 E006      LDI	R16,6
    0368 940E0173  CALL	_LED_ON
(0207) 			}
    036A C007      RJMP	0x0372
(0208) 			else if(bKey_Status == cTOGGLE_Status)
    036B 9180006E  LDS	R24,0x6E
    036D 3082      CPI	R24,2
    036E F419      BNE	0x0372
(0209) 			{
(0210) 				LED_TOGGLE(cLED3);
    036F E006      LDI	R16,6
    0370 940E0182  CALL	_LED_TOGGLE
(0211) 			}
(0212) 		}
(0213) 		//event parsing : key event
(0214) 		if(wTask_Event & (1 << eTask3_Key))
    0372 FF41      SBRS	R20,1
    0373 C00F      RJMP	0x0383
(0215) 		{
(0216) 			if(bKey_Status == cOFF_Status)
    0374 9020006E  LDS	R2,0x6E
    0376 2022      TST	R2
    0377 F421      BNE	0x037C
(0217) 			{
(0218) 				bKey_Status = cTOGGLE_Status;
    0378 E082      LDI	R24,2
    0379 9380006E  STS	0x6E,R24
(0219) 			}
    037B C007      RJMP	0x0383
(0220) 			else if(bKey_Status == cTOGGLE_Status)
    037C 9180006E  LDS	R24,0x6E
    037E 3082      CPI	R24,2
    037F F419      BNE	0x0383
(0221) 			{
(0222) 				bKey_Status = cOFF_Status;
    0380 2422      CLR	R2
    0381 9220006E  STS	0x6E,R2
    0383 CFC9      RJMP	0x034D
(0223) 			}
(0224) 		}
(0225) 	}
(0226) }
    0384 940E03D9  CALL	pop_gset1
    0386 9508      RET
_Task4:
  wTask_Event          --> R20
    0387 940E03D6  CALL	push_gset1
(0227) 
(0228) //******************************************************************************
(0229) // Function    : Task4
(0230) // Input       : none
(0231) // Output      : none
(0232) // Description : Task4 process,Control LED4
(0233) //******************************************************************************
(0234) void Task4(void)
(0235) {
    0389 C03A      RJMP	0x03C4
(0236) 	INT16U wTask_Event;
(0237)     static INT8U bKey_Status = cOFF_Status;
(0238)     while(1)
(0239) 	{
(0240) 		//task switch
(0241) 		if(OS_Task_Switch(cPrioTask4) == true)
    038A E003      LDI	R16,3
    038B 940E00CF  CALL	_OS_Task_Switch
    038D 3001      CPI	R16,1
    038E E0E0      LDI	R30,0
    038F 071E      CPC	R17,R30
    0390 F409      BNE	0x0392
(0242) 		{
(0243) 			return;
    0391 C033      RJMP	0x03C5
(0244) 		}
(0245) 		//get event
(0246) 		wTask_Event = OS_Event_Pend(cPrioTask4);
    0392 E003      LDI	R16,3
    0393 940E0081  CALL	_OS_Event_Pend
    0395 01A8      MOVW	R20,R16
(0247) 		//event check
(0248)         if(wTask_Event == 0)
    0396 3000      CPI	R16,0
    0397 0701      CPC	R16,R17
    0398 F409      BNE	0x039A
(0249)         {
(0250)             return;
    0399 C02B      RJMP	0x03C5
(0251)         }
(0252)         //event parsing : timer event
(0253) 		if(wTask_Event & (1 << eTask4_Timer))
    039A FF40      SBRS	R20,0
    039B C017      RJMP	0x03B3
(0254) 		{
(0255) 			if(bKey_Status == cOFF_Status)
    039C 9020006F  LDS	R2,0x6F
    039E 2022      TST	R2
    039F F421      BNE	0x03A4
(0256) 			{
(0257) 				LED_OFF(cLED4);
    03A0 E007      LDI	R16,7
    03A1 940E0166  CALL	_LED_OFF
(0258) 			}
    03A3 C00F      RJMP	0x03B3
(0259) 			else if(bKey_Status == cON_Status)
    03A4 9180006F  LDS	R24,0x6F
    03A6 3081      CPI	R24,1
    03A7 F421      BNE	0x03AC
(0260) 			{
(0261) 				LED_ON(cLED4);
    03A8 E007      LDI	R16,7
    03A9 940E0173  CALL	_LED_ON
(0262) 			}
    03AB C007      RJMP	0x03B3
(0263) 			else if(bKey_Status == cTOGGLE_Status)
    03AC 9180006F  LDS	R24,0x6F
    03AE 3082      CPI	R24,2
    03AF F419      BNE	0x03B3
(0264) 			{
(0265) 				LED_TOGGLE(cLED4);
    03B0 E007      LDI	R16,7
    03B1 940E0182  CALL	_LED_TOGGLE
(0266) 			}
(0267) 		}
(0268) 		//event parsing : key event
(0269) 		if(wTask_Event & (1 << eTask4_Key))
    03B3 FF41      SBRS	R20,1
    03B4 C00F      RJMP	0x03C4
(0270) 		{
(0271) 			if(bKey_Status == cOFF_Status)
    03B5 9020006F  LDS	R2,0x6F
    03B7 2022      TST	R2
    03B8 F421      BNE	0x03BD
(0272) 			{
(0273) 				bKey_Status = cTOGGLE_Status;
    03B9 E082      LDI	R24,2
    03BA 9380006F  STS	0x6F,R24
(0274) 			}
    03BC C007      RJMP	0x03C4
(0275) 			else if(bKey_Status == cTOGGLE_Status)
    03BD 9180006F  LDS	R24,0x6F
    03BF 3082      CPI	R24,2
    03C0 F419      BNE	0x03C4
(0276) 			{
(0277) 				bKey_Status = cOFF_Status;
    03C1 2422      CLR	R2
    03C2 9220006F  STS	0x6F,R2
    03C4 CFC5      RJMP	0x038A
(0278) 			}
(0279) 		}
(0280) 	}
(0281) }
    03C5 940E03D9  CALL	pop_gset1
    03C7 9508      RET
(0282) 
(0283) //******************************************************************************
(0284) // Function    : Task_Start
(0285) // Input       : none
(0286) // Output      : none
(0287) // Description : Standard function format,put all tasks into while(1)
(0288) //******************************************************************************
(0289) void Task_Start(void)
(0290) {
_Task_Start:
    03C8 C004      RJMP	0x03CD
(0291) 	while(1)
(0292) 	{
(0293) 	    Task1();
    03C9 DEF6      RCALL	_Task1
(0294) 		Task2();
    03CA DF3E      RCALL	_Task2
(0295) 		Task3();
    03CB DF7E      RCALL	_Task3
(0296) 		Task4();
    03CC DFBA      RCALL	_Task4
    03CD CFFB      RJMP	0x03C9
(0297) 	}
(0298) }
    03CE 9508      RET
(0299) 
(0300) //******************************************************************************
(0301) // Function    : Task_Init
(0302) // Input       : none
(0303) // Output      : none
(0304) // Description : Standard function format,put all tasks Initialization here
(0305) //******************************************************************************
(0306) void Task_Init(void)
(0307) {
(0308) 	Task1_Init();
_Task_Init:
    03CF DEE4      RCALL	_Task1_Init
(0309) 	Task2_Init();
    03D0 DEE6      RCALL	_Task2_Init
(0310) 	Task3_Init();
    03D1 DEE8      RCALL	_Task3_Init
(0311) 	Task4_Init();	
(0312) }
FILE: <library>
    03D2 CEEA      RJMP	_Task4_Init
pop_gset2:
    03D3 E0E2      LDI	R30,2
    03D4 940C03DA  JMP	pop
push_gset1:
    03D6 935A      ST	R21,-Y
    03D7 934A      ST	R20,-Y
    03D8 9508      RET
pop_gset1:
    03D9 E0E1      LDI	R30,1
pop:
    03DA 9149      LD	R20,Y+
    03DB 9159      LD	R21,Y+
    03DC FDE0      SBRC	R30,0
    03DD 9508      RET
    03DE 9169      LD	R22,Y+
    03DF 9179      LD	R23,Y+
    03E0 FDE1      SBRC	R30,1
    03E1 9508      RET
    03E2 90A9      LD	R10,Y+
    03E3 90B9      LD	R11,Y+
    03E4 FDE2      SBRC	R30,2
    03E5 9508      RET
    03E6 90C9      LD	R12,Y+
    03E7 90D9      LD	R13,Y+
    03E8 FDE3      SBRC	R30,3
    03E9 9508      RET
    03EA 90E9      LD	R14,Y+
    03EB 90F9      LD	R15,Y+
    03EC 9508      RET
push_gset2:
    03ED 937A      ST	R23,-Y
    03EE 936A      ST	R22,-Y
    03EF 940C03D6  JMP	push_gset1
push_lset:
    03F1 93FA      ST	R31,-Y
    03F2 93EA      ST	R30,-Y
    03F3 93BA      ST	R27,-Y
    03F4 93AA      ST	R26,-Y
    03F5 939A      ST	R25,-Y
    03F6 938A      ST	R24,-Y
    03F7 933A      ST	R19,-Y
    03F8 932A      ST	R18,-Y
    03F9 931A      ST	R17,-Y
    03FA 930A      ST	R16,-Y
    03FB 929A      ST	R9,-Y
    03FC 928A      ST	R8,-Y
    03FD 927A      ST	R7,-Y
    03FE 926A      ST	R6,-Y
    03FF 925A      ST	R5,-Y
    0400 924A      ST	R4,-Y
    0401 923A      ST	R3,-Y
    0402 922A      ST	R2,-Y
    0403 921A      ST	R1,-Y
    0404 920A      ST	R0,-Y
    0405 B60F      IN	R0,0x3F
    0406 920A      ST	R0,-Y
    0407 9508      RET
pop_lset:
    0408 9009      LD	R0,Y+
    0409 BE0F      OUT	0x3F,R0
    040A 9009      LD	R0,Y+
    040B 9019      LD	R1,Y+
    040C 9029      LD	R2,Y+
    040D 9039      LD	R3,Y+
    040E 9049      LD	R4,Y+
    040F 9059      LD	R5,Y+
    0410 9069      LD	R6,Y+
    0411 9079      LD	R7,Y+
    0412 9089      LD	R8,Y+
    0413 9099      LD	R9,Y+
    0414 9109      LD	R16,Y+
    0415 9119      LD	R17,Y+
    0416 9129      LD	R18,Y+
    0417 9139      LD	R19,Y+
    0418 9189      LD	R24,Y+
    0419 9199      LD	R25,Y+
    041A 91A9      LD	R26,Y+
    041B 91B9      LD	R27,Y+
    041C 91E9      LD	R30,Y+
    041D 91F9      LD	R31,Y+
    041E 9508      RET
lsl16:
    041F 2322      TST	R18
    0420 F021      BEQ	0x0425
    0421 0F00      LSL	R16
    0422 1F11      ROL	R17
    0423 952A      DEC	R18
    0424 CFFA      RJMP	lsl16
    0425 9508      RET
lsl8:
    0426 2311      TST	R17
    0427 F019      BEQ	0x042B
    0428 0F00      LSL	R16
    0429 951A      DEC	R17
    042A CFFB      RJMP	lsl8
    042B 9508      RET

⌨️ 快捷键说明

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