📄 read_adc.lis
字号:
.module read_adc.c
.area text(rom, con, rel)
0000 .dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\read_adc.c
0000 .dbfunc e T_BT1_T _T_BT1_T fi
0000 ; BT_T -> R20,R21
0000 ; a -> R22,R23
0000 ; i -> R10
.even
0000 _T_BT1_T::
0000 00D0 rcall push_gset3
0002 .dbline -1
0002 .dbline 13
0002 ; #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
0002 ; #include <macros.h>
0002 ; #include "discharge.h"
0002 ; #include <stdio.h>
0002 ; #include "LCD_1602.h"
0002 ;
0002 ; /*---------------------------------------------
0002 ; 电池1温度测量程序
0002 ; 最大测量温度:88度
0002 ; 测量64次取平均数
0002 ; ----------------------------------------------*/
0002 ; unsigned int T_BT1_T(void)
0002 ; {
0002 .dbline 15
0002 ; unsigned char i;
0002 ; unsigned int a=0;
0002 6627 clr R22
0004 7727 clr R23
0006 .dbline 17
0006 ; unsigned int BT_T;//电池1温度
0006 ; i=read_adc(0,1);//第一次转换,不要
0006 21E0 ldi R18,1
0008 0027 clr R16
000A 00D0 rcall _read_adc
000C .dbline 18
000C ; for (i=0;i<1;i++)
000C AA24 clr R10
000E 06C0 rjmp L5
0010 L2:
0010 .dbline 19
0010 .dbline 20
0010 21E0 ldi R18,1
0012 0027 clr R16
0014 00D0 rcall _read_adc
0016 600F add R22,R16
0018 711F adc R23,R17
001A .dbline 21
001A L3:
001A .dbline 18
001A A394 inc R10
001C L5:
001C .dbline 18
001C 8A2D mov R24,R10
001E 8130 cpi R24,1
0020 B8F3 brlo L2
0022 .dbline 22
0022 ; {
0022 ; a+=read_adc(0,1);//外部基准(1.024V),ADC1
0022 ; }
0022 ; BT_T=(a>>0);
0022 AB01 movw R20,R22
0024 .dbline 23
0024 ; if(BT_T>65530)
0024 8AEF ldi R24,65530
0026 9FEF ldi R25,255
0028 8617 cp R24,R22
002A 9707 cpc R25,R23
002C 10F4 brsh L6
002E .dbline 24
002E ; BT_T=0;
002E 4427 clr R20
0030 5527 clr R21
0032 L6:
0032 .dbline 25
0032 ; return BT_T;
0032 8A01 movw R16,R20
0034 .dbline -2
0034 L1:
0034 00D0 rcall pop_gset3
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbsym r BT_T 20 i
0038 .dbsym r a 22 i
0038 .dbsym r i 10 c
0038 .dbend
0038 .dbfunc e T_BT1_V _T_BT1_V fi
0038 ; BT_V -> R20,R21
0038 ; a -> R22,R23
0038 ; i -> R10
.even
0038 _T_BT1_V::
0038 00D0 rcall push_gset3
003A .dbline -1
003A .dbline 34
003A ; }
003A ;
003A ; /*---------------------------------------------
003A ; 电池1电压测量程序
003A ; 最大测量电压:4.096V
003A ; 测量64次取平均数
003A ; ----------------------------------------------*/
003A ; unsigned int T_BT1_V(void)
003A ; {
003A .dbline 36
003A ; unsigned char i;
003A ; unsigned int a=0;
003A 6627 clr R22
003C 7727 clr R23
003E .dbline 38
003E ; unsigned int BT_V;//电池1电压
003E ; i=read_adc(0,0);//第一次转换,不要
003E 2227 clr R18
0040 0027 clr R16
0042 00D0 rcall _read_adc
0044 .dbline 39
0044 ; for (i=0;i<16;i++)
0044 AA24 clr R10
0046 06C0 rjmp L12
0048 L9:
0048 .dbline 40
0048 .dbline 41
0048 2227 clr R18
004A 0027 clr R16
004C 00D0 rcall _read_adc
004E 600F add R22,R16
0050 711F adc R23,R17
0052 .dbline 42
0052 L10:
0052 .dbline 39
0052 A394 inc R10
0054 L12:
0054 .dbline 39
0054 8A2D mov R24,R10
0056 8031 cpi R24,16
0058 B8F3 brlo L9
005A .dbline 43
005A ; {
005A ; a+=read_adc(0,0);//外部基准(1.024V),ADC0
005A ; }
005A ; BT_V=(a>>4)*3;
005A 9B01 movw R18,R22
005C 3695 lsr R19
005E 2795 ror R18
0060 3695 lsr R19
0062 2795 ror R18
0064 3695 lsr R19
0066 2795 ror R18
0068 3695 lsr R19
006A 2795 ror R18
006C 03E0 ldi R16,3
006E 10E0 ldi R17,0
0070 00D0 rcall empy16s
0072 A801 movw R20,R16
0074 .dbline 44
0074 ; if(BT_V>65530)
0074 8AEF ldi R24,65530
0076 9FEF ldi R25,255
0078 8017 cp R24,R16
007A 9107 cpc R25,R17
007C 10F4 brsh L13
007E .dbline 45
007E ; BT_V=0;
007E 4427 clr R20
0080 5527 clr R21
0082 L13:
0082 .dbline 46
0082 ; return BT_V;
0082 8A01 movw R16,R20
0084 .dbline -2
0084 L8:
0084 00D0 rcall pop_gset3
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbsym r BT_V 20 i
0088 .dbsym r a 22 i
0088 .dbsym r i 10 c
0088 .dbend
0088 .dbfunc e T_BT1_I _T_BT1_I fi
0088 ; BT_I -> R20,R21
0088 ; a -> R22,R23
0088 ; i -> R10
.even
0088 _T_BT1_I::
0088 00D0 rcall push_gset3
008A .dbline -1
008A .dbline 55
008A ; }
008A ;
008A ; /*---------------------------------------------
008A ; 电池1电流测量程序
008A ; 最大测量电流:2.048A
008A ; 测量64次取平均数
008A ; ----------------------------------------------*/
008A ; unsigned int T_BT1_I(void)
008A ; {
008A .dbline 57
008A ; unsigned char i;
008A ; unsigned int a=0;
008A 6627 clr R22
008C 7727 clr R23
008E .dbline 59
008E ; unsigned int BT_I;//电池1电流
008E ; i=read_adc(0,3);//第一次转换,不要
008E 23E0 ldi R18,3
0090 0027 clr R16
0092 00D0 rcall _read_adc
0094 .dbline 60
0094 ; for (i=0;i<16;i++)
0094 AA24 clr R10
0096 06C0 rjmp L19
0098 L16:
0098 .dbline 61
0098 .dbline 62
0098 23E0 ldi R18,3
009A 0027 clr R16
009C 00D0 rcall _read_adc
009E 600F add R22,R16
00A0 711F adc R23,R17
00A2 .dbline 63
00A2 L17:
00A2 .dbline 60
00A2 A394 inc R10
00A4 L19:
00A4 .dbline 60
00A4 8A2D mov R24,R10
00A6 8031 cpi R24,16
00A8 B8F3 brlo L16
00AA .dbline 64
00AA ; {
00AA ; a+=read_adc(0,3);//外部基准(1.024V),ADC3
00AA ; }
00AA ; BT_I=(a>>4)*50/49;//衰减1.2倍 1.1*1.1=1.21
00AA 9B01 movw R18,R22
00AC 3695 lsr R19
00AE 2795 ror R18
00B0 3695 lsr R19
00B2 2795 ror R18
00B4 3695 lsr R19
00B6 2795 ror R18
00B8 3695 lsr R19
00BA 2795 ror R18
00BC 02E3 ldi R16,50
00BE 10E0 ldi R17,0
00C0 00D0 rcall empy16s
00C2 21E3 ldi R18,49
00C4 30E0 ldi R19,0
00C6 00D0 rcall div16u
00C8 A801 movw R20,R16
00CA .dbline 65
00CA ; return BT_I;
00CA .dbline -2
00CA L15:
00CA 00D0 rcall pop_gset3
00CC .dbline 0 ; func end
00CC 0895 ret
00CE .dbsym r BT_I 20 i
00CE .dbsym r a 22 i
00CE .dbsym r i 10 c
00CE .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -