?? ?-
字號:
.module adc.c
.area text(rom, con, rel)
0000 .dbfile adc.c
0000 .dbfile E:\課件\128最小系統板\AVR程序\定時器\adc.c
0000 .dbfunc e mega128_adc _mega128_adc fV
.even
0000 _mega128_adc::
0000 .dbline -1
0000 .dbline 5
0000 ; #include"adc.h"
0000 ; #include "12864.h" //包含頭文件
0000 ;
0000 ; void mega128_adc(void)
0000 ; {
0000 .dbline 6
0000 ; DDRF=0X00;
0000 2224 clr R2
0002 20926100 sts 97,R2
0006 .dbline 7
0006 ; PORTF=0X00;
0006 20926200 sts 98,R2
000A .dbline 8
000A ; DDRA=0X00;
000A 2ABA out 0x1a,R2
000C .dbline 9
000C ; PORTA=0X00;
000C 2BBA out 0x1b,R2
000E .dbline 10
000E ; ADMUX=0xd0;//F 差分 ADC0 ADC1 內部2.56V基準電壓
000E 80ED ldi R24,208
0010 87B9 out 0x7,R24
0012 .dbline 11
0012 ; ADCSRA=0x86;//64分頻 轉換使能
0012 86E8 ldi R24,134
0014 86B9 out 0x6,R24
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e adc_ready _adc_ready fi
0018 ; addate -> R10,R11
.even
0018 _adc_ready::
0018 AA92 st -y,R10
001A BA92 st -y,R11
001C .dbline -1
001C .dbline 14
001C ; }
001C ; uint adc_ready(void)
001C ; {
001C .dbline 15
001C ; uint addate=0;
001C AA24 clr R10
001E BB24 clr R11
0020 .dbline 16
0020 ; ADCSRA|=(1<<ADSC);//啟動第一次轉換
0020 369A sbi 0x6,6
0022 L3:
0022 .dbline 17
0022 ; while(!(ADCSRA&(1<<ADIF)));//等待轉換結束
0022 L4:
0022 .dbline 17
0022 349B sbis 0x6,4
0024 FECF rjmp L3
0026 X0:
0026 .dbline 18
0026 ; ADCSRA&=~(1<<ADIF);//結束清零
0026 3498 cbi 0x6,4
0028 .dbline 19
0028 ; addate=ADCL;
0028 A4B0 in R10,0x4
002A BB24 clr R11
002C .dbline 20
002C ; addate=addate+ADCH*256;
002C 25B1 in R18,0x5
002E 3327 clr R19
0030 00E0 ldi R16,256
0032 11E0 ldi R17,1
0034 0E940000 xcall empy16s
0038 A00E add R10,R16
003A B11E adc R11,R17
003C .dbline 21
003C ; addate=addate*0.474;//數據恢復
003C 00E0 ldi R16,<L6
003E 10E0 ldi R17,>L6
0040 0E940000 xcall elpm32
0044 1801 movw R2,R16
0046 2901 movw R4,R18
0048 8501 movw R16,R10
004A 0E940000 xcall uint2fp
004E 3A93 st -y,R19
0050 2A93 st -y,R18
0052 1A93 st -y,R17
0054 0A93 st -y,R16
0056 8101 movw R16,R2
0058 9201 movw R18,R4
005A 0E940000 xcall fpmule2
005E 0E940000 xcall fpint
0062 5801 movw R10,R16
0064 .dbline 22
0064 ; return addate;
0064 .dbline -2
0064 L2:
0064 .dbline 0 ; func end
0064 B990 ld R11,y+
0066 A990 ld R10,y+
0068 0895 ret
006A .dbsym r addate 10 i
006A .dbend
006A .dbfunc e display _display fV
006A ; ge -> R20
006A ; shi -> R22
006A ; bai -> R10
006A ; num -> R12,R13
006A ; i -> R14
.even
006A _display::
006A 0E940000 xcall push_xgsetF0FC
006E .dbline -1
006E .dbline 25
006E ; }
006E ; void display(void)//測電壓
006E ; {
006E .dbline 26
006E ; uint num=0;
006E CC24 clr R12
0070 DD24 clr R13
0072 .dbline 27
0072 ; uchar bai=0,shi=0,ge=0,i=0;
0072 AA24 clr R10
0074 .dbline 27
0074 6627 clr R22
0076 .dbline 27
0076 4427 clr R20
0078 .dbline 27
0078 .dbline 28
0078 ; mega128_adc();//放入定時器中完成
0078 C3DF xcall _mega128_adc
007A .dbline 29
007A ; for(i=100;i>0;i--)//測100次
007A 84E6 ldi R24,100
007C E82E mov R14,R24
007E 04C0 xjmp L11
0080 L8:
0080 .dbline 30
0080 ; {
0080 .dbline 31
0080 ; num+=adc_ready();
0080 CBDF xcall _adc_ready
0082 C00E add R12,R16
0084 D11E adc R13,R17
0086 .dbline 32
0086 ; }
0086 L9:
0086 .dbline 29
0086 EA94 dec R14
0088 L11:
0088 .dbline 29
0088 80E0 ldi R24,0
008A 8E15 cp R24,R14
008C C8F3 brlo L8
008E X1:
008E .dbline 33
008E ; num=num/100;
008E 24E6 ldi R18,100
0090 30E0 ldi R19,0
0092 8601 movw R16,R12
0094 0E940000 xcall div16u
0098 6801 movw R12,R16
009A .dbline 34
009A ; bai=num/100;
009A 24E6 ldi R18,100
009C 30E0 ldi R19,0
009E 0E940000 xcall div16u
00A2 A02E mov R10,R16
00A4 .dbline 35
00A4 ; shi=num%100/10;
00A4 24E6 ldi R18,100
00A6 30E0 ldi R19,0
00A8 8601 movw R16,R12
00AA 0E940000 xcall mod16u
00AE 2AE0 ldi R18,10
00B0 30E0 ldi R19,0
00B2 0E940000 xcall div16u
00B6 602F mov R22,R16
00B8 .dbline 36
00B8 ; ge=num%10;
00B8 2AE0 ldi R18,10
00BA 30E0 ldi R19,0
00BC 8601 movw R16,R12
00BE 0E940000 xcall mod16u
00C2 402F mov R20,R16
00C4 .dbline 37
00C4 ; Write_Command(0x90);
00C4 00E9 ldi R16,144
00C6 0E940000 xcall _Write_Command
00CA .dbline 38
00CA ; Write_Command(0x90+3);
00CA 03E9 ldi R16,147
00CC 0E940000 xcall _Write_Command
00D0 .dbline 39
00D0 ; Write_one_char(bai+0x30);
00D0 0A2D mov R16,R10
00D2 005D subi R16,208 ; addi 48
00D4 0E940000 xcall _Write_one_char
00D8 .dbline 40
00D8 ; Write_one_char('.');
00D8 0EE2 ldi R16,46
00DA 0E940000 xcall _Write_one_char
00DE .dbline 41
00DE ; Write_Command(0x90+4);
00DE 04E9 ldi R16,148
00E0 0E940000 xcall _Write_Command
00E4 .dbline 42
00E4 ; Write_one_char(shi+0x30);
00E4 062F mov R16,R22
00E6 005D subi R16,208 ; addi 48
00E8 0E940000 xcall _Write_one_char
00EC .dbline 43
00EC ; Write_one_char(ge+0x30);
00EC 042F mov R16,R20
00EE 005D subi R16,208 ; addi 48
00F0 0E940000 xcall _Write_one_char
00F4 .dbline 44
00F4 ; Write_Command(0x90+5);
00F4 05E9 ldi R16,149
00F6 0E940000 xcall _Write_Command
00FA .dbline 45
00FA ; Write_one_char('V');
00FA 06E5 ldi R16,86
00FC 0E940000 xcall _Write_one_char
0100 .dbline -2
0100 L7:
0100 .dbline 0 ; func end
0100 0C940000 xjmp pop_xgsetF0FC
0104 .dbsym r ge 20 c
0104 .dbsym r shi 22 c
0104 .dbsym r bai 10 c
0104 .dbsym r num 12 i
0104 .dbsym r i 14 c
0104 .dbend
.area lit(rom, con, rel)
0000 L6:
0000 21B0F23E .word 0xb021,0x3ef2
0004 ; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -