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

📄 main.lis

📁 ATmega16内部ADC的应用:ATmega16内部集成了8路10位逐次逼近型模数转换器
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00F6 0196              adiw R24,1
 00F8 90930100          sts _extint_count+1,R25
 00FC 80930000          sts _extint_count,R24
 0100                   .dbline 62
 0100 80910200          lds R24,_act_flag
 0104 8130              cpi R24,1
 0106 19F0              breq L16
 0108                   .dbline 63
 0108                   .dbline 64
 0108 81E0              ldi R24,1
 010A 80930200          sts _act_flag,R24
 010E                   .dbline 65
 010E           L16:
 010E                   .dbline -2
 010E           L15:
 010E 8991              ld R24,y+
 0110 8FBF              out 0x3f,R24
 0112 9991              ld R25,y+
 0114 8991              ld R24,y+
 0116                   .dbline 0 ; func end
 0116 1895              reti
 0118                   .dbend
 0118                   .dbfunc e adc_init _adc_init fV
                        .even
 0118           _adc_init::
 0118                   .dbline -1
 0118                   .dbline 68
 0118           ; }
 0118           ; 
 0118           ; #pragma interrupt_handler int0_isr:2
 0118           ; void int0_isr(void)
 0118           ; {
 0118           ;    extint_count++;
 0118           ;    if (act_flag!=1)
 0118           ;    {
 0118           ;       act_flag = 1;
 0118           ;    }
 0118           ; }
 0118           ; void adc_init(void)
 0118           ; {
 0118                   .dbline 69
 0118           ;    ADMUX = (1<<REFS1)|
 0118 80EC              ldi R24,192
 011A 87B9              out 0x7,R24
 011C                   .dbline 73
 011C           ;            (1<<REFS0)|    //选择内部2.56v作为参考电压
 011C           ;            0x00;          //使用ad转换0通道
 011C           ;                                 //ADLAR = 0,转换结果选择右对齐
 011C           ;    ADCSRA = (1<<ADEN)|     //ADC使能
 011C 8EED              ldi R24,222
 011E 86B9              out 0x6,R24
 0120                   .dbline -2
 0120           L18:
 0120                   .dbline 0 ; func end
 0120 0895              ret
 0122                   .dbend
 0122                   .dbfunc e init_devices _init_devices fV
                        .even
 0122           _init_devices::
 0122                   .dbline -1
 0122                   .dbline 81
 0122           ;             (1<<ADSC)|     //开始一次ad转换
 0122           ;                   (1<<ADIF)|     //写1,将ADIF位清0
 0122           ;                   (1<<ADIE)|     //允许ADC中断
 0122           ;                   0x06;          //时钟分频系数为64
 0122           ; }
 0122           ; //call this routine to initialize all peripherals
 0122           ; void init_devices(void)
 0122           ; {
 0122                   .dbline 82
 0122           ;  CLI();         //关闭全局中断
 0122 F894              cli
 0124                   .dbline 83
 0124           ;  port_init();   //CPU端口初始化
 0124 6DDF              xcall _port_init
 0126                   .dbline 85
 0126           ;  /**/
 0126           ;  MCUCR = 0x02;  //INT0引脚上的下降沿触发中断
 0126 82E0              ldi R24,2
 0128 85BF              out 0x35,R24
 012A                   .dbline 86
 012A           ;  GICR  = 0x40;  //外部中断0请求使能
 012A 80E4              ldi R24,64
 012C 8BBF              out 0x3b,R24
 012E                   .dbline 100
 012E           ;  /**/
 012E           ;  /** /
 012E           ;   MCUCR = 0x00;  //INT0引脚上的低电平触发中断
 012E           ;   GICR  = 0x40;  //外部中断0请求使能
 012E           ;  /**/
 012E           ;  /** /
 012E           ;   MCUCR = 0x01;  //INT0引脚上的上升沿和下降沿都触发中断
 012E           ;   GICR  = 0x40;  //外部中断0请求使能
 012E           ;  /**/
 012E           ;  /** /
 012E           ;   MCUCR = 0x03;  //INT0引脚上的上升沿触发中断
 012E           ;   GICR  = 0x40;  //外部中断0请求使能
 012E           ;  /**/
 012E           ;  adc_init();
 012E F4DF              xcall _adc_init
 0130                   .dbline 101
 0130           ;  SEI(); //打开全局中断
 0130 7894              sei
 0132                   .dbline -2
 0132           L19:
 0132                   .dbline 0 ; func end
 0132 0895              ret
 0134                   .dbend
 0134                   .dbfunc e main _main fV
 0134           ;           temp -> <dead>
 0134           ;      temp_show -> y+2
 0134           ;              i -> R20
                        .even
 0134           _main::
 0134 2797              sbiw R28,7
 0136                   .dbline -1
 0136                   .dbline 105
 0136           ;  
 0136           ; }
 0136           ; void main(void)
 0136           ; {
 0136                   .dbline 109
 0136           ;    char temp_show[5];  //定义数组用作在液晶屏上进行显示
 0136           ;    unsigned char i;
 0136           ;    unsigned int temp;
 0136           ;    for(i=0;i<5;i++)
 0136 4427              clr R20
 0138 09C0              xjmp L24
 013A           L21:
 013A                   .dbline 110
 013A                   .dbline 111
 013A CE01              movw R24,R28
 013C 0296              adiw R24,2
 013E E42F              mov R30,R20
 0140 FF27              clr R31
 0142 E80F              add R30,R24
 0144 F91F              adc R31,R25
 0146 2224              clr R2
 0148 2082              std z+0,R2
 014A                   .dbline 112
 014A           L22:
 014A                   .dbline 109
 014A 4395              inc R20
 014C           L24:
 014C                   .dbline 109
 014C 4530              cpi R20,5
 014E A8F3              brlo L21
 0150                   .dbline 113
 0150           ;    {
 0150           ;       temp_show[i] = 0;
 0150           ;    }
 0150           ;    temp_show[4] = 0xff;  //显示结束标志
 0150 8FEF              ldi R24,255
 0152 8E83              std y+6,R24
 0154                   .dbline 115
 0154           ;    /**/
 0154           ;    init_devices();
 0154 E6DF              xcall _init_devices
 0156                   .dbline 116
 0156           ;    LCDReady();
 0156 0E940000          xcall _LCDReady
 015A                   .dbline 117
 015A           ;    LcdInit();          //LCD初始化
 015A 0E940000          xcall _LcdInit
 015E                   .dbline 118
 015E           ;    CharsWrite(0,1,"AD0 VOLTAGE:");  //在LCD的第一行显示"AD0 VOLTAGE:"
 015E 80E0              ldi R24,<L26
 0160 90E0              ldi R25,>L26
 0162 9983              std y+1,R25
 0164 8883              std y+0,R24
 0166 21E0              ldi R18,1
 0168 0027              clr R16
 016A 0E940000          xcall _CharsWrite
 016E                   .dbline 119
 016E           ;    CharsWrite(0,2,"0.0V");            //在第二行显示“0.0V”
 016E 80E0              ldi R24,<L27
 0170 90E0              ldi R25,>L27
 0172 9983              std y+1,R25
 0174 8883              std y+0,R24
 0176 22E0              ldi R18,2
 0178 0027              clr R16
 017A 0E940000          xcall _CharsWrite
 017E                   .dbline 120
 017E           ;    uart_init();        //串口初始化
 017E 0E940000          xcall _uart_init
 0182                   .dbline 121
 0182           ;    delay_ms(1000);
 0182 08EE              ldi R16,1000
 0184 13E0              ldi R17,3
 0186 0E940000          xcall _delay_ms
 018A 1BC0              xjmp L29
 018C           L28:
 018C                   .dbline 124
 018C                   .dbline 125
 018C 0E940000          xcall _ClearLcd
 0190                   .dbline 126
 0190 00E5              ldi R16,80
 0192 10E0              ldi R17,0
 0194 0E940000          xcall _delay_us
 0198                   .dbline 127
 0198 80E0              ldi R24,<L26
 019A 90E0              ldi R25,>L26
 019C 9983              std y+1,R25
 019E 8883              std y+0,R24
 01A0 21E0              ldi R18,1
 01A2 0027              clr R16
 01A4 0E940000          xcall _CharsWrite
 01A8                   .dbline 128
 01A8 56DF              xcall _data_con
 01AA                   .dbline 129
 01AA 80E0              ldi R24,<_adc_show
 01AC 90E0              ldi R25,>_adc_show
 01AE 9983              std y+1,R25
 01B0 8883              std y+0,R24
 01B2 22E0              ldi R18,2
 01B4 0027              clr R16
 01B6 0E940000          xcall _CharsWrite
 01BA                   .dbline 130
 01BA 0CE2              ldi R16,300
 01BC 11E0              ldi R17,1
 01BE 0E940000          xcall _delay_ms
 01C2                   .dbline 131
 01C2           L29:
 01C2                   .dbline 123
 01C2 E4CF              xjmp L28
 01C4           X0:
 01C4                   .dbline -2
 01C4           L20:
 01C4 2796              adiw R28,7
 01C6                   .dbline 0 ; func end
 01C6 0895              ret
 01C8                   .dbsym l temp 3 i
 01C8                   .dbsym l temp_show 2 A[5:5]c
 01C8                   .dbsym r i 20 c
 01C8                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\radio\第十一篇\test-adc\main.c
 0000           _adc_show::
 0000                   .blkb 6
 0006                   .dbsym e adc_show _adc_show A[6:6]c
 0006           _adc_result::
 0006                   .blkb 2
 0008                   .dbsym e adc_result _adc_result i
                        .area data(ram, con, rel)
 0003                   .dbfile F:\radio\第十一篇\test-adc\main.c
 0003           L27:
 0003                   .blkb 5
                        .area idata
 0003 302E305600        .byte 48,46,48,'V,0
                        .area data(ram, con, rel)
 0008                   .dbfile F:\radio\第十一篇\test-adc\main.c
 0008           L26:
 0008                   .blkb 13
                        .area idata
 0008 41443020564F4C544147453A00        .byte 'A,'D,48,32,'V,'O,'L,'T,'A,'G,'E,58,0
                        .area data(ram, con, rel)
 0015                   .dbfile F:\radio\第十一篇\test-adc\main.c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -