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

📄 taskexcu.lis

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 LIS
字号:
                        .module taskexcu.c
                        .area vector(rom, abs)
                        .org 16
 0010 0C940000          jmp _OSTickISR
                        .area text(rom, con, rel)
 0000                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\taskexcu.c
 0000                   .dbfunc e TC2_Init _TC2_Init fV
                        .even
 0000           _TC2_Init::
 0000                   .dbline -1
 0000                   .dbline 33
 0000           ; 
 0000           ; #define Test1_GLOBALS
 0000           ; #include "includes.h"
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include <stdio.h>
 0000           ; #include "prototype.h"
 0000           ; 
 0000           ; #pragma interrupt_handler OSTickISR:5
 0000           ; 
 0000           ; //******************************************************************************
 0000           ; // Constants
 0000           ; #define TaskStartPrio 10              // Task-Prioritaeten
 0000           ; //*****************************************************************************
 0000           ; // Variablen
 0000           ; INT8U    time[6];
 0000           ; INT8U    h,m,s,state;
 0000           ; OS_STK        Task1Stack[OS_TASK_DEF_STK_SIZE];               // startup task stack
 0000           ; OS_STK        Task2Stack[OS_TASK_DEF_STK_SIZE];
 0000           ; //ICC-AVR application builder : 2003-12-28 21:52:56
 0000           ; // Target : M8
 0000           ; // Crystal: 8.0000Mhz
 0000           ; 
 0000           ; //*****************************************************************************
 0000           ; // Prototypes
 0000           ; 
 0000           ; //*****************************************************************************
 0000           ; //                    TickISR
 0000           ; //*****************************************************************************
 0000           ; // Init Timer/Counter2 fuer Takterzeugung
 0000           ; void TC2_Init (void)
 0000           ; {     
 0000                   .dbline 37
 0000           ;       /* Only uses TIMER2 overflow for tick interrupt. Timer compare
 0000           ;      * can also be used.
 0000           ;      */
 0000           ;       TIMSK &= ~(BIT(TOIE2)/* | BIT(OCIE2) */);       //disable TC2 interrupts
 0000 89B7              in R24,0x39
 0002 8F7B              andi R24,191
 0004 89BF              out 0x39,R24
 0006                   .dbline 38
 0006           ;       TCCR2 = 0x48;           // CTC
 0006 88E4              ldi R24,72
 0008 85BD              out 0x25,R24
 000A                   .dbline 39
 000A           ;       TCNT2 = 0;      // Counter ruecksetzen, 2ms @ 8MHz
 000A 2224              clr R2
 000C 24BC              out 0x24,R2
 000E                   .dbline 40
 000E           ;     TCCR2 |= 0x06;   // 256
 000E 85B5              in R24,0x25
 0010 8660              ori R24,6
 0012 85BD              out 0x25,R24
 0014                   .dbline 41
 0014           ;       OCR2 = 250;                     // OutputCompareRegister
 0014 8AEF              ldi R24,250
 0016 83BD              out 0x23,R24
 0018                   .dbline 42
 0018           ;       TIMSK |= BIT(TOIE2);    // enable OVF-interrupt
 0018 89B7              in R24,0x39
 001A 8064              ori R24,64
 001C 89BF              out 0x39,R24
 001E                   .dbline 45
 001E           ;                                                                                                                                       //TIMSK |= OCIE2;               // enable COMP-interrupt
 001E           ;       
 001E           ;     SEI();    // enable global interrupt     
 001E 7894              sei
 0020                   .dbline -2
 0020                   .dbline 46
 0020           ; }
 0020           L2:
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbend
 0022                   .dbfunc e main _main fV
                        .even
 0022           _main::
 0022 2397              sbiw R28,3
 0024                   .dbline -1
 0024                   .dbline 58
 0024           ; 
 0024           ; //*****************************************************************************
 0024           ; // Interrupt Timer/Counter0 Overflow
 0024           ; // OVF_Takt:  8MHz / 256 / 250 = 125Hz (8ms)
 0024           ; 
 0024           ; void Task1(void *pdata);
 0024           ; void Task2(void *pdata);
 0024           ; 
 0024           ; //*****************************************************************************
 0024           ; // Start
 0024           ; void main(void)
 0024           ; {
 0024                   .dbline 59
 0024           ;       OSInit();               // OS init
 0024 0E940000          xcall _OSInit
 0028                   .dbline 60
 0028           ;       OSTaskCreate(Task1,
 0028 87E0              ldi R24,7
 002A 8A83              std y+2,R24
 002C 80E0              ldi R24,<_Task1Stack+99
 002E 90E0              ldi R25,>_Task1Stack+99
 0030 8883              std y+0,R24
 0032 9983              std y+1,R25
 0034 2227              clr R18
 0036 3327              clr R19
 0038 00E0              ldi R16,<PL_Task1
 003A 10E0              ldi R17,>PL_Task1
 003C 0E940000          xcall _OSTaskCreate
 0040                   .dbline 64
 0040           ;                               (void *)0,
 0040           ;                               &Task1Stack[OS_TASK_DEF_STK_SIZE-1],
 0040           ;                               7);
 0040           ;       OSTaskCreate(Task2,
 0040 88E0              ldi R24,8
 0042 8A83              std y+2,R24
 0044 80E0              ldi R24,<_Task2Stack+99
 0046 90E0              ldi R25,>_Task2Stack+99
 0048 8883              std y+0,R24
 004A 9983              std y+1,R25
 004C 2227              clr R18
 004E 3327              clr R19
 0050 00E0              ldi R16,<PL_Task2
 0052 10E0              ldi R17,>PL_Task2
 0054 0E940000          xcall _OSTaskCreate
 0058                   .dbline 69
 0058           ;                               (void *)0,
 0058           ;                               &Task2Stack[OS_TASK_DEF_STK_SIZE-1],
 0058           ;                               8); 
 0058           ;       // init und start tick
 0058           ;     TC2_Init();                       // Timer/Counter#2 Overflow and Comp init 
 0058 D3DF              xcall _TC2_Init
 005A                   .dbline 70
 005A           ;       Board_init();  
 005A 0E940000          xcall _Board_init
 005E                   .dbline 71
 005E           ;     OSStart();                // start multitasking
 005E 0E940000          xcall _OSStart
 0062                   .dbline -2
 0062                   .dbline 72
 0062           ; }
 0062           L3:
 0062 2396              adiw R28,3
 0064                   .dbline 0 ; func end
 0064 0895              ret
 0066                   .dbend
 0066                   .dbfunc e Task1 _Task1 fV
 0066           ;              i -> R20
 0066           ;           data -> R20,R21
                        .even
 0066           _Task1::
 0066 0E940000          xcall push_gset1
 006A A801              movw R20,R16
 006C                   .dbline -1
 006C                   .dbline 76
 006C           ; 
 006C           ; //*****************************************************************************
 006C           ; void Task1(void *data)
 006C           ; {
 006C                   .dbline 78
 006C           ;     uchar i;
 006C           ;       data = data;    
 006C                   .dbline 79
 006C           ;       state = 1;
 006C 81E0              ldi R24,1
 006E 8093C800          sts _state,R24
 0072                   .dbline 80
 0072           ;       for (;;)
 0072           L7:
 0072                   .dbline 81
 0072           ;       {
 0072                   .dbline 82
 0072           ;         DS1302_getT(time);
 0072 00E0              ldi R16,<_time
 0074 10E0              ldi R17,>_time
 0076 0E940000          xcall _DS1302_getT
 007A                   .dbline 83
 007A           ;               for(i=0;i<3;i++)
 007A 4427              clr R20
 007C 1CC0              xjmp L14
 007E           L11:
 007E                   .dbline 84
 007E                   .dbline 85
 007E 82E0              ldi R24,2
 0080 849F              mul R24,R20
 0082 80E0              ldi R24,<_time
 0084 90E0              ldi R25,>_time
 0086 F001              movw R30,R0
 0088 E80F              add R30,R24
 008A F91F              adc R31,R25
 008C 8081              ldd R24,z+0
 008E 8295              swap R24
 0090 8F70              andi R24,#0x0F
 0092 E0E0              ldi R30,<_time+1
 0094 F0E0              ldi R31,>_time+1
 0096 D001              movw R26,R0
 0098 AE0F              add R26,R30
 009A BF1F              adc R27,R31
 009C 8C93              st x,R24
 009E                   .dbline 86
 009E 82E0              ldi R24,2
 00A0 849F              mul R24,R20
 00A2 1001              movw R2,R0
 00A4 80E0              ldi R24,<_time
 00A6 90E0              ldi R25,>_time
 00A8 280E              add R2,R24
 00AA 391E              adc R3,R25
 00AC F101              movw R30,R2
 00AE 8081              ldd R24,z+0
 00B0 8F70              andi R24,15
 00B2 8083              std z+0,R24
 00B4                   .dbline 87
 00B4           L12:
 00B4                   .dbline 83
 00B4 4395              inc R20
 00B6           L14:
 00B6                   .dbline 83
 00B6 4330              cpi R20,3
 00B8 10F3              brlo L11
 00BA                   .dbline 88
 00BA 00E0              ldi R16,<_time
 00BC 10E0              ldi R17,>_time
 00BE 0E940000          xcall _All_smg_display
 00C2                   .dbline 89
 00C2 01E0              ldi R16,1
 00C4 10E0              ldi R17,0
 00C6 0E940000          xcall _OSTimeDly
 00CA                   .dbline 90
 00CA                   .dbline 80
 00CA                   .dbline 80
 00CA D3CF              xjmp L7
 00CC           X0:
 00CC                   .dbline -2
 00CC           L6:
 00CC 0E940000          xcall pop_gset1
 00D0                   .dbline 0 ; func end
 00D0 0895              ret
 00D2                   .dbsym r i 20 c
 00D2                   .dbsym r data 20 pV
 00D2                   .dbend
 00D2                   .dbfunc e Task2 _Task2 fV
 00D2           ;              i -> R20
 00D2           ;           data -> R22,R23
                        .even
 00D2           _Task2::
 00D2 0E940000          xcall push_gset2
 00D6 B801              movw R22,R16
 00D8                   .dbline -1
 00D8                   .dbline 93
 00D8           ;               {
 00D8           ;                   time[i*2+1]=time[i*2]>>4;
 00D8           ;                       time[i*2]=time[i*2]&0x0F;
 00D8           ;               }
 00D8           ;               All_smg_display(time);
 00D8           ;               OSTimeDly (1);
 00D8           ;       }
 00D8           ; }
 00D8           ; void Task2(void *data)
 00D8           ; {
 00D8                   .dbline 94
 00D8           ;       uchar i=0;
 00D8 4427              clr R20
 00DA                   .dbline 95
 00DA           ;     data = data;
 00DA                   .dbline 97
 00DA           ;       //OSTimeDly(5); 
 00DA           ;       for (;;)
 00DA           L17:
 00DA                   .dbline 98
 00DA           ;       {
 00DA                   .dbline 99
 00DA           ;           if(i<8)
 00DA 4830              cpi R20,8
 00DC 48F4              brsh L21
 00DE                   .dbline 100
 00DE           ;               {
 00DE                   .dbline 101
 00DE           ;                   All_led(0); //全部熄灭
 00DE 0027              clr R16
 00E0 0E940000          xcall _All_led
 00E4                   .dbline 102
 00E4           ;                       One_led(i,1);   //点亮指定的LED;
 00E4 21E0              ldi R18,1
 00E6 042F              mov R16,R20
 00E8 0E940000          xcall _One_led
 00EC                   .dbline 103
 00EC           ;                       i=i+1;
 00EC 4395              inc R20
 00EE                   .dbline 104
 00EE           ;               }
 00EE 01C0              xjmp L22
 00F0           L21:
 00F0                   .dbline 106
 00F0           ;               else
 00F0           ;               {
 00F0                   .dbline 107
 00F0           ;                   i=0;
 00F0 4427              clr R20
 00F2                   .dbline 108
 00F2           ;               }
 00F2           L22:
 00F2                   .dbline 109
 00F2 0FE0              ldi R16,15
 00F4 10E0              ldi R17,0
 00F6 0E940000          xcall _OSTimeDly
 00FA                   .dbline 110
 00FA                   .dbline 97
 00FA                   .dbline 97
 00FA EFCF              xjmp L17
 00FC           X1:
 00FC                   .dbline -2
 00FC           L16:
 00FC 0E940000          xcall pop_gset2
 0100                   .dbline 0 ; func end
 0100 0895              ret
 0102                   .dbsym r i 20 c
 0102                   .dbsym r data 22 pV
 0102                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\taskexcu.c
 0000           _Task2Stack::
 0000                   .blkb 100
 0064                   .dbsym e Task2Stack _Task2Stack A[100:100]c
 0064           _Task1Stack::
 0064                   .blkb 100
 00C8                   .dbsym e Task1Stack _Task1Stack A[100:100]c
 00C8           _state::
 00C8                   .blkb 1
 00C9                   .dbsym e state _state c
 00C9           _s::
 00C9                   .blkb 1
 00CA                   .dbsym e s _s c
 00CA           _m::
 00CA                   .blkb 1
 00CB                   .dbsym e m _m c
 00CB           _h::
 00CB                   .blkb 1
 00CC                   .dbsym e h _h c
 00CC           _time::
 00CC                   .blkb 6
 00D2                   .dbsym e time _time A[6:6]c
                        .area func_lit
 0000 6900      PL_Task2:       .word `_Task2
 0002 3300      PL_Task1:       .word `_Task1

⌨️ 快捷键说明

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