📄 ad7714.lst
字号:
1 .file "ad7714.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:
74 .global init
76 init:
1:ad7714.c **** /*
2:ad7714.c **** AD7714(24Bit ADC) ATmega8L 1MHz
3:ad7714.c **** zhb2000
4:ad7714.c **** 20060611
5:ad7714.c **** USART 串口输出显示
6:ad7714.c **** */
7:ad7714.c **** #include <avr/io.h>
8:ad7714.c **** #include <avr/delay.h>
9:ad7714.c **** #include "ad7714.h"
10:ad7714.c ****
11:ad7714.c **** volatile char buff[4]; //接收数据缓冲
12:ad7714.c ****
13:ad7714.c **** void init(void);
14:ad7714.c **** void spiSend(uchar data);
15:ad7714.c **** void spiRead(void);
16:ad7714.c **** void waitReady(void);
17:ad7714.c **** void usartInit(void); //USART串口初使化
18:ad7714.c **** void usartPutchar(uchar data); //发送8位数据
19:ad7714.c **** uchar usartGetchar(void); //接收8位数据
20:ad7714.c **** void usartReceive(void); //接收字符串
21:ad7714.c **** void usartSend(char *str); //发送字符串
22:ad7714.c **** int main(void)
23:ad7714.c **** {
24:ad7714.c **** init();
25:ad7714.c **** _delay_ms(200);
26:ad7714.c **** setb(PORTB,CS); //CS 为高
27:ad7714.c **** _delay_ms(200);
28:ad7714.c **** spiSend(0x20); //下一次操作滤波high regist,设置通道AIN1-AIN6
29:ad7714.c **** spiSend(0x47); //set 24bit FS11~FS9=(0111)2 (双极性方式 单极性方式)
30:ad7714.c **** spiSend(0x30); //下一次操作滤波low regist,设置通道AIN1-AIN6
31:ad7714.c **** spiSend(0xa0); //set F8~F1=(10100000)2 code=2000
32:ad7714.c **** spiSend(0x10); //下一次操作模式寄存器,设置通道AIN1-AIN6
33:ad7714.c **** spiSend(0x20); //增益为1,自校准
34:ad7714.c **** while(PINB&(1<<DRDY)); //等待转换好
35:ad7714.c **** while(1)
36:ad7714.c **** {
37:ad7714.c **** //读命令寄存器,判断DRAD位是否为0
38:ad7714.c **** waitReady();
39:ad7714.c **** spiSend(0x58); //注 0101 1 100 (0101 选数据寄存器,1 R/W=1读 , 100 AIN1-AIN2)
40:ad7714.c **** //取数 连读3字节
41:ad7714.c **** spiRead();
42:ad7714.c **** usartPutchar(buff[0]);
43:ad7714.c **** usartPutchar(buff[1]);
44:ad7714.c **** usartPutchar(buff[2]);
45:ad7714.c **** usartPutchar(0x00);
46:ad7714.c **** }
47:ad7714.c **** return 0;
48:ad7714.c **** }
49:ad7714.c ****
50:ad7714.c **** void init()
51:ad7714.c **** {
78 .LM1:
79 /* prologue: frame size=0 */
80 /* prologue end (size=0) */
52:ad7714.c **** uint baud=25; //baud 2400
53:ad7714.c **** PORTB=0x85; //(PORTB 10000101)
82 .LM2:
83 0000 85E8 ldi r24,lo8(-123)
84 0002 88BB out 56-0x20,r24
54:ad7714.c **** DDRB=0x2d; //(DDRB 00101101)
86 .LM3:
87 0004 8DE2 ldi r24,lo8(45)
88 0006 87BB out 55-0x20,r24
55:ad7714.c **** PORTC=0xff;
90 .LM4:
91 0008 8FEF ldi r24,lo8(-1)
92 000a 85BB out 53-0x20,r24
56:ad7714.c **** DDRC=0xff;
94 .LM5:
95 000c 84BB out 52-0x20,r24
57:ad7714.c **** PORTD=0xff;
97 .LM6:
98 000e 82BB out 50-0x20,r24
58:ad7714.c **** DDRD=0xff;
100 .LM7:
101 0010 81BB out 49-0x20,r24
59:ad7714.c ****
60:ad7714.c **** //SPI 初使化为主机 fosc/128
61:ad7714.c **** SPCR=(1<<MSTR)|(1<<SPR1)|(1<<SPR0); //(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);
103 .LM8:
104 0012 83E1 ldi r24,lo8(19)
105 0014 8DB9 out 45-0x20,r24
62:ad7714.c ****
63:ad7714.c **** UBRRH=(baud>>8);
107 .LM9:
108 0016 10BC out 64-0x20,__zero_reg__
64:ad7714.c **** UBRRL=baud;
110 .LM10:
111 0018 89E1 ldi r24,lo8(25)
112 001a 90E0 ldi r25,hi8(25)
113 001c 89B9 out 41-0x20,r24
65:ad7714.c **** UCSRA=0x0;
115 .LM11:
116 001e 1BB8 out 43-0x20,__zero_reg__
66:ad7714.c **** UCSRB=(1<<RXEN)|(1<<TXEN); //允许接收和发送
118 .LM12:
119 0020 88E1 ldi r24,lo8(24)
120 0022 8AB9 out 42-0x20,r24
67:ad7714.c **** UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据,1位停止位
122 .LM13:
123 0024 86E8 ldi r24,lo8(-122)
124 0026 80BD out 64-0x20,r24
125 /* epilogue: frame size=0 */
126 0028 0895 ret
127 /* epilogue end (size=1) */
128 /* function init size 21 (20) */
133 .Lscope0:
136 .global spiSend
138 spiSend:
68:ad7714.c **** }
69:ad7714.c ****
70:ad7714.c **** void spiSend(uchar data)
71:ad7714.c **** {
140 .LM14:
141 /* prologue: frame size=0 */
142 /* prologue end (size=0) */
72:ad7714.c **** spiStart();
144 .LM15:
145 002a 6E9A sbi 45-0x20,6
73:ad7714.c **** clrb(PORTB,CS);
147 .LM16:
148 002c C098 cbi 56-0x20,0
74:ad7714.c **** SPDR=data;
150 .LM17:
151 002e 8FB9 out 47-0x20,r24
152 .L3:
75:ad7714.c **** while(!(SPSR&(1<<SPIF)));
154 .LM18:
155 0030 779B sbis 46-0x20,7
156 0032 FECF rjmp .L3
76:ad7714.c **** setb(PORTB,CS);
158 .LM19:
159 0034 C09A sbi 56-0x20,0
77:ad7714.c **** spiStop();
161 .LM20:
162 0036 6E98 cbi 45-0x20,6
78:ad7714.c **** wink();
164 .LM21:
165 0038 85B3 in r24,53-0x20
166 003a 90E2 ldi r25,lo8(32)
167 003c 8927 eor r24,r25
168 003e 85BB out 53-0x20,r24
169 .LBB2:
170 .LBB3:
172 .Ltext1:
1:d:/WinAVR/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:d:/WinAVR/avr/include/util/delay.h **** Copyright (c) 2004,2005 Joerg Wunsch
3:d:/WinAVR/avr/include/util/delay.h **** All rights reserved.
4:d:/WinAVR/avr/include/util/delay.h ****
5:d:/WinAVR/avr/include/util/delay.h **** Redistribution and use in source and binary forms, with or without
6:d:/WinAVR/avr/include/util/delay.h **** modification, are permitted provided that the following conditions are met:
7:d:/WinAVR/avr/include/util/delay.h ****
8:d:/WinAVR/avr/include/util/delay.h **** * Redistributions of source code must retain the above copyright
9:d:/WinAVR/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer.
10:d:/WinAVR/avr/include/util/delay.h ****
11:d:/WinAVR/avr/include/util/delay.h **** * Redistributions in binary form must reproduce the above copyright
12:d:/WinAVR/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer in
13:d:/WinAVR/avr/include/util/delay.h **** the documentation and/or other materials provided with the
14:d:/WinAVR/avr/include/util/delay.h **** distribution.
15:d:/WinAVR/avr/include/util/delay.h ****
16:d:/WinAVR/avr/include/util/delay.h **** * Neither the name of the copyright holders nor the names of
17:d:/WinAVR/avr/include/util/delay.h **** contributors may be used to endorse or promote products derived
18:d:/WinAVR/avr/include/util/delay.h **** from this software without specific prior written permission.
19:d:/WinAVR/avr/include/util/delay.h ****
20:d:/WinAVR/avr/include/util/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:d:/WinAVR/avr/include/util/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:d:/WinAVR/avr/include/util/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:d:/WinAVR/avr/include/util/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:d:/WinAVR/avr/include/util/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:d:/WinAVR/avr/include/util/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:d:/WinAVR/avr/include/util/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:d:/WinAVR/avr/include/util/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:d:/WinAVR/avr/include/util/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:d:/WinAVR/avr/include/util/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:d:/WinAVR/avr/include/util/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
31:d:/WinAVR/avr/include/util/delay.h ****
32:d:/WinAVR/avr/include/util/delay.h **** /* $Id: delay.h,v 1.1.2.1 2005/12/12 23:19:49 joerg_wunsch Exp $ */
33:d:/WinAVR/avr/include/util/delay.h ****
34:d:/WinAVR/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
35:d:/WinAVR/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
36:d:/WinAVR/avr/include/util/delay.h ****
37:d:/WinAVR/avr/include/util/delay.h **** #include <inttypes.h>
38:d:/WinAVR/avr/include/util/delay.h ****
39:d:/WinAVR/avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Busy-wait delay loops
40:d:/WinAVR/avr/include/util/delay.h **** \code
41:d:/WinAVR/avr/include/util/delay.h **** #define F_CPU 1000000UL // 1 MHz
42:d:/WinAVR/avr/include/util/delay.h **** //#define F_CPU 14.7456E6
43:d:/WinAVR/avr/include/util/delay.h **** #include <util/delay.h>
44:d:/WinAVR/avr/include/util/delay.h **** \endcode
45:d:/WinAVR/avr/include/util/delay.h ****
46:d:/WinAVR/avr/include/util/delay.h **** \note As an alternative method, it is possible to pass the
47:d:/WinAVR/avr/include/util/delay.h **** F_CPU macro down to the compiler from the Makefile.
48:d:/WinAVR/avr/include/util/delay.h **** Obviously, in that case, no \c \#define statement should be
49:d:/WinAVR/avr/include/util/delay.h **** used.
50:d:/WinAVR/avr/include/util/delay.h ****
51:d:/WinAVR/avr/include/util/delay.h **** The functions in this header file implement simple delay loops
52:d:/WinAVR/avr/include/util/delay.h **** that perform a busy-waiting. They are typically used to
53:d:/WinAVR/avr/include/util/delay.h **** facilitate short delays in the program execution. They are
54:d:/WinAVR/avr/include/util/delay.h **** implemented as count-down loops with a well-known CPU cycle
55:d:/WinAVR/avr/include/util/delay.h **** count per loop iteration. As such, no other processing can
56:d:/WinAVR/avr/include/util/delay.h **** occur simultaneously. It should be kept in mind that the
57:d:/WinAVR/avr/include/util/delay.h **** functions described here do not disable interrupts.
58:d:/WinAVR/avr/include/util/delay.h ****
59:d:/WinAVR/avr/include/util/delay.h **** In general, for long delays, the use of hardware timers is
60:d:/WinAVR/avr/include/util/delay.h **** much preferrable, as they free the CPU, and allow for
61:d:/WinAVR/avr/include/util/delay.h **** concurrent processing of other events while the timer is
62:d:/WinAVR/avr/include/util/delay.h **** running. However, in particular for very short delays, the
63:d:/WinAVR/avr/include/util/delay.h **** overhead of setting up a hardware timer is too much compared
64:d:/WinAVR/avr/include/util/delay.h **** to the overall delay time.
65:d:/WinAVR/avr/include/util/delay.h ****
66:d:/WinAVR/avr/include/util/delay.h **** Two inline functions are provided for the actual delay algorithms.
67:d:/WinAVR/avr/include/util/delay.h ****
68:d:/WinAVR/avr/include/util/delay.h **** Two wrapper functions allow the specification of microsecond, and
69:d:/WinAVR/avr/include/util/delay.h **** millisecond delays directly, using the application-supplied macro
70:d:/WinAVR/avr/include/util/delay.h **** F_CPU as the CPU clock frequency (in Hertz). These functions
71:d:/WinAVR/avr/include/util/delay.h **** operate on double typed arguments, however when optimization is
72:d:/WinAVR/avr/include/util/delay.h **** turned on, the entire floating-point calculation will be done at
73:d:/WinAVR/avr/include/util/delay.h **** compile-time.
74:d:/WinAVR/avr/include/util/delay.h ****
75:d:/WinAVR/avr/include/util/delay.h **** \note When using _delay_us() and _delay_ms(), the expressions
76:d:/WinAVR/avr/include/util/delay.h **** passed as arguments to these functions shall be compile-time
77:d:/WinAVR/avr/include/util/delay.h **** constants, otherwise the floating-point calculations to setup the
78:d:/WinAVR/avr/include/util/delay.h **** loops will be done at run-time, thereby drastically increasing
79:d:/WinAVR/avr/include/util/delay.h **** both the resulting code size, as well as the time required to
80:d:/WinAVR/avr/include/util/delay.h **** setup the loops.
81:d:/WinAVR/avr/include/util/delay.h **** */
82:d:/WinAVR/avr/include/util/delay.h ****
83:d:/WinAVR/avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
84:d:/WinAVR/avr/include/util/delay.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
85:d:/WinAVR/avr/include/util/delay.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
86:d:/WinAVR/avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline));
87:d:/WinAVR/avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline));
88:d:/WinAVR/avr/include/util/delay.h **** #endif
89:d:/WinAVR/avr/include/util/delay.h ****
90:d:/WinAVR/avr/include/util/delay.h **** /** \ingroup util_delay
91:d:/WinAVR/avr/include/util/delay.h ****
92:d:/WinAVR/avr/include/util/delay.h **** Delay loop using an 8-bit counter \c __count, so up to 256
93:d:/WinAVR/avr/include/util/delay.h **** iterations are possible. (The value 256 would have to be passed
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -