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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    0090 E5CF      LDI	R28,0x5F
    0091 E0D4      LDI	R29,4
    0092 BFCD      OUT	0x3D,R28
    0093 BFDE      OUT	0x3E,R29
    0094 51C0      SUBI	R28,0x10
    0095 40D0      SBCI	R29,0
    0096 EA0A      LDI	R16,0xAA
    0097 8308      STD	Y+0,R16
    0098 2400      CLR	R0
    0099 E1EC      LDI	R30,0x1C
    009A E0F1      LDI	R31,1
    009B E011      LDI	R17,1
    009C 3BE5      CPI	R30,0xB5
    009D 07F1      CPC	R31,R17
    009E F011      BEQ	0x00A1
    009F 9201      ST	R0,Z+
    00A0 CFFB      RJMP	0x009C
    00A1 8300      STD	Z+0,R16
    00A2 E6E4      LDI	R30,0x64
    00A3 E0F0      LDI	R31,0
    00A4 E6A0      LDI	R26,0x60
    00A5 E0B0      LDI	R27,0
    00A6 E011      LDI	R17,1
    00A7 32E0      CPI	R30,0x20
    00A8 07F1      CPC	R31,R17
    00A9 F021      BEQ	0x00AE
    00AA 95C8      LPM
    00AB 9631      ADIW	R30,1
    00AC 920D      ST	R0,X+
    00AD CFF9      RJMP	0x00A7
    00AE 940E00D1  CALL	_main
_exit:
    00B0 CFFF      RJMP	_exit
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\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 "includes.h"
(0010) 
(0011) //local function declaration
(0012) void Gpio_Init(void);
(0013) void Timer0_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:
    00B1 D002      RCALL	_Gpio_Init
(0025) 	Timer0_Init();
    00B2 D00B      RCALL	_Timer0_Init
(0026) 	Interrupt_Init();
(0027) }
    00B3 C017      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  = 0x00; //PortA - Input with Pull-Up
_Gpio_Init:
    00B4 2422      CLR	R2
    00B5 BA2A      OUT	0x1A,R2
(0038)     PORTA = 0x00; 
    00B6 BA2B      OUT	0x1B,R2
(0039)     DDRB  = 0x00; //PortB - Input with Pull-Up
    00B7 BA27      OUT	0x17,R2
(0040)     PORTB = 0x00; 
    00B8 BA28      OUT	0x18,R2
(0041)     DDRC  = 0x00; //PortC - Input with Pull-Up
    00B9 BA24      OUT	0x14,R2
(0042)     PORTC = 0x00; 
    00BA BA25      OUT	0x15,R2
(0043)     DDRD  = 0x00; //PortD - Input with Pull-Up
    00BB BA21      OUT	0x11,R2
(0044)     PORTD = 0x00; 
    00BC BA22      OUT	0x12,R2
(0045) }
    00BD 9508      RET
(0046) 
(0047) //********************************************************************
(0048) // Function    : Timer0_Init
(0049) // Input       : none
(0050) // Output      : none
(0051) // Description : ATmega16 Timer0 Initialization,10ms Interval
(0052) //********************************************************************
(0053) void Timer0_Init(void)
(0054) {
(0055) 	TCCR0 = 0x0D;   //1024 division,8M/1024,CTC Mode
_Timer0_Init:
    00BE E08D      LDI	R24,0xD
    00BF BF83      OUT	0x33,R24
(0056) 	TCNT0 = 0x00;   //Clear Counter
    00C0 2422      CLR	R2
    00C1 BE22      OUT	0x32,R2
(0057) 	OCR0  = 78;     //78 * 1024/8M = 10ms 
    00C2 E48E      LDI	R24,0x4E
    00C3 BF8C      OUT	0x3C,R24
(0058) 	TIMSK |= 0x02;  //Enable OCIE0
    00C4 B789      IN	R24,0x39
    00C5 6082      ORI	R24,2
    00C6 BF89      OUT	0x39,R24
(0059) 	TIFR  |= 0x02;  //Clear OCIF0
    00C7 B788      IN	R24,0x38
    00C8 6082      ORI	R24,2
    00C9 BF88      OUT	0x38,R24
(0060) }
    00CA 9508      RET
(0061) 
(0062) //********************************************************************
(0063) // Function    : Interrupt_Init
(0064) // Input       : none
(0065) // Output      : none
(0066) // Description : ATmega16 Interrupt Initialization
(0067) //********************************************************************
(0068) void Interrupt_Init(void)
(0069) {
(0070) 	SREG |= 0x80;   //Enable Global Interrupt
_Interrupt_Init:
    00CB 9478      BSET	7
(0071) }
    00CC 9508      RET
(0072) 
(0073) //********************************************************************
(0074) // Function    : Buzzer_ON/OFF
(0075) // Input       : none
(0076) // Output      : none
(0077) // Description : Buzzer ON/OFF Control
(0078) //********************************************************************
(0079) void Buzzer_ON(void)
(0080) {
(0081) 	PORTB |= 0x08;
_Buzzer_ON:
    00CD 9AC3      SBI	0x18,3
(0082) }
    00CE 9508      RET
(0083) 
(0084) void Buzzer_OFF(void)
(0085) {
(0086) 	PORTB &= ~0x08;
_Buzzer_OFF:
    00CF 98C3      CBI	0x18,3
(0087) }
    00D0 9508      RET
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-07-26
(0005) // Modified  : 
(0006) // Revision  : V0.0
(0007) //********************************************************************
(0008) 
(0009) #include "includes.h"
(0010) 
(0011) void main(void) 
(0012) { 
(0013) 	INT8U count = 0;
_main:
  count                --> R20
    00D1 2744      CLR	R20
(0014) 	Hardware_Init();
    00D2 940E00B1  CALL	_Hardware_Init
(0015) 	Init_UART();
    00D4 940E011F  CALL	_Init_UART
    00D6 C008      RJMP	0x00DF
(0016) 	
(0017) 	while(1)
(0018) 	{
(0019) 		if(sbGet_SCI_Event() != 0)
    00D7 940E0113  CALL	_sbGet_SCI_Event
    00D9 2300      TST	R16
    00DA F021      BEQ	0x00DF
(0020) 		{
(0021) 			SCI_Parsing(&stSciBuffer);
    00DB E10C      LDI	R16,0x1C
    00DC E011      LDI	R17,1
    00DD 940E03C4  CALL	_SCI_Parsing
    00DF CFF7      RJMP	0x00D7
(0022) 		}
(0023) 	}
(0024) } 
    00E0 9508      RET
_wTimeCountr0_Interrupt:
    00E1 940E0723  CALL	push_lset
(0025) 
(0026) //********************************************************************
(0027) // Function    : wTimeCountr0_Interrupt                                
(0028) // Input       : none                                            
(0029) // Output      : none                                            
(0030) // Description : ATmega16 T/C0 ISR                               
(0031) //********************************************************************
(0032) #pragma interrupt_handler wTimeCountr0_Interrupt:20                    
(0033) void wTimeCountr0_Interrupt(void)                                      
(0034) {                                                                
(0035) 	static INT8U int_count = 0;
(0036) 	                                      
(0037) 	//Clear wTimeCountr0 OCIF Flag                                     
(0038) 	TIFR  |= 0x02;                                               
    00E3 B788      IN	R24,0x38
    00E4 6082      ORI	R24,2
    00E5 BF88      OUT	0x38,R24
(0039) 	TCNT0  = 0x00;                                              
    00E6 2422      CLR	R2
    00E7 BE22      OUT	0x32,R2
(0040) 	//Interrupt Count
(0041) 	if(sbGet_Buzzer_Count() != 0)
    00E8 940E011C  CALL	_sbGet_Buzzer_Count
    00EA 2300      TST	R16
    00EB F0F1      BEQ	0x010A
(0042) 	{
(0043) 		int_count++;
    00EC 91800060  LDS	R24,0x60
    00EE 5F8F      SUBI	R24,0xFF
    00EF 93800060  STS	0x60,R24
(0044) 		if(int_count == 1)
    00F1 3081      CPI	R24,1
    00F2 F419      BNE	0x00F6
(0045) 		{
(0046) 			Buzzer_ON();
    00F3 940E00CD  CALL	_Buzzer_ON
(0047) 		}
    00F5 C017      RJMP	0x010D
(0048) 		else if(int_count == 5)
    00F6 91800060  LDS	R24,0x60
    00F8 3085      CPI	R24,5
    00F9 F419      BNE	0x00FD
(0049) 		{
(0050) 			Buzzer_OFF();	
    00FA 940E00CF  CALL	_Buzzer_OFF
(0051) 		}
    00FC C010      RJMP	0x010D
(0052) 		else if(int_count == 100)
    00FD 91800060  LDS	R24,0x60
    00FF 3684      CPI	R24,0x64
    0100 F461      BNE	0x010D
(0053) 		{
(0054) 			int_count = 0;
    0101 2422      CLR	R2
    0102 92200060  STS	0x60,R2
(0055) 			sSet_Buzzer_Count(sbGet_Buzzer_Count() - 1);
    0104 940E011C  CALL	_sbGet_Buzzer_Count
    0106 5001      SUBI	R16,1
    0107 940E0119  CALL	_sSet_Buzzer_Count
(0056) 		}
(0057) 	}
    0109 C003      RJMP	0x010D
(0058) 	else
(0059) 	{
(0060) 		int_count = 0;
    010A 2422      CLR	R2
    010B 92200060  STS	0x60,R2
(0061) 	}                                                
(0062) } 
    010D 940E073A  CALL	pop_lset
    010F 9518      RETI
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
(0001) //********************************************************************
(0002) // File Name : UART.c
(0003) // Author    : Steaven
(0004) // Created   : 2008-10-05
(0005) // Modified  : 
(0006) // Revision  : V0.0
(0007) //********************************************************************
(0008) 
(0009) #include "includes.h" 
(0010) 
(0011) struct SCI_Buffer stSciBuffer;
(0012) 
(0013) INT8U bSCI_Event = 0;    //SCI Event
(0014) INT8U bBuzzer_Count = 0; //Buzzer ON Time
(0015) 
(0016) //********************************************************************
(0017) // Function    : sSet_SCI_Event
(0018) // Input       : event - SCI Event
(0019) // Output      : none
(0020) // Description : Interface Function
(0021) //********************************************************************
(0022) void sSet_SCI_Event(INT8U event)
(0023) {
(0024) 	bSCI_Event = event;
_sSet_SCI_Event:
  event                --> R16
    0110 93000061  STS	0x61,R16
(0025) }
    0112 9508      RET
(0026) 
(0027) //********************************************************************
(0028) // Function    : sbGet_SCI_Event
(0029) // Input       : none
(0030) // Output      : SCI Event
(0031) // Description : Interface Function
(0032) //********************************************************************
(0033) INT8U sbGet_SCI_Event(void)
(0034) {
(0035) 	INT8U event;
(0036) 	event = bSCI_Event;
_sbGet_SCI_Event:
  event                --> R16
    0113 91000061  LDS	R16,0x61
(0037) 	bSCI_Event = 0;
    0115 2422      CLR	R2
    0116 92200061  STS	0x61,R2
(0038) 	return(event);
    0118 9508      RET
(0039) }
(0040) 
(0041) //********************************************************************
(0042) // Function    : sSet_Buzzer_Count
(0043) // Input       : bCount - Buzzer ON Time
(0044) // Output      : none
(0045) // Description : Interface Function
(0046) //********************************************************************
(0047) void sSet_Buzzer_Count(INT8U bCount)
(0048) {
(0049) 	bBuzzer_Count = bCount;
_sSet_Buzzer_Count:
  bCount               --> R16
    0119 93000062  STS	0x62,R16
(0050) }
    011B 9508      RET
(0051) 
(0052) //********************************************************************
(0053) // Function    : sbGet_Buzzer_Count
(0054) // Input       : none
(0055) // Output      : Buzzer ON Time
(0056) // Description : Interface Function
(0057) //********************************************************************
(0058) INT8U sbGet_Buzzer_Count(void)
(0059) {
(0060) 	return(bBuzzer_Count);
_sbGet_Buzzer_Count:
    011C 91000062  LDS	R16,0x62
    011E 9508      RET
(0061) }
(0062) 		
(0063) //********************************************************************
(0064) // Function    : Init_UART
(0065) // Input       : none
(0066) // Output      : none
(0067) // Description : ATmega16 UART Initialization,9600/N/8/1
(0068) //********************************************************************
(0069) void Init_UART(void)
(0070) {
(0071) 	UCSRA = 0x00;
_Init_UART:
    011F 2422      CLR	R2
    0120 B82B      OUT	0x0B,R2
(0072) 	UCSRB = 0xD8;
    0121 ED88      LDI	R24,0xD8
    0122 B98A      OUT	0x0A,R24
(0073) 	UCSRC = 0x86;
    0123 E886      LDI	R24,0x86
    0124 BD80      OUT	0x20,R24
(0074) 	UBRRL = 0x33;
    0125 E383      LDI	R24,0x33
    0126 B989      OUT	0x09,R24
(0075) 	SCI_Task_Init();
(0076) }
    0127 C000      RJMP	_SCI_Task_Init
(0077) 
(0078) //********************************************************************
(0079) // Function    : SCI_Task_Init
(0080) // Input       : none
(0081) // Output      : none
(0082) // Description : Enable UART RX Interrupt and Initialize Buffer
(0083) //********************************************************************
(0084) void SCI_Task_Init(void)
(0085) {
(0086) 	Enable_UART_RX_INT();
    0128 D003      RCALL	_Enable_UART_RX_INT
(0087) 	SciBuffer_Init(&stSciBuffer);
    0129 E10C      LDI	R16,0x1C
    012A E011      LDI	R17,1
(0088) }

⌨️ 快捷键说明

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