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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    006F E5CF      LDI	R28,0x5F
    0070 E0D4      LDI	R29,4
    0071 BFCD      OUT	0x3D,R28
    0072 BFDE      OUT	0x3E,R29
    0073 51C0      SUBI	R28,0x10
    0074 40D0      SBCI	R29,0
    0075 EA0A      LDI	R16,0xAA
    0076 8308      STD	Y+0,R16
    0077 2400      CLR	R0
    0078 EEE9      LDI	R30,0xE9
    0079 E0F0      LDI	R31,0
    007A E010      LDI	R17,0
    007B 3EE9      CPI	R30,0xE9
    007C 07F1      CPC	R31,R17
    007D F011      BEQ	0x0080
    007E 9201      ST	R0,Z+
    007F CFFB      RJMP	0x007B
    0080 8300      STD	Z+0,R16
    0081 E5E4      LDI	R30,0x54
    0082 E0F0      LDI	R31,0
    0083 E6A0      LDI	R26,0x60
    0084 E0B0      LDI	R27,0
    0085 E010      LDI	R17,0
    0086 3DED      CPI	R30,0xDD
    0087 07F1      CPC	R31,R17
    0088 F021      BEQ	0x008D
    0089 95C8      LPM
    008A 9631      ADIW	R30,1
    008B 920D      ST	R0,X+
    008C CFF9      RJMP	0x0086
    008D 940E0090  CALL	_main
_exit:
    008F CFFF      RJMP	_exit
_main:
    0090 9722      SBIW	R28,2
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\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 "lcd.h" 
(0013) 
(0014) //global variables 
(0015) INT8U Key0_Flag  = 0;  //Flag of Key0 Pressed
(0016) INT8U Key1_Flag  = 0;  //Flag of Key0 Pressed
(0017) INT8U Key2_Flag  = 0;  //Flag of Key0 Pressed
(0018) INT8U Key3_Flag  = 0;  //Flag of Key0 Pressed
(0019) INT8U NoKey_Flag = 0;  //Flag of No Key Pressed
(0020) 
(0021) void main(void) 
(0022) { 
(0023) 	Hardware_Init();
    0091 940E0169  CALL	_Hardware_Init
(0024) 	LCD_Reset();
    0093 940E026D  CALL	_LCD_Reset
(0025) 	LCD_Show_String(0,0,"=*= KEY DEMO =*=");
    0095 ED84      LDI	R24,0xD4
    0096 E090      LDI	R25,0
    0097 8399      STD	Y+1,R25
    0098 8388      STD	Y+0,R24
    0099 2722      CLR	R18
    009A 2700      CLR	R16
    009B 940E02A2  CALL	_LCD_Show_String
(0026) 	LCD_Show_String(1,0,"No Key Pressed! ");
    009D EC83      LDI	R24,0xC3
    009E E090      LDI	R25,0
    009F 8399      STD	Y+1,R25
    00A0 8388      STD	Y+0,R24
    00A1 2722      CLR	R18
    00A2 E001      LDI	R16,1
    00A3 940E02A2  CALL	_LCD_Show_String
    00A5 C04B      RJMP	0x00F1
(0027) 	
(0028) 	while(1)
(0029) 	{
(0030) 		if(Key0_Flag == 1)
    00A6 91800060  LDS	R24,0x60
    00A8 3081      CPI	R24,1
    00A9 F459      BNE	0x00B5
(0031) 		{
(0032) 			Key0_Flag = 0;
    00AA 2422      CLR	R2
    00AB 92200060  STS	0x60,R2
(0033) 			LCD_Show_String(1,0,"Key0 is Pressed! ");
    00AD EB81      LDI	R24,0xB1
    00AE E090      LDI	R25,0
    00AF 8399      STD	Y+1,R25
    00B0 8388      STD	Y+0,R24
    00B1 2722      CLR	R18
    00B2 E001      LDI	R16,1
    00B3 940E02A2  CALL	_LCD_Show_String
(0034) 		}
(0035) 		if(Key1_Flag == 1)
    00B5 91800061  LDS	R24,0x61
    00B7 3081      CPI	R24,1
    00B8 F459      BNE	0x00C4
(0036) 		{
(0037) 			Key1_Flag = 0;
    00B9 2422      CLR	R2
    00BA 92200061  STS	0x61,R2
(0038) 			LCD_Show_String(1,0,"Key1 is Pressed! ");
    00BC E98F      LDI	R24,0x9F
    00BD E090      LDI	R25,0
    00BE 8399      STD	Y+1,R25
    00BF 8388      STD	Y+0,R24
    00C0 2722      CLR	R18
    00C1 E001      LDI	R16,1
    00C2 940E02A2  CALL	_LCD_Show_String
(0039) 		}
(0040) 		if(Key2_Flag == 1)
    00C4 91800062  LDS	R24,0x62
    00C6 3081      CPI	R24,1
    00C7 F459      BNE	0x00D3
(0041) 		{
(0042) 			Key2_Flag = 0;
    00C8 2422      CLR	R2
    00C9 92200062  STS	0x62,R2
(0043) 			LCD_Show_String(1,0,"Key2 is Pressed! ");
    00CB E88D      LDI	R24,0x8D
    00CC E090      LDI	R25,0
    00CD 8399      STD	Y+1,R25
    00CE 8388      STD	Y+0,R24
    00CF 2722      CLR	R18
    00D0 E001      LDI	R16,1
    00D1 940E02A2  CALL	_LCD_Show_String
(0044) 		}
(0045) 		if(Key3_Flag == 1)
    00D3 91800063  LDS	R24,0x63
    00D5 3081      CPI	R24,1
    00D6 F459      BNE	0x00E2
(0046) 		{
(0047) 			Key3_Flag = 0;
    00D7 2422      CLR	R2
    00D8 92200063  STS	0x63,R2
(0048) 			LCD_Show_String(1,0,"Key3 is Pressed! ");
    00DA E78B      LDI	R24,0x7B
    00DB E090      LDI	R25,0
    00DC 8399      STD	Y+1,R25
    00DD 8388      STD	Y+0,R24
    00DE 2722      CLR	R18
    00DF E001      LDI	R16,1
    00E0 940E02A2  CALL	_LCD_Show_String
(0049) 		}
(0050) 		if(NoKey_Flag == 1)
    00E2 91800064  LDS	R24,0x64
    00E4 3081      CPI	R24,1
    00E5 F459      BNE	0x00F1
(0051) 		{
(0052) 			NoKey_Flag = 0;
    00E6 2422      CLR	R2
    00E7 92200064  STS	0x64,R2
(0053) 			LCD_Show_String(1,0,"No Key Pressed!  ");
    00E9 E689      LDI	R24,0x69
    00EA E090      LDI	R25,0
    00EB 8399      STD	Y+1,R25
    00EC 8388      STD	Y+0,R24
    00ED 2722      CLR	R18
    00EE E001      LDI	R16,1
    00EF 940E02A2  CALL	_LCD_Show_String
    00F1 CFB4      RJMP	0x00A6
(0054) 		}
(0055) 	} 
(0056) } 
    00F2 9622      ADIW	R28,2
    00F3 9508      RET
_Timer0_Interrupt:
    00F4 940E0308  CALL	push_lset
(0057) 
(0058) //***************************************************************
(0059) // Function    : Timer0_Interrupt                                
(0060) // Input       : none                                            
(0061) // Output      : none                                            
(0062) // Description : ATmega16 T/C0 ISR                               
(0063) //***************************************************************
(0064) #pragma interrupt_handler Timer0_Interrupt:20                    
(0065) void Timer0_Interrupt(void)                                      
(0066) {                                                                
(0067) 	static INT16U key_count = 0;
(0068) 	static INT8U buzzer_count = 0;
(0069) 	static INT8U buzzer_status = 0;
(0070) 	                                      
(0071) 	//Clear Timer0 OCIF Flag                                     
(0072) 	TIFR  |= 0x02;                                               
    00F6 B788      IN	R24,0x38
    00F7 6082      ORI	R24,2
    00F8 BF88      OUT	0x38,R24
(0073) 	TCNT0  = 0x00;                                              
    00F9 2422      CLR	R2
    00FA BE22      OUT	0x32,R2
(0074) 	//Key Detection
(0075) 	if(Get_Key0() == true)
    00FB 940E0189  CALL	_Get_Key0
    00FD 3001      CPI	R16,1
    00FE F459      BNE	0x010A
(0076) 	{
(0077) 		Key0_Flag = 1;
    00FF E081      LDI	R24,1
    0100 93800060  STS	0x60,R24
(0078) 		key_count = 0;
    0102 2422      CLR	R2
    0103 2433      CLR	R3
    0104 92300066  STS	0x66,R3
    0106 92200065  STS	0x65,R2
(0079) 		buzzer_status = 1;
    0108 93800068  STS	0x68,R24
(0080) 	}                                            
(0081) 	if(Get_Key1() == true)
    010A 940E01A2  CALL	_Get_Key1
    010C 3001      CPI	R16,1
    010D F459      BNE	0x0119
(0082) 	{
(0083) 		Key1_Flag = 1;
    010E E081      LDI	R24,1
    010F 93800061  STS	0x61,R24
(0084) 		key_count = 0;
    0111 2422      CLR	R2
    0112 2433      CLR	R3
    0113 92300066  STS	0x66,R3
    0115 92200065  STS	0x65,R2
(0085) 		buzzer_status = 1;
    0117 93800068  STS	0x68,R24
(0086) 	}
(0087) 	if(Get_Key2() == true)
    0119 940E01BB  CALL	_Get_Key2
    011B 3001      CPI	R16,1
    011C F459      BNE	0x0128
(0088) 	{
(0089) 		Key2_Flag = 1;
    011D E081      LDI	R24,1
    011E 93800062  STS	0x62,R24
(0090) 		key_count = 0;
    0120 2422      CLR	R2
    0121 2433      CLR	R3
    0122 92300066  STS	0x66,R3
    0124 92200065  STS	0x65,R2
(0091) 		buzzer_status = 1;
    0126 93800068  STS	0x68,R24
(0092) 	}
(0093) 	if(Get_Key3() == true)
    0128 940E01D4  CALL	_Get_Key3
    012A 3001      CPI	R16,1
    012B F459      BNE	0x0137
(0094) 	{
(0095) 		Key3_Flag = 1;
    012C E081      LDI	R24,1
    012D 93800063  STS	0x63,R24
(0096) 		key_count = 0;
    012F 2422      CLR	R2
    0130 2433      CLR	R3
    0131 92300066  STS	0x66,R3
    0133 92200065  STS	0x65,R2
(0097) 		buzzer_status = 1;
    0135 93800068  STS	0x68,R24
(0098) 	}
(0099) 	//No Key Count
(0100) 	if(key_count++ >= 500)
    0137 90200065  LDS	R2,0x65
    0139 90300066  LDS	R3,0x66
    013B 01C1      MOVW	R24,R2
    013C 9601      ADIW	R24,1
    013D 93900066  STS	0x66,R25
    013F 93800065  STS	0x65,R24
    0141 01C1      MOVW	R24,R2
    0142 3F84      CPI	R24,0xF4
    0143 E0E1      LDI	R30,1
    0144 079E      CPC	R25,R30
    0145 F048      BCS	0x014F
(0101) 	{
(0102) 		key_count = 0;
    0146 2422      CLR	R2
    0147 2433      CLR	R3
    0148 92300066  STS	0x66,R3
    014A 92200065  STS	0x65,R2
(0103) 		NoKey_Flag = 1;
    014C E081      LDI	R24,1
    014D 93800064  STS	0x64,R24
(0104) 	}
(0105) 	//Buzzer Control
(0106) 	if(buzzer_status == 1)
    014F 91800068  LDS	R24,0x68
    0151 3081      CPI	R24,1
    0152 F499      BNE	0x0166
(0107) 	{
(0108) 		Buzzer_ON();
    0153 940E01ED  CALL	_Buzzer_ON
(0109) 		if(buzzer_count++ >= 50)
    0155 90200067  LDS	R2,0x67
    0157 2433      CLR	R3
    0158 2D82      MOV	R24,R2
    0159 5F8F      SUBI	R24,0xFF
    015A 93800067  STS	0x67,R24
    015C 2D82      MOV	R24,R2
    015D 3382      CPI	R24,0x32
    015E F038      BCS	0x0166
(0110) 		{
(0111) 			Buzzer_OFF();
    015F 940E01EF  CALL	_Buzzer_OFF
(0112) 			buzzer_status = 0;
    0161 2422      CLR	R2
    0162 92200068  STS	0x68,R2
(0113) 			buzzer_count = 0;
    0164 92200067  STS	0x67,R2
(0114) 		}
(0115) 	}                                                     
(0116) } 
    0166 940E031F  CALL	pop_lset
    0168 9518      RETI
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\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) //local function declaration
(0014) void Gpio_Init(void);
(0015) void Timer0_Init(void);
(0016) void Interrupt_Init(void);
(0017) 
(0018) //***************************************************************
(0019) // Function    : Hardware_Init
(0020) // Input       : none
(0021) // Output      : none
(0022) // Description : ATmega16 Hardware Initialization
(0023) //***************************************************************
(0024) void Hardware_Init(void)
(0025) {
(0026)     Gpio_Init();
_Hardware_Init:
    0169 D002      RCALL	_Gpio_Init
(0027)     Timer0_Init();
    016A D00F      RCALL	_Timer0_Init
(0028) 	Interrupt_Init();
(0029) }
    016B C01B      RJMP	_Interrupt_Init
(0030) 
(0031) //***************************************************************
(0032) // Function    : Gpio_Init
(0033) // Input       : none
(0034) // Output      : none
(0035) // Description : ATmega16 GPIO Initialization
(0036) //***************************************************************
(0037) void Gpio_Init(void)
(0038) {
(0039)     DDRA  = 0xFF; //端口A设置为输出
_Gpio_Init:
    016C EF8F      LDI	R24,0xFF
    016D BB8A      OUT	0x1A,R24
(0040)     PORTA = 0x00; //初始化输出0
    016E 2422      CLR	R2
    016F BA2B      OUT	0x1B,R2
(0041)     DDRB  = 0x0F; //端口B设置为输出
    0170 E08F      LDI	R24,0xF
    0171 BB87      OUT	0x17,R24
(0042)     PORTB = 0xF0; //初始化输出0
    0172 EF80      LDI	R24,0xF0
    0173 BB88      OUT	0x18,R24
(0043)     DDRC  = 0xFF; //端口C设置为输出
    0174 EF8F      LDI	R24,0xFF
    0175 BB84      OUT	0x14,R24
(0044)     PORTC = 0x00; //初始化输出0
    0176 BA25      OUT	0x15,R2
(0045)     DDRD  = 0xFF; //端口D设置为输出
    0177 BB81      OUT	0x11,R24
(0046)     PORTD = 0x00; //初始化输出0
    0178 BA22      OUT	0x12,R2
(0047) }
    0179 9508      RET
(0048) 
(0049) //***************************************************************
(0050) // Function    : Timer0_Init
(0051) // Input       : none
(0052) // Output      : none
(0053) // Description : ATmega16 Timer0 Initialization,10ms Interval
(0054) //***************************************************************
(0055) void Timer0_Init(void)
(0056) {
(0057) 	TCCR0 = 0x0D;   //1024 division,8M/1024,CTC Mode
_Timer0_Init:
    017A E08D      LDI	R24,0xD
    017B BF83      OUT	0x33,R24
(0058) 	TCNT0 = 0x00;   //Clear Counter
    017C 2422      CLR	R2
    017D BE22      OUT	0x32,R2
(0059) 	OCR0  = 78;     //78 * 1024/8M = 10ms 
    017E E48E      LDI	R24,0x4E
    017F BF8C      OUT	0x3C,R24
(0060) 	TIMSK |= 0x02;  //Enable OCIE0
    0180 B789      IN	R24,0x39
    0181 6082      ORI	R24,2
    0182 BF89      OUT	0x39,R24
(0061) 	TIFR  |= 0x02;  //Clear OCIF0
    0183 B788      IN	R24,0x38
    0184 6082      ORI	R24,2
    0185 BF88      OUT	0x38,R24
(0062) }
    0186 9508      RET
(0063) 
(0064) //***************************************************************
(0065) // Function    : Interrupt_Init
(0066) // Input       : none
(0067) // Output      : none

⌨️ 快捷键说明

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