📄 fjv14.lis
字号:
01C2 ;
01C2 ; return y;
01C2 .dbline -2
01C2 L42:
01C2 00D0 rcall pop_gset1
01C4 .dbline 0 ; func end
01C4 0895 ret
01C6 .dbsym r y 20 c
01C6 .dbend
01C6 .dbfunc e USART_Transmit _USART_Transmit fV
01C6 ; tdata -> R16
.even
01C6 _USART_Transmit::
01C6 .dbline -1
01C6 .dbline 207
01C6 ; }
01C6 ; /*******************************************************************/
01C6 ; //串口发送数据
01C6 ; void USART_Transmit(unsigned char tdata)
01C6 ; {
01C6 .dbline 209
01C6 ; //等待数据寄存器空
01C6 ; UDR=tdata;
01C6 0CB9 out 0xc,R16
01C8 L47:
01C8 .dbline 211
01C8 L48:
01C8 .dbline 210
01C8 ; while(!(UCSRA&(1<<UDRE)))
01C8 5D9B sbis 0xb,5
01CA FECF rjmp L47
01CC .dbline -2
01CC L46:
01CC .dbline 0 ; func end
01CC 0895 ret
01CE .dbsym r tdata 16 c
01CE .dbend
01CE .dbfunc e ADC_Value _ADC_Value fi
01CE ; temp -> R20,R21
01CE ; adc_channel -> R22
.even
01CE _ADC_Value::
01CE 00D0 rcall push_gset2
01D0 602F mov R22,R16
01D2 .dbline -1
01D2 .dbline 223
01D2 ; ;
01D2 ;
01D2 ;
01D2 ; }
01D2 ; /******************************************************************/
01D2 ; /*******************************************************************
01D2 ; 函数功能:AD数据、通道采集,10位精度。
01D2 ; 入口参数:adc_channel通道选择。
01D2 ; 出口参数:AD采集的数据
01D2 ; 说明:此处可以加入中值滤波程序。使用ADC降噪中断方式
01D2 ; *******************************************************/
01D2 ; unsigned int ADC_Value (unsigned char adc_channel)
01D2 ; {
01D2 .dbline 225
01D2 ; unsigned int temp;
01D2 ; temp=0;
01D2 4427 clr R20
01D4 5527 clr R21
01D6 .dbline 226
01D6 ; switch (adc_channel)
01D6 7727 clr R23
01D8 6130 cpi R22,1
01DA E0E0 ldi R30,0
01DC 7E07 cpc R23,R30
01DE 69F0 breq L54
01E0 6230 cpi R22,2
01E2 E0E0 ldi R30,0
01E4 7E07 cpc R23,R30
01E6 71F0 breq L55
01E8 6330 cpi R22,3
01EA E0E0 ldi R30,0
01EC 7E07 cpc R23,R30
01EE 79F0 breq L56
01F0 6430 cpi R22,4
01F2 E0E0 ldi R30,0
01F4 7E07 cpc R23,R30
01F6 81F0 breq L57
01F8 13C0 rjmp L52
01FA X4:
01FA .dbline 227
01FA ; {
01FA L54:
01FA .dbline 229
01FA ; case 0x01: //如果为00则启动CH1通道
01FA ; ADMUX=0x00;//寄存器后4位对应通道。0代表CH1通道。
01FA 2224 clr R2
01FC 27B8 out 0x7,R2
01FE .dbline 230
01FE ; temp=ADC_filter();
01FE 13D0 rcall _ADC_filter
0200 A801 movw R20,R16
0202 .dbline 231
0202 ; break;
0202 0EC0 rjmp L52
0204 L55:
0204 .dbline 233
0204 ; case 0x02: //如果为01则启动CH2通道
0204 ; ADMUX=0x01;//寄存器后4位对应通道。1代表CH2通道。
0204 81E0 ldi R24,1
0206 87B9 out 0x7,R24
0208 .dbline 234
0208 ; temp=ADC_filter();
0208 0ED0 rcall _ADC_filter
020A A801 movw R20,R16
020C .dbline 235
020C ; break;
020C 09C0 rjmp L52
020E L56:
020E .dbline 237
020E ; case 0x03: //如果为10则启动CH2通道
020E ; ADMUX=0x02;//寄存器后4位对应通道。2代表CH3通道。
020E 82E0 ldi R24,2
0210 87B9 out 0x7,R24
0212 .dbline 238
0212 ; temp=ADC_filter();
0212 09D0 rcall _ADC_filter
0214 A801 movw R20,R16
0216 .dbline 239
0216 ; break;
0216 04C0 rjmp L52
0218 L57:
0218 .dbline 241
0218 ; case 0x04: //如果为00则启动CH1通道
0218 ; ADMUX=0x03;//寄存器后4位对应通道。3代表CH4通道。
0218 83E0 ldi R24,3
021A 87B9 out 0x7,R24
021C .dbline 242
021C ; temp=ADC_filter();
021C 04D0 rcall _ADC_filter
021E A801 movw R20,R16
0220 .dbline 243
0220 ; break;
0220 .dbline 244
0220 ; default:break;
0220 L52:
0220 .dbline 246
0220 ; }
0220 ; return temp;
0220 8A01 movw R16,R20
0222 .dbline -2
0222 L50:
0222 00D0 rcall pop_gset2
0224 .dbline 0 ; func end
0224 0895 ret
0226 .dbsym r temp 20 i
0226 .dbsym r adc_channel 22 c
0226 .dbend
0226 .dbfunc e ADC_filter _ADC_filter fi
0226 ; outdata -> R20,R21
0226 ; a -> R20,R21
0226 ; temp -> y+0
.even
0226 _ADC_filter::
0226 00D0 rcall push_gset1
0228 2497 sbiw R28,4
022A .dbline -1
022A .dbline 255
022A ; }
022A ; /*******************************************************************
022A ; 函数功能:首先采集数据,然后三点中值滤波。同时解决第一次采集不准问题。
022A ; 入口参数:无
022A ; 出口参数:outdata,滤波后的结果
022A ; 说明:
022A ; *******************************************************/
022A ; unsigned int ADC_filter(void)
022A ; {
022A .dbline 259
022A ; unsigned int a;
022A ; unsigned int outdata;
022A ; unsigned int temp[2];
022A ; temp[0]=0;
022A 2224 clr R2
022C 3324 clr R3
022E 3982 std y+1,R3
0230 2882 std y+0,R2
0232 .dbline 260
0232 ; temp[1]=0;
0232 3B82 std y+3,R3
0234 2A82 std y+2,R2
0236 .dbline 261
0236 ; temp[2]=0;
0236 3D82 std y+5,R3
0238 2C82 std y+4,R2
023A .dbline 262
023A ; ADC_Start();//丢弃第一次结果。
023A 48D0 rcall _ADC_Start
023C .dbline 263
023C ; AD_value10=0;//采集数据前先将变量清零。避免上一次的干扰。
023C 2224 clr R2
023E 3324 clr R3
0240 30920100 sts _AD_value10+1,R3
0244 20920000 sts _AD_value10,R2
0248 .dbline 264
0248 ; ADC_Start();
0248 41D0 rcall _ADC_Start
024A .dbline 265
024A ; temp[0]=AD_value10;//AD转换结果
024A 20900000 lds R2,_AD_value10
024E 30900100 lds R3,_AD_value10+1
0252 3982 std y+1,R3
0254 2882 std y+0,R2
0256 .dbline 266
0256 ; ADC_Start();
0256 3AD0 rcall _ADC_Start
0258 .dbline 267
0258 ; temp[1]=AD_value10;//AD转换结果
0258 20900000 lds R2,_AD_value10
025C 30900100 lds R3,_AD_value10+1
0260 3B82 std y+3,R3
0262 2A82 std y+2,R2
0264 .dbline 268
0264 ; ADC_Start();
0264 33D0 rcall _ADC_Start
0266 .dbline 269
0266 ; temp[2]=AD_value10;//AD转换结果
0266 20900000 lds R2,_AD_value10
026A 30900100 lds R3,_AD_value10+1
026E 3D82 std y+5,R3
0270 2C82 std y+4,R2
0272 .dbline 271
0272 ; //下面的程序让数组从小到大排列
0272 ; if (temp[0]>temp[1])
0272 2A80 ldd R2,y+2
0274 3B80 ldd R3,y+3
0276 4880 ldd R4,y+0
0278 5980 ldd R5,y+1
027A 2414 cp R2,R4
027C 3504 cpc R3,R5
027E 30F4 brsh L63
0280 .dbline 272
0280 ; {
0280 .dbline 273
0280 ; a=temp[1];
0280 A101 movw R20,R2
0282 .dbline 274
0282 ; temp[1]=temp[0];
0282 1201 movw R2,R4
0284 3B82 std y+3,R3
0286 2A82 std y+2,R2
0288 .dbline 275
0288 ; temp[0]=a;
0288 5983 std y+1,R21
028A 4883 std y+0,R20
028C .dbline 276
028C ; }
028C L63:
028C .dbline 277
028C ; if (temp[0]>temp[2])
028C 2C80 ldd R2,y+4
028E 3D80 ldd R3,y+5
0290 4880 ldd R4,y+0
0292 5980 ldd R5,y+1
0294 2414 cp R2,R4
0296 3504 cpc R3,R5
0298 30F4 brsh L68
029A .dbline 278
029A ; {
029A .dbline 279
029A ; a=temp[2];
029A A101 movw R20,R2
029C .dbline 280
029C ; temp[2]=temp[0];
029C 1201 movw R2,R4
029E 3D82 std y+5,R3
02A0 2C82 std y+4,R2
02A2 .dbline 281
02A2 ; temp[0]=a;
02A2 5983 std y+1,R21
02A4 4883 std y+0,R20
02A6 .dbline 282
02A6 ; }
02A6 L68:
02A6 .dbline 283
02A6 ; if (temp[1]>temp[2])
02A6 2C80 ldd R2,y+4
02A8 3D80 ldd R3,y+5
02AA 4A80 ldd R4,y+2
02AC 5B80 ldd R5,y+3
02AE 2414 cp R2,R4
02B0 3504 cpc R3,R5
02B2 30F4 brsh L73
02B4 .dbline 284
02B4 ; {
02B4 .dbline 285
02B4 ; a=temp[2];
02B4 A101 movw R20,R2
02B6 .dbline 286
02B6 ; temp[2]=temp[1];
02B6 1201 movw R2,R4
02B8 3D82 std y+5,R3
02BA 2C82 std y+4,R2
02BC .dbline 287
02BC ; temp[1]=a;
02BC 5B83 std y+3,R21
02BE 4A83 std y+2,R20
02C0 .dbline 288
02C0 ; }
02C0 L73:
02C0 .dbline 289
02C0 ; outdata=temp[1];
02C0 4A81 ldd R20,y+2
02C2 5B81 ldd R21,y+3
02C4 .dbline 290
02C4 ; return outdata;
02C4 8A01 movw R16,R20
02C6 .dbline -2
02C6 L58:
02C6 2496 adiw R28,4
02C8 00D0 rcall pop_gset1
02CA .dbline 0 ; func end
02CA 0895 ret
02CC .dbsym r outdata 20 i
02CC .dbsym r a 20 i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -