📄 adc.lis
字号:
019A .dbline 75
019A ; case 5:LCD_write_char( X, 1, '5'); break;
019A 85E3 ldi R24,53
019C 8883 std y+0,R24
019E 21E0 ldi R18,1
01A0 042F mov R16,R20
01A2 0E940000 xcall _LCD_write_char
01A6 .dbline 75
01A6 1BC0 xjmp L13
01A8 L21:
01A8 .dbline 76
01A8 ; case 6:LCD_write_char( X, 1, '6'); break;
01A8 86E3 ldi R24,54
01AA 8883 std y+0,R24
01AC 21E0 ldi R18,1
01AE 042F mov R16,R20
01B0 0E940000 xcall _LCD_write_char
01B4 .dbline 76
01B4 14C0 xjmp L13
01B6 L22:
01B6 .dbline 77
01B6 ; case 7:LCD_write_char( X, 1, '7'); break;
01B6 87E3 ldi R24,55
01B8 8883 std y+0,R24
01BA 21E0 ldi R18,1
01BC 042F mov R16,R20
01BE 0E940000 xcall _LCD_write_char
01C2 .dbline 77
01C2 0DC0 xjmp L13
01C4 L23:
01C4 .dbline 78
01C4 ; case 8:LCD_write_char( X, 1, '8'); break;
01C4 88E3 ldi R24,56
01C6 8883 std y+0,R24
01C8 21E0 ldi R18,1
01CA 042F mov R16,R20
01CC 0E940000 xcall _LCD_write_char
01D0 .dbline 78
01D0 06C0 xjmp L13
01D2 L24:
01D2 .dbline 79
01D2 ; case 9:LCD_write_char( X, 1, '9'); break;
01D2 89E3 ldi R24,57
01D4 8883 std y+0,R24
01D6 21E0 ldi R18,1
01D8 042F mov R16,R20
01DA 0E940000 xcall _LCD_write_char
01DE .dbline 79
01DE L12:
01DE L13:
01DE .dbline -2
01DE L11:
01DE 2196 adiw R28,1
01E0 0E940000 xcall pop_gset2
01E4 .dbline 0 ; func end
01E4 0895 ret
01E6 .dbsym r data 22 c
01E6 .dbsym r X 20 c
01E6 .dbend
01E6 .dbfunc e Analog_transfor _Analog_transfor fV
01E6 ; x5 -> R20,R21
01E6 ; x4 -> R22,R23
01E6 ; x3 -> R22,R23
01E6 ; x2 -> R22,R23
01E6 ; x1 -> R22,R23
01E6 ; value2 -> R20,R21
01E6 ; result -> R20,R21
.even
01E6 _Analog_transfor::
01E6 0E940000 xcall push_gset2
01EA 2597 sbiw R28,5
01EC .dbline -1
01EC .dbline 85
01EC ; }
01EC ; }
01EC ;
01EC ;
01EC ; void Analog_transfor(void) //在液晶的第二行显示对应的输入模拟电压值
01EC ; {
01EC .dbline 89
01EC ; uint value2;
01EC ; uint result;
01EC ; uint x1,x2,x3,x4,x5;
01EC ; value2 = value; //由于选择的转化方式为右对齐,因此在此处
01EC 40910000 lds R20,_value
01F0 50910100 lds R21,_value+1
01F4 .dbline 91
01F4 ; //需要右移2位以取得准确的数字量。
01F4 ; result=(value2*2.56/1024)*10000; //以下为数字处理部分,可作为AD转换的通用处理模块
01F4 00E0 ldi R16,<L28
01F6 10E0 ldi R17,>L28
01F8 0E940000 xcall lpm32
01FC 3A93 st -y,R19
01FE 2A93 st -y,R18
0200 1A93 st -y,R17
0202 0A93 st -y,R16
0204 00E0 ldi R16,<L29
0206 10E0 ldi R17,>L29
0208 0E940000 xcall lpm32
020C 3A93 st -y,R19
020E 2A93 st -y,R18
0210 1A93 st -y,R17
0212 0A93 st -y,R16
0214 00E0 ldi R16,<L30
0216 10E0 ldi R17,>L30
0218 0E940000 xcall lpm32
021C 3A93 st -y,R19
021E 2A93 st -y,R18
0220 1A93 st -y,R17
0222 0A93 st -y,R16
0224 8A01 movw R16,R20
0226 1695 lsr R17
0228 0795 ror R16
022A 0E940000 xcall int2fp
022E 3A93 st -y,R19
0230 2A93 st -y,R18
0232 1A93 st -y,R17
0234 0A93 st -y,R16
0236 0E940000 xcall empy32fs
023A 8A01 movw R16,R20
023C 0170 andi R16,1
023E 1070 andi R17,0
0240 0E940000 xcall int2fp
0244 3A93 st -y,R19
0246 2A93 st -y,R18
0248 1A93 st -y,R17
024A 0A93 st -y,R16
024C 0E940000 xcall add32fs
0250 0E940000 xcall empy32fs
0254 00E0 ldi R16,<L31
0256 10E0 ldi R17,>L31
0258 0E940000 xcall lpm32
025C 3A93 st -y,R19
025E 2A93 st -y,R18
0260 1A93 st -y,R17
0262 0A93 st -y,R16
0264 0E940000 xcall div32fs
0268 0E940000 xcall empy32f
026C FE01 movw R30,R28
026E 0183 std z+1,R16
0270 1283 std z+2,R17
0272 2383 std z+3,R18
0274 3483 std z+4,R19
0276 FE01 movw R30,R28
0278 2180 ldd R2,z+1
027A 3280 ldd R3,z+2
027C 4380 ldd R4,z+3
027E 5480 ldd R5,z+4
0280 5A92 st -y,R5
0282 4A92 st -y,R4
0284 3A92 st -y,R3
0286 2A92 st -y,R2
0288 00E0 ldi R16,<L32
028A 10E0 ldi R17,>L32
028C 0E940000 xcall lpm32
0290 3A93 st -y,R19
0292 2A93 st -y,R18
0294 1A93 st -y,R17
0296 0A93 st -y,R16
0298 0E940000 xcall cmp32f
029C CCF0 brlt L26
029E FE01 movw R30,R28
02A0 2180 ldd R2,z+1
02A2 3280 ldd R3,z+2
02A4 4380 ldd R4,z+3
02A6 5480 ldd R5,z+4
02A8 5A92 st -y,R5
02AA 4A92 st -y,R4
02AC 3A92 st -y,R3
02AE 2A92 st -y,R2
02B0 00E0 ldi R16,<L32
02B2 10E0 ldi R17,>L32
02B4 0E940000 xcall lpm32
02B8 3A93 st -y,R19
02BA 2A93 st -y,R18
02BC 1A93 st -y,R17
02BE 0A93 st -y,R16
02C0 0E940000 xcall sub32f
02C4 0E940000 xcall fp2int
02C8 B801 movw R22,R16
02CA 6050 subi R22,0 ; offset = 32768
02CC 7048 sbci R23,128
02CE 08C0 xjmp L27
02D0 L26:
02D0 FE01 movw R30,R28
02D2 0181 ldd R16,z+1
02D4 1281 ldd R17,z+2
02D6 2381 ldd R18,z+3
02D8 3481 ldd R19,z+4
02DA 0E940000 xcall fp2int
02DE B801 movw R22,R16
02E0 L27:
02E0 AB01 movw R20,R22
02E2 .dbline 93
02E2 ;
02E2 ; x1=result/10000; Analog_display(0,x1);
02E2 20E1 ldi R18,10000
02E4 37E2 ldi R19,39
02E6 8A01 movw R16,R20
02E8 0E940000 xcall div16u
02EC B801 movw R22,R16
02EE .dbline 93
02EE 262F mov R18,R22
02F0 0027 clr R16
02F2 F8DE xcall _Analog_display
02F4 .dbline 94
02F4 ; LCD_write_char(1,1,'.');
02F4 8EE2 ldi R24,46
02F6 8883 std y+0,R24
02F8 21E0 ldi R18,1
02FA 01E0 ldi R16,1
02FC 0E940000 xcall _LCD_write_char
0300 .dbline 95
0300 ; x2=(result/1000)%10; Analog_display(2,x2);
0300 28EE ldi R18,1000
0302 33E0 ldi R19,3
0304 8A01 movw R16,R20
0306 0E940000 xcall div16u
030A 2AE0 ldi R18,10
030C 30E0 ldi R19,0
030E 0E940000 xcall mod16u
0312 B801 movw R22,R16
0314 .dbline 95
0314 262F mov R18,R22
0316 02E0 ldi R16,2
0318 E5DE xcall _Analog_display
031A .dbline 96
031A ; x3=(result/100)%100%10; Analog_display(3,x3);
031A 24E6 ldi R18,100
031C 30E0 ldi R19,0
031E 8A01 movw R16,R20
0320 0E940000 xcall div16u
0324 24E6 ldi R18,100
0326 30E0 ldi R19,0
0328 0E940000 xcall mod16u
032C 2AE0 ldi R18,10
032E 30E0 ldi R19,0
0330 0E940000 xcall mod16u
0334 B801 movw R22,R16
0336 .dbline 96
0336 262F mov R18,R22
0338 03E0 ldi R16,3
033A D4DE xcall _Analog_display
033C .dbline 97
033C ; x4=(result/10)%1000%10; Analog_display(4,x4);
033C 2AE0 ldi R18,10
033E 30E0 ldi R19,0
0340 8A01 movw R16,R20
0342 0E940000 xcall div16u
0346 28EE ldi R18,1000
0348 33E0 ldi R19,3
034A 0E940000 xcall mod16u
034E 2AE0 ldi R18,10
0350 30E0 ldi R19,0
0352 0E940000 xcall mod16u
0356 B801 movw R22,R16
0358 .dbline 97
0358 262F mov R18,R22
035A 04E0 ldi R16,4
035C C3DE xcall _Analog_display
035E .dbline 98
035E ; x5=(result%1000)%100%10; Analog_display(5,x5);
035E 28EE ldi R18,1000
0360 33E0 ldi R19,3
0362 8A01 movw R16,R20
0364 0E940000 xcall mod16u
0368 24E6 ldi R18,100
036A 30E0 ldi R19,0
036C 0E940000 xcall mod16u
0370 2AE0 ldi R18,10
0372 30E0 ldi R19,0
0374 0E940000 xcall mod16u
0378 A801 movw R20,R16
037A .dbline 98
037A 242F mov R18,R20
037C 05E0 ldi R16,5
037E B2DE xcall _Analog_display
0380 .dbline -2
0380 L25:
0380 2596 adiw R28,5
0382 0E940000 xcall pop_gset2
0386 .dbline 0 ; func end
0386 0895 ret
0388 .dbsym r x5 20 i
0388 .dbsym r x4 22 i
0388 .dbsym r x3 22 i
0388 .dbsym r x2 22 i
0388 .dbsym r x1 22 i
0388 .dbsym r value2 20 i
0388 .dbsym r result 20 i
0388 .dbend
0388 .dbfunc e init_devices _init_devices fV
.even
0388 _init_devices::
0388 .dbline -1
0388 .dbline 102
0388 ; }
0388 ;
0388 ; void init_devices(void)
0388 ; {
0388 .dbline 104
0388 ;
0388 ; CLI(); //禁止所有中断
0388 F894 cli
038A .dbline 105
038A ; adc_init();
038A 3ADE xcall _adc_init
038C .dbline 106
038C ; Bit_transfor(); //数字量显示
038C 7BDE xcall _Bit_transfor
038E .dbline 107
038E ; Analog_transfor(); //模拟量显示
038E 2BDF xcall _Analog_transfor
0390 .dbline 108
0390 ; MCUCR = 0x00;
0390 2224 clr R2
0392 25BE out 0x35,R2
0394 .dbline 109
0394 ; SREG = 0X80; //允许中断发生
0394 80E8 ldi R24,128
0396 8FBF out 0x3f,R24
0398 .dbline 110
0398 ; GICR = 0x00;
0398 2BBE out 0x3b,R2
039A .dbline 111
039A ; TIMSK = 0x00;
039A 29BE out 0x39,R2
039C .dbline 112
039C ; SEI(); //重新开启所有中断
039C 7894 sei
039E .dbline -2
039E L33:
039E .dbline 0 ; func end
039E 0895 ret
03A0 .dbend
03A0 .dbfunc e main _main fV
.even
03A0 _main::
03A0 .dbline -1
03A0 .dbline 118
03A0 ;
03A0 ; }
03A0 ;
03A0 ;
03A0 ; void main(void)
03A0 ; {
03A0 .dbline 119
03A0 ; init_devices();
03A0 F3DF xcall _init_devices
03A2 L35:
03A2 .dbline 120
03A2 L36:
03A2 .dbline 120
03A2 FFCF xjmp L35
03A4 X12:
03A4 .dbline -2
03A4 L34:
03A4 .dbline 0 ; func end
03A4 0895 ret
03A6 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\尤虎\程序设计\AVR单片机\MAGE16\ADCAND~1\adc.c
0000 _value::
0000 .blkb 2
0002 .dbsym e value _value I
.area lit(rom, con, rel)
0000 L32:
0000 00000047 .word 0x0,0x4700
0004 L31:
0004 00008044 .word 0x0,0x4480
0008 L30:
0008 00000040 .word 0x0,0x4000
000C L29:
000C 0AD72340 .word 0xd70a,0x4023
0010 L28:
0010 00401C46 .word 0x4000,0x461c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -