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

📄 adc.s

📁 单片机A/D模数转换 C语言编写 源程序。
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbend
	.dbfunc e Init_adc _Init_adc fV
	.even
_Init_adc::
	.dbline -1
	.dbline 133
; }
; /************************************************
; 函 数 名:    adc_Init()
; 功    能:    ADC初始化函数
; 输入参数:     /
; 输出参数:    /
; 描    述:    设置片内模数转换器ADC的一些参数
; ***********************************************/
; void Init_adc(void)
; {
	.dbline 134
; 	ADMUX = 0b11000000; //内参2.56V参考电压源、右对齐、选择0通道(单输入,无增益)。
	ldi R24,192
	out 0x7,R24
	.dbline 136
; 	//多工选择寄存器ADMUX
;  	ADCSRA = 0b11101011; //ADC使能、启动转换、自由转换、中断使能、8分频。
	ldi R24,235
	out 0x6,R24
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_convert _adc_convert fi
;          temp1 -> R18,R19
;          temp2 -> R16,R17
	.even
_adc_convert::
	.dbline -1
	.dbline 147
; 	//控制和状态寄存器A,ADCSRA
; }
; /************************************************
; 函 数 名:    adc_convert()
; 功    能:    A/D转换函数
; 输入参数:     /
; 输出参数:    /
; 描    述:    读取采样获得的10位数据
; ***********************************************/
; uint adc_convert(void)
; {
	.dbline 149
; 	uint temp1,temp2;
; 	temp1 = (uint)ADCL;        //必须先读低字节
	in R18,0x4
	clr R19
	.dbline 150
; 	temp2 = (uint)ADCH;
	in R16,0x5
	clr R17
	.dbline 151
; 	temp2 = (temp2<<8) + temp1;    //左移8位
	movw R2,R16
	mov R3,R2
	clr R2
	add R2,R18
	adc R3,R19
	movw R16,R2
	.dbline 152
; 	return (temp2);
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbsym r temp1 18 i
	.dbsym r temp2 16 i
	.dbend
	.dbfunc e process _process fV
;              j -> R22
;              i -> R20,R21
	.even
_process::
	rcall push_gset2
	mov R22,R18
	movw R20,R16
	.dbline -1
	.dbline 163
; }
; /********************************************************
;   子程序名:   process()
;   输入参数:   数据处理函数
;   输出参数:   /
;   描    述:   
;   数据格式:   
;   输出数据:   数据处理函数,将转换的值转换为4位BCD码。
; ********************************************************/
; void process (uint i ,uchar j)
; {
	.dbline 164
; 	 if (0 == j)
	tst R22
	breq X0
	rjmp L26
X0:
	.dbline 165
; 	 {
	.dbline 166
; 	     buf[10] = i/1000 + '0';   i=i%1000;
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	rcall div16u
	movw R24,R16
	adiw R24,48
	sts _buf+10,R24
	.dbline 166
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	rcall mod16u
	movw R20,R16
	.dbline 167
; 		 buf[12] = i/100 + '0';   i=i%100;
	ldi R18,100
	ldi R19,0
	rcall div16u
	movw R24,R16
	adiw R24,48
	sts _buf+12,R24
	.dbline 167
	ldi R18,100
	ldi R19,0
	movw R16,R20
	rcall mod16u
	movw R20,R16
	.dbline 168
; 		 buf[13] = i/10 + '0';   i=i%10;
	ldi R18,10
	ldi R19,0
	rcall div16u
	movw R24,R16
	adiw R24,48
	sts _buf+13,R24
	.dbline 168
	ldi R18,10
	ldi R19,0
	movw R16,R20
	rcall mod16u
	movw R20,R16
	.dbline 169
; 		 buf[14] = i + '0';
	movw R24,R20
	adiw R24,48
	sts _buf+14,R24
	.dbline 170
; 	 }
	rjmp L27
L26:
	.dbline 172
	.dbline 173
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	rcall div16u
	movw R24,R16
	adiw R24,48
	sts _buf+26,R24
	.dbline 173
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	rcall mod16u
	movw R20,R16
	.dbline 174
	ldi R18,100
	ldi R19,0
	rcall div16u
	movw R24,R16
	adiw R24,48
	sts _buf+28,R24
	.dbline 174
	ldi R18,100
	ldi R19,0
	movw R16,R20
	rcall mod16u
	movw R20,R16
	.dbline 175
	ldi R18,10
	ldi R19,0
	rcall div16u
	movw R24,R16
	adiw R24,48
	sts _buf+29,R24
	.dbline 175
	ldi R18,10
	ldi R19,0
	movw R16,R20
	rcall mod16u
	movw R20,R16
	.dbline 176
	movw R24,R20
	adiw R24,48
	sts _buf+30,R24
	.dbline 177
L27:
	.dbline -2
L25:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r j 22 c
	.dbsym r i 20 i
	.dbend
	.area lit(rom, con, rel)
L37:
	.byte 32,32,32,32,'w,'e,'l,'c,'o,'m,'e,33,32,32,32,32
	.byte 32,32,'w,'w,'w,46,'i,'t,'s,'n,46,'c,'n,33,32,32
	.byte 0
	.area text(rom, con, rel)
	.dbfile E:\iccavr代码\实验7_片内模数转换器adc\adc.c
	.dbfunc e main _main fV
;        buflogo -> y+0
	.even
_main::
	sbiw R28,33
	.dbline -1
	.dbline 181
; 	 else
; 	 {
; 	     buf[26] = i/1000 + '0';   i=i%1000;
; 		 buf[28] = i/100 + '0';   i=i%100;
; 		 buf[29] = i/10 + '0';   i=i%10;
; 		 buf[30] = i + '0';
; 	 }
; }
; //*****************主程序**********************************
; void main (void)
; {
	.dbline 182
; 	 uchar buflogo[]="    welcome!      www.itsn.cn!  ";
	ldi R24,<L37
	ldi R25,>L37
	movw R30,R28
	ldi R16,33
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 184
; 
;      Init_mcu();       //单片机初始化
	rcall _Init_mcu
	.dbline 185
; 	 Init_lcd();        //lcd初始化
	rcall _Init_lcd
	.dbline 186
; 	 Init_adc();        //adc初始化
	rcall _Init_adc
	.dbline 188
; 	 
; 	 display_lcd(buflogo);  //显示LOGO
	movw R16,R28
	rcall _display_lcd
	.dbline 189
; 	 DelaymS(300);    //长延迟
	ldi R16,300
	ldi R17,1
	rcall _DelaymS
	.dbline 190
; 	 display_lcd(buf);  //刷新显示一屏
	ldi R16,<_buf
	ldi R17,>_buf
	rcall _display_lcd
	rjmp L39
L38:
	.dbline 193
	.dbline 196
	ldi R24,192
	out 0x7,R24
	.dbline 197
	ldi R24,235
	out 0x6,R24
	.dbline 198
	ldi R16,5
	ldi R17,0
	rcall _DelaymS
	.dbline 199
	rcall _adc_convert
	movw R2,R16
	clr R18
	ldi R16,5
	ldi R17,0
	push R18
	push R19
	movw R18,R2
	rcall empy16s
	movw R2,R16
	pop R19
	pop R18
	lsr R3
	ror R2
	movw R16,R2
	rcall _process
	.dbline 200
	ldi R24,107
	out 0x6,R24
	.dbline 202
	ldi R24,193
	out 0x7,R24
	.dbline 203
	ldi R24,235
	out 0x6,R24
	.dbline 204
	ldi R16,5
	ldi R17,0
	rcall _DelaymS
	.dbline 205
	rcall _adc_convert
	movw R2,R16
	ldi R18,1
	ldi R16,5
	ldi R17,0
	push R18
	push R19
	movw R18,R2
	rcall empy16s
	movw R2,R16
	pop R19
	pop R18
	lsr R3
	ror R2
	movw R16,R2
	rcall _process
	.dbline 206
	ldi R24,107
	out 0x6,R24
	.dbline 208
	ldi R16,<_buf
	ldi R17,>_buf
	rcall _display_lcd
	.dbline 209
L39:
	.dbline 192
	rjmp L38
X1:
	.dbline -2
L36:
	adiw R28,33
	.dbline 0 ; func end
	ret
	.dbsym l buflogo 0 A[33:33]c
	.dbend

⌨️ 快捷键说明

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