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

📄 ad_lcd.lis

📁 用于温度采集过程中的数字及模拟两转换程序清单。采用iccavr系列开发工具调试通过。
💻 LIS
字号:
                        .module ad_lcd.c
                        .area text(rom, con, rel)
 0000                   .dbfile ad_lcd.c
 0000                   .dbfunc e adctoasc _adctoasc fpc
 0000           ;         char_p -> R10,R11
 0000           ;              i -> R12
 0000           ;           temp -> R14,R15
 0000           ;            adc -> R10,R11
                        .even
 0000           _adctoasc::
 0000 0E940000          xcall push_gset5
 0004 5801              movw R10,R16
 0006                   .dbline -1
 0006                   .dbline 22
 0006           ; /******************************************************
 0006           ;               双龙电子公司http://www.sl.com.cn
 0006           ;               AT90S8535--AD转换演示程序(ICCAVR)
 0006           ;                         作者:詹卫前          
 0006           ;       使用注意:1、应包含头文件slavr.h
 0006           ;               2、在工程选项中的Additional Lib中填入slavr
 0006           ;                        使用编译器使用附加库文件libslavr.a
 0006           ;                         3、使用SL-AVRAD实验设备
 0006           ;     接线说明:1、PA.0(PIN40)处接电平指示LED的短路块断开
 0006           ;                         2、A/D和VX之间的短路块闭合
 0006           ;                         3、AREF(PIN32)和AVCC(PIN30)接VCC
 0006           ;                         4、AGND(PIN31)接GND                                                                                                                     
 0006           ; *******************************************************/
 0006           ; #include<iom16v.h>
 0006           ; #include<slavr.h>
 0006           ; #include<macros.h>
 0006           ; unsigned int ad_con;//存放PA0的AD转换结果
 0006           ; unsigned char adcval[6];//存放电压ASCII码
 0006           ; /*      将AD结果转换成电压     */
 0006           ; #define vref   497
 0006           ; unsigned char * adctoasc(unsigned int adc)
 0006           ;     {
 0006                   .dbline 26
 0006           ;        unsigned int temp;
 0006           ;        unsigned char i;
 0006           ;        unsigned char *char_p;
 0006           ;      temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
 0006 1501              movw R2,R10
 0008 4424              clr R4
 000A 5524              clr R5
 000C 41EF              ldi R20,241
 000E 51E0              ldi R21,1
 0010 60E0              ldi R22,0
 0012 70E0              ldi R23,0
 0014 5A92              st -y,R5
 0016 4A92              st -y,R4
 0018 3A92              st -y,R3
 001A 2A92              st -y,R2
 001C 8A01              movw R16,R20
 001E 9B01              movw R18,R22
 0020 0E940000          xcall empy32u
 0024 8AE0              ldi R24,10
 0026 90E0              ldi R25,0
 0028 8A93              st -y,R24
 002A 0E940000          xcall lsr32
 002E 7801              movw R14,R16
 0030                   .dbline 27
 0030           ;      for(i=0;i<3;i++)
 0030 CC24              clr R12
 0032 19C0              xjmp L5
 0034           L2:
 0034                   .dbline 28
 0034                   .dbline 29
 0034 2C2C              mov R2,R12
 0036 3324              clr R3
 0038 E3E0              ldi R30,3
 003A F0E0              ldi R31,0
 003C E219              sub R30,R2
 003E F309              sbc R31,R3
 0040 80E0              ldi R24,<_adcval
 0042 90E0              ldi R25,>_adcval
 0044 E80F              add R30,R24
 0046 F91F              adc R31,R25
 0048 2AE0              ldi R18,10
 004A 30E0              ldi R19,0
 004C 8701              movw R16,R14
 004E 0E940000          xcall mod16u
 0052 C801              movw R24,R16
 0054 C096              adiw R24,48
 0056 8083              std z+0,R24
 0058                   .dbline 30
 0058 2AE0              ldi R18,10
 005A 30E0              ldi R19,0
 005C 8701              movw R16,R14
 005E 0E940000          xcall div16u
 0062 7801              movw R14,R16
 0064                   .dbline 31
 0064           L3:
 0064                   .dbline 27
 0064 C394              inc R12
 0066           L5:
 0066                   .dbline 27
 0066 8C2D              mov R24,R12
 0068 8330              cpi R24,3
 006A 20F3              brlo L2
 006C                   .dbline 32
 006C           ;           {
 006C           ;                adcval[3-i]=temp%10+0x30;
 006C           ;                temp=temp/10;
 006C           ;               }
 006C           ;        adcval[0]=adcval[1];
 006C 20900100          lds R2,_adcval+1
 0070 20920000          sts _adcval,R2
 0074                   .dbline 33
 0074           ;        adcval[1]='.'; 
 0074 8EE2              ldi R24,46
 0076 80930100          sts _adcval+1,R24
 007A                   .dbline 34
 007A           ;        adcval[4]='V'; 
 007A 86E5              ldi R24,86
 007C 80930400          sts _adcval+4,R24
 0080                   .dbline 35
 0080           ;        adcval[5]=0;   
 0080 2224              clr R2
 0082 20920500          sts _adcval+5,R2
 0086                   .dbline 36
 0086           ;        char_p=adcval;
 0086 80E0              ldi R24,<_adcval
 0088 90E0              ldi R25,>_adcval
 008A 5C01              movw R10,R24
 008C                   .dbline 37
 008C           ;        return char_p;
 008C 8C01              movw R16,R24
 008E                   .dbline -2
 008E           L1:
 008E 0E940000          xcall pop_gset5
 0092                   .dbline 0 ; func end
 0092 0895              ret
 0094                   .dbsym r char_p 10 pc
 0094                   .dbsym r i 12 c
 0094                   .dbsym r temp 14 i
 0094                   .dbsym r adc 10 i
 0094                   .dbend
                        .area vector(rom, abs)
                        .org 56
 0038 0C944A00          jmp _adc_isr
                        .area text(rom, con, rel)
 0094                   .dbfile ad_lcd.c
 0094                   .dbfunc e adc_isr _adc_isr fV
 0094           ;           temp -> R16,R17
                        .even
 0094           _adc_isr::
 0094 2A92              st -y,R2
 0096 3A92              st -y,R3
 0098 0A93              st -y,R16
 009A 1A93              st -y,R17
 009C EA93              st -y,R30
 009E 2FB6              in R2,0x3f
 00A0 2A92              st -y,R2
 00A2                   .dbline -1
 00A2                   .dbline 42
 00A2           ;       }
 00A2           ; /*      AD转换程序     */
 00A2           ; #pragma interrupt_handler adc_isr:15
 00A2           ; void adc_isr(void)
 00A2           ;    {
 00A2                   .dbline 43
 00A2           ;     unsigned int temp=0;
 00A2 0027              clr R16
 00A4 1127              clr R17
 00A6 02C0              xjmp L12
 00A8           L11:
 00A8                   .dbline 45
 00A8 0F5F              subi R16,255  ; offset = 1
 00AA 1F4F              sbci R17,255
 00AC           L12:
 00AC                   .dbline 44
 00AC           ;       while(temp<6)
 00AC 0630              cpi R16,6
 00AE E0E0              ldi R30,0
 00B0 1E07              cpc R17,R30
 00B2 D0F3              brlo L11
 00B4                   .dbline 46
 00B4           ;           temp++;
 00B4           ;       ad_con=ADC;    
 00B4 24B0              in R2,0x4
 00B6 35B0              in R3,0x5
 00B8 30920700          sts _ad_con+1,R3
 00BC 20920600          sts _ad_con,R2
 00C0                   .dbline 47
 00C0           ;       ADCSR|=(1<<ADSC);//启动转换                                              
 00C0 369A              sbi 0x6,6
 00C2                   .dbline -2
 00C2           L10:
 00C2 2990              ld R2,y+
 00C4 2FBE              out 0x3f,R2
 00C6 E991              ld R30,y+
 00C8 1991              ld R17,y+
 00CA 0991              ld R16,y+
 00CC 3990              ld R3,y+
 00CE 2990              ld R2,y+
 00D0                   .dbline 0 ; func end
 00D0 1895              reti
 00D2                   .dbsym r temp 16 i
 00D2                   .dbend
 00D2                   .dbfunc e main _main fV
                        .even
 00D2           _main::
 00D2                   .dbline -1
 00D2                   .dbline 51
 00D2           ;    } 
 00D2           ; //将AD转换结果转换成电压数值,然后在LCD上显示   
 00D2           ; void main(void)
 00D2           ; {
 00D2                   .dbline 52
 00D2           ;  MCUCR=0;
 00D2 2224              clr R2
 00D4 25BE              out 0x35,R2
 00D6                   .dbline 53
 00D6           ;  ADMUX=0x00;//0通道
 00D6 27B8              out 0x7,R2
 00D8                   .dbline 54
 00D8           ;  ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0x06;
 00D8 8EED              ldi R24,222
 00DA 86B9              out 0x6,R24
 00DC                   .dbline 55
 00DC           ;  lcd_init();
 00DC 0E940000          xcall _lcd_init
 00E0                   .dbline 56
 00E0           ;  SEI();
 00E0 7894              sei
 00E2 21C0              xjmp L16
 00E4           L15:
 00E4                   .dbline 58
 00E4                   .dbline 59
 00E4 2227              clr R18
 00E6 02E0              ldi R16,2
 00E8 0E940000          xcall _lcd_gotoxy
 00EC                   .dbline 60
 00EC 00E0              ldi R16,<L18
 00EE 10E0              ldi R17,>L18
 00F0 0E940000          xcall _lcd_puts
 00F4                   .dbline 61
 00F4 21E0              ldi R18,1
 00F6 02E0              ldi R16,2
 00F8 0E940000          xcall _lcd_gotoxy
 00FC                   .dbline 62
 00FC 00E0              ldi R16,<L19
 00FE 10E0              ldi R17,>L19
 0100 0E940000          xcall _lcd_puts
 0104                   .dbline 63
 0104 21E0              ldi R18,1
 0106 0AE0              ldi R16,10
 0108 0E940000          xcall _lcd_gotoxy
 010C                   .dbline 64
 010C 00910600          lds R16,_ad_con
 0110 10910700          lds R17,_ad_con+1
 0114 75DF              xcall _adctoasc
 0116 0E940000          xcall _lcd_puts
 011A                   .dbline 65
 011A 04EF              ldi R16,500
 011C 11E0              ldi R17,1
 011E 0E940000          xcall _delay_ms
 0122                   .dbline 66
 0122 0E940000          xcall _lcd_clear
 0126                   .dbline 67
 0126           L16:
 0126                   .dbline 57
 0126 DECF              xjmp L15
 0128           X0:
 0128                   .dbline -2
 0128           L14:
 0128                   .dbline 0 ; func end
 0128 0895              ret
 012A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile ad_lcd.c
 0000           _adcval::
 0000                   .blkb 6
 0006                   .dbsym e adcval _adcval A[6:6]c
 0006           _ad_con::
 0006                   .blkb 2
 0008                   .dbsym e ad_con _ad_con i
                        .area data(ram, con, rel)
 0000                   .dbfile ad_lcd.c
 0000           L19:
 0000                   .blkb 9
                        .area idata
 0000 566F6C746167653A00        .byte 'V,'o,'l,'t,'a,'g,'e,58,0
                        .area data(ram, con, rel)
 0009                   .dbfile ad_lcd.c
 0009           L18:
 0009                   .blkb 14
                        .area idata
 0009 41442D2D436F6E76657274657200      .byte 'A,'D,45,45,'C,'o,'n,'v,'e,'r,'t,'e,'r,0
                        .area data(ram, con, rel)
 0017                   .dbfile ad_lcd.c

⌨️ 快捷键说明

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