📄 main.lst
字号:
1 .file "main.c"
2 .arch atmega8
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
91 .global out_ringflag
92 .global out_ringflag
93 .section .bss
96 out_ringflag:
97 0000 00 .skip 1,0
98 .global ringcoutime
99 .global ringcoutime
102 ringcoutime:
103 0001 0000 .skip 2,0
104 .global ringcou
105 .global ringcou
108 ringcou:
109 0003 00 .skip 1,0
110 .global L_flash
111 .global L_flash
114 L_flash:
115 0004 00 .skip 1,0
116 .global ringtime
117 .data
120 ringtime:
121 0000 9001 .word 400
122 .global lms
123 .global lms
124 .section .bss
127 lms:
128 0005 00 .skip 1,0
129 .global decode
130 .global decode
133 decode:
134 0006 0000 0000 .skip 10,0
134 0000 0000
134 0000
135 .global ringflag
136 .global ringflag
139 ringflag:
140 0010 0000 0000 .skip 4,0
141 .global hu
142 .global hu
145 hu:
146 0014 0000 0000 .skip 4,0
147 .global adadd
148 .global adadd
151 adadd:
152 0018 0000 .skip 2,0
153 .global adcou
154 .data
157 adcou:
158 0002 F0 .byte -16
159 .text
162 .global delay
164 delay:
1:main.c **** #include <avr/io.h>
2:main.c **** #include <avr/interrupt.h>
3:main.c **** #include <avr/signal.h>
4:main.c **** #include <avr/eeprom.h>
5:main.c **** #include <avr/pgmspace.h>
6:main.c **** #include <avr/delay.h>
7:main.c ****
8:main.c **** #define uchar unsigned char
9:main.c **** #define uint unsigned int
10:main.c **** #define ulong unsigned long
11:main.c ****
12:main.c **** #define relay_s PORTD|= 0x01 //继电器吸合, 接到外线
13:main.c **** #define relay_c PORTD&=~0x01 //继电器释放, 内线互打
14:main.c ****
15:main.c **** #define PH1_s PORTC|= 0x20 //接通#1
16:main.c **** #define PH1_c PORTC&=~0x20 //断开#1
17:main.c **** #define PH2_s PORTB|= 0x20 //接通#2
18:main.c **** #define PH2_c PORTB&=~0x20 //断开#2
19:main.c **** #define PH3_s PORTB|= 0x08 //接通#3
20:main.c **** #define PH3_c PORTB&=~0x08 //断开#3
21:main.c **** #define PH4_s PORTB|= 0x02 //接通#4
22:main.c **** #define PH4_c PORTB&=~0x02 //断开#4
23:main.c ****
24:main.c **** #define RG1_s PH1_c, PORTC|= 0x10 //振铃#1开
25:main.c **** #define RG1_c PORTC&=~0x10, PH1_s //振铃#1关
26:main.c **** #define RG2_s PH2_c, PORTB|= 0x10 //振铃#2开
27:main.c **** #define RG2_c PORTB&=~0x10, PH2_s //振铃#2关
28:main.c **** #define RG3_s PH3_c, PORTB|= 0x04 //振铃#3开
29:main.c **** #define RG3_c PORTB&=~0x04, PH3_s //振铃#3关
30:main.c **** #define RG4_s PH4_c, PORTB|= 0x01 //振铃#4开
31:main.c **** #define RG4_c PORTB&=~0x01, PH4_s //振铃#4关
32:main.c ****
33:main.c **** #define GATE 20 //听筒拿起通门槛电压( 50 为 0.125V)
34:main.c ****
35:main.c **** #define L1_s PORTB|= 0x40 //L1 on
36:main.c **** #define L1_c PORTB&=~0x40 //L1 off
37:main.c **** #define L1_i PORTB^= 0x40 //L1 inver
38:main.c **** #define L2_s PORTB|= 0x80 //L2 on
39:main.c **** #define L2_c PORTB&=~0x80 //L2 off
40:main.c ****
41:main.c **** #define CPU_CRYSTAL (8.00) //CPU Ck
42:main.c ****
43:main.c **** #define dy(us)\
44:main.c **** _delay_loop_2((uint)((us)*CPU_CRYSTAL/4))
45:main.c ****
46:main.c **** volatile uchar adcou=240; //adc 转换计数器
47:main.c **** volatile uint adadd=0; //adc 累加值
48:main.c **** volatile uchar hu[4]={0,0,0,0}; //听筒合起标志
49:main.c **** volatile uchar ringflag[4]={0,0,0,0}; //正在响铃标志
50:main.c **** volatile uchar decode[10]={0}; //最近十次解码结果
51:main.c **** volatile uchar lms=0; //LED点亮时间计数器
52:main.c **** volatile uint ringtime=400; //响铃时间计数器, 当ringtime>400时,铃响, tingtime<=400时,铃不响
53:main.c **** volatile uchar L_flash=0; //LED1闪烁标志, =1时闪烁
54:main.c ****
55:main.c **** volatile uchar ringcou=0; //外线振铃计数器
56:main.c **** volatile uint ringcoutime=0; //外线振铃时间计数器
57:main.c **** volatile uchar out_ringflag=0; //外线振铃标志
58:main.c ****
59:main.c ****
60:main.c **** void delay(uint t) //delay t mS
61:main.c **** {
166 .LM1:
167 /* prologue: frame size=0 */
168 /* prologue end (size=0) */
170 .Ltext1:
1:E:/WinAVR/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:E:/WinAVR/avr/include/util/delay.h **** Copyright (c) 2004,2005 Joerg Wunsch
3:E:/WinAVR/avr/include/util/delay.h **** All rights reserved.
4:E:/WinAVR/avr/include/util/delay.h ****
5:E:/WinAVR/avr/include/util/delay.h **** Redistribution and use in source and binary forms, with or without
6:E:/WinAVR/avr/include/util/delay.h **** modification, are permitted provided that the following conditions are met:
7:E:/WinAVR/avr/include/util/delay.h ****
8:E:/WinAVR/avr/include/util/delay.h **** * Redistributions of source code must retain the above copyright
9:E:/WinAVR/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer.
10:E:/WinAVR/avr/include/util/delay.h ****
11:E:/WinAVR/avr/include/util/delay.h **** * Redistributions in binary form must reproduce the above copyright
12:E:/WinAVR/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer in
13:E:/WinAVR/avr/include/util/delay.h **** the documentation and/or other materials provided with the
14:E:/WinAVR/avr/include/util/delay.h **** distribution.
15:E:/WinAVR/avr/include/util/delay.h ****
16:E:/WinAVR/avr/include/util/delay.h **** * Neither the name of the copyright holders nor the names of
17:E:/WinAVR/avr/include/util/delay.h **** contributors may be used to endorse or promote products derived
18:E:/WinAVR/avr/include/util/delay.h **** from this software without specific prior written permission.
19:E:/WinAVR/avr/include/util/delay.h ****
20:E:/WinAVR/avr/include/util/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:E:/WinAVR/avr/include/util/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:E:/WinAVR/avr/include/util/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:E:/WinAVR/avr/include/util/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:E:/WinAVR/avr/include/util/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:E:/WinAVR/avr/include/util/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:E:/WinAVR/avr/include/util/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:E:/WinAVR/avr/include/util/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:E:/WinAVR/avr/include/util/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:E:/WinAVR/avr/include/util/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:E:/WinAVR/avr/include/util/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
31:E:/WinAVR/avr/include/util/delay.h ****
32:E:/WinAVR/avr/include/util/delay.h **** /* $Id: delay.h,v 1.1.2.1 2005/12/12 23:19:49 joerg_wunsch Exp $ */
33:E:/WinAVR/avr/include/util/delay.h ****
34:E:/WinAVR/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
35:E:/WinAVR/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
36:E:/WinAVR/avr/include/util/delay.h ****
37:E:/WinAVR/avr/include/util/delay.h **** #include <inttypes.h>
38:E:/WinAVR/avr/include/util/delay.h ****
39:E:/WinAVR/avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Busy-wait delay loops
40:E:/WinAVR/avr/include/util/delay.h **** \code
41:E:/WinAVR/avr/include/util/delay.h **** #define F_CPU 1000000UL // 1 MHz
42:E:/WinAVR/avr/include/util/delay.h **** //#define F_CPU 14.7456E6
43:E:/WinAVR/avr/include/util/delay.h **** #include <util/delay.h>
44:E:/WinAVR/avr/include/util/delay.h **** \endcode
45:E:/WinAVR/avr/include/util/delay.h ****
46:E:/WinAVR/avr/include/util/delay.h **** \note As an alternative method, it is possible to pass the
47:E:/WinAVR/avr/include/util/delay.h **** F_CPU macro down to the compiler from the Makefile.
48:E:/WinAVR/avr/include/util/delay.h **** Obviously, in that case, no \c \#define statement should be
49:E:/WinAVR/avr/include/util/delay.h **** used.
50:E:/WinAVR/avr/include/util/delay.h ****
51:E:/WinAVR/avr/include/util/delay.h **** The functions in this header file implement simple delay loops
52:E:/WinAVR/avr/include/util/delay.h **** that perform a busy-waiting. They are typically used to
53:E:/WinAVR/avr/include/util/delay.h **** facilitate short delays in the program execution. They are
54:E:/WinAVR/avr/include/util/delay.h **** implemented as count-down loops with a well-known CPU cycle
55:E:/WinAVR/avr/include/util/delay.h **** count per loop iteration. As such, no other processing can
56:E:/WinAVR/avr/include/util/delay.h **** occur simultaneously. It should be kept in mind that the
57:E:/WinAVR/avr/include/util/delay.h **** functions described here do not disable interrupts.
58:E:/WinAVR/avr/include/util/delay.h ****
59:E:/WinAVR/avr/include/util/delay.h **** In general, for long delays, the use of hardware timers is
60:E:/WinAVR/avr/include/util/delay.h **** much preferrable, as they free the CPU, and allow for
61:E:/WinAVR/avr/include/util/delay.h **** concurrent processing of other events while the timer is
62:E:/WinAVR/avr/include/util/delay.h **** running. However, in particular for very short delays, the
63:E:/WinAVR/avr/include/util/delay.h **** overhead of setting up a hardware timer is too much compared
64:E:/WinAVR/avr/include/util/delay.h **** to the overall delay time.
65:E:/WinAVR/avr/include/util/delay.h ****
66:E:/WinAVR/avr/include/util/delay.h **** Two inline functions are provided for the actual delay algorithms.
67:E:/WinAVR/avr/include/util/delay.h ****
68:E:/WinAVR/avr/include/util/delay.h **** Two wrapper functions allow the specification of microsecond, and
69:E:/WinAVR/avr/include/util/delay.h **** millisecond delays directly, using the application-supplied macro
70:E:/WinAVR/avr/include/util/delay.h **** F_CPU as the CPU clock frequency (in Hertz). These functions
71:E:/WinAVR/avr/include/util/delay.h **** operate on double typed arguments, however when optimization is
72:E:/WinAVR/avr/include/util/delay.h **** turned on, the entire floating-point calculation will be done at
73:E:/WinAVR/avr/include/util/delay.h **** compile-time.
74:E:/WinAVR/avr/include/util/delay.h ****
75:E:/WinAVR/avr/include/util/delay.h **** \note When using _delay_us() and _delay_ms(), the expressions
76:E:/WinAVR/avr/include/util/delay.h **** passed as arguments to these functions shall be compile-time
77:E:/WinAVR/avr/include/util/delay.h **** constants, otherwise the floating-point calculations to setup the
78:E:/WinAVR/avr/include/util/delay.h **** loops will be done at run-time, thereby drastically increasing
79:E:/WinAVR/avr/include/util/delay.h **** both the resulting code size, as well as the time required to
80:E:/WinAVR/avr/include/util/delay.h **** setup the loops.
81:E:/WinAVR/avr/include/util/delay.h **** */
82:E:/WinAVR/avr/include/util/delay.h ****
83:E:/WinAVR/avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
84:E:/WinAVR/avr/include/util/delay.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
85:E:/WinAVR/avr/include/util/delay.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
86:E:/WinAVR/avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline));
87:E:/WinAVR/avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline));
88:E:/WinAVR/avr/include/util/delay.h **** #endif
89:E:/WinAVR/avr/include/util/delay.h ****
90:E:/WinAVR/avr/include/util/delay.h **** /** \ingroup util_delay
91:E:/WinAVR/avr/include/util/delay.h ****
92:E:/WinAVR/avr/include/util/delay.h **** Delay loop using an 8-bit counter \c __count, so up to 256
93:E:/WinAVR/avr/include/util/delay.h **** iterations are possible. (The value 256 would have to be passed
94:E:/WinAVR/avr/include/util/delay.h **** as 0.) The loop executes three CPU cycles per iteration, not
95:E:/WinAVR/avr/include/util/delay.h **** including the overhead the compiler needs to setup the counter
96:E:/WinAVR/avr/include/util/delay.h **** register.
97:E:/WinAVR/avr/include/util/delay.h ****
98:E:/WinAVR/avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
99:E:/WinAVR/avr/include/util/delay.h **** can be achieved.
100:E:/WinAVR/avr/include/util/delay.h **** */
101:E:/WinAVR/avr/include/util/delay.h **** void
102:E:/WinAVR/avr/include/util/delay.h **** _delay_loop_1(uint8_t __count)
103:E:/WinAVR/avr/include/util/delay.h **** {
104:E:/WinAVR/avr/include/util/delay.h **** __asm__ volatile (
105:E:/WinAVR/avr/include/util/delay.h **** "1: dec %0" "\n\t"
106:E:/WinAVR/avr/include/util/delay.h **** "brne 1b"
107:E:/WinAVR/avr/include/util/delay.h **** : "=r" (__count)
108:E:/WinAVR/avr/include/util/delay.h **** : "0" (__count)
109:E:/WinAVR/avr/include/util/delay.h **** );
110:E:/WinAVR/avr/include/util/delay.h **** }
111:E:/WinAVR/avr/include/util/delay.h ****
112:E:/WinAVR/avr/include/util/delay.h **** /** \ingroup util_delay
113:E:/WinAVR/avr/include/util/delay.h ****
114:E:/WinAVR/avr/include/util/delay.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
115:E:/WinAVR/avr/include/util/delay.h **** iterations are possible. (The value 65536 would have to be
116:E:/WinAVR/avr/include/util/delay.h **** passed as 0.) The loop executes four CPU cycles per iteration,
117:E:/WinAVR/avr/include/util/delay.h **** not including the overhead the compiler requires to setup the
118:E:/WinAVR/avr/include/util/delay.h **** counter register pair.
119:E:/WinAVR/avr/include/util/delay.h ****
120:E:/WinAVR/avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
121:E:/WinAVR/avr/include/util/delay.h **** milliseconds can be achieved.
122:E:/WinAVR/avr/include/util/delay.h **** */
123:E:/WinAVR/avr/include/util/delay.h **** void
124:E:/WinAVR/avr/include/util/delay.h **** _delay_loop_2(uint16_t __count)
125:E:/WinAVR/avr/include/util/delay.h **** {
126:E:/WinAVR/avr/include/util/delay.h **** __asm__ volatile (
172 .LM2:
173 0000 9C01 movw r18,r24
174 .L8:
176 .LM3:
177 0002 2150 subi r18,lo8(-(-1))
178 0004 3040 sbci r19,hi8(-(-1))
179 0006 8FEF ldi r24,hi8(-1)
180 0008 2F3F cpi r18,lo8(-1)
181 000a 3807 cpc r19,r24
182 000c 29F0 breq .L7
183 .LBB2:
185 .LM4:
186 000e 88EA ldi r24,lo8(1960)
187 0010 97E0 ldi r25,hi8(1960)
188 .LBB3:
190 .LM5:
191 /* #APP */
192 0012 0197 1: sbiw r24,1
193 0014 F1F7 brne 1b
194 /* #NOAPP */
195 0016 F5CF rjmp .L8
196 .L7:
197 0018 0895 ret
198 .LBE3:
199 .LBE2:
200 /* epilogue: frame size=0 */
201 /* epilogue: noreturn */
202 /* epilogue end (size=0) */
203 /* function delay size 15 (15) */
208 .Lscope0:
210 .global s_ini
212 s_ini:
214 .Ltext2:
62:main.c **** while(t--)
63:main.c **** dy(980);
64:main.c **** }
65:main.c ****
66:main.c ****
67:main.c **** void s_ini(void)
68:main.c **** {
216 .LM6:
217 /* prologue: frame size=0 */
218 /* prologue end (size=0) */
69:main.c **** OSCCAL= 0xBF;
220 .LM7:
221 001a 8FEB ldi r24,lo8(-65)
222 001c 81BF out 81-0x20,r24
70:main.c **** PORTB = 0x2A;
224 .LM8:
225 001e 8AE2 ldi r24,lo8(42)
226 0020 88BB out 56-0x20,r24
71:main.c **** DDRB = 0xff;
228 .LM9:
229 0022 8FEF ldi r24,lo8(-1)
230 0024 87BB out 55-0x20,r24
72:main.c **** PORTC = 0x20;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -