📄 project.lst
字号:
__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 + -