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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 4 页
字号:
    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 + -