📄 project.lst
字号:
__start:
__text_start:
005B E5CF LDI R28,0x5F
005C E0D4 LDI R29,4
005D BFCD OUT 0x3D,R28
005E BFDE OUT 0x3E,R29
005F 51C0 SUBI R28,0x10
0060 40D0 SBCI R29,0
0061 EA0A LDI R16,0xAA
0062 8308 STD Y+0,R16
0063 2400 CLR R0
0064 E6E1 LDI R30,0x61
0065 E0F0 LDI R31,0
0066 E010 LDI R17,0
0067 36EE CPI R30,0x6E
0068 07F1 CPC R31,R17
0069 F011 BEQ 0x006C
006A 9201 ST R0,Z+
006B CFFB RJMP 0x0067
006C 8300 STD Z+0,R16
006D EBE5 LDI R30,0xB5
006E E0F0 LDI R31,0
006F E6A0 LDI R26,0x60
0070 E0B0 LDI R27,0
0071 E010 LDI R17,0
0072 3BE6 CPI R30,0xB6
0073 07F1 CPC R31,R17
0074 F021 BEQ 0x0079
0075 95C8 LPM
0076 9631 ADIW R30,1
0077 920D ST R0,X+
0078 CFF9 RJMP 0x0072
0079 940E007C CALL _main
_exit:
007B CFFF RJMP _exit
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LED大屏幕显示系统设计\main.c
(0001) //***************************************************************
(0002) // File Name : LED.c
(0003) // Author : Steaven
(0004) // Created : 2008-07-26
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "iom16v.h"
(0010) #include "DataType.h"
(0011) #include "app.h"
(0012) #include "LED.h"
(0013)
(0014) void main(void)
(0015) {
(0016) Hardware_Init();
_main:
007C 940E00EF CALL _Hardware_Init
(0017) Display_Init();
007E 940E011E CALL _Display_Init
(0018) DotTest();
0080 940E018E CALL _DotTest
(0019) Interrupt_Init();
0082 940E011C CALL _Interrupt_Init
(0020) while(1) {;}
0084 CFFF RJMP 0x0084
(0021) }
0085 9508 RET
_Timer0_Interrupt:
0086 922A ST R2,-Y
0087 923A ST R3,-Y
0088 930A ST R16,-Y
0089 931A ST R17,-Y
008A 938A ST R24,-Y
008B 939A ST R25,-Y
008C 93EA ST R30,-Y
008D 93FA ST R31,-Y
008E B62F IN R2,0x3F
008F 922A ST R2,-Y
(0022)
(0023) //***************************************************************
(0024) // Function : Timer0_Interrupt
(0025) // Input : none
(0026) // Output : none
(0027) // Description : ATmega16 T/C0 ISR
(0028) //***************************************************************
(0029) #pragma interrupt_handler Timer0_Interrupt:20
(0030) void Timer0_Interrupt(void)
(0031) {
(0032) static INT8U Index = 0;
(0033) //Clear Timer0 OCIF Flag
(0034) TIFR |= 0x02;
0090 B788 IN R24,0x38
0091 6082 ORI R24,2
0092 BF88 OUT 0x38,R24
(0035) TCNT0 = 0x00;
0093 2422 CLR R2
0094 BE22 OUT 0x32,R2
(0036) //Display Control
(0037) PORTA = 0x00;
0095 BA2B OUT 0x1B,R2
(0038) PORTD = ~(1 << Index);
0096 91100060 LDS R17,0x60
0098 E001 LDI R16,1
0099 940E023D CALL lsl8
009B 2E20 MOV R2,R16
009C 9420 COM R2
009D BA22 OUT 0x12,R2
(0039) PORTA = *(Buffer + Index);
009E E683 LDI R24,0x63
009F E090 LDI R25,0
00A0 91E00060 LDS R30,0x60
00A2 27FF CLR R31
00A3 0FE8 ADD R30,R24
00A4 1FF9 ADC R31,R25
00A5 8020 LDD R2,Z+0
00A6 BA2B OUT 0x1B,R2
(0040) if(Index++ >= 8)
00A7 90200060 LDS R2,0x60
00A9 2433 CLR R3
00AA 2D82 MOV R24,R2
00AB 5F8F SUBI R24,0xFF
00AC 93800060 STS 0x60,R24
00AE 2D82 MOV R24,R2
00AF 3088 CPI R24,0x8
00B0 F018 BCS 0x00B4
(0041) {
(0042) Index = 0;
00B1 2422 CLR R2
00B2 92200060 STS 0x60,R2
(0043) }
(0044) }
00B4 9029 LD R2,Y+
00B5 BE2F OUT 0x3F,R2
00B6 91F9 LD R31,Y+
00B7 91E9 LD R30,Y+
00B8 9199 LD R25,Y+
00B9 9189 LD R24,Y+
00BA 9119 LD R17,Y+
00BB 9109 LD R16,Y+
00BC 9039 LD R3,Y+
00BD 9029 LD R2,Y+
00BE 9518 RETI
_Timer1_Interrupt:
temp --> Y+1
00BF 940E020F CALL push_lset
(0045)
(0046) //***************************************************************
(0047) // Function : Timer1_Interrupt
(0048) // Input : none
(0049) // Output : none
(0050) // Description : ATmega16 T/C1 ISR
(0051) //***************************************************************
(0052) #pragma interrupt_handler Timer1_Interrupt:7
(0053) void Timer1_Interrupt(void)
(0054) {
(0055) INT8U temp;
(0056) static INT8U Index;
(0057) //Clear Timer1 OCIF Flag
(0058) TIFR |= 0x10;
00C1 B788 IN R24,0x38
00C2 6180 ORI R24,0x10
00C3 BF88 OUT 0x38,R24
(0059) TCNT1 = 0x00;
00C4 2422 CLR R2
00C5 2433 CLR R3
00C6 BC3D OUT 0x2D,R3
00C7 BC2C OUT 0x2C,R2
(0060) //Buffer Control
(0061) if(Index++ >= 8)
00C8 90200061 LDS R2,0x61
00CA 2433 CLR R3
00CB 2D82 MOV R24,R2
00CC 5F8F SUBI R24,0xFF
00CD 93800061 STS 0x61,R24
00CF 2D82 MOV R24,R2
00D0 3088 CPI R24,0x8
00D1 F0B0 BCS 0x00E8
(0062) {
(0063) Index = 0;
00D2 2422 CLR R2
00D3 92200061 STS 0x61,R2
(0064) pBufStr++;
00D5 9180006C LDS R24,_pBufStr
00D7 9190006D LDS R25,_pBufStr+1
00D9 9601 ADIW R24,1
00DA 9390006D STS _pBufStr+1,R25
00DC 9380006C STS _pBufStr,R24
(0065) if(*pBufStr == '\0')
00DE 01FC MOVW R30,R24
00DF 91E4 LPM R30,0(Z)
00E0 23EE TST R30
00E1 F431 BNE 0x00E8
(0066) {
(0067) pBufStr = String1;
00E2 EA8C LDI R24,0xAC
00E3 E090 LDI R25,0
00E4 9390006D STS _pBufStr+1,R25
00E6 9380006C STS _pBufStr,R24
(0068) }
(0069) }
(0070) Buffer_IN(Index);
00E8 91000061 LDS R16,0x61
00EA 940E013C CALL _Buffer_IN
(0071) }
00EC 940E0226 CALL pop_lset
00EE 9518 RETI
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LED大屏幕显示系统设计\app.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 "iom16v.h"
(0010) #include "DataType.h"
(0011) #include "app.h"
(0012)
(0013) //***************************************************************
(0014) // Function : Hardware_Init
(0015) // Input : none
(0016) // Output : none
(0017) // Description : ATmega16 Hardware Initialization
(0018) //***************************************************************
(0019) void Hardware_Init(void)
(0020) {
(0021) Gpio_Init();
_Hardware_Init:
00EF D002 RCALL _Gpio_Init
(0022) Timer0_Init();
00F0 D00C RCALL _Timer0_Init
(0023) Timer1_Init();
(0024) }
00F1 C018 RJMP _Timer1_Init
(0025)
(0026) //***************************************************************
(0027) // Function : Gpio_Init
(0028) // Input : none
(0029) // Output : none
(0030) // Description : ATmega16 GPIO Initialization
(0031) //***************************************************************
(0032) void Gpio_Init(void)
(0033) {
(0034) DDRA = 0xFF; //端口A设置为输出
_Gpio_Init:
00F2 EF8F LDI R24,0xFF
00F3 BB8A OUT 0x1A,R24
(0035) PORTA = 0xFF; //初始化输出0
00F4 BB8B OUT 0x1B,R24
(0036) DDRB = 0xFF; //端口B设置为输出
00F5 BB87 OUT 0x17,R24
(0037) PORTB = 0x00; //初始化输出0
00F6 2422 CLR R2
00F7 BA28 OUT 0x18,R2
(0038) DDRC = 0xFF; //端口C设置为输出
00F8 BB84 OUT 0x14,R24
(0039) PORTC = 0x00; //初始化输出0
00F9 BA25 OUT 0x15,R2
(0040) DDRD = 0xFF; //端口D设置为输出
00FA BB81 OUT 0x11,R24
(0041) PORTD = 0x00; //初始化输出0
00FB BA22 OUT 0x12,R2
(0042) }
00FC 9508 RET
(0043)
(0044) //***************************************************************
(0045) // Function : Timer0_Init
(0046) // Input : none
(0047) // Output : none
(0048) // Description : ATmega16 Timer0 Initialization,10ms Interval
(0049) //***************************************************************
(0050) void Timer0_Init(void)
(0051) {
(0052) TCCR0 = 0x0D; //1024 division,8M/1024,CTC Mode
_Timer0_Init:
00FD E08D LDI R24,0xD
00FE BF83 OUT 0x33,R24
(0053) TCNT0 = 0x00; //Clear Counter
00FF 2422 CLR R2
0100 BE22 OUT 0x32,R2
(0054) OCR0 = 8; //8 * 1024/8M = 1ms
0101 E088 LDI R24,0x8
0102 BF8C OUT 0x3C,R24
(0055) TIMSK |= 0x02; //Enable OCIE0
0103 B789 IN R24,0x39
0104 6082 ORI R24,2
0105 BF89 OUT 0x39,R24
(0056) TIFR |= 0x02; //Clear OCIF0
0106 B788 IN R24,0x38
0107 6082 ORI R24,2
0108 BF88 OUT 0x38,R24
(0057) }
0109 9508 RET
(0058)
(0059) //***************************************************************
(0060) // Function : Timer1_Init
(0061) // Input : none
(0062) // Output : none
(0063) // Description : ATmega16 Timer1 Initialization,1s Interval
(0064) //***************************************************************
(0065) void Timer1_Init(void)
(0066) {
(0067) TCCR1A = 0x00; //WGM1[3:0]=0100,OCR1A
_Timer1_Init:
010A 2422 CLR R2
010B BC2F OUT 0x2F,R2
(0068) TCCR1B = 0x0D; //1024 division,8M/1024,CTC Mode
010C E08D LDI R24,0xD
010D BD8E OUT 0x2E,R24
(0069) TCNT1 = 0x00; //Clear Counter
010E 2433 CLR R3
010F BC3D OUT 0x2D,R3
0110 BC2C OUT 0x2C,R2
(0070) OCR1A = 7813; //7813 * 1024/8M = 1s
0111 E885 LDI R24,0x85
0112 E19E LDI R25,0x1E
0113 BD9B OUT 0x2B,R25
0114 BD8A OUT 0x2A,R24
(0071) TIMSK |= 0x10; //Enable OCIE1A
0115 B789 IN R24,0x39
0116 6180 ORI R24,0x10
0117 BF89 OUT 0x39,R24
(0072) TIFR |= 0x10; //Clear OCIF1A
0118 B788 IN R24,0x38
0119 6180 ORI R24,0x10
011A BF88 OUT 0x38,R24
(0073) }
011B 9508 RET
(0074)
(0075) //***************************************************************
(0076) // Function : Interrupt_Init
(0077) // Input : none
(0078) // Output : none
(0079) // Description : ATmega16 Interrupt Initialization
(0080) //***************************************************************
(0081) void Interrupt_Init(void)
(0082) {
(0083) SREG |= 0x80; //Enable Global Interrupt
_Interrupt_Init:
011C 9478 BSET 7
(0084) }
011D 9508 RET
_Display_Init:
Index --> R20
011E 940E01EC CALL push_gset1
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LED大屏幕显示系统设计\LED.c
(0001) //***************************************************************
(0002) // File Name : LED.c
(0003) // Author : Steaven
(0004) // Created : 2008-07-26
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "iom16v.h"
(0010) #include "DataType.h"
(0011) #include "app.h"
(0012) #include "LED.h"
(0013)
(0014) //constant definition
(0015) const INT8U Char_I[] = {0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0x00};/*"I",0*/
(0016) const INT8U Char_L[] = {0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00};/*"L",0*/
(0017) const INT8U Char_V[] = {0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00};/*"V",0*/
(0018) const INT8U Char_E[] = {0x00,0x00,0xFE,0x92,0x92,0x82,0x00,0x00};/*"E",0*/
(0019) const INT8U Char_Y[] = {0x00,0xC0,0x20,0x1E,0x20,0xC0,0x00,0x00};/*"Y",0*/
(0020) const INT8U Char_O[] = {0x00,0x00,0xFE,0x82,0x82,0xFE,0x00,0x00};/*"O",0*/
(0021) const INT8U Char_U[] = {0x00,0x00,0xFC,0x02,0x02,0xFC,0x00,0x00};/*"U",0*/
(0022) const INT8U Space[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*" ",0*/
(0023)
(0024) //struct definition
(0025) struct DataBaseIndex
(0026) {
(0027) INT8U Code;
(0028) const INT8U *Ptr;
(0029) };
(0030)
(0031) //char code database list
(0032) const struct DataBaseIndex DataBaseIndexList[] =
(0033) {
(0034) 'I', Char_I,
(0035) 'L', Char_L,
(0036) 'O', Char_O,
(0037) 'V', Char_V,
(0038) 'E', Char_E,
(0039) 'Y', Char_Y,
(0040) 'U', Char_U,
(0041) 0 , 0
(0042) };
(0043)
(0044) //global variables definition
(0045) const INT8U *pBufStr; //字符指针
(0046) const char String1[] = {"ILOVEYOU"}; //字符串
(0047) INT8U DisplayCnt; //显示计数器
(0048) INT8U Buffer[8]; //显示缓冲区
(0049) INT8U Length_of_DataBase; //字符数据库长度
(0050)
(0051) //***************************************************************
(0052) // Function : Display_Init
(0053) // Input : none
(0054) // Output : none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -