📄 project.lst
字号:
__start:
__text_start:
05C0 E5CF LDI R28,0x5F
05C1 E0D4 LDI R29,4
05C2 BFCD OUT 0x3D,R28
05C3 BFDE OUT 0x3E,R29
05C4 51C0 SUBI R28,0x10
05C5 40D0 SBCI R29,0
05C6 EA0A LDI R16,0xAA
05C7 8308 STD Y+0,R16
05C8 2400 CLR R0
05C9 E0EA LDI R30,0xA
05CA E0F1 LDI R31,1
05CB E011 LDI R17,1
05CC 33E8 CPI R30,0x38
05CD 07F1 CPC R31,R17
05CE F011 BEQ 0x05D1
05CF 9201 ST R0,Z+
05D0 CFFB RJMP 0x05CC
05D1 8300 STD Z+0,R16
05D2 EDE5 LDI R30,0xD5
05D3 E0FA LDI R31,0xA
05D4 E6A0 LDI R26,0x60
05D5 E0B0 LDI R27,0
05D6 E01B LDI R17,0xB
05D7 37EF CPI R30,0x7F
05D8 07F1 CPC R31,R17
05D9 F021 BEQ 0x05DE
05DA 95C8 LPM
05DB 9631 ADIW R30,1
05DC 920D ST R0,X+
05DD CFF9 RJMP 0x05D7
05DE 940E0CBC CALL _main
_exit:
05E0 CFFF RJMP _exit
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\initial.c
(0001) //***************************************************************
(0002) // File Name : initial.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) void Gpio_Init(void);
(0013) void Timer2_Init(void);
(0014) void Interrupt_Init(void);
(0015)
(0016) //***************************************************************
(0017) // Function : Hardware_Init
(0018) // Input : none
(0019) // Output : none
(0020) // Description : ATmega16 Hardware Initialization
(0021) //***************************************************************
(0022) void Hardware_Init(void)
(0023) {
(0024) Gpio_Init();
_Hardware_Init:
05E1 D002 RCALL _Gpio_Init
(0025) Timer2_Init();
05E2 D00F RCALL _Timer2_Init
(0026) Interrupt_Init();
(0027) }
05E3 C01C RJMP _Interrupt_Init
(0028)
(0029) //***************************************************************
(0030) // Function : Gpio_Init
(0031) // Input : none
(0032) // Output : none
(0033) // Description : ATmega16 GPIO Initialization
(0034) //***************************************************************
(0035) void Gpio_Init(void)
(0036) {
(0037) DDRA = 0xFF;
_Gpio_Init:
05E4 EF8F LDI R24,0xFF
05E5 BB8A OUT 0x1A,R24
(0038) PORTA = 0x00;
05E6 2422 CLR R2
05E7 BA2B OUT 0x1B,R2
(0039) DDRB = 0x0F;
05E8 E08F LDI R24,0xF
05E9 BB87 OUT 0x17,R24
(0040) PORTB = 0xF0;
05EA EF80 LDI R24,0xF0
05EB BB88 OUT 0x18,R24
(0041) DDRC = 0xFF;
05EC EF8F LDI R24,0xFF
05ED BB84 OUT 0x14,R24
(0042) PORTC = 0x00;
05EE BA25 OUT 0x15,R2
(0043) DDRD = 0xFF;
05EF BB81 OUT 0x11,R24
(0044) PORTD = 0x00;
05F0 BA22 OUT 0x12,R2
(0045) }
05F1 9508 RET
(0046)
(0047) //***************************************************************
(0048) // Function : Timer_Init
(0049) // Input : none
(0050) // Output : none
(0051) // Description : ATmega16 Timer Initialization
(0052) //***************************************************************
(0053) void Timer2_Init(void)
(0054) {
(0055) ASSR = 0x00; //Timer2 clocked by sys clk
_Timer2_Init:
05F2 2422 CLR R2
05F3 BC22 OUT 0x22,R2
(0056) TCCR2 = 0x47; //1024 division,8M/1024,CTC Mode
05F4 E487 LDI R24,0x47
05F5 BD85 OUT 0x25,R24
(0057) TCNT2 = 0x00; //Clear Counter
05F6 BC24 OUT 0x24,R2
(0058) OCR2 = 78; //78 * 1024/8M = 10ms
05F7 E48E LDI R24,0x4E
05F8 BD83 OUT 0x23,R24
(0059) TIMSK |= 0x80; //Enable OCIE2
05F9 B789 IN R24,0x39
05FA 6880 ORI R24,0x80
05FB BF89 OUT 0x39,R24
(0060) TIFR |= 0x80; //Clear OCIF2
05FC B788 IN R24,0x38
05FD 6880 ORI R24,0x80
05FE BF88 OUT 0x38,R24
(0061) }
05FF 9508 RET
(0062)
(0063) //***************************************************************
(0064) // Function : Interrupt_Init
(0065) // Input : none
(0066) // Output : none
(0067) // Description : ATmega16 Interrupt Initialization
(0068) //***************************************************************
(0069) void Interrupt_Init(void)
(0070) {
(0071) SREG |= 0x80; //Enable Global Interrupt
_Interrupt_Init:
0600 9478 BSET 7
(0072) }
0601 9508 RET
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\interrupt.c
(0001) //***************************************************************
(0002) // File Name : Interrupt.c
(0003) // Author : Steaven
(0004) // Created : 2008-06-09
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "app.h"
(0010)
(0011) //global variables definition
(0012) INT8U bYear; //time - year
(0013) INT8U bMonth; //time - month
(0014) INT8U bDate; //time - date
(0015) INT8U bHour; //time - hour
(0016) INT8U bMinute; //time - minute
(0017) INT8U bSecond; //time - second
(0018)
(0019) //***************************************************************
(0020) // Function : sInit_Calendar
(0021) // Input : none
(0022) // Output : none
(0023) // Description : Time Initialization,2008-10-29,23:40:45
(0024) //***************************************************************
(0025) void sInit_Calendar(void)
(0026) {
(0027) bYear = 0x08;
_sInit_Calendar:
0602 E088 LDI R24,0x8
0603 9380010F STS _bYear,R24
(0028) bMonth = 10;
0605 E08A LDI R24,0xA
0606 9380010E STS _bMonth,R24
(0029) bDate = 29;
0608 E18D LDI R24,0x1D
0609 9380010D STS _bDate,R24
(0030) bHour = 23;
060B E187 LDI R24,0x17
060C 9380010C STS _bHour,R24
(0031) bMinute = 40;
060E E288 LDI R24,0x28
060F 9380010B STS _bMinute,R24
(0032) bSecond = 45;
0611 E28D LDI R24,0x2D
0612 9380010A STS _bSecond,R24
(0033) }
0614 9508 RET
(0034)
(0035) //***************************************************************
(0036) // Function : Calendar_Update
(0037) // Input : none
(0038) // Output : none
(0039) // Description : Update time every one second
(0040) //***************************************************************
(0041) void Calendar_Update(void)
(0042) {
(0043) bSecond++;
_Calendar_Update:
0615 9180010A LDS R24,_bSecond
0617 5F8F SUBI R24,0xFF
0618 9380010A STS _bSecond,R24
(0044) if(bSecond >= 60)
061A 338C CPI R24,0x3C
061B F408 BCC 0x061D
061C C086 RJMP 0x06A3
(0045) {
(0046) bSecond = 0;
061D 2422 CLR R2
061E 9220010A STS _bSecond,R2
(0047) bMinute++;
0620 9180010B LDS R24,_bMinute
0622 5F8F SUBI R24,0xFF
0623 9380010B STS _bMinute,R24
(0048) if(bMinute >= 60)
0625 338C CPI R24,0x3C
0626 F408 BCC 0x0628
0627 C07B RJMP 0x06A3
(0049) {
(0050) bMinute = 0;
0628 9220010B STS _bMinute,R2
(0051) bHour++;
062A 9180010C LDS R24,_bHour
062C 5F8F SUBI R24,0xFF
062D 9380010C STS _bHour,R24
(0052) if(bHour >= 24)
062F 3188 CPI R24,0x18
0630 F408 BCC 0x0632
0631 C071 RJMP 0x06A3
(0053) {
(0054) bHour = 0;
0632 9220010C STS _bHour,R2
(0055) bDate++;
0634 9180010D LDS R24,_bDate
0636 5F8F SUBI R24,0xFF
0637 9380010D STS _bDate,R24
(0056) if((bMonth == 4) || (bMonth == 6) || \
0639 9180010E LDS R24,_bMonth
063B 3084 CPI R24,4
063C F031 BEQ 0x0643
063D 3086 CPI R24,6
063E F021 BEQ 0x0643
063F 3089 CPI R24,0x9
0640 F011 BEQ 0x0643
0641 308B CPI R24,0xB
0642 F479 BNE 0x0652
(0057) (bMonth == 9) || (bMonth == 11))
(0058) {
(0059) if(bDate > 30)
0643 E18E LDI R24,0x1E
0644 9020010D LDS R2,_bDate
0646 1582 CP R24,R2
0647 F008 BCS 0x0649
0648 C04D RJMP 0x0696
(0060) {
(0061) bDate = 1;
0649 E081 LDI R24,1
064A 9380010D STS _bDate,R24
(0062) bMonth++;
064C 9180010E LDS R24,_bMonth
064E 5F8F SUBI R24,0xFF
064F 9380010E STS _bMonth,R24
(0063) }
(0064) }
0651 C044 RJMP 0x0696
(0065) else if((bMonth == 1) || (bMonth == 3) || \
0652 9180010E LDS R24,_bMonth
0654 3081 CPI R24,1
0655 F061 BEQ 0x0662
0656 3083 CPI R24,3
0657 F051 BEQ 0x0662
0658 3085 CPI R24,5
0659 F041 BEQ 0x0662
065A 3087 CPI R24,7
065B F031 BEQ 0x0662
065C 3088 CPI R24,0x8
065D F021 BEQ 0x0662
065E 308A CPI R24,0xA
065F F011 BEQ 0x0662
0660 308C CPI R24,0xC
0661 F471 BNE 0x0670
(0066) (bMonth == 5) || (bMonth == 7) || \
(0067) (bMonth == 8) || (bMonth == 10) || \
(0068) (bMonth == 12))
(0069) {
(0070) if(bDate > 31)
0662 E18F LDI R24,0x1F
0663 9020010D LDS R2,_bDate
0665 1582 CP R24,R2
0666 F578 BCC 0x0696
(0071) {
(0072) bDate = 1;
0667 E081 LDI R24,1
0668 9380010D STS _bDate,R24
(0073) bMonth++;
066A 9180010E LDS R24,_bMonth
066C 5F8F SUBI R24,0xFF
066D 9380010E STS _bMonth,R24
(0074) }
(0075) }
066F C026 RJMP 0x0696
(0076) else if(bMonth == 2)
0670 9180010E LDS R24,_bMonth
0672 3082 CPI R24,2
0673 F511 BNE 0x0696
(0077) {
(0078) if(bDate > 28)
0674 E18C LDI R24,0x1C
0675 9020010D LDS R2,_bDate
0677 1582 CP R24,R2
0678 F4E8 BCC 0x0696
(0079) {
(0080) if((bYear % 4) != 0)
0679 E014 LDI R17,4
067A 9100010F LDS R16,_bYear
067C 940E0E18 CALL mod8u
067E 2300 TST R16
067F F049 BEQ 0x0689
(0081) {
(0082) bDate = 1;
0680 E081 LDI R24,1
0681 9380010D STS _bDate,R24
(0083) bMonth++;
0683 9180010E LDS R24,_bMonth
0685 5F8F SUBI R24,0xFF
0686 9380010E STS _bMonth,R24
(0084) }
0688 C00D RJMP 0x0696
(0085) else
(0086) {
(0087) if(bDate > 29)
0689 E18D LDI R24,0x1D
068A 9020010D LDS R2,_bDate
068C 1582 CP R24,R2
068D F440 BCC 0x0696
(0088) {
(0089) bDate = 1;
068E E081 LDI R24,1
068F 9380010D STS _bDate,R24
(0090) bMonth++;
0691 9180010E LDS R24,_bMonth
0693 5F8F SUBI R24,0xFF
0694 9380010E STS _bMonth,R24
(0091) }
(0092) }
(0093) }
(0094) }
(0095) if(bMonth > 12)
0696 E08C LDI R24,0xC
0697 9020010E LDS R2,_bMonth
0699 1582 CP R24,R2
069A F440 BCC 0x06A3
(0096) {
(0097) bMonth = 1;
069B E081 LDI R24,1
069C 9380010E STS _bMonth,R24
(0098) bYear++;
069E 9180010F LDS R24,_bYear
06A0 5F8F SUBI R24,0xFF
06A1 9380010F STS _bYear,R24
(0099) }
(0100) }
(0101) }
(0102) }
(0103) }
06A3 9508 RET
_Timer2_Interrupt:
06A4 940E0E79 CALL push_lset
(0104)
(0105) //***************************************************************
(0106) // Function : Timer2_Interrupt
(0107) // Input : none
(0108) // Output : none
(0109) // Description : Kernel Clock Interrupt Service Routine
(0110) //***************************************************************
(0111) #pragma interrupt_handler Timer2_Interrupt:4
(0112) void Timer2_Interrupt(void)
(0113) {
(0114) //Clear Timer2 OCIF Flag
(0115) TIFR |= 0x80;
06A6 B788 IN R24,0x38
06A7 6880 ORI R24,0x80
06A8 BF88 OUT 0x38,R24
(0116) TCNT2 = 0x00;
06A9 2422 CLR R2
06AA BC24 OUT 0x24,R2
(0117) //Update Task Status
(0118) OS_Task_Update();
06AB 940E071A CALL _OS_Task_Update
(0119) }
06AD 940E0E90 CALL pop_lset
06AF 9518 RETI
_OS_Event_Pend:
wTaskEvent --> R20
bTaskPrio --> R16
06B0 940E0E49 CALL push_gset1
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\Kernel.c
(0001) //******************************************************************************
(0002) // File Name : Kernel.c
(0003) // Author : Steaven
(0004) // Created : 2008-06-09
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -