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

📄 test2.lis

📁 使用mega8和iccavr编译器的一段ucos操作系统程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module test2.c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\IccPro\ucos_m8_icc\test\test2.c
 0000                   .dbfunc e uart0_init _uart0_init fV
                        .even
 0000           _uart0_init::
 0000                   .dbline -1
 0000                   .dbline 29
 0000           ; 
 0000           ; #define Test1_GLOBALS
 0000           ; #include "includes.h"
 0000           ; 
 0000           ; //******************************************************************************
 0000           ; // Constants
 0000           ; #define TaskStartPrio 10              // Task-Prioritaeten
 0000           ; //*****************************************************************************
 0000           ; // Variablen
 0000           ; INT8U    display[5];
 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           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; #include <stdio.h>
 0000           ; 
 0000           ; 
 0000           ; //UART0 initialisation
 0000           ; // desired baud rate: 9600
 0000           ; // actual: baud rate:9615 (0.2%)
 0000           ; // char size: 8 bit
 0000           ; // parity: Disabled
 0000           ; void uart0_init(void)
 0000           ; {
 0000                   .dbline 30
 0000           ;  UCSRB = 0x00; //disable while setting baud rate
 0000 2224              clr R2
 0002 2AB8              out 0xa,R2
 0004                   .dbline 31
 0004           ;  UCSRA = 0x00;
 0004 2BB8              out 0xb,R2
 0006                   .dbline 32
 0006           ;  UCSRC = 0x86;
 0006 86E8              ldi R24,134
 0008 80BD              out 0x20,R24
 000A                   .dbline 33
 000A           ;  UBRRL = 0x33; //set baud rate lo
 000A 83E3              ldi R24,51
 000C 89B9              out 0x9,R24
 000E                   .dbline 34
 000E           ;  UBRRH = 0x00; //set baud rate hi
 000E 20BC              out 0x20,R2
 0010                   .dbline 35
 0010           ;  UCSRB = 0x08;
 0010 88E0              ldi R24,8
 0012 8AB9              out 0xa,R24
 0014                   .dbline -2
 0014           L2:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbend
 0016                   .dbfunc e TC2_Init _TC2_Init fV
                        .even
 0016           _TC2_Init::
 0016                   .dbline -1
 0016                   .dbline 45
 0016           ; }
 0016           ; 
 0016           ; //*****************************************************************************
 0016           ; // Prototypes
 0016           ; 
 0016           ; //*****************************************************************************
 0016           ; //                    TickISR
 0016           ; //*****************************************************************************
 0016           ; // Init Timer/Counter2 fuer Takterzeugung
 0016           ; void TC2_Init (void){ 
 0016                   .dbline 49
 0016           ;       /* Only uses TIMER2 overflow for tick interrupt. Timer compare
 0016           ;      * can also be used.
 0016           ;      */
 0016           ;       TIMSK &= ~(BIT(TOIE2)/* | BIT(OCIE2) */);       //disable TC2 interrupts
 0016 89B7              in R24,0x39
 0018 8F7B              andi R24,191
 001A 89BF              out 0x39,R24
 001C                   .dbline 50
 001C           ;       TCCR2 = 0x00;           // interner Takt, /1024
 001C 2224              clr R2
 001E 25BC              out 0x25,R2
 0020                   .dbline 51
 0020           ;       TCNT2 = 0;      // Counter ruecksetzen, 2ms @ 8MHz
 0020 24BC              out 0x24,R2
 0022                   .dbline 52
 0022           ;     TCCR2 = 0x04;   // 64
 0022 84E0              ldi R24,4
 0024 85BD              out 0x25,R24
 0026                   .dbline 54
 0026           ;       // OCR2 = 180;                  // OutputCompareRegister
 0026           ;       TIMSK |= BIT(TOIE2);    // enable OVF-interrupt
 0026 89B7              in R24,0x39
 0028 8064              ori R24,64
 002A 89BF              out 0x39,R24
 002C                   .dbline 57
 002C           ;                                                                                                                                       //TIMSK |= OCIE2;               // enable COMP-interrupt
 002C           ;       
 002C           ;     SEI();    // enable global interrupt     
 002C 7894              sei
 002E                   .dbline -2
 002E           L3:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbend
                        .area vector(rom, abs)
                        .org 8
 0008 00C0              rjmp _OSTickISR
                        .area text(rom, con, rel)
 0030                   .dbfile G:\IccPro\ucos_m8_icc\test\test2.c
 0030                   .dbfunc e main _main fV
                        .even
 0030           _main::
 0030 2397              sbiw R28,3
 0032                   .dbline -1
 0032                   .dbline 70
 0032           ; }
 0032           ; 
 0032           ; //*****************************************************************************
 0032           ; // Interrupt Timer/Counter0 Overflow
 0032           ; // OVF_Takt:  4MHz / 1024 / 39 = 10ms
 0032           ; #pragma interrupt_handler OSTickISR:5
 0032           ; 
 0032           ; void Task1(void *pdata);
 0032           ; void Task2(void *pdata);
 0032           ; 
 0032           ; //*****************************************************************************
 0032           ; // Start
 0032           ; void main(void){      
 0032                   .dbline 71
 0032           ;       OSInit();               // OS init
 0032 00D0              rcall _OSInit
 0034                   .dbline 72
 0034           ;       uart0_init();
 0034 E5DF              rcall _uart0_init
 0036                   .dbline 73
 0036           ;       puts("ATmega8 uc/os-II Test!");
 0036 00E0              ldi R16,<L5
 0038 10E0              ldi R17,>L5
 003A 00D0              rcall _puts
 003C                   .dbline 74
 003C           ;       putchar(0x0d);
 003C 0DE0              ldi R16,13
 003E 00D0              rcall _putchar
 0040                   .dbline 75
 0040           ;       putchar(0x0a);
 0040 0AE0              ldi R16,10
 0042 00D0              rcall _putchar
 0044                   .dbline 77
 0044           ;       
 0044           ;       OSTaskCreate(Task1,     (void *)0, &Task1Stack[OS_TASK_DEF_STK_SIZE-1], 7);
 0044 87E0              ldi R24,7
 0046 8A83              std y+2,R24
 0048 80E0              ldi R24,<_Task1Stack+99
 004A 90E0              ldi R25,>_Task1Stack+99
 004C 9983              std y+1,R25
 004E 8883              std y+0,R24
 0050 2227              clr R18
 0052 3327              clr R19
 0054 00E0              ldi R16,<PL_Task1
 0056 10E0              ldi R17,>PL_Task1
 0058 00D0              rcall _OSTaskCreate
 005A                   .dbline 79
 005A           ;       
 005A           ;       OSTaskCreate(Task2,     (void *)0, &Task2Stack[OS_TASK_DEF_STK_SIZE-1], 8); 
 005A 88E0              ldi R24,8
 005C 8A83              std y+2,R24
 005E 80E0              ldi R24,<_Task2Stack+99
 0060 90E0              ldi R25,>_Task2Stack+99
 0062 9983              std y+1,R25
 0064 8883              std y+0,R24
 0066 2227              clr R18
 0068 3327              clr R19
 006A 00E0              ldi R16,<PL_Task2
 006C 10E0              ldi R17,>PL_Task2
 006E 00D0              rcall _OSTaskCreate
 0070                   .dbline 81
 0070           ;       // init und start tick
 0070           ;     TC2_Init();                       // Timer/Counter#2 Overflow and Comp init   
 0070 D2DF              rcall _TC2_Init
 0072                   .dbline 82
 0072           ;     OSStart();                // start multitasking
 0072 00D0              rcall _OSStart
 0074                   .dbline -2
 0074           L4:
 0074 2396              adiw R28,3
 0076                   .dbline 0 ; func end
 0076 0895              ret
 0078                   .dbend
 0078                   .dbfunc e Task1 _Task1 fV
 0078           ;           key2 -> R12
 0078           ;              i -> R14
 0078           ;           key1 -> y+0
 0078           ;           data -> R10,R11
                        .even
 0078           _Task1::
 0078 00D0              rcall push_gset5x
 007A 5801              movw R10,R16
 007C 2197              sbiw R28,1
 007E                   .dbline -1
 007E                   .dbline 86
 007E           ; }
 007E           ; 
 007E           ; //*****************************************************************************
 007E           ; void Task1(void *data){
 007E                   .dbline 88
 007E           ;     unsigned char i,key1,key2;
 007E           ;       data = data;
 007E                   .dbline 89
 007E           ;       PORTD |= 0x1C;    //  key
 007E 82B3              in R24,0x12
 0080 8C61              ori R24,28
 0082 82BB              out 0x12,R24
 0084                   .dbline 90
 0084           ;       DDRD  &= ~0x1C;
 0084 81B3              in R24,0x11
 0086 837E              andi R24,227
 0088 81BB              out 0x11,R24
 008A                   .dbline 91
 008A           ;       PORTD |= 0x20;    //  bell
 008A 959A              sbi 0x12,5
 008C                   .dbline 92
 008C           ;       DDRD  |= 0x20;
 008C 8D9A              sbi 0x11,5
 008E                   .dbline 93
 008E           ;       init164();        //  显示  初始化
 008E 00D0              rcall _init164
 0090                   .dbline 94
 0090           ;       state = 1;
 0090 81E0              ldi R24,1
 0092 8093C800          sts _state,R24
 0096                   .dbline 95
 0096           L9:
 0096                   .dbline 95
 0096           ;       for (;;){
 0096                   .dbline 97
 0096           ; //  key
 0096           ;         key1 = PIND & 0x1C;
 0096 80B3              in R24,0x10
 0098 8C71              andi R24,28
 009A 8883              std y+0,R24
 009C                   .dbline 98
 009C           ;               if(key1 == 0x1C){
 009C 8C31              cpi R24,28
 009E 59F5              brne L13
 00A0                   .dbline 98
 00A0                   .dbline 99
 00A0           ;                   PORTD &= ~0x20;
 00A0 9598              cbi 0x12,5
 00A2                   .dbline 100
 00A2           ;                       if(key2 == 0x0C){
 00A2 8C2D              mov R24,R12
 00A4 8C30              cpi R24,12
 00A6 31F4              brne L15
 00A8                   .dbline 100
 00A8                   .dbline 101
 00A8           ;                               state ^= 0x01;
 00A8 81E0              ldi R24,1
 00AA 2090C800          lds R2,_state
 00AE 2826              eor R2,R24
 00B0 2092C800          sts _state,R2
 00B4                   .dbline 102
 00B4           ;                       }
 00B4           L15:
 00B4                   .dbline 103
 00B4           ;                       if(state == 0){
 00B4 2090C800          lds R2,_state
 00B8 2220              tst R2
 00BA F1F4              brne L14
 00BC                   .dbline 103
 00BC                   .dbline 104
 00BC           ;                           if(key2 == 0x18){
 00BC 8C2D              mov R24,R12
 00BE 8831              cpi R24,24
 00C0 59F4              brne L19
 00C2                   .dbline 104
 00C2                   .dbline 105
 00C2           ;                               if(++s == 60) s = 0;
 00C2 8091C900          lds R24,_s
 00C6 8F5F              subi R24,255    ; addi 1
 00C8 282E              mov R2,R24
 00CA 2092C900          sts _s,R2
 00CE 8C33              cpi R24,60
 00D0 19F4              brne L21
 00D2                   .dbline 105
 00D2 2224              clr R2
 00D4 2092C900          sts _s,R2
 00D8           L21:
 00D8                   .dbline 106
 00D8           ;                           }
 00D8           L19:
 00D8                   .dbline 107
 00D8           ;                           if(key2 == 0x14){
 00D8 8C2D              mov R24,R12
 00DA 8431              cpi R24,20
 00DC 69F4              brne L14
 00DE                   .dbline 107
 00DE                   .dbline 108
 00DE           ;                                   if(++m == 60) m = 0;
 00DE 8091CA00          lds R24,_m
 00E2 8F5F              subi R24,255    ; addi 1
 00E4 282E              mov R2,R24
 00E6 2092CA00          sts _m,R2
 00EA 8C33              cpi R24,60
 00EC 29F4              brne L14
 00EE                   .dbline 108
 00EE 2224              clr R2
 00F0 2092CA00          sts _m,R2
 00F4                   .dbline 109
 00F4           ;                           }
 00F4                   .dbline 110
 00F4           ;                       }
 00F4                   .dbline 111
 00F4           ;               }
 00F4 01C0              rjmp L14
 00F6           L13:
 00F6                   .dbline 112
 00F6           ;               else{
 00F6                   .dbline 113
 00F6           ;                       PORTD |= 0x20;

⌨️ 快捷键说明

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