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

📄 ad.lst

📁 AD7851的转换程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"AD.c"
   2               		.arch atmega128
   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
  12               		.text
  13               	.Ltext0:
  90               	.global	delay_us
  92               	delay_us:
   1:AD.c          **** #include <avr/signal.h>
   2:AD.c          **** #include <avr/interrupt.h>
   3:AD.c          **** #include <stdlib.h>
   4:AD.c          **** #include <inttypes.h>
   5:AD.c          **** #include <pgmspace.h>
   6:AD.c          **** #include <avr/wdt.h>
   7:AD.c          **** 
   8:AD.c          **** //======================全局变量======================================
   9:AD.c          **** uint16_t ad0_result;      //存放AD0转换结果
  10:AD.c          **** 
  11:AD.c          **** 
  12:AD.c          **** 
  13:AD.c          **** //******************************延时子程序*****************************************
  14:AD.c          **** void delay_us(uint16_t u)  //延时2us左右,delay(240)=100us;  
  15:AD.c          **** {  
  94               	.LM1:
  95               	/* prologue: frame size=0 */
  96               	/* prologue end (size=0) */
  16:AD.c          ****   while(u)  
  98               	.LM2:
  99 0000 0097      		sbiw r24,0
 100 0002 11F0      		breq .L7
 101               	.L5:
  17:AD.c          ****     {  
  18:AD.c          ****        u--;  
 103               	.LM3:
 104 0004 0197      		sbiw r24,1
 105 0006 F1F7      		brne .L5
 106               	.L7:
  19:AD.c          ****     }  
  20:AD.c          **** }  
 108               	.LM4:
 109 0008 0895      		ret
 110               	/* epilogue: frame size=0 */
 111               	/* epilogue: noreturn */
 112               	/* epilogue end (size=0) */
 113               	/* function delay_us size 6 (6) */
 115               	.Lscope0:
 119               	.global	delay_ms
 121               	delay_ms:
  21:AD.c          **** 
  22:AD.c          **** // 延时nms
  23:AD.c          **** void delay_ms(uint16_t m)   
  24:AD.c          **** {
 123               	.LM5:
 124               	/* prologue: frame size=0 */
 125 000a 0F93      		push r16
 126 000c 1F93      		push r17
 127 000e CF93      		push r28
 128 0010 DF93      		push r29
 129               	/* prologue end (size=4) */
 130 0012 8C01      		movw r16,r24
  25:AD.c          **** 	uint16_t i;
  26:AD.c          **** 	for(i=0;i<m;i++)
 132               	.LM6:
 133               	.LBB2:
 134 0014 C0E0      		ldi r28,lo8(0)
 135 0016 D0E0      		ldi r29,hi8(0)
 136 0018 C817      		cp r28,r24
 137 001a D907      		cpc r29,r25
 138 001c 40F4      		brsh .L15
 139               	.L13:
  27:AD.c          **** 	{ 
  28:AD.c          ****        delay_us(2400);  //延时1ms
 141               	.LM7:
 142 001e 80E6      		ldi r24,lo8(2400)
 143 0020 99E0      		ldi r25,hi8(2400)
 144 0022 0E94 0000 		call delay_us
 146               	.LM8:
 147 0026 2196      		adiw r28,1
 148 0028 C017      		cp r28,r16
 149 002a D107      		cpc r29,r17
 150 002c C0F3      		brlo .L13
 151               	.L15:
  29:AD.c          **** 	}
  30:AD.c          **** }
 153               	.LM9:
 154               	.LBE2:
 155               	/* epilogue: frame size=0 */
 156 002e DF91      		pop r29
 157 0030 CF91      		pop r28
 158 0032 1F91      		pop r17
 159 0034 0F91      		pop r16
 160 0036 0895      		ret
 161               	/* epilogue end (size=5) */
 162               	/* function delay_ms size 23 (14) */
 167               	.Lscope1:
 171               	.global	delay_s
 173               	delay_s:
  31:AD.c          **** 
  32:AD.c          **** //延时ns
  33:AD.c          **** void delay_s(uint16_t n)   
  34:AD.c          **** {
 175               	.LM10:
 176               	/* prologue: frame size=0 */
 177 0038 0F93      		push r16
 178 003a 1F93      		push r17
 179 003c CF93      		push r28
 180 003e DF93      		push r29
 181               	/* prologue end (size=4) */
 182 0040 8C01      		movw r16,r24
  35:AD.c          **** 	uint16_t j;
  36:AD.c          **** 	for(j=0;j<n;j++)
 184               	.LM11:
 185               	.LBB3:
 186 0042 C0E0      		ldi r28,lo8(0)
 187 0044 D0E0      		ldi r29,hi8(0)
 188 0046 C817      		cp r28,r24
 189 0048 D907      		cpc r29,r25
 190 004a 40F4      		brsh .L23
 191               	.L21:
  37:AD.c          **** 	{
  38:AD.c          **** 		delay_ms(1000);  //延时1s
 193               	.LM12:
 194 004c 88EE      		ldi r24,lo8(1000)
 195 004e 93E0      		ldi r25,hi8(1000)
 196 0050 0E94 0000 		call delay_ms
 198               	.LM13:
 199 0054 2196      		adiw r28,1
 200 0056 C017      		cp r28,r16
 201 0058 D107      		cpc r29,r17
 202 005a C0F3      		brlo .L21
 203               	.L23:
  39:AD.c          **** 	}
  40:AD.c          **** 	
  41:AD.c          **** }
 205               	.LM14:
 206               	.LBE3:
 207               	/* epilogue: frame size=0 */
 208 005c DF91      		pop r29
 209 005e CF91      		pop r28
 210 0060 1F91      		pop r17
 211 0062 0F91      		pop r16
 212 0064 0895      		ret
 213               	/* epilogue end (size=5) */
 214               	/* function delay_s size 23 (14) */
 219               	.Lscope2:
 222               	.global	AD0_SETTING_AND_START
 224               	AD0_SETTING_AND_START:
  42:AD.c          **** 
  43:AD.c          **** //================================AD转换设置,并启动转换=========================
  44:AD.c          **** void AD0_SETTING_AND_START()
  45:AD.c          **** {
 226               	.LM15:
 227               	/* prologue: frame size=0 */
 228               	/* prologue end (size=0) */
  46:AD.c          **** 	//Avcc作为基准电压源,AREF引脚外加滤波电容,通道0
  47:AD.c          ****     ADMUX = 0x00;
 230               	.LM16:
 231 0066 17B8      		out 39-0x20,__zero_reg__
  48:AD.c          **** 	//AD时钟的分频因子为128(AD转换频率为115.2k),启动AD转换
  49:AD.c          **** 	ADCSRA=0x87;
 233               	.LM17:
 234 0068 87E8      		ldi r24,lo8(-121)
 235 006a 86B9      		out 38-0x20,r24
  50:AD.c          **** }
 237               	.LM18:
 238               	/* epilogue: frame size=0 */
 239 006c 0895      		ret
 240               	/* epilogue end (size=1) */
 241               	/* function AD0_SETTING_AND_START size 4 (3) */
 243               	.Lscope3:
 246               	.global	AD0_RESULT_FILTER
 248               	AD0_RESULT_FILTER:
  51:AD.c          **** 
  52:AD.c          **** //=================================AD转换滤波====================================
  53:AD.c          **** // AD转换 采样10次 去首尾求平均滤波
  54:AD.c          **** void AD0_RESULT_FILTER(void)
  55:AD.c          **** {
 250               	.LM19:
 251               	/* prologue: frame size=20 */
 252 006e EF92      		push r14
 253 0070 FF92      		push r15
 254 0072 0F93      		push r16
 255 0074 1F93      		push r17
 256 0076 CF93      		push r28
 257 0078 DF93      		push r29
 258 007a CDB7      		in r28,__SP_L__
 259 007c DEB7      		in r29,__SP_H__
 260 007e 6497      		sbiw r28,20
 261 0080 0FB6      		in __tmp_reg__,__SREG__
 262 0082 F894      		cli
 263 0084 DEBF      		out __SP_H__,r29
 264 0086 0FBE      		out __SREG__,__tmp_reg__
 265 0088 CDBF      		out __SP_L__,r28
 266               	/* prologue end (size=14) */
  56:AD.c          **** 	uint8_t i,index1,index2,low;
  57:AD.c          **** 	uint16_t result_array[10],sum,temp=0x00;
  58:AD.c          **** 	float ad0_average;
  59:AD.c          **** 	//Avcc作为基准电压源,AREF引脚外加滤波电容,通道0
  60:AD.c          **** 	ADMUX=0x00;
 268               	.LM20:
 269               	.LBB4:
 270 008a 17B8      		out 39-0x20,__zero_reg__
  61:AD.c          **** 	for(i=0;i<10;i++)
 272               	.LM21:
 273 008c 00E0      		ldi r16,lo8(0)
 274               	.L34:
  62:AD.c          **** 	{
  63:AD.c          **** 		//AD时钟的分频因子128
  64:AD.c          **** 		ADCSRA=0x87;
 276               	.LM22:
 277 008e 87E8      		ldi r24,lo8(-121)
 278 0090 86B9      		out 38-0x20,r24
  65:AD.c          **** 		ADCSRA|=1<<ADSC;
 280               	.LM23:
 281 0092 369A      		sbi 38-0x20,6
  66:AD.c          **** 		loop_until_bit_is_set(ADCSRA,ADIF);                                  //等待AD转换结束
 283               	.LM24:
 284               	.L30:
 285 0094 349B      		sbis 38-0x20,4
 286 0096 FECF      		rjmp .L30
  67:AD.c          **** 		ADCSRA=ADCSRA|(1<<ADIF);
 288               	.LM25:
 289 0098 349A      		sbi 38-0x20,4
  68:AD.c          **** 		low=ADCL;
 291               	.LM26:
 292 009a 24B1      		in r18,36-0x20
  69:AD.c          **** 		temp=ADCH;
 294               	.LM27:
 295 009c 85B1      		in r24,37-0x20
 296 009e 9927      		clr r25
  70:AD.c          **** 		temp=temp<<8;
 298               	.LM28:
 299 00a0 982F      		mov r25,r24
 300 00a2 8827      		clr r24
  71:AD.c          **** 		temp=temp+low;
 302               	.LM29:
 303 00a4 820F      		add r24,r18

⌨️ 快捷键说明

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