📄 adc.s
字号:
.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 + -