📄 read_adc.s
字号:
.module read_adc.c
.area text(rom, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\read_adc.c
.dbfunc e T_BT1_T _T_BT1_T fi
; BT_T -> R20,R21
; a -> R22,R23
; i -> R10
.even
_T_BT1_T::
rcall push_gset3
.dbline -1
.dbline 13
; #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
; #include <macros.h>
; #include "discharge.h"
; #include <stdio.h>
; #include "LCD_1602.h"
;
; /*---------------------------------------------
; 电池1温度测量程序
; 最大测量温度:88度
; 测量64次取平均数
; ----------------------------------------------*/
; unsigned int T_BT1_T(void)
; {
.dbline 15
; unsigned char i;
; unsigned int a=0;
clr R22
clr R23
.dbline 17
; unsigned int BT_T;//电池1温度
; i=read_adc(0,1);//第一次转换,不要
ldi R18,1
clr R16
rcall _read_adc
.dbline 18
; for (i=0;i<1;i++)
clr R10
rjmp L5
L2:
.dbline 19
.dbline 20
ldi R18,1
clr R16
rcall _read_adc
add R22,R16
adc R23,R17
.dbline 21
L3:
.dbline 18
inc R10
L5:
.dbline 18
mov R24,R10
cpi R24,1
brlo L2
.dbline 22
; {
; a+=read_adc(0,1);//外部基准(1.024V),ADC1
; }
; BT_T=(a>>0);
movw R20,R22
.dbline 23
; if(BT_T>65530)
ldi R24,65530
ldi R25,255
cp R24,R22
cpc R25,R23
brsh L6
.dbline 24
; BT_T=0;
clr R20
clr R21
L6:
.dbline 25
; return BT_T;
movw R16,R20
.dbline -2
L1:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r BT_T 20 i
.dbsym r a 22 i
.dbsym r i 10 c
.dbend
.dbfunc e T_BT1_V _T_BT1_V fi
; BT_V -> R20,R21
; a -> R22,R23
; i -> R10
.even
_T_BT1_V::
rcall push_gset3
.dbline -1
.dbline 34
; }
;
; /*---------------------------------------------
; 电池1电压测量程序
; 最大测量电压:4.096V
; 测量64次取平均数
; ----------------------------------------------*/
; unsigned int T_BT1_V(void)
; {
.dbline 36
; unsigned char i;
; unsigned int a=0;
clr R22
clr R23
.dbline 38
; unsigned int BT_V;//电池1电压
; i=read_adc(0,0);//第一次转换,不要
clr R18
clr R16
rcall _read_adc
.dbline 39
; for (i=0;i<16;i++)
clr R10
rjmp L12
L9:
.dbline 40
.dbline 41
clr R18
clr R16
rcall _read_adc
add R22,R16
adc R23,R17
.dbline 42
L10:
.dbline 39
inc R10
L12:
.dbline 39
mov R24,R10
cpi R24,16
brlo L9
.dbline 43
; {
; a+=read_adc(0,0);//外部基准(1.024V),ADC0
; }
; BT_V=(a>>4)*3;
movw R18,R22
lsr R19
ror R18
lsr R19
ror R18
lsr R19
ror R18
lsr R19
ror R18
ldi R16,3
ldi R17,0
rcall empy16s
movw R20,R16
.dbline 44
; if(BT_V>65530)
ldi R24,65530
ldi R25,255
cp R24,R16
cpc R25,R17
brsh L13
.dbline 45
; BT_V=0;
clr R20
clr R21
L13:
.dbline 46
; return BT_V;
movw R16,R20
.dbline -2
L8:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r BT_V 20 i
.dbsym r a 22 i
.dbsym r i 10 c
.dbend
.dbfunc e T_BT1_I _T_BT1_I fi
; BT_I -> R20,R21
; a -> R22,R23
; i -> R10
.even
_T_BT1_I::
rcall push_gset3
.dbline -1
.dbline 55
; }
;
; /*---------------------------------------------
; 电池1电流测量程序
; 最大测量电流:2.048A
; 测量64次取平均数
; ----------------------------------------------*/
; unsigned int T_BT1_I(void)
; {
.dbline 57
; unsigned char i;
; unsigned int a=0;
clr R22
clr R23
.dbline 59
; unsigned int BT_I;//电池1电流
; i=read_adc(0,3);//第一次转换,不要
ldi R18,3
clr R16
rcall _read_adc
.dbline 60
; for (i=0;i<16;i++)
clr R10
rjmp L19
L16:
.dbline 61
.dbline 62
ldi R18,3
clr R16
rcall _read_adc
add R22,R16
adc R23,R17
.dbline 63
L17:
.dbline 60
inc R10
L19:
.dbline 60
mov R24,R10
cpi R24,16
brlo L16
.dbline 64
; {
; a+=read_adc(0,3);//外部基准(1.024V),ADC3
; }
; BT_I=(a>>4)*50/49;//衰减1.2倍 1.1*1.1=1.21
movw R18,R22
lsr R19
ror R18
lsr R19
ror R18
lsr R19
ror R18
lsr R19
ror R18
ldi R16,50
ldi R17,0
rcall empy16s
ldi R18,49
ldi R19,0
rcall div16u
movw R20,R16
.dbline 65
; return BT_I;
.dbline -2
L15:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r BT_I 20 i
.dbsym r a 22 i
.dbsym r i 10 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -