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

📄 ucos.lst

📁 UCOS在AVR单片机上的移植工程,开发环境为ICC.
💻 LST
📖 第 1 页 / 共 5 页
字号:
__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 + -