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

📄 schedule.s

📁 avr单片机ATMega16对三相异步电机的智能控制源码
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldi R25,>_SCH_tasks_G+6
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 145
; 
; 	return Return_code;
	mov R16,R20
	.dbline -2
L26:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Return_code 20 c
	.dbsym r TASK_INDEX 16 kc
	.dbend
	.dbfunc s SCH_Updata _SCH_Updata fV
;          Index -> R16
	.even
_SCH_Updata:
	.dbline -1
	.dbline 160
; }
; 
; 
; /*---------------------------------------------------------*-
;  * 函数名称: SCH_Update()
;  * 入	 口: 
;  * 出	 口:
;  * 函数功能: 在调度器的中断服务程序中运行
;  * 
;  * 说	 明: "刷新"函数,确定某个任务需要运行时,将这个任务的
;  * 			 RunMe标志加1,然后该任务将由调度程序执行.
; -*---------------------------------------------------------*/
; 
; static void SCH_Updata(void)
; {
	.dbline 162
; 	unsigned char Index;
; 	for (Index=0; Index < SCH_MAX_TASKS; Index++)
	clr R16
	xjmp L36
L33:
	.dbline 163
; 	{
	.dbline 165
; 		// 检测这里是否有任务?
; 		if (SCH_tasks_G[Index].pTask != 0)
	ldi R24,7
	mul R24,R16
	movw R30,R0
	ldi R24,<_SCH_tasks_G
	ldi R25,>_SCH_tasks_G
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	tst R2
	brne X4
	tst R3
	brne X7
	xjmp L37
X7:
X4:
	.dbline 166
; 		{
	.dbline 167
; 			if (SCH_tasks_G[Index].Delay == 0)
	ldi R24,7
	mul R24,R16
	movw R30,R0
	ldi R24,<_SCH_tasks_G+2
	ldi R25,>_SCH_tasks_G+2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	tst R2
	breq X8
	xjmp L39
X8:
	tst R3
	breq X9
	xjmp L39
X9:
X5:
	.dbline 168
; 			{
	.dbline 169
; 				SCH_tasks_G[Index].RunMe += 1;	// RunMer标志加1
	ldi R24,7
	mul R24,R16
	movw R2,R0
	ldi R24,<_SCH_tasks_G+6
	ldi R25,>_SCH_tasks_G+6
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	subi R24,255    ; addi 1
	std z+0,R24
	.dbline 170
; 				if (SCH_tasks_G[Index].Period != 0)
	ldi R24,7
	mul R24,R16
	movw R30,R0
	ldi R24,<_SCH_tasks_G+4
	ldi R25,>_SCH_tasks_G+4
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	tst R2
	brne X6
	tst R3
	breq L40
X6:
	.dbline 171
; 				{
	.dbline 173
; 					// 调度定期的任务再次运行
; 					SCH_tasks_G[Index].Delay = SCH_tasks_G[Index].Period;	
	ldi R24,7
	mul R24,R16
	ldi R24,<_SCH_tasks_G+4
	ldi R25,>_SCH_tasks_G+4
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldi R24,<_SCH_tasks_G+2
	ldi R25,>_SCH_tasks_G+2
	movw R30,R0
	add R30,R24
	adc R31,R25
	std z+1,R3
	std z+0,R2
	.dbline 174
; 				}
	.dbline 175
; 			}
	xjmp L40
L39:
	.dbline 177
; 			else
; 			{
	.dbline 179
; 				// 还没有准备好运行,延迟减1
; 				SCH_tasks_G[Index].Delay -= 1;		
	ldi R24,7
	mul R24,R16
	movw R2,R0
	ldi R24,<_SCH_tasks_G+2
	ldi R25,>_SCH_tasks_G+2
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,1
	std z+1,R25
	std z+0,R24
	.dbline 180
; 			}
L40:
	.dbline 181
; 		}	
L37:
	.dbline 182
L34:
	.dbline 162
	inc R16
L36:
	.dbline 162
	cpi R16,3
	brsh X10
	xjmp L33
X10:
	.dbline -2
L32:
	.dbline 0 ; func end
	ret
	.dbsym r Index 16 c
	.dbend
	.dbfunc e InitTimer1 _InitTimer1 fV
;              i -> R20
	.even
_InitTimer1::
	xcall push_gset1
	.dbline -1
	.dbline 195
; 	}
; }
; 
; 
; /*---------------------------------------------------------*-
;  * 函数名称: SCH_Init_Timer2()
;  * 入	 口: 
;  * 出	 口:
;  * 函数功能: 准备调度器数据结构并且设置定时器以所需的频率中断
;  * 
;  * 说	 明: 调度器初始化化函数,必须在使用调度器之前调用它
; -*---------------------------------------------------------*/
; void  InitTimer1(void)			//8MHz,10ms,64分频
; {
	.dbline 198
;  uchar i;
; 	
;  for (i=0; i<SCH_MAX_TASKS; i++)
	clr R20
	xjmp L53
L50:
	.dbline 199
	.dbline 200
	mov R16,R20
	xcall _SCH_Delete_Task
	.dbline 201
L51:
	.dbline 198
	inc R20
L53:
	.dbline 198
	cpi R20,3
	brlo L50
	.dbline 203
;  {
;   SCH_Delete_Task(i);
;  }
; 
;  TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 204
;  TCNT1H = 0xFB; //setup
	ldi R24,251
	out 0x2d,R24
	.dbline 205
;  TCNT1L = 0x1E;
	ldi R24,30
	out 0x2c,R24
	.dbline 206
;  OCR1AH = 0x04;
	ldi R24,4
	out 0x2b,R24
	.dbline 207
;  OCR1AL = 0xE2;
	ldi R24,226
	out 0x2a,R24
	.dbline 208
;  OCR1BH = 0x04;
	ldi R24,4
	out 0x29,R24
	.dbline 209
;  OCR1BL = 0xE2;
	ldi R24,226
	out 0x28,R24
	.dbline 210
;  ICR1H  = 0x04;
	ldi R24,4
	out 0x27,R24
	.dbline 211
;  ICR1L  = 0xE2;
	ldi R24,226
	out 0x26,R24
	.dbline 212
;  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 213
;  TCCR1B = 0x03; //start Timer
	ldi R24,3
	out 0x2e,R24
	.dbline -2
L49:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.area vector(rom, abs)
	.org 32
	jmp _SCH_Update_Server
	.area text(rom, con, rel)
	.dbfile E:\_ING\文档\_STQ\easy-STQ-20080712\schedule.c
	.dbfunc e SCH_Update_Server _SCH_Update_Server fV
	.even
_SCH_Update_Server::
	xcall push_lset
	.dbline -1
	.dbline 228
; } 
; 
; 
; /*---------------------------------------------------------*-
;  * 函数名称: SCH_Update_Server()
;  * 入	 口: 
;  * 出	 口:
;  * 函数功能: 调度器的中断服务程序
;  * 
;  * 说	 明: "刷新"函数,确定某个任务需要运行时,将这个任务的
;  * 			 RunMe标志加1,然后该任务将由调度程序执行.
; -*---------------------------------------------------------*/
; #pragma interrupt_handler SCH_Update_Server:9 //定时器溢出中断
; void SCH_Update_Server(void)
; {
	.dbline 229
;   TCNT1H = 0xFB; //reload counter value
	ldi R24,251
	out 0x2d,R24
	.dbline 230
;   TCNT1L = 0x1E; 
	ldi R24,30
	out 0x2c,R24
	.dbline 232
;   
;   TimeTick++;
	lds R24,_TimeTick
	subi R24,255    ; addi 1
	sts _TimeTick,R24
	.dbline 233
;   MotorDelayTime++;
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	adiw R24,1
	sts _MotorDelayTime+1,R25
	sts _MotorDelayTime,R24
	.dbline 236
;   
;   
;   if(TimeTick%100 == 0)	  //1s喂狗
	ldi R17,100
	lds R16,_TimeTick
	xcall mod8u
	tst R16
	brne L55
	.dbline 237
;   {
	.dbline 238
;    if(TimeTick == 200)TimeTick = 0;
	lds R24,_TimeTick
	cpi R24,200
	brne L57
	.dbline 238
	clr R2
	sts _TimeTick,R2
L57:
	.dbline 239
;    OutWdServer();  
	xcall _OutWdServer
	.dbline 240
;   }
L55:
	.dbline 243
;   
;   
;   SCH_Updata();
	xcall _SCH_Updata
	.dbline -2
L54:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e SCH_Start _SCH_Start fV
	.even
_SCH_Start::
	.dbline -1
	.dbline 259
; 
; }
; 
; 
; /*---------------------------------------------------------*-
;  * 函数名称: SCH_Start()
;  * 入	 口: 
;  * 出	 口:
;  * 函数功能: 通过允许中断来启动调度器
;  * 
;  * 说	 明: 在添加了所有定期的任务之后调用,从而使任务保持同步.
;  *			 注意:应该只使能调度器中断
; -*---------------------------------------------------------*/
; 
; void SCH_Start(void)
; {
	.dbline 260
;  SEI();
	sei
	.dbline -2
L59:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\_ING\文档\_STQ\easy-STQ-20080712\schedule.c
_SCH_tasks_G::
	.blkb 21
	.dbstruct 0 7 .3
	.dbfield 0 pTask pfV
	.dbfield 2 Delay i
	.dbfield 4 Period i
	.dbfield 6 RunMe c
	.dbend
	.dbsym e SCH_tasks_G _SCH_tasks_G A[21:3]S[.3]

⌨️ 快捷键说明

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