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

📄 main.lst

📁 基于AVR单片机的程近期电话交换机源程序,可实现一拖四(一外线,四内线).
💻 LST
📖 第 1 页 / 共 5 页
字号:
   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 + -