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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -