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

📄 main.s90

📁 IAR_ATMega16_UCOS_II.rar
💻 S90
字号:
///////////////////////////////////////////////////////////////////////////////
//                                                                            /
// IAR C/C++ Compiler V5.30.0.50166/W32 for Atmel AVR   26/Dec/2009  09:14:41 /
// Copyright 1996-2009 IAR Systems AB.                                        /
//                                                                            /
//    Source file  =  E:\design\AVR\IAR_UCOS_II\main.c                        /
//    Command line =  E:\design\AVR\IAR_UCOS_II\main.c --cpu=m16 -ms -o       /
//                    E:\design\AVR\IAR_UCOS_II\Debug\Obj\ -lCN               /
//                    E:\design\AVR\IAR_UCOS_II\Debug\List\ -lB               /
//                    E:\design\AVR\IAR_UCOS_II\Debug\List\                   /
//                    --initializers_in_flash -z3 --no_cse --no_inline        /
//                    --no_code_motion --no_cross_call --no_clustering        /
//                    --no_tbaa --debug -e -I "D:\IAR Systems\Embedded        /
//                    Workbench 5.3 For AVR\avr\INC\" -I "D:\IAR              /
//                    Systems\Embedded Workbench 5.3 For AVR\avr\INC\CLIB\"   /
//                    --eeprom_size 512                                       /
//    List file    =  E:\design\AVR\IAR_UCOS_II\Debug\List\main.s90           /
//                                                                            /
//                                                                            /
///////////////////////////////////////////////////////////////////////////////

        NAME main

        RSEG CSTACK:DATA:NOROOT(0)
        RSEG RSTACK:DATA:NOROOT(0)

        EXTERN ?need_segment_init

        PUBWEAK `?<Segment init: NEAR_Z>`
        PUBLIC ADC_interrupt_routine
        PUBLIC AvrInit
        PUBLIC OSICB
        PUBLIC Task1
        PUBLIC Task1Stk
        PUBLIC Task2
        PUBLIC Task2Stk
        PUBLIC Task3
        PUBLIC Task3Stk
        PUBLIC Task4
        PUBLIC Task4Stk
        PUBWEAK _A_ADCSRA
        PUBWEAK _A_ADMUX
        PUBWEAK _A_DDRA
        PUBWEAK _A_DDRB
        PUBWEAK _A_DDRC
        PUBWEAK _A_DDRD
        PUBWEAK _A_PORTA
        PUBWEAK _A_PORTB
        PUBWEAK _A_PORTC
        PUBWEAK _A_PORTD
        PUBWEAK _A_TCCR0
        PUBWEAK _A_TIMSK
        PUBWEAK __?EEARH
        PUBWEAK __?EEARL
        PUBWEAK __?EECR
        PUBWEAK __?EEDR
        PUBLIC main
        PUBLIC timer0_interrupt_routine

        EXTERN OSInit
        EXTERN OSTaskCreate
        EXTERN OSStart
        EXTERN OSTimeDly
        EXTERN IntEnter
        EXTERN OSTimeTick
        EXTERN OSIntExit
        EXTERN IntExit

// E:\design\AVR\IAR_UCOS_II\main.c
//    1 #include <iom16.h>

        ASEGN ABSOLUTE:DATA:NOROOT,059H
// <__C20> volatile __io _A_TIMSK
_A_TIMSK:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,053H
// <__C38> volatile __io _A_TCCR0
_A_TCCR0:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,03bH
// <__C98> volatile __io _A_PORTA
_A_PORTA:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,03aH
// <__C101> volatile __io _A_DDRA
_A_DDRA:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,038H
// <__C107> volatile __io _A_PORTB
_A_PORTB:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,037H
// <__C110> volatile __io _A_DDRB
_A_DDRB:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,035H
// <__C116> volatile __io _A_PORTC
_A_PORTC:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,034H
// <__C119> volatile __io _A_DDRC
_A_DDRC:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,032H
// <__C125> volatile __io _A_PORTD
_A_PORTD:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,031H
// <__C128> volatile __io _A_DDRD
_A_DDRD:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,027H
// <__C155> volatile __io _A_ADMUX
_A_ADMUX:
        DS8 1

        ASEGN ABSOLUTE:DATA:NOROOT,026H
// <__C158> volatile __io _A_ADCSRA
_A_ADCSRA:
        DS8 1
//    2 #include "ucos_ii.h"
//    3 
//    4 #define  TASK_STK_SIZE 100 
//    5 
//    6 extern void IntEnter(void);
//    7 extern void IntExit(void);
//    8 
//    9 typedef struct os_icb
//   10 {
//   11   unsigned int CSTACK;
//   12   unsigned int RSTACK;
//   13   unsigned int frame;
//   14 }OS_ICB;

        RSEG NEAR_Z:DATA:NOROOT(0)
        REQUIRE `?<Segment init: NEAR_Z>`
//   15 OS_ICB OSICB;
OSICB:
        DS8 6
//   16 

        RSEG NEAR_Z:DATA:NOROOT(0)
        REQUIRE `?<Segment init: NEAR_Z>`
//   17 OS_STK          Task1Stk[TASK_STK_SIZE];
Task1Stk:
        DS8 100

        RSEG NEAR_Z:DATA:NOROOT(0)
        REQUIRE `?<Segment init: NEAR_Z>`
//   18 OS_STK          Task2Stk[TASK_STK_SIZE];
Task2Stk:
        DS8 100

        RSEG NEAR_Z:DATA:NOROOT(0)
        REQUIRE `?<Segment init: NEAR_Z>`
//   19 OS_STK          Task3Stk[TASK_STK_SIZE];
Task3Stk:
        DS8 100

        RSEG NEAR_Z:DATA:NOROOT(0)
        REQUIRE `?<Segment init: NEAR_Z>`
//   20 OS_STK          Task4Stk[TASK_STK_SIZE];
Task4Stk:
        DS8 100
//   21 
//   22 void AvrInit(void);
//   23 void Task1(void *);
//   24 void Task2(void *);
//   25 void Task3(void *);
//   26 void Task4(void *);
//   27 

        RSEG CODE:CODE:NOROOT(1)
//   28 void main (void)
main:
//   29 {
//   30   AvrInit();
        RCALL   AvrInit
//   31   OSInit();
        CALL    OSInit
//   32   OSTaskCreate(Task1, (void *)0, (void *)&Task1Stk[TASK_STK_SIZE - 1], 0);
        LDI     R22, 0
        LDI     R20, LOW((Task1Stk + 99))
        LDI     R21, HIGH((Task1Stk + 99))
        LDI     R18, 0
        LDI     R19, 0
        LDI     R16, LOW(Task1/2)
        LDI     R17, (Task1/2) >> 8
        CALL    OSTaskCreate
//   33   OSTaskCreate(Task2, (void *)0, (void *)&Task2Stk[TASK_STK_SIZE - 1], 1);
        LDI     R22, 1
        LDI     R20, LOW((Task2Stk + 99))
        LDI     R21, HIGH((Task2Stk + 99))
        LDI     R18, 0
        LDI     R19, 0
        LDI     R16, LOW(Task2/2)
        LDI     R17, (Task2/2) >> 8
        CALL    OSTaskCreate
//   34   OSTaskCreate(Task3, (void *)0, (void *)&Task3Stk[TASK_STK_SIZE - 1], 2);
        LDI     R22, 2
        LDI     R20, LOW((Task3Stk + 99))
        LDI     R21, HIGH((Task3Stk + 99))
        LDI     R18, 0
        LDI     R19, 0
        LDI     R16, LOW(Task3/2)
        LDI     R17, (Task3/2) >> 8
        CALL    OSTaskCreate
//   35   OSTaskCreate(Task4, (void *)0, (void *)&Task4Stk[TASK_STK_SIZE - 1], 3);  
        LDI     R22, 3
        LDI     R20, LOW((Task4Stk + 99))
        LDI     R21, HIGH((Task4Stk + 99))
        LDI     R18, 0
        LDI     R19, 0
        LDI     R16, LOW(Task4/2)
        LDI     R17, (Task4/2) >> 8
        CALL    OSTaskCreate
//   36   OSStart(); 
        CALL    OSStart
//   37 }
        RET
//   38 

        RSEG CODE:CODE:NOROOT(1)
//   39 void AvrInit(void)
AvrInit:
//   40 {
//   41 //以下为全局设定
//   42   DDRB=0xFF;
        LDI     R16, 255
        OUT     0x17, R16
//   43   PORTB=0;
        LDI     R16, 0
        OUT     0x18, R16
//   44   DDRD=0xFF;
        LDI     R16, 255
        OUT     0x11, R16
//   45   PORTD=0;
        LDI     R16, 0
        OUT     0x12, R16
//   46   DDRC=0xFF;
        LDI     R16, 255
        OUT     0x14, R16
//   47   PORTC=0;
        LDI     R16, 0
        OUT     0x15, R16
//   48   DDRA=0xFC;
        LDI     R16, 252
        OUT     0x1A, R16
//   49   PORTA=0;
        LDI     R16, 0
        OUT     0x1B, R16
//   50   //以下为ADC的初始化设定
//   51   ADMUX=0;
        LDI     R16, 0
        OUT     0x07, R16
//   52   ADCSRA=0x8E;      //使能ADC,ADC预分频因子为64,使能ADC中断
        LDI     R16, 142
        OUT     0x06, R16
//   53 }
        RET
        REQUIRE _A_PORTA
        REQUIRE _A_DDRA
        REQUIRE _A_PORTB
        REQUIRE _A_DDRB
        REQUIRE _A_PORTC
        REQUIRE _A_DDRC
        REQUIRE _A_PORTD
        REQUIRE _A_DDRD
        REQUIRE _A_ADMUX
        REQUIRE _A_ADCSRA
//   54 

        RSEG CODE:CODE:NOROOT(1)
//   55 void Task1(void * data)
Task1:
//   56 {
//   57   data=data;
//   58   //WDTCR=1;                  //enable watchdog and set the time in 32ms 
//   59   //以下为定时器0的初始化设定,并启动定时器0
//   60   TCCR0=0x05;       //定时器0设定为普通模式,输入时钟1024分频,正常的端口操作,
        LDI     R18, 5
        OUT     0x33, R18
//   61                     //不与OC0相连接,定时器0的周期为32.768ms
//   62   TIMSK_TOIE0=1;    //使能定时器0的溢出中断
        IN      R18, 0x39
        ORI     R18, 0x01
        OUT     0x39, R18
//   63   while(1)
//   64   {
//   65     OSTimeDly(100);
??Task1_0:
        LDI     R16, 100
        LDI     R17, 0
        CALL    OSTimeDly
//   66     ADCSRA_ADSC=1;  
        SBI     0x06, 0x06
        RJMP    ??Task1_0
        REQUIRE _A_TIMSK
        REQUIRE _A_TCCR0
        REQUIRE _A_ADCSRA
//   67   }
//   68 }
//   69 

        RSEG CODE:CODE:NOROOT(1)
//   70 void Task2(void * data)
Task2:
??Task2_0:
//   71 {
//   72   data=data;
//   73   while(1)
//   74   {
//   75     OSTimeDly(240);
        LDI     R16, 240
        LDI     R17, 0
        CALL    OSTimeDly
        RJMP    ??Task2_0
//   76   }
//   77 }

        RSEG CODE:CODE:NOROOT(1)
//   78 void Task3(void * data)
Task3:
??Task3_0:
//   79 {
//   80   data=data;
//   81   while(1)
//   82   {
//   83     OSTimeDly(333);
        LDI     R16, 77
        LDI     R17, 1
        CALL    OSTimeDly
        RJMP    ??Task3_0
//   84   }
//   85 }

        RSEG CODE:CODE:NOROOT(1)
//   86 void Task4(void * data)
Task4:
??Task4_0:
//   87 {
//   88   data=data;
//   89   while(1)
//   90   {
//   91     OSTimeDly(473);
        LDI     R16, 217
        LDI     R17, 1
        CALL    OSTimeDly
        RJMP    ??Task4_0
//   92   }
//   93 }

        RSEG CODE:CODE:ROOT(1)
//   94 __C_task __root void timer0_interrupt_routine(void)
timer0_interrupt_routine:
//   95 {
//   96   IntEnter();
        CALL    IntEnter
//   97   __enable_interrupt();
        SEI
//   98   OSTimeTick();
        CALL    OSTimeTick
//   99   __disable_interrupt();
        CLI
//  100   OSIntExit();
        CALL    OSIntExit
//  101   IntExit();
        CALL    IntExit
//  102 }
        RET
//  103 

        RSEG CODE:CODE:ROOT(1)
//  104 __C_task __root void ADC_interrupt_routine(void)
ADC_interrupt_routine:
//  105 {
//  106   IntEnter();
        CALL    IntEnter
//  107   __enable_interrupt();
        SEI
//  108   //DoSomething
//  109   __disable_interrupt();
        CLI
//  110   OSIntExit();
        CALL    OSIntExit
//  111   IntExit(); 
        CALL    IntExit
//  112 }
        RET

        ASEGN ABSOLUTE:DATA:NOROOT,01cH
__?EECR:

        ASEGN ABSOLUTE:DATA:NOROOT,01dH
__?EEDR:

        ASEGN ABSOLUTE:DATA:NOROOT,01eH
__?EEARL:

        ASEGN ABSOLUTE:DATA:NOROOT,01fH
__?EEARH:

        RSEG INITTAB:CODE:NOROOT(0)
`?<Segment init: NEAR_Z>`:
        DC16    SFE(NEAR_Z) - SFB(NEAR_Z)
        DC16    SFB(NEAR_Z)
        DC16    0
        REQUIRE ?need_segment_init

        END
// 
//  12 bytes in segment ABSOLUTE
// 218 bytes in segment CODE
//   6 bytes in segment INITTAB
// 406 bytes in segment NEAR_Z
// 
// 218 bytes of CODE memory (+  6 bytes shared)
// 406 bytes of DATA memory (+ 12 bytes shared)
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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