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

📄 taskexcu.s

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 S
字号:
	.module taskexcu.c
	.area vector(rom, abs)
	.org 16
	jmp _OSTickISR
	.area text(rom, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\taskexcu.c
	.dbfunc e TC2_Init _TC2_Init fV
	.even
_TC2_Init::
	.dbline -1
	.dbline 33
; 
; #define Test1_GLOBALS
; #include "includes.h"
; 
; #include <iom16v.h>
; #include <macros.h>
; #include <stdio.h>
; #include "prototype.h"
; 
; #pragma interrupt_handler OSTickISR:5
; 
; //******************************************************************************
; // Constants
; #define TaskStartPrio	10		// Task-Prioritaeten
; //*****************************************************************************
; // Variablen
; INT8U    time[6];
; INT8U    h,m,s,state;
; OS_STK	Task1Stack[OS_TASK_DEF_STK_SIZE];		// startup task stack
; OS_STK	Task2Stack[OS_TASK_DEF_STK_SIZE];
; //ICC-AVR application builder : 2003-12-28 21:52:56
; // Target : M8
; // Crystal: 8.0000Mhz
; 
; //*****************************************************************************
; // Prototypes
; 
; //*****************************************************************************
; //			TickISR
; //*****************************************************************************
; // Init Timer/Counter2 fuer Takterzeugung
; void TC2_Init (void)
; {	
	.dbline 37
; 	/* Only uses TIMER2 overflow for tick interrupt. Timer compare
;      * can also be used.
;      */
; 	TIMSK &= ~(BIT(TOIE2)/* | BIT(OCIE2) */);	//disable TC2 interrupts
	in R24,0x39
	andi R24,191
	out 0x39,R24
	.dbline 38
; 	TCCR2 = 0x48;		// CTC
	ldi R24,72
	out 0x25,R24
	.dbline 39
; 	TCNT2 = 0; 	// Counter ruecksetzen, 2ms @ 8MHz
	clr R2
	out 0x24,R2
	.dbline 40
;     TCCR2 |= 0x06;   // 256
	in R24,0x25
	ori R24,6
	out 0x25,R24
	.dbline 41
; 	OCR2 = 250;			// OutputCompareRegister
	ldi R24,250
	out 0x23,R24
	.dbline 42
; 	TIMSK |= BIT(TOIE2);	// enable OVF-interrupt
	in R24,0x39
	ori R24,64
	out 0x39,R24
	.dbline 45
; 	                                                                                                                                //TIMSK |= OCIE2;		// enable COMP-interrupt
; 	
;     SEI();	// enable global interrupt     
	sei
	.dbline -2
	.dbline 46
; }
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	sbiw R28,3
	.dbline -1
	.dbline 58
; 
; //*****************************************************************************
; // Interrupt Timer/Counter0 Overflow
; // OVF_Takt:  8MHz / 256 / 250 = 125Hz (8ms)
; 
; void Task1(void *pdata);
; void Task2(void *pdata);
; 
; //*****************************************************************************
; // Start
; void main(void)
; {
	.dbline 59
; 	OSInit();		// OS init
	xcall _OSInit
	.dbline 60
; 	OSTaskCreate(Task1,
	ldi R24,7
	std y+2,R24
	ldi R24,<_Task1Stack+99
	ldi R25,>_Task1Stack+99
	std y+0,R24
	std y+1,R25
	clr R18
	clr R19
	ldi R16,<PL_Task1
	ldi R17,>PL_Task1
	xcall _OSTaskCreate
	.dbline 64
; 				(void *)0,
; 				&Task1Stack[OS_TASK_DEF_STK_SIZE-1],
; 				7);
; 	OSTaskCreate(Task2,
	ldi R24,8
	std y+2,R24
	ldi R24,<_Task2Stack+99
	ldi R25,>_Task2Stack+99
	std y+0,R24
	std y+1,R25
	clr R18
	clr R19
	ldi R16,<PL_Task2
	ldi R17,>PL_Task2
	xcall _OSTaskCreate
	.dbline 69
; 				(void *)0,
; 				&Task2Stack[OS_TASK_DEF_STK_SIZE-1],
; 				8); 
; 	// init und start tick
;     TC2_Init();			// Timer/Counter#2 Overflow and Comp init 
	xcall _TC2_Init
	.dbline 70
; 	Board_init();  
	xcall _Board_init
	.dbline 71
;     OSStart();		// start multitasking
	xcall _OSStart
	.dbline -2
	.dbline 72
; }
L3:
	adiw R28,3
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Task1 _Task1 fV
;              i -> R20
;           data -> R20,R21
	.even
_Task1::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 76
; 
; //*****************************************************************************
; void Task1(void *data)
; {
	.dbline 78
;     uchar i;
; 	data = data;	
	.dbline 79
; 	state = 1;
	ldi R24,1
	sts _state,R24
	.dbline 80
; 	for (;;)
L7:
	.dbline 81
; 	{
	.dbline 82
;         DS1302_getT(time);
	ldi R16,<_time
	ldi R17,>_time
	xcall _DS1302_getT
	.dbline 83
; 		for(i=0;i<3;i++)
	clr R20
	xjmp L14
L11:
	.dbline 84
	.dbline 85
	ldi R24,2
	mul R24,R20
	ldi R24,<_time
	ldi R25,>_time
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	swap R24
	andi R24,#0x0F
	ldi R30,<_time+1
	ldi R31,>_time+1
	movw R26,R0
	add R26,R30
	adc R27,R31
	st x,R24
	.dbline 86
	ldi R24,2
	mul R24,R20
	movw R2,R0
	ldi R24,<_time
	ldi R25,>_time
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	andi R24,15
	std z+0,R24
	.dbline 87
L12:
	.dbline 83
	inc R20
L14:
	.dbline 83
	cpi R20,3
	brlo L11
	.dbline 88
	ldi R16,<_time
	ldi R17,>_time
	xcall _All_smg_display
	.dbline 89
	ldi R16,1
	ldi R17,0
	xcall _OSTimeDly
	.dbline 90
	.dbline 80
	.dbline 80
	xjmp L7
X0:
	.dbline -2
L6:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r data 20 pV
	.dbend
	.dbfunc e Task2 _Task2 fV
;              i -> R20
;           data -> R22,R23
	.even
_Task2::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 93
; 		{
; 		    time[i*2+1]=time[i*2]>>4;
; 			time[i*2]=time[i*2]&0x0F;
; 		}
; 		All_smg_display(time);
; 		OSTimeDly (1);
; 	}
; }
; void Task2(void *data)
; {
	.dbline 94
;  	uchar i=0;
	clr R20
	.dbline 95
;     data = data;
	.dbline 97
; 	//OSTimeDly(5);	
; 	for (;;)
L17:
	.dbline 98
; 	{
	.dbline 99
; 	    if(i<8)
	cpi R20,8
	brsh L21
	.dbline 100
; 		{
	.dbline 101
; 		    All_led(0);	//全部熄灭
	clr R16
	xcall _All_led
	.dbline 102
;   			One_led(i,1);	//点亮指定的LED;
	ldi R18,1
	mov R16,R20
	xcall _One_led
	.dbline 103
; 			i=i+1;
	inc R20
	.dbline 104
; 		}
	xjmp L22
L21:
	.dbline 106
; 		else
; 		{
	.dbline 107
; 		    i=0;
	clr R20
	.dbline 108
; 		}
L22:
	.dbline 109
	ldi R16,15
	ldi R17,0
	xcall _OSTimeDly
	.dbline 110
	.dbline 97
	.dbline 97
	xjmp L17
X1:
	.dbline -2
L16:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r data 22 pV
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\taskexcu.c
_Task2Stack::
	.blkb 100
	.dbsym e Task2Stack _Task2Stack A[100:100]c
_Task1Stack::
	.blkb 100
	.dbsym e Task1Stack _Task1Stack A[100:100]c
_state::
	.blkb 1
	.dbsym e state _state c
_s::
	.blkb 1
	.dbsym e s _s c
_m::
	.blkb 1
	.dbsym e m _m c
_h::
	.blkb 1
	.dbsym e h _h c
_time::
	.blkb 6
	.dbsym e time _time A[6:6]c
	.area func_lit
PL_Task2:	.word `_Task2
PL_Task1:	.word `_Task1

⌨️ 快捷键说明

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