📄 ucos.lst
字号:
__text_start:
__start:
009A E5CF LDI R28,0x5F
009B E0D4 LDI R29,4
009C BFCD OUT P3D,R28
009D BFDE OUT P3E,R29
009E 51C0 SUBI R28,0x10
009F 40D0 SBCI R29,0
00A0 EA0A LDI R16,0xAA
00A1 8308 STD R16,0+Y
00A2 2400 CLR R0
00A3 E6E0 LDI R30,0x60
00A4 E0F0 LDI R31,0
00A5 E012 LDI R17,2
00A6 33EB CPI R30,0x3B
00A7 07F1 CPC R31,R17
00A8 F011 BEQ 0x00AB
00A9 9201 ST R0,Z+
00AA CFFB RJMP 0x00A6
00AB 8300 STD R16,0+Z
00AC E3E4 LDI R30,0x34
00AD E0F1 LDI R31,1
00AE E6A0 LDI R26,0x60
00AF E0B0 LDI R27,0
00B0 E011 LDI R17,1
00B1 33E4 CPI R30,0x34
00B2 07F1 CPC R31,R17
00B3 F021 BEQ 0x00B8
00B4 95C8 LPM
00B5 9631 ADIW R30,1
00B6 920D ST R0,X+
00B7 CFF9 RJMP 0x00B1
00B8 D019 RCALL _main
_exit:
00B9 CFFF RJMP _exit
FILE: D:\job\avrtest\光盘\开发板\iccavr\test\test2.c
(0001)
(0002) #define Test1_GLOBALS
(0003) #include "includes.h"
(0004)
(0005) //******************************************************************************
(0006) // Constants
(0007) #define TaskStartPrio 10 // Task-Prioritaeten
(0008) //*****************************************************************************
(0009) // Variablen
(0010) INT8U display[5];
(0011) INT8U h,m,s,state;
(0012) OS_STK Task1Stack[OS_TASK_DEF_STK_SIZE]; // startup task stack
(0013) OS_STK Task2Stack[OS_TASK_DEF_STK_SIZE];
(0014) //ICC-AVR application builder : 2003-12-28 21:52:56
(0015) // Target : M8
(0016) // Crystal: 8.0000Mhz
(0017)
(0018) #include <iom8v.h>
(0019) #include <macros.h>
(0020) #include <stdio.h>
(0021)
(0022)
(0023) //UART0 initialisation
(0024) // desired baud rate: 9600
(0025) // actual: baud rate:9615 (0.2%)
(0026) // char size: 8 bit
(0027) // parity: Disabled
(0028) void uart0_init(void)
(0029) {
(0030) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
00BA 2422 CLR R2
00BB B82A OUT P0A,R2
(0031) UCSRA = 0x00;
00BC B82B OUT P0B,R2
(0032) UCSRC = 0x86;
00BD E886 LDI R24,0x86
00BE BD80 OUT P20,R24
(0033) UBRRL = 0x33; //set baud rate lo
00BF E383 LDI R24,0x33
00C0 B989 OUT P09,R24
(0034) UBRRH = 0x00; //set baud rate hi
00C1 BC20 OUT P20,R2
(0035) UCSRB = 0x08;
00C2 E088 LDI R24,0x8
00C3 B98A OUT P0A,R24
(0036) }
00C4 9508 RET
(0037)
(0038) //*****************************************************************************
(0039) // Prototypes
(0040)
(0041) //*****************************************************************************
(0042) // TickISR
(0043) //*****************************************************************************
(0044) // Init Timer/Counter2 fuer Takterzeugung
(0045) void TC2_Init (void){
(0046) /* Only uses TIMER2 overflow for tick interrupt. Timer compare
(0047) * can also be used.
(0048) */
(0049) TIMSK &= ~(BIT(TOIE2)/* | BIT(OCIE2) */); //disable TC2 interrupts
_TC2_Init:
00C5 B789 IN R24,P39
00C6 7B8F ANDI R24,0xBF
00C7 BF89 OUT P39,R24
(0050) TCCR2 = 0x00; // interner Takt, /1024
00C8 2422 CLR R2
00C9 BC25 OUT P25,R2
(0051) TCNT2 = 0; // Counter ruecksetzen, 2ms @ 8MHz
00CA BC24 OUT P24,R2
(0052) TCCR2 = 0x04; // 64
00CB E084 LDI R24,4
00CC BD85 OUT P25,R24
(0053) // OCR2 = 180; // OutputCompareRegister
(0054) TIMSK |= BIT(TOIE2); // enable OVF-interrupt
00CD B789 IN R24,P39
00CE 6480 ORI R24,0x40
00CF BF89 OUT P39,R24
(0055) //TIMSK |= OCIE2; // enable COMP-interrupt
(0056)
(0057) SEI(); // enable global interrupt
00D0 9478 BSET 7
(0058) }
00D1 9508 RET
_main:
00D2 9723 SBIW R28,3
(0059)
(0060) //*****************************************************************************
(0061) // Interrupt Timer/Counter0 Overflow
(0062) // OVF_Takt: 4MHz / 1024 / 39 = 10ms
(0063) #pragma interrupt_handler OSTickISR:5
(0064)
(0065) void Task1(void *pdata);
(0066) void Task2(void *pdata);
(0067)
(0068) //*****************************************************************************
(0069) // Start
(0070) void main(void){
(0071) OSInit(); // OS init
00D3 D116 RCALL _OSInit
(0072) OSTaskCreate(Task1,
00D4 E087 LDI R24,7
00D5 838A STD R24,2+Y
00D6 E287 LDI R24,0x27
00D7 E091 LDI R25,1
00D8 8388 STD R24,0+Y
00D9 8399 STD R25,1+Y
00DA 2722 CLR R18
00DB 2733 CLR R19
00DC E208 LDI R16,0x28
00DD E010 LDI R17,0
00DE D4F2 RCALL _OSTaskCreate
(0073) (void *)0,
(0074) &Task1Stack[OS_TASK_DEF_STK_SIZE-1],
(0075) 7);
(0076) OSTaskCreate(Task2,
00DF E088 LDI R24,0x8
00E0 838A STD R24,2+Y
00E1 EC83 LDI R24,0xC3
00E2 E090 LDI R25,0
00E3 8388 STD R24,0+Y
00E4 8399 STD R25,1+Y
00E5 2722 CLR R18
00E6 2733 CLR R19
00E7 E206 LDI R16,0x26
00E8 E010 LDI R17,0
00E9 D4E7 RCALL _OSTaskCreate
(0077) (void *)0,
(0078) &Task2Stack[OS_TASK_DEF_STK_SIZE-1],
(0079) 8);
(0080) // init und start tick
(0081) TC2_Init(); // Timer/Counter#2 Overflow and Comp init
00EA DFDA RCALL _TC2_Init
(0082) uart0_init();
00EB DFCE RCALL _uart0_init
(0083) OSStart(); // start multitasking
00EC D296 RCALL _OSStart
(0084) }
00ED 9623 ADIW R28,3
00EE 9508 RET
_Task1:
key2 --> R12
i --> R14
key1 --> Y+0
data --> R10
00EF D703 RCALL push_gset5x
00F0 0158 MOVW R10,R16
00F1 9721 SBIW R28,1
(0085)
(0086) //*****************************************************************************
(0087) void Task1(void *data){
(0088) unsigned char i,key1,key2;
(0089) data = data;
(0090) PORTD |= 0x1C; // key
00F2 B382 IN R24,P12
00F3 618C ORI R24,0x1C
00F4 BB82 OUT P12,R24
(0091) DDRD &= ~0x1C;
00F5 B381 IN R24,P11
00F6 7E83 ANDI R24,0xE3
00F7 BB81 OUT P11,R24
(0092) PORTD |= 0x20; // bell
00F8 9A95 SBI P12,5
(0093) DDRD |= 0x20;
00F9 9A8D SBI P11,5
(0094) init164(); // 显示 初始化
00FA D58A RCALL _init164
(0095) state = 1;
00FB E081 LDI R24,1
00FC 93800128 STS _state,R24
(0096) for (;;){
(0097) // key
(0098) key1 = PIND & 0x1C;
00FE B380 IN R24,P10
00FF 718C ANDI R24,0x1C
0100 8388 STD R24,0+Y
(0099) if(key1 == 0x1C){
0101 318C CPI R24,0x1C
0102 F559 BNE 0x012E
(0100) PORTD &= ~0x20;
0103 9895 CBI P12,5
(0101) if(key2 == 0x0C){
0104 2D8C MOV R24,R12
0105 308C CPI R24,0xC
0106 F431 BNE 0x010D
(0102) state ^= 0x01;
0107 E081 LDI R24,1
0108 90200128 LDS R2,_state
010A 2628 EOR R2,R24
010B 92200128 STS _state,R2
(0103) }
(0104) if(state == 0){
010D 90200128 LDS R2,_state
010F 2022 TST R2
0110 F4F1 BNE 0x012F
(0105) if(key2 == 0x18){
0111 2D8C MOV R24,R12
0112 3188 CPI R24,0x18
0113 F459 BNE 0x011F
(0106) if(++s == 60) s = 0;
0114 91800129 LDS R24,_s
0116 5F8F SUBI R24,0xFF
0117 2E28 MOV R2,R24
0118 92200129 STS _s,R2
011A 338C CPI R24,0x3C
011B F419 BNE 0x011F
011C 2422 CLR R2
011D 92200129 STS _s,R2
(0107) }
(0108) if(key2 == 0x14){
011F 2D8C MOV R24,R12
0120 3184 CPI R24,0x14
0121 F469 BNE 0x012F
(0109) if(++m == 60) m = 0;
0122 9180012A LDS R24,_m
0124 5F8F SUBI R24,0xFF
0125 2E28 MOV R2,R24
0126 9220012A STS _m,R2
0128 338C CPI R24,0x3C
0129 F429 BNE 0x012F
012A 2422 CLR R2
012B 9220012A STS _m,R2
(0110) }
(0111) }
(0112) }
012D C001 RJMP 0x012F
(0113) else{
(0114) PORTD |= 0x20;
012E 9A95 SBI P12,5
(0115) }
(0116) key2 = key1;
012F 80C8 LDD R12,0+Y
(0117) // end key
(0118)
(0119) // display
(0120) display[0] = s%10;
0130 E01A LDI R17,0xA
0131 91000129 LDS R16,_s
0133 D685 RCALL mod8u
0134 9300012C STS _display,R16
(0121) display[1] = s/10;
0136 E01A LDI R17,0xA
0137 91000129 LDS R16,_s
0139 D681 RCALL div8u
013A 9300012D STS _display+1,R16
(0122) display[2] = m%10;
013C E01A LDI R17,0xA
013D 9100012A LDS R16,_m
013F D679 RCALL mod8u
0140 9300012E STS _display+2,R16
(0123) display[3] = m/10;
0142 E01A LDI R17,0xA
0143 9100012A LDS R16,_m
0145 D675 RCALL div8u
0146 9300012F STS _display+3,R16
(0124) switch(i){
0148 2CAE MOV R10,R14
0149 24BB CLR R11
014A 20AA TST R10
014B F411 BNE 0x014E
014C 20BB TST R11
014D F071 BEQ 0x015C
014E 01C5 MOVW R24,R10
014F 3081 CPI R24,1
0150 E0E0 LDI R30,0
0151 079E CPC R25,R30
0152 F099 BEQ 0x0166
0153 3082 CPI R24,2
0154 E0E0 LDI R30,0
0155 079E CPC R25,R30
0156 F0C9 BEQ 0x0170
0157 3083 CPI R24,3
0158 E0E0 LDI R30,0
0159 079E CPC R25,R30
015A F0F9 BEQ 0x017A
015B C027 RJMP 0x0183
(0125) case 0: write164(display[i] | 0x70); break;
015C E28C LDI R24,0x2C
015D E091 LDI R25,1
015E 2DEE MOV R30,R14
015F 27FF CLR R31
0160 0FE8 ADD R30,R24
0161 1FF9 ADC R31,R25
0162 8100 LDD R16,0+Z
0163 6700 ORI R16,0x70
0164 D525 RCALL _write164
0165 C01D RJMP 0x0183
(0126) case 1: write164(display[i] | 0xB0); break;
0166 E28C LDI R24,0x2C
0167 E091 LDI R25,1
0168 2DEE MOV R30,R14
0169 27FF CLR R31
016A 0FE8 ADD R30,R24
016B 1FF9 ADC R31,R25
016C 8100 LDD R16,0+Z
016D 6B00 ORI R16,0xB0
016E D51B RCALL _write164
016F C013 RJMP 0x0183
(0127) case 2: write164(display[i] | 0xD0); break;
0170 E28C LDI R24,0x2C
0171 E091 LDI R25,1
0172 2DEE MOV R30,R14
0173 27FF CLR R31
0174 0FE8 ADD R30,R24
0175 1FF9 ADC R31,R25
0176 8100 LDD R16,0+Z
0177 6D00 ORI R16,0xD0
0178 D511 RCALL _write164
0179 C009 RJMP 0x0183
(0128) case 3: write164(display[i] | 0xE0); break;
017A E28C LDI R24,0x2C
017B E091 LDI R25,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -