⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ¿-

📁 atmega128串行操作lcd12864
💻
字号:
                        .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 + -