📄 ad_lcd.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 + -