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

📄 easy_icc.lst

📁 avr单片机ATMega16对三相异步电机的智能控制源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0129) 
(0130) 	if (SCH_tasks_G[TASK_INDEX].pTask == 0)
    0338 E087      LDI	R24,7
    0339 9F80      MUL	R24,R16
    033A 01F0      MOVW	R30,R0
    033B E689      LDI	R24,0x69
    033C E090      LDI	R25,0
    033D 0FE8      ADD	R30,R24
    033E 1FF9      ADC	R31,R25
    033F 8020      LDD	R2,Z+0
    0340 8031      LDD	R3,Z+1
    0341 2022      TST	R2
    0342 F421      BNE	0x0347
    0343 2033      TST	R3
    0344 F411      BNE	0x0347
(0131) 	{	
(0132) 		Return_code = RETURN_ERROR;	  
    0345 E041      LDI	R20,1
(0133) 	}
    0346 C001      RJMP	0x0348
(0134) 	else
(0135) 	{
(0136) 		Return_code = RETURN_NORMAL;
    0347 2744      CLR	R20
(0137) 	}
(0138) 
(0139) 	// 删除任务
(0140) 	SCH_tasks_G[TASK_INDEX].pTask = 0x00;
    0348 E087      LDI	R24,7
    0349 9F80      MUL	R24,R16
    034A 01F0      MOVW	R30,R0
    034B E689      LDI	R24,0x69
    034C E090      LDI	R25,0
    034D 0FE8      ADD	R30,R24
    034E 1FF9      ADC	R31,R25
    034F 2422      CLR	R2
    0350 2433      CLR	R3
    0351 8231      STD	Z+1,R3
    0352 8220      STD	Z+0,R2
(0141) 	SCH_tasks_G[TASK_INDEX].Delay = 0;
    0353 E087      LDI	R24,7
    0354 9F80      MUL	R24,R16
    0355 01F0      MOVW	R30,R0
    0356 E68B      LDI	R24,0x6B
    0357 E090      LDI	R25,0
    0358 0FE8      ADD	R30,R24
    0359 1FF9      ADC	R31,R25
    035A 8231      STD	Z+1,R3
    035B 8220      STD	Z+0,R2
(0142) 	SCH_tasks_G[TASK_INDEX].Period = 0;
    035C E087      LDI	R24,7
    035D 9F80      MUL	R24,R16
    035E 01F0      MOVW	R30,R0
    035F E68D      LDI	R24,0x6D
    0360 E090      LDI	R25,0
    0361 0FE8      ADD	R30,R24
    0362 1FF9      ADC	R31,R25
    0363 8231      STD	Z+1,R3
    0364 8220      STD	Z+0,R2
(0143) 	SCH_tasks_G[TASK_INDEX].RunMe = 0;
    0365 E087      LDI	R24,7
    0366 9F80      MUL	R24,R16
    0367 01F0      MOVW	R30,R0
    0368 E68F      LDI	R24,0x6F
    0369 E090      LDI	R25,0
    036A 0FE8      ADD	R30,R24
    036B 1FF9      ADC	R31,R25
    036C 8220      STD	Z+0,R2
(0144) 
(0145) 	return Return_code;
    036D 2F04      MOV	R16,R20
    036E 940E0540  CALL	pop_gset1
    0370 9508      RET
(0146) }
(0147) 
(0148) 
(0149) /*---------------------------------------------------------*-
(0150)  * 函数名称: SCH_Update()
(0151)  * 入	 口: 
(0152)  * 出	 口:
(0153)  * 函数功能: 在调度器的中断服务程序中运行
(0154)  * 
(0155)  * 说	 明: "刷新"函数,确定某个任务需要运行时,将这个任务的
(0156)  * 			 RunMe标志加1,然后该任务将由调度程序执行.
(0157) -*---------------------------------------------------------*/
(0158) 
(0159) static void SCH_Updata(void)
(0160) {
(0161) 	unsigned char Index;
(0162) 	for (Index=0; Index < SCH_MAX_TASKS; Index++)
_SCH_Updata:
  Index                --> R16
    0371 2700      CLR	R16
    0372 C054      RJMP	0x03C7
(0163) 	{
(0164) 		// 检测这里是否有任务?
(0165) 		if (SCH_tasks_G[Index].pTask != 0)
    0373 E087      LDI	R24,7
    0374 9F80      MUL	R24,R16
    0375 01F0      MOVW	R30,R0
    0376 E689      LDI	R24,0x69
    0377 E090      LDI	R25,0
    0378 0FE8      ADD	R30,R24
    0379 1FF9      ADC	R31,R25
    037A 8020      LDD	R2,Z+0
    037B 8031      LDD	R3,Z+1
    037C 2022      TST	R2
    037D F419      BNE	0x0381
    037E 2033      TST	R3
    037F F409      BNE	0x0381
    0380 C045      RJMP	0x03C6
(0166) 		{
(0167) 			if (SCH_tasks_G[Index].Delay == 0)
    0381 E087      LDI	R24,7
    0382 9F80      MUL	R24,R16
    0383 01F0      MOVW	R30,R0
    0384 E68B      LDI	R24,0x6B
    0385 E090      LDI	R25,0
    0386 0FE8      ADD	R30,R24
    0387 1FF9      ADC	R31,R25
    0388 8020      LDD	R2,Z+0
    0389 8031      LDD	R3,Z+1
    038A 2022      TST	R2
    038B F009      BEQ	0x038D
    038C C02C      RJMP	0x03B9
    038D 2033      TST	R3
    038E F009      BEQ	0x0390
    038F C029      RJMP	0x03B9
(0168) 			{
(0169) 				SCH_tasks_G[Index].RunMe += 1;	// RunMer标志加1
    0390 E087      LDI	R24,7
    0391 9F80      MUL	R24,R16
    0392 0110      MOVW	R2,R0
    0393 E68F      LDI	R24,0x6F
    0394 E090      LDI	R25,0
    0395 0E28      ADD	R2,R24
    0396 1E39      ADC	R3,R25
    0397 01F1      MOVW	R30,R2
    0398 8180      LDD	R24,Z+0
    0399 5F8F      SUBI	R24,0xFF
    039A 8380      STD	Z+0,R24
(0170) 				if (SCH_tasks_G[Index].Period != 0)
    039B E087      LDI	R24,7
    039C 9F80      MUL	R24,R16
    039D 01F0      MOVW	R30,R0
    039E E68D      LDI	R24,0x6D
    039F E090      LDI	R25,0
    03A0 0FE8      ADD	R30,R24
    03A1 1FF9      ADC	R31,R25
    03A2 8020      LDD	R2,Z+0
    03A3 8031      LDD	R3,Z+1
    03A4 2022      TST	R2
    03A5 F411      BNE	0x03A8
    03A6 2033      TST	R3
    03A7 F0F1      BEQ	0x03C6
(0171) 				{
(0172) 					// 调度定期的任务再次运行
(0173) 					SCH_tasks_G[Index].Delay = SCH_tasks_G[Index].Period;	
    03A8 E087      LDI	R24,7
    03A9 9F80      MUL	R24,R16
    03AA E68D      LDI	R24,0x6D
    03AB E090      LDI	R25,0
    03AC 01F0      MOVW	R30,R0
    03AD 0FE8      ADD	R30,R24
    03AE 1FF9      ADC	R31,R25
    03AF 8020      LDD	R2,Z+0
    03B0 8031      LDD	R3,Z+1
    03B1 E68B      LDI	R24,0x6B
    03B2 E090      LDI	R25,0
    03B3 01F0      MOVW	R30,R0
    03B4 0FE8      ADD	R30,R24
    03B5 1FF9      ADC	R31,R25
    03B6 8231      STD	Z+1,R3
    03B7 8220      STD	Z+0,R2
(0174) 				}
(0175) 			}
    03B8 C00D      RJMP	0x03C6
(0176) 			else
(0177) 			{
(0178) 				// 还没有准备好运行,延迟减1
(0179) 				SCH_tasks_G[Index].Delay -= 1;		
    03B9 E087      LDI	R24,7
    03BA 9F80      MUL	R24,R16
    03BB 0110      MOVW	R2,R0
    03BC E68B      LDI	R24,0x6B
    03BD E090      LDI	R25,0
    03BE 0E28      ADD	R2,R24
    03BF 1E39      ADC	R3,R25
    03C0 01F1      MOVW	R30,R2
    03C1 8180      LDD	R24,Z+0
    03C2 8191      LDD	R25,Z+1
    03C3 9701      SBIW	R24,1
    03C4 8391      STD	Z+1,R25
    03C5 8380      STD	Z+0,R24
    03C6 9503      INC	R16
    03C7 3003      CPI	R16,3
    03C8 F408      BCC	0x03CA
    03C9 CFA9      RJMP	0x0373
    03CA 9508      RET
_InitTimer1:
  i                    --> R20
    03CB 940E053D  CALL	push_gset1
(0180) 			}
(0181) 		}	
(0182) 	}
(0183) }
(0184) 
(0185) 
(0186) /*---------------------------------------------------------*-
(0187)  * 函数名称: SCH_Init_Timer2()
(0188)  * 入	 口: 
(0189)  * 出	 口:
(0190)  * 函数功能: 准备调度器数据结构并且设置定时器以所需的频率中断
(0191)  * 
(0192)  * 说	 明: 调度器初始化化函数,必须在使用调度器之前调用它
(0193) -*---------------------------------------------------------*/
(0194) void  InitTimer1(void)			//8MHz,10ms,64分频
(0195) {
(0196)  uchar i;
(0197) 	
(0198)  for (i=0; i<SCH_MAX_TASKS; i++)
    03CD 2744      CLR	R20
    03CE C003      RJMP	0x03D2
(0199)  {
(0200)   SCH_Delete_Task(i);
    03CF 2F04      MOV	R16,R20
    03D0 DF65      RCALL	_SCH_Delete_Task
    03D1 9543      INC	R20
    03D2 3043      CPI	R20,3
    03D3 F3D8      BCS	0x03CF
(0201)  }
(0202) 
(0203)  TCCR1B = 0x00; //stop
    03D4 2422      CLR	R2
    03D5 BC2E      OUT	0x2E,R2
(0204)  TCNT1H = 0xFB; //setup
    03D6 EF8B      LDI	R24,0xFB
    03D7 BD8D      OUT	0x2D,R24
(0205)  TCNT1L = 0x1E;
    03D8 E18E      LDI	R24,0x1E
    03D9 BD8C      OUT	0x2C,R24
(0206)  OCR1AH = 0x04;
    03DA E084      LDI	R24,4
    03DB BD8B      OUT	0x2B,R24
(0207)  OCR1AL = 0xE2;
    03DC EE82      LDI	R24,0xE2
    03DD BD8A      OUT	0x2A,R24
(0208)  OCR1BH = 0x04;
    03DE E084      LDI	R24,4
    03DF BD89      OUT	0x29,R24
(0209)  OCR1BL = 0xE2;
    03E0 EE82      LDI	R24,0xE2
    03E1 BD88      OUT	0x28,R24
(0210)  ICR1H  = 0x04;
    03E2 E084      LDI	R24,4
    03E3 BD87      OUT	0x27,R24
(0211)  ICR1L  = 0xE2;
    03E4 EE82      LDI	R24,0xE2
    03E5 BD86      OUT	0x26,R24
(0212)  TCCR1A = 0x00;
    03E6 BC2F      OUT	0x2F,R2
(0213)  TCCR1B = 0x03; //start Timer
    03E7 E083      LDI	R24,3
    03E8 BD8E      OUT	0x2E,R24
    03E9 940E0540  CALL	pop_gset1
    03EB 9508      RET
_SCH_Update_Server:
    03EC 940E055D  CALL	push_lset
(0214) } 
(0215) 
(0216) 
(0217) /*---------------------------------------------------------*-
(0218)  * 函数名称: SCH_Update_Server()
(0219)  * 入	 口: 
(0220)  * 出	 口:
(0221)  * 函数功能: 调度器的中断服务程序
(0222)  * 
(0223)  * 说	 明: "刷新"函数,确定某个任务需要运行时,将这个任务的
(0224)  * 			 RunMe标志加1,然后该任务将由调度程序执行.
(0225) -*---------------------------------------------------------*/
(0226) #pragma interrupt_handler SCH_Update_Server:9 //定时器溢出中断
(0227) void SCH_Update_Server(void)
(0228) {
(0229)   TCNT1H = 0xFB; //reload counter value
    03EE EF8B      LDI	R24,0xFB
    03EF BD8D      OUT	0x2D,R24
(0230)   TCNT1L = 0x1E; 
    03F0 E18E      LDI	R24,0x1E
    03F1 BD8C      OUT	0x2C,R24
(0231)   
(0232)   TimeTick++;
    03F2 91800068  LDS	R24,TimeTick
    03F4 5F8F      SUBI	R24,0xFF
    03F5 93800068  STS	TimeTick,R24
(0233)   MotorDelayTime++;
    03F7 91800066  LDS	R24,MotorDelayTime
    03F9 91900067  LDS	R25,MotorDelayTime+1
    03FB 9601      ADIW	R24,1
    03FC 93900067  STS	MotorDelayTime+1,R25
    03FE 93800066  STS	MotorDelayTime,R24
(0234)   
(0235)   
(0236)   if(TimeTick%100 == 0)	  //1s喂狗
    0400 E614      LDI	R17,0x64
    0401 91000068  LDS	R16,TimeTick
    0403 940E0517  CALL	mod8u
    0405 2300      TST	R16
    0406 F449      BNE	0x0410
(0237)   {
(0238)    if(TimeTick == 200)TimeTick = 0;
    0407 91800068  LDS	R24,TimeTick
    0409 3C88      CPI	R24,0xC8
    040A F419      BNE	0x040E
    040B 2422      CLR	R2
    040C 92200068  STS	TimeTick,R2
(0239)    OutWdServer();  
    040E 940E009C  CALL	_OutWdServer
(0240)   }
(0241)   
(0242)   
(0243)   SCH_Updata();
    0410 DF60      RCALL	_SCH_Updata
    0411 940E0574  CALL	pop_lset
    0413 9518      RETI
(0244) 
(0245) }
(0246) 
(0247) 
(0248) /*---------------------------------------------------------*-
(0249)  * 函数名称: SCH_Start()
(0250)  * 入	 口: 
(0251)  * 出	 口:
(0252)  * 函数功能: 通过允许中断来启动调度器
(0253)  * 
(0254)  * 说	 明: 在添加了所有定期的任务之后调用,从而使任务保持同步.
(0255)  *			 注意:应该只使能调度器中断
(0256) -*---------------------------------------------------------*/
(0257) 
(0258) void SCH_Start(void)
(0259) {
(0260)  SEI();
_SCH_Start:
    0414 9478      BSET	7
    0415 9508      RET
FILE: E:\_ING\文档\_STQ\easy-STQ-20080712\alarm.c
(0001) 
(0002) ///////////////////////////////////////////////////////////////
(0003) /**************************************************************
(0004) 
(0005) 	公司名称:	 扬州恒博科技
(0006) 	模块名	:	 点动型STQ执行机构主控程序 
(0007) 	创建人	:	 章俭文                                         
(0008) 	日期	:	 2008/08/19	                                         
(0009) 	功能描述:   完成对本地旋钮和远程开关量的控制功能                                
(0010) 	其它说明:   编译环境为ICCAVR V6.31A                                            
(0011) 	版本	:	 V1.0
(0012) 
(0013) **************************************************************/
(0014) ///////////////////////////////////////////////////////////////
(0015) 
(0016) #define ALARM_GLOBAL
(0017) #include "alarm.h"  
(0018) 
(0019) static void Flash(void);
(0020) 
(0021) void Alarm() 			//执行器状态的LED告警指示
(0022) {
(0023)  
(0024)  if((MotorFlag == CLOSE)||(MotorFlag == OPEN))		//闪烁
_Alarm:
    0416 91800065  LDS	R24,MotorFlag
    0418 3082      CPI	R24,2
    0419 F021      BEQ	0x041E
    041A 91800065  LDS	R24,MotorFlag
    041C 3081      CPI	R24,1
    041D F409      BNE	0x041F
(0025)  {
(0026)   Flash();
    041E D001      RCALL	_Flash
(0027)  } 
    041F 9508      RET
(0028)  
(0029) }
(0030) 
(0031) static void Flash()
(0032) {
(0033)  static uchar last_flash = 0;
(0034)  if(last_flash)
_Flash:
    0420 90200063  LDS	R2,last_flash
    0422 2022      TST	R2
    0423 F051      BEQ	0x042E
(0035)  {
(0036)   if(GetLocal())
    0424 99CE      SBIC	0x19,6
    0425 C001      RJMP	0x0427
(0037)   {
(0038)    SetRemoteLed();
    0426 98C6      CBI	0x18,6
(0039)   }
(0040)   if(GetRemote())
    0427 99CD      SBIC	0x19,5
    0428 C001      RJMP	0x042A
(0041)   {
(0042)    SetLocalLed();
    0429 98C5      CBI	0x18,5
(0043)   }
(0044)   last_flash = 0;
    042A 2422      CLR	R2
    042B 92200063  STS	last_flash,R2
(0045)  }
    042D C009      RJMP	0x0437
(0046)  else
(0047)  {
(0048)   if(GetLocal())
    042E 99CE      SBIC	0x19,6
    042F C001      RJMP	0x0431
(0049)   {
(0050)    ClrRemoteLed();
    0430 9AC6      SBI	0x18,6
(0051)   }
(0052)   if(GetRemote())
    0431 99CD      SBIC	0x19,5
    0432 C001      RJMP	0x0434
(0053)   {
(0054)    ClrLocalLed();

⌨️ 快捷键说明

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