📄 1602test.lis
字号:
029C 18F4 brsh L40
029E .dbline 171
029E ; *g+=0x30;
029E 805D subi R24,208 ; addi 48
02A0 8083 std z+0,R24
02A2 04C0 xjmp L41
02A4 L40:
02A4 .dbline 172
02A4 FA01 movw R30,R20
02A6 8081 ldd R24,z+0
02A8 895C subi R24,201 ; addi 55
02AA 8083 std z+0,R24
02AC L41:
02AC .dbline -2
02AC .dbline 173
02AC ; else *g+=0x37;
02AC ; }
02AC L33:
02AC 0E940000 xcall pop_gset2
02B0 .dbline 0 ; func end
02B0 0895 ret
02B2 .dbsym r g 20 pc
02B2 .dbsym r dt_meas 22 i
02B2 .dbend
02B2 .dbfunc e filter _filter fV
02B2 ; q -> <dead>
02B2 ; wendu -> R20
02B2 ; phillp -> R10,R11
02B2 ; ad_temp -> y+0
02B2 ; y -> R12
02B2 ; maj -> R22
.even
02B2 _filter::
02B2 0E940000 xcall push_gset4
02B6 602F mov R22,R16
02B8 A497 sbiw R28,36
02BA .dbline -1
02BA .dbline 176
02BA ;
02BA ; void filter(unsigned char maj)
02BA ; { unsigned char *q,y,wendu;
02BA .dbline 177
02BA ; unsigned int ad_temp[18],phillp=0;
02BA AA24 clr R10
02BC BB24 clr R11
02BE .dbline 178
02BE ; if(maj!=8)
02BE 6830 cpi R22,8
02C0 09F4 brne X1
02C2 3CC0 xjmp L43
02C4 X1:
02C4 .dbline 179
02C4 ; {
02C4 .dbline 180
02C4 ; ADMUX=0x40+maj;
02C4 862F mov R24,R22
02C6 805C subi R24,192 ; addi 64
02C8 87B9 out 0x7,R24
02CA .dbline 181
02CA ; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
02CA 86EC ldi R24,198
02CC 86B9 out 0x6,R24
02CE .dbline 182
02CE ; for(y=0;y<=16;y++)
02CE CC24 clr R12
02D0 0FC0 xjmp L48
02D2 L45:
02D2 .dbline 183
02D2 ; { ADCSRA |= 0x40; // Start a new A/D conversion
02D2 .dbline 183
02D2 369A sbi 0x6,6
02D4 L49:
02D4 .dbline 184
02D4 L50:
02D4 .dbline 184
02D4 349B sbis 0x6,4
02D6 FECF rjmp L49
02D8 .dbline 185
02D8 82E0 ldi R24,2
02DA 8C9D mul R24,R12
02DC F001 movw R30,R0
02DE CE01 movw R24,R28
02E0 E80F add R30,R24
02E2 F91F adc R31,R25
02E4 84B1 in R24,0x4
02E6 95B1 in R25,0x5
02E8 9370 andi R25,3
02EA 9183 std z+1,R25
02EC 8083 std z+0,R24
02EE .dbline 186
02EE L46:
02EE .dbline 182
02EE C394 inc R12
02F0 L48:
02F0 .dbline 182
02F0 80E1 ldi R24,16
02F2 8C15 cp R24,R12
02F4 70F7 brsh L45
02F6 .dbline 187
02F6 ; while (!(ADCSRA & (1<<ADIF))); // wait until ADC is ready
02F6 ; ad_temp[y]=ADC&0X3FF;
02F6 ; }
02F6 ; for(y=6;y<=13;y++)
02F6 86E0 ldi R24,6
02F8 C82E mov R12,R24
02FA 0BC0 xjmp L55
02FC L52:
02FC .dbline 188
02FC 82E0 ldi R24,2
02FE 8C9D mul R24,R12
0300 F001 movw R30,R0
0302 CE01 movw R24,R28
0304 E80F add R30,R24
0306 F91F adc R31,R25
0308 2080 ldd R2,z+0
030A 3180 ldd R3,z+1
030C A20C add R10,R2
030E B31C adc R11,R3
0310 L53:
0310 .dbline 187
0310 C394 inc R12
0312 L55:
0312 .dbline 187
0312 8DE0 ldi R24,13
0314 8C15 cp R24,R12
0316 90F7 brsh L52
0318 .dbline 189
0318 ; phillp+=ad_temp[y];
0318 ; adc_rel=phillp/32;
0318 25E0 ldi R18,5
031A 30E0 ldi R19,0
031C 8501 movw R16,R10
031E 0E940000 xcall lsr16
0322 10932300 sts _adc_rel+1,R17
0326 00932200 sts _adc_rel,R16
032A .dbline 190
032A ; y=adc_rel;
032A C02E mov R12,R16
032C .dbline 191
032C ; wendu=t_per[y];
032C 80E0 ldi R24,<_t_per
032E 90E0 ldi R25,>_t_per
0330 EC2D mov R30,R12
0332 FF27 clr R31
0334 E80F add R30,R24
0336 F91F adc R31,R25
0338 4491 lpm R20,Z
033A .dbline 193
033A ; //y=dypass[maj].ad_samp;
033A ; }
033A 15C0 xjmp L44
033C L43:
033C .dbline 194
033C ; else {
033C .dbline 195
033C ; channel=PORTD;
033C 22B2 in R2,0x12
033E 20920000 sts _channel,R2
0342 .dbline 196
0342 ; adc_rel=(unsigned int)channel;
0342 3324 clr R3
0344 30922300 sts _adc_rel+1,R3
0348 20922200 sts _adc_rel,R2
034C .dbline 197
034C ; dypass[maj].ad_samp=adc_rel;
034C 8FE0 ldi R24,15
034E 869F mul R24,R22
0350 F001 movw R30,R0
0352 80E0 ldi R24,<_dypass
0354 90E0 ldi R25,>_dypass
0356 E80F add R30,R24
0358 F91F adc R31,R25
035A 20902200 lds R2,_adc_rel
035E 30902300 lds R3,_adc_rel+1
0362 3182 std z+1,R3
0364 2082 std z+0,R2
0366 .dbline 198
0366 ; }
0366 L44:
0366 .dbline 201
0366 ; // dypass[maj].class_data[0]=" ";
0366 ; //dypass[maj].class_data[1]=" ";
0366 ; dypass[maj].class_data[2]=0x30+wendu/16;
0366 8FE0 ldi R24,15
0368 869F mul R24,R22
036A F001 movw R30,R0
036C 80E0 ldi R24,<_dypass+8+2
036E 90E0 ldi R25,>_dypass+8+2
0370 E80F add R30,R24
0372 F91F adc R31,R25
0374 842F mov R24,R20
0376 8295 swap R24
0378 8F70 andi R24,#0x0F
037A 805D subi R24,208 ; addi 48
037C 8083 std z+0,R24
037E .dbline 202
037E ; dypass[maj].class_data[3]=0x30+wendu%16;
037E 8FE0 ldi R24,15
0380 869F mul R24,R22
0382 F001 movw R30,R0
0384 80E0 ldi R24,<_dypass+8+3
0386 90E0 ldi R25,>_dypass+8+3
0388 E80F add R30,R24
038A F91F adc R31,R25
038C 10E1 ldi R17,16
038E 042F mov R16,R20
0390 0E940000 xcall mod8u
0394 802F mov R24,R16
0396 805D subi R24,208 ; addi 48
0398 8083 std z+0,R24
039A .dbline -2
039A .dbline 204
039A ;
039A ; }
039A L42:
039A A496 adiw R28,36
039C 0E940000 xcall pop_gset4
03A0 .dbline 0 ; func end
03A0 0895 ret
03A2 .dbsym l q 1 pc
03A2 .dbsym r wendu 20 c
03A2 .dbsym r phillp 10 i
03A2 .dbsym l ad_temp 0 A[36:18]i
03A2 .dbsym r y 12 c
03A2 .dbsym r maj 22 c
03A2 .dbend
03A2 .dbfunc e vfd_init _vfd_init fV
.even
03A2 _vfd_init::
03A2 .dbline -1
03A2 .dbline 208
03A2 ; /*------------------------------------液晶驱动函数-------------------------------------*/
03A2 ; //液晶初始化
03A2 ; void vfd_init(void)
03A2 ; {
03A2 .dbline 209
03A2 ; delay_nms(15);
03A2 0FE0 ldi R16,15
03A4 10E0 ldi R17,0
03A6 98D0 xcall _delay_nms
03A8 .dbline 210
03A8 ; vfd_write_command(0x38,0);//显示模式设置三次(此时不管vfd空闲与否)
03A8 2227 clr R18
03AA 08E3 ldi R16,56
03AC 1ED0 xcall _vfd_write_command
03AE .dbline 211
03AE ; delay_nms(5);
03AE 05E0 ldi R16,5
03B0 10E0 ldi R17,0
03B2 92D0 xcall _delay_nms
03B4 .dbline 212
03B4 ; vfd_write_command(0x38,0);
03B4 2227 clr R18
03B6 08E3 ldi R16,56
03B8 18D0 xcall _vfd_write_command
03BA .dbline 213
03BA ; delay_nms(5);
03BA 05E0 ldi R16,5
03BC 10E0 ldi R17,0
03BE 8CD0 xcall _delay_nms
03C0 .dbline 214
03C0 ; vfd_write_command(0x38,0);
03C0 2227 clr R18
03C2 08E3 ldi R16,56
03C4 12D0 xcall _vfd_write_command
03C6 .dbline 215
03C6 ; delay_nms(5);
03C6 05E0 ldi R16,5
03C8 10E0 ldi R17,0
03CA 86D0 xcall _delay_nms
03CC .dbline 217
03CC ;
03CC ; vfd_write_command(0x38,1);//显示模式设置(从此之后均需vfd空闲)
03CC 21E0 ldi R18,1
03CE 08E3 ldi R16,56
03D0 0CD0 xcall _vfd_write_command
03D2 .dbline 218
03D2 ; vfd_write_command(0x08,1);//显示关闭
03D2 21E0 ldi R18,1
03D4 08E0 ldi R16,8
03D6 09D0 xcall _vfd_write_command
03D8 .dbline 219
03D8 ; vfd_write_command(0x01,1);//显示清屏
03D8 21E0 ldi R18,1
03DA 01E0 ldi R16,1
03DC 06D0 xcall _vfd_write_command
03DE .dbline 220
03DE ; vfd_write_command(0x06,1);//显示光标移动设置
03DE 21E0 ldi R18,1
03E0 06E0 ldi R16,6
03E2 03D0 xcall _vfd_write_command
03E4 .dbline 221
03E4 ; vfd_write_command(0x0c,1);//显示开及光标设置
03E4 21E0 ldi R18,1
03E6 0CE0 ldi R16,12
03E8 .dbline -2
03E8 .dbline 222
03E8 ; }
03E8 L60:
03E8 .dbline 0 ; func end
03E8 00C0 xjmp _vfd_write_command
03EA .dbend
03EA .dbfunc e vfd_write_command _vfd_write_command fV
03EA ; wait_en -> R22
03EA ; command -> R20
.even
03EA _vfd_write_command::
03EA 0E940000 xcall push_gset2
03EE 622F mov R22,R18
03F0 402F mov R20,R16
03F2 .dbline -1
03F2 .dbline 225
03F2 ; //写指令函数: E=高脉冲 RS=0 RW=0
03F2 ; void vfd_write_command(unsigned char command,unsigned char wait_en)//command为指令,wait_en指定是否要检测VFD忙信号
03F2 ; {
03F2 .dbline 226
03F2 ; if(wait_en)wait_enable();//若wait_en为1,则要检测VFD忙信号,等待其空闲
03F2 6623 tst R22
03F4 09F0 breq L62
03F6 .dbline 226
03F6 18D0 xcall _wait_enable
03F8 L62:
03F8 .dbline 227
03F8 ; vfd_control_port&=~vfd_RS;//RS=0
03F8 9598 cbi 0x12,5
03FA .dbline 228
03FA ; vfd_control_port&=~vfd_RW;//RW=0
03FA 9798 cbi 0x12,7
03FC .dbline 229
03FC ; vfd_control_port&=~vfd_EN;//E=0,下面给VFD一个高脉冲
03FC 9698 cbi 0x12,6
03FE .dbline 230
03FE ; NOP();
03FE 0000 nop
0400 .dbline 231
0400 ; vfd_control_port|=vfd_EN;//E=1
0400 969A sbi 0x12,6
0402 .dbline 232
0402 ; vfd_data_port=command;
0402 48BB out 0x18,R20
0404 .dbline 233
0404 ; vfd_control_port&=~vfd_EN;//重设E=0
0404 9698 cbi 0x12,6
0406 .dbline -2
0406 .dbline 234
0406 ; }
0406 L61:
0406 0E940000 xcall pop_gset2
040A .dbline 0 ; func end
040A 0895 ret
040C .dbsym r wait_en 22 c
040C .dbsym r command 20 c
040C .dbend
040C .dbfunc e vfd_write_data _vfd_write_data fV
040C ; char_data -> R20
.even
040C _vfd_write_data::
040C 0E940000 xcall push_gset1
0410 402F mov R20,R16
0412 .dbline -1
0412 .dbline 237
0412 ; //写数据函数: E =高脉冲 RS=1 RW=0
0412 ; void vfd_write_data(unsigned char char_data)
0412 ; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -