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

📄 ucos.lst

📁 使用mega8和iccavr编译器的一段ucos操作系统程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    00A6 E5CF      LDI	R28,0x5F
    00A7 E0D4      LDI	R29,4
    00A8 BFCD      OUT	0x3D,R28
    00A9 BFDE      OUT	0x3E,R29
    00AA 51C0      SUBI	R28,0x10
    00AB 40D0      SBCI	R29,0
    00AC EA0A      LDI	R16,0xAA
    00AD 8308      STD	Y+0,R16
    00AE 2400      CLR	R0
    00AF E7E7      LDI	R30,0x77
    00B0 E0F0      LDI	R31,0
    00B1 E012      LDI	R17,2
    00B2 35E2      CPI	R30,0x52
    00B3 07F1      CPC	R31,R17
    00B4 F011      BEQ	0x00B7
    00B5 9201      ST	R0,Z+
    00B6 CFFB      RJMP	0x00B2
    00B7 8300      STD	Z+0,R16
    00B8 E3E4      LDI	R30,0x34
    00B9 E0F1      LDI	R31,1
    00BA E6A0      LDI	R26,0x60
    00BB E0B0      LDI	R27,0
    00BC E011      LDI	R17,1
    00BD 34EB      CPI	R30,0x4B
    00BE 07F1      CPC	R31,R17
    00BF F021      BEQ	0x00C4
    00C0 95C8      LPM
    00C1 9631      ADIW	R30,1
    00C2 920D      ST	R0,X+
    00C3 CFF9      RJMP	0x00BD
    00C4 D019      RCALL	_main
_exit:
    00C5 CFFF      RJMP	_exit
FILE: G:\IccPro\ucos_m8_icc\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:
    00C6 2422      CLR	R2
    00C7 B82A      OUT	0x0A,R2
(0031)  UCSRA = 0x00;
    00C8 B82B      OUT	0x0B,R2
(0032)  UCSRC = 0x86;
    00C9 E886      LDI	R24,0x86
    00CA BD80      OUT	0x20,R24
(0033)  UBRRL = 0x33; //set baud rate lo
    00CB E383      LDI	R24,0x33
    00CC B989      OUT	0x09,R24
(0034)  UBRRH = 0x00; //set baud rate hi
    00CD BC20      OUT	0x20,R2
(0035)  UCSRB = 0x08;
    00CE E088      LDI	R24,0x8
    00CF B98A      OUT	0x0A,R24
    00D0 9508      RET
(0036) }
(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:
    00D1 B789      IN	R24,0x39
    00D2 7B8F      ANDI	R24,0xBF
    00D3 BF89      OUT	0x39,R24
(0050) 	TCCR2 = 0x00;		// interner Takt, /1024
    00D4 2422      CLR	R2
    00D5 BC25      OUT	0x25,R2
(0051) 	TCNT2 = 0; 	// Counter ruecksetzen, 2ms @ 8MHz
    00D6 BC24      OUT	0x24,R2
(0052)     TCCR2 = 0x04;   // 64
    00D7 E084      LDI	R24,4
    00D8 BD85      OUT	0x25,R24
(0053) 	// OCR2 = 180;			// OutputCompareRegister
(0054) 	TIMSK |= BIT(TOIE2);	// enable OVF-interrupt
    00D9 B789      IN	R24,0x39
    00DA 6480      ORI	R24,0x40
    00DB BF89      OUT	0x39,R24
(0055) 	                                                                                                                                //TIMSK |= OCIE2;		// enable COMP-interrupt
(0056) 	
(0057)     SEI();	// enable global interrupt     
    00DC 9478      BSET	7
    00DD 9508      RET
_main:
    00DE 9723      SBIW	R28,3
(0058) }
(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
    00DF D120      RCALL	_OSInit
(0072) 	uart0_init();
    00E0 DFE5      RCALL	_uart0_init
(0073) 	puts("ATmega8 uc/os-II Test!");
    00E1 E600      LDI	R16,0x60
    00E2 E010      LDI	R17,0
    00E3 D765      RCALL	_puts
(0074) 	putchar(0x0d);
    00E4 E00D      LDI	R16,0xD
    00E5 D739      RCALL	_putchar
(0075) 	putchar(0x0a);
    00E6 E00A      LDI	R16,0xA
    00E7 D737      RCALL	_putchar
(0076) 	
(0077) 	OSTaskCreate(Task1,	(void *)0, &Task1Stack[OS_TASK_DEF_STK_SIZE-1],	7);
    00E8 E087      LDI	R24,7
    00E9 838A      STD	Y+2,R24
    00EA E38E      LDI	R24,0x3E
    00EB E091      LDI	R25,1
    00EC 8399      STD	Y+1,R25
    00ED 8388      STD	Y+0,R24
    00EE 2722      CLR	R18
    00EF 2733      CLR	R19
    00F0 E208      LDI	R16,0x28
    00F1 E010      LDI	R17,0
    00F2 D4FF      RCALL	_OSTaskCreate
(0078) 	
(0079) 	OSTaskCreate(Task2,	(void *)0, &Task2Stack[OS_TASK_DEF_STK_SIZE-1],	8); 
    00F3 E088      LDI	R24,0x8
    00F4 838A      STD	Y+2,R24
    00F5 ED8A      LDI	R24,0xDA
    00F6 E090      LDI	R25,0
    00F7 8399      STD	Y+1,R25
    00F8 8388      STD	Y+0,R24
    00F9 2722      CLR	R18
    00FA 2733      CLR	R19
    00FB E206      LDI	R16,0x26
    00FC E010      LDI	R17,0
    00FD D4F4      RCALL	_OSTaskCreate
(0080) 	// init und start tick
(0081)     TC2_Init();			// Timer/Counter#2 Overflow and Comp init   
    00FE DFD2      RCALL	_TC2_Init
(0082)     OSStart();		// start multitasking
    00FF D299      RCALL	_OSStart
    0100 9623      ADIW	R28,3
    0101 9508      RET
_Task1:
  key2                 --> R12
  i                    --> R14
  key1                 --> Y+0
  data                 --> R10
    0102 D719      RCALL	push_gset5x
    0103 0158      MOVW	R10,R16
    0104 9721      SBIW	R28,1
(0083) }
(0084) 
(0085) //*****************************************************************************
(0086) void Task1(void *data){
(0087)     unsigned char i,key1,key2;
(0088) 	data = data;
(0089) 	PORTD |= 0x1C;    //  key
    0105 B382      IN	R24,0x12
    0106 618C      ORI	R24,0x1C
    0107 BB82      OUT	0x12,R24
(0090) 	DDRD  &= ~0x1C;
    0108 B381      IN	R24,0x11
    0109 7E83      ANDI	R24,0xE3
    010A BB81      OUT	0x11,R24
(0091) 	PORTD |= 0x20;    //  bell
    010B 9A95      SBI	0x12,5
(0092) 	DDRD  |= 0x20;
    010C 9A8D      SBI	0x11,5
(0093) 	init164();        //  显示  初始化
    010D D59C      RCALL	_init164
(0094) 	state = 1;
    010E E081      LDI	R24,1
    010F 9380013F  STS	state,R24
(0095) 	for (;;){
(0096) //  key
(0097)         key1 = PIND & 0x1C;
    0111 B380      IN	R24,0x10
    0112 718C      ANDI	R24,0x1C
    0113 8388      STD	Y+0,R24
(0098) 		if(key1 == 0x1C){
    0114 318C      CPI	R24,0x1C
    0115 F559      BNE	0x0141
(0099) 		    PORTD &= ~0x20;
    0116 9895      CBI	0x12,5
(0100) 			if(key2 == 0x0C){
    0117 2D8C      MOV	R24,R12
    0118 308C      CPI	R24,0xC
    0119 F431      BNE	0x0120
(0101) 				state ^= 0x01;
    011A E081      LDI	R24,1
    011B 9020013F  LDS	R2,state
    011D 2628      EOR	R2,R24
    011E 9220013F  STS	state,R2
(0102) 			}
(0103) 			if(state == 0){
    0120 9020013F  LDS	R2,state
    0122 2022      TST	R2
    0123 F4F1      BNE	0x0142
(0104) 			    if(key2 == 0x18){
    0124 2D8C      MOV	R24,R12
    0125 3188      CPI	R24,0x18
    0126 F459      BNE	0x0132
(0105) 			        if(++s == 60) s = 0;
    0127 91800140  LDS	R24,s
    0129 5F8F      SUBI	R24,0xFF
    012A 2E28      MOV	R2,R24
    012B 92200140  STS	s,R2
    012D 338C      CPI	R24,0x3C
    012E F419      BNE	0x0132
    012F 2422      CLR	R2
    0130 92200140  STS	s,R2
(0106) 			    }
(0107) 			    if(key2 == 0x14){
    0132 2D8C      MOV	R24,R12
    0133 3184      CPI	R24,0x14
    0134 F469      BNE	0x0142
(0108) 				    if(++m == 60) m = 0;
    0135 91800141  LDS	R24,m
    0137 5F8F      SUBI	R24,0xFF
    0138 2E28      MOV	R2,R24
    0139 92200141  STS	m,R2
    013B 338C      CPI	R24,0x3C
    013C F429      BNE	0x0142
    013D 2422      CLR	R2
    013E 92200141  STS	m,R2
(0109) 			    }
(0110) 			}
(0111) 		}
    0140 C001      RJMP	0x0142
(0112) 		else{
(0113) 			PORTD |= 0x20;
    0141 9A95      SBI	0x12,5
(0114) 		}
(0115) 		key2 = key1;
    0142 80C8      LDD	R12,Y+0
(0116) //  end  key
(0117) 
(0118) //  display
(0119)         display[0] = s%10;
    0143 E01A      LDI	R17,0xA
    0144 91000140  LDS	R16,s
    0146 D697      RCALL	mod8u
    0147 93000143  STS	display,R16
(0120) 		display[1] = s/10;
    0149 E01A      LDI	R17,0xA
    014A 91000140  LDS	R16,s
    014C D693      RCALL	div8u
    014D 93000144  STS	display+1,R16
(0121) 		display[2] = m%10;
    014F E01A      LDI	R17,0xA
    0150 91000141  LDS	R16,m
    0152 D68B      RCALL	mod8u
    0153 93000145  STS	display+2,R16
(0122) 		display[3] = m/10;
    0155 E01A      LDI	R17,0xA
    0156 91000141  LDS	R16,m
    0158 D687      RCALL	div8u
    0159 93000146  STS	display+3,R16
(0123) 		switch(i){
    015B 2CAE      MOV	R10,R14
    015C 24BB      CLR	R11
    015D 20AA      TST	R10
    015E F411      BNE	0x0161
    015F 20BB      TST	R11
    0160 F071      BEQ	0x016F
    0161 01C5      MOVW	R24,R10
    0162 3081      CPI	R24,1
    0163 E0E0      LDI	R30,0
    0164 079E      CPC	R25,R30
    0165 F099      BEQ	0x0179
    0166 3082      CPI	R24,2
    0167 E0E0      LDI	R30,0
    0168 079E      CPC	R25,R30
    0169 F0C9      BEQ	0x0183
    016A 3083      CPI	R24,3
    016B E0E0      LDI	R30,0
    016C 079E      CPC	R25,R30
    016D F0F9      BEQ	0x018D
    016E C027      RJMP	0x0196
(0124) 		    case  0:  write164(display[i] | 0x70);  break;
    016F E483      LDI	R24,0x43
    0170 E091      LDI	R25,1
    0171 2DEE      MOV	R30,R14
    0172 27FF      CLR	R31
    0173 0FE8      ADD	R30,R24
    0174 1FF9      ADC	R31,R25
    0175 8100      LDD	R16,Z+0
    0176 6700      ORI	R16,0x70
    0177 D537      RCALL	_write164
    0178 C01D      RJMP	0x0196
(0125) 		    case  1:  write164(display[i] | 0xB0);  break;
    0179 E483      LDI	R24,0x43
    017A E091      LDI	R25,1
    017B 2DEE      MOV	R30,R14
    017C 27FF      CLR	R31
    017D 0FE8      ADD	R30,R24
    017E 1FF9      ADC	R31,R25
    017F 8100      LDD	R16,Z+0
    0180 6B00      ORI	R16,0xB0
    0181 D52D      RCALL	_write164
    0182 C013      RJMP	0x0196
(0126) 		    case  2:  write164(display[i] | 0xD0);  break;
    0183 E483      LDI	R24,0x43
    0184 E091      LDI	R25,1
    0185 2DEE      MOV	R30,R14
    0186 27FF      CLR	R31
    0187 0FE8      ADD	R30,R24
    0188 1FF9      ADC	R31,R25
    0189 8100      LDD	R16,Z+0
    018A 6D00      ORI	R16,0xD0

⌨️ 快捷键说明

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