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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0111 01F0      MOVW	R30,R0
    0112 E782      LDI	R24,0x72
    0113 E090      LDI	R25,0
    0114 0FE8      ADD	R30,R24
    0115 1FF9      ADC	R31,R25
    0116 2422      CLR	R2
    0117 2433      CLR	R3
    0118 8231      STD	Z+1,R3
    0119 8220      STD	Z+0,R2
(0108) 			OS_Event_Post(bTemp,0);
    011A 2722      CLR	R18
    011B 2733      CLR	R19
    011C 2F04      MOV	R16,R20
    011D DF83      RCALL	_OS_Event_Post
    011E 9543      INC	R20
    011F 3044      CPI	R20,4
    0120 F408      BCC	0x0122
    0121 CFCD      RJMP	0x00EF
(0109) 		}
(0110) 	}
(0111) }
    0122 940E03D9  CALL	pop_gset1
    0124 9508      RET
(0112) 
(0113) //******************************************************************************
(0114) // Function    : OS_Init
(0115) // Input       : none
(0116) // Output      : none
(0117) // Description : Initlization of TCBs
(0118) //******************************************************************************
(0119) void OS_Init(void)
(0120) {
(0121) 	INT8U bTemp;
(0122) 	for(bTemp = 0;bTemp < cMaxTask;bTemp++)
_OS_Init:
  bTemp                --> R16
    0125 2700      CLR	R16
    0126 C01E      RJMP	0x0145
(0123) 	{
(0124) 		OSTCB[bTemp].wTimerPeriod = 0;
    0127 E086      LDI	R24,6
    0128 9F80      MUL	R24,R16
    0129 01F0      MOVW	R30,R0
    012A E780      LDI	R24,0x70
    012B E090      LDI	R25,0
    012C 0FE8      ADD	R30,R24
    012D 1FF9      ADC	R31,R25
    012E 2422      CLR	R2
    012F 2433      CLR	R3
    0130 8231      STD	Z+1,R3
    0131 8220      STD	Z+0,R2
(0125) 		OSTCB[bTemp].wTimerCount = 0;
    0132 E086      LDI	R24,6
    0133 9F80      MUL	R24,R16
    0134 01F0      MOVW	R30,R0
    0135 E782      LDI	R24,0x72
    0136 E090      LDI	R25,0
    0137 0FE8      ADD	R30,R24
    0138 1FF9      ADC	R31,R25
    0139 8231      STD	Z+1,R3
    013A 8220      STD	Z+0,R2
(0126) 		OSTCB[bTemp].wEvent = 0;
    013B E086      LDI	R24,6
    013C 9F80      MUL	R24,R16
    013D 01F0      MOVW	R30,R0
    013E E784      LDI	R24,0x74
    013F E090      LDI	R25,0
    0140 0FE8      ADD	R30,R24
    0141 1FF9      ADC	R31,R25
    0142 8231      STD	Z+1,R3
    0143 8220      STD	Z+0,R2
    0144 9503      INC	R16
    0145 3004      CPI	R16,4
    0146 F300      BCS	0x0127
(0127) 	}
(0128) }
    0147 9508      RET
(0129) 
(0130) //******************************************************************************
(0131) // Function    : OS_Start
(0132) // Input       : none
(0133) // Output      : none
(0134) // Description : Initlization of tasks and Start Kernel
(0135) //******************************************************************************
(0136) void OS_Start(void)
(0137) {
(0138) 	Task_Init();
_OS_Start:
    0148 940E03CF  CALL	_Task_Init
(0139) 	Task_Start();
(0140) }
    014A 940C03C8  JMP	_Task_Start
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\多任务模拟系统设计\main.c
(0001) //***************************************************************
(0002) // File Name : main.c
(0003) // Author    : Steaven
(0004) // Created   : 2008-06-09
(0005) // Modified  : 
(0006) // Revision  : V0.0
(0007) //***************************************************************
(0008) 
(0009) #include "app.h"
(0010) 
(0011) void main(void)
(0012) {
(0013) 	//hardware initialization
(0014) 	Hardware_Init();
_main:
    014C 940E0053  CALL	_Hardware_Init
(0015) 	//os initialization
(0016) 	OS_Init();
    014E 940E0125  CALL	_OS_Init
(0017) 	//create task
(0018) 	OS_Task_Create(cPrioTask1,cKernel_1S);
    0150 E624      LDI	R18,0x64
    0151 E030      LDI	R19,0
    0152 2700      CLR	R16
    0153 940E00BB  CALL	_OS_Task_Create
(0019) 	OS_Task_Create(cPrioTask2,cKernel_2S);
    0155 EC28      LDI	R18,0xC8
    0156 E030      LDI	R19,0
    0157 E001      LDI	R16,1
    0158 940E00BB  CALL	_OS_Task_Create
(0020) 	OS_Task_Create(cPrioTask3,cKernel_5S);
    015A EF24      LDI	R18,0xF4
    015B E031      LDI	R19,1
    015C E002      LDI	R16,2
    015D 940E00BB  CALL	_OS_Task_Create
(0021) 	OS_Task_Create(cPrioTask4,cKernel_10S);
    015F EE28      LDI	R18,0xE8
    0160 E033      LDI	R19,3
    0161 E003      LDI	R16,3
    0162 940E00BB  CALL	_OS_Task_Create
(0022) 	//os start
(0023) 	OS_Start();
(0024) }
    0164 940C0148  JMP	_OS_Start
_LED_OFF:
  Index                --> R20
    0166 940E03D6  CALL	push_gset1
    0168 2F40      MOV	R20,R16
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\多任务模拟系统设计\misc.c
(0001) //******************************************************************************
(0002) // File Name : Gpio.c
(0003) // Author    : Steaven
(0004) // Created   : 2008-06-09
(0005) // Modified  : 
(0006) // Revision  : V0.0
(0007) //******************************************************************************
(0008) 
(0009) #include "app.h"
(0010) 
(0011) //local function(s) declaration
(0012) INT16U swGet_Key1(void);
(0013) INT16U swGet_Key2(void);
(0014) INT16U swGet_Key3(void);
(0015) INT16U swGet_Key4(void);
(0016) 
(0017) //***************************************************************
(0018) // Function    : LED_OFF
(0019) // Input       : Index - LED Index,from 1 to 4
(0020) // Output      : none
(0021) // Description : Turn off specific LED indexed by Index variable
(0022) //***************************************************************
(0023) void LED_OFF(INT8U Index)
(0024) {
(0025)     PORTD |= (1 << Index);
    0169 E001      LDI	R16,1
    016A 2F14      MOV	R17,R20
    016B 940E0426  CALL	lsl8
    016D B222      IN	R2,0x12
    016E 2A20      OR	R2,R16
    016F BA22      OUT	0x12,R2
(0026) }
    0170 940E03D9  CALL	pop_gset1
    0172 9508      RET
_LED_ON:
  Index                --> R20
    0173 940E03D6  CALL	push_gset1
    0175 2F40      MOV	R20,R16
(0027) 
(0028) //***************************************************************
(0029) // Function    : LED_ON
(0030) // Input       : Index - LED Index,from 1 to 4
(0031) // Output      : none
(0032) // Description : Turn on specific LED indexed by Index variable
(0033) //***************************************************************
(0034) void LED_ON(INT8U Index)
(0035) {
(0036)     PORTD &= ~(1 << Index);
    0176 E001      LDI	R16,1
    0177 2F14      MOV	R17,R20
    0178 940E0426  CALL	lsl8
    017A 2E20      MOV	R2,R16
    017B 9420      COM	R2
    017C B232      IN	R3,0x12
    017D 2032      AND	R3,R2
    017E BA32      OUT	0x12,R3
(0037) }
    017F 940E03D9  CALL	pop_gset1
    0181 9508      RET
_LED_TOGGLE:
  Index                --> R20
    0182 940E03D6  CALL	push_gset1
    0184 2F40      MOV	R20,R16
(0038) 
(0039) //***************************************************************
(0040) // Function    : LED_ON
(0041) // Input       : Index - LED Index,from 1 to 4
(0042) // Output      : none
(0043) // Description : Turn on specific LED indexed by Index variable
(0044) //***************************************************************
(0045) void LED_TOGGLE(INT8U Index)
(0046) {
(0047)     static INT8U bLED1_Status = cOFF_Status;
(0048)     static INT8U bLED2_Status = cOFF_Status;
(0049)     static INT8U bLED3_Status = cOFF_Status;
(0050)     static INT8U bLED4_Status = cOFF_Status;
(0051)     switch(Index)
    0185 2755      CLR	R21
    0186 3044      CPI	R20,4
    0187 E0E0      LDI	R30,0
    0188 075E      CPC	R21,R30
    0189 F071      BEQ	0x0198
    018A 3045      CPI	R20,5
    018B E0E0      LDI	R30,0
    018C 075E      CPC	R21,R30
    018D F101      BEQ	0x01AE
    018E 3046      CPI	R20,6
    018F E0E0      LDI	R30,0
    0190 075E      CPC	R21,R30
    0191 F189      BEQ	0x01C3
    0192 3047      CPI	R20,7
    0193 E0E0      LDI	R30,0
    0194 075E      CPC	R21,R30
    0195 F409      BNE	0x0197
    0196 C041      RJMP	0x01D8
    0197 C054      RJMP	0x01EC
(0052)     {
(0053)         case cLED1 :
(0054)         {
(0055)             if(bLED1_Status == cOFF_Status)
    0198 90200060  LDS	R2,0x60
    019A 2022      TST	R2
    019B F431      BNE	0x01A2
(0056)             {
(0057)                 LED_ON(cLED1);
    019C E004      LDI	R16,4
    019D DFD5      RCALL	_LED_ON
(0058)                 bLED1_Status = cON_Status;
    019E E081      LDI	R24,1
    019F 93800060  STS	0x60,R24
(0059)             }
    01A1 C04A      RJMP	0x01EC
(0060)             else if(bLED1_Status = cON_Status)
    01A2 E081      LDI	R24,1
    01A3 93800060  STS	0x60,R24
    01A5 2388      TST	R24
    01A6 F409      BNE	0x01A8
    01A7 C044      RJMP	0x01EC
(0061)             {
(0062)                 LED_OFF(cLED1);
    01A8 E004      LDI	R16,4
    01A9 DFBC      RCALL	_LED_OFF
(0063)                 bLED1_Status = cOFF_Status;
    01AA 2422      CLR	R2
    01AB 92200060  STS	0x60,R2
(0064)             }
(0065)             break;
    01AD C03E      RJMP	0x01EC
(0066)         }
(0067)         case cLED2 :
(0068)         {
(0069)             if(bLED2_Status == cOFF_Status)
    01AE 90200061  LDS	R2,0x61
    01B0 2022      TST	R2
    01B1 F431      BNE	0x01B8
(0070)             {
(0071)                 LED_ON(cLED2);
    01B2 E005      LDI	R16,5
    01B3 DFBF      RCALL	_LED_ON
(0072)                 bLED2_Status = cON_Status;
    01B4 E081      LDI	R24,1
    01B5 93800061  STS	0x61,R24
(0073)             }
    01B7 C034      RJMP	0x01EC
(0074)             else if(bLED2_Status = cON_Status)
    01B8 E081      LDI	R24,1
    01B9 93800061  STS	0x61,R24
    01BB 2388      TST	R24
    01BC F179      BEQ	0x01EC
(0075)             {
(0076)                 LED_OFF(cLED2);
    01BD E005      LDI	R16,5
    01BE DFA7      RCALL	_LED_OFF
(0077)                 bLED2_Status = cOFF_Status;
    01BF 2422      CLR	R2
    01C0 92200061  STS	0x61,R2
(0078)             }
(0079)             break;
    01C2 C029      RJMP	0x01EC
(0080)         }
(0081)         case cLED3 :
(0082)         {
(0083)             if(bLED3_Status == cOFF_Status)
    01C3 90200062  LDS	R2,0x62
    01C5 2022      TST	R2
    01C6 F431      BNE	0x01CD
(0084)             {
(0085)                 LED_ON(cLED3);
    01C7 E006      LDI	R16,6
    01C8 DFAA      RCALL	_LED_ON
(0086)                 bLED3_Status = cON_Status;
    01C9 E081      LDI	R24,1
    01CA 93800062  STS	0x62,R24
(0087)             }
    01CC C01F      RJMP	0x01EC
(0088)             else if(bLED3_Status = cON_Status)
    01CD E081      LDI	R24,1
    01CE 93800062  STS	0x62,R24
    01D0 2388      TST	R24
    01D1 F0D1      BEQ	0x01EC
(0089)             {
(0090)                 LED_OFF(cLED3);
    01D2 E006      LDI	R16,6
    01D3 DF92      RCALL	_LED_OFF
(0091)                 bLED3_Status = cOFF_Status;
    01D4 2422      CLR	R2
    01D5 92200062  STS	0x62,R2
(0092)             }
(0093)             break;
    01D7 C014      RJMP	0x01EC
(0094)         }
(0095)         case cLED4 :
(0096)         {
(0097)             if(bLED4_Status == cOFF_Status)
    01D8 90200063  LDS	R2,0x63
    01DA 2022      TST	R2
    01DB F431      BNE	0x01E2
(0098)             {
(0099)                 LED_ON(cLED4);
    01DC E007      LDI	R16,7
    01DD DF95      RCALL	_LED_ON
(0100)                 bLED4_Status = cON_Status;
    01DE E081      LDI	R24,1
    01DF 93800063  STS	0x63,R24
(0101)             }
    01E1 C00A      RJMP	0x01EC
(0102)             else if(bLED4_Status = cON_Status)
    01E2 E081      LDI	R24,1
    01E3 93800063  STS	0x63,R24
    01E5 2388      TST	R24
    01E6 F029      BEQ	0x01EC
(0103)             {
(0104)                 LED_OFF(cLED4);
    01E7 E007      LDI	R16,7
    01E8 DF7D      RCALL	_LED_OFF
(0105)                 bLED4_Status = cOFF_Status;
    01E9 2422      CLR	R2
    01EA 92200063  STS	0x63,R2
(0106)             }
(0107)             break;
(0108)         }
(0109)         default : break;
(0110)     }
(0111) }
    01EC 940E03D9  CALL	pop_gset1
    01EE 9508      RET
(0112) 
(0113) //****************************************************************
(0114) // Function    : swGet_Key1
(0115) // Input       : none
(0116) // Output      : true - Key1 active; false - Key1 - passitive
(0117) // Description : Key1 Detection,rising edge active
(0118) //****************************************************************
(0119) INT16U swGet_Key1(void)
(0120) {
(0121) 	static INT16U wKeyStatus = 1;
(0122) 	if(wKeyStatus == 1)
_swGet_Key1:
    01EF 91800064  LDS	R24,__idata_end
    01F1 91900065  LDS	R25,__idata_end+1
    01F3 3081      CPI	R24,1
    01F4 E0E0      LDI	R30,0
    01F5 079E      CPC	R25,R30
    01F6 F449      BNE	0x0200
(0123) 	{
(0124) 		if((PINB & (1 << cKey1)) == 0) //Key Pressed
    01F7 99B0      SBIC	0x16,0
    01F8 C01A      RJMP	0x0213
(0125) 		{
(0126) 			wKeyStatus = 0;
    01F9 2422      CLR	R2
    01FA 2433      CLR	R3
    01FB 92300065  STS	__idata_end+1,R3
    01FD 92200064  STS	__idata_end,R2
(0127) 		}
(0128) 	}
    01FF C013      RJMP	0x0213
(0129) 	else if(wKeyStatus == 0)
    0200 90200064  LDS	R2,__idata_end
    0202 90300065  LDS	R3,__idata_end+1
    0204 2022      TST	R2
    0205 F469      BNE	0x0213
    0206 2033      TST	R3
    0207 F459      BNE	0x0213
(0130) 	{
(0131) 		if(PINB & (1 << cKey1))       //Key Released
    0208 9BB0      SBIS	0x16,0
    0209 C009      RJMP	0x0213
(0132) 		{
(0133) 			wKeyStatus = 1;
    020A E081      LDI	R24,1
    020B E090      LDI	R25,0
    020C 93900065  STS	__idata_end+1,R25
    020E 93800064  STS	__idata_end,R24
(0134) 			return(true);
    0210 E001      LDI	R16,1
    0211 E010      LDI	R17,0
    0212 C002      RJMP	0x0215
(0135) 		}
(0136) 	}
(0137) 	return(false);
    0213 2700      CLR	R16
    0214 2711      CLR	R17
    0215 9508      RET
(0138) }
(0139) 
(0140) //******************************************************************************
(0141) // Function    : swGet_Key2
(0142) // Input       : none
(0143) // Output      : true - Key2 active; false - Key2 - passitive
(0144) // Description : Key1 Detection,rising edge active
(0145) //******************************************************************************
(0146) INT16U swGet_Key2(void)
(0147) {
(0148) 	static INT16U wKeyStatus = 1;
(0149) 	if(wKeyStatus == 1)
_swGet_Key2:
    0216 91800066  LDS	R24,__idata_end+2

⌨️ 快捷键说明

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