📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1/adc.h
.dbfunc e adc_int _adc_int fV
.even
_adc_int::
.dbline -1
.dbline 22
; /********************************************************************************/
; //
; // builder : 2007-04-10
; // Target : ATMEAG 48V
; // Crystal : 内部 8.00 MHz
; //
; // 快速充电器
;
; /********************************************************************************/
;
; #include <iom48v.h>
; #include <macros.h>
;
; #include "adc.h"
;
;
; #define uchar unsigned char
; #define uint unsigned int
;
;
; #define SET_LED1 PORTD |= (1<<PD4)
; #define CLR_LED1 PORTD &= ~(1<<PD4)
.dbline 23
;
ldi R24,64
sts 124,R24
.dbline 24
; #define SET_LED2 PORTD |= (1<<PD3)
ldi R24,199
sts 122,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e AD_CH _AD_CH fi
; adh -> R20,R21
; ad_add -> R22,R23
; temp1 -> R12,R13
; i -> R10
; temp -> R14,R15
; CHn -> R16
.even
_AD_CH::
rcall push_gset5
.dbline -1
.dbline 33
; #define CLR_LED2 PORTD &= ~(1<<PD3)
;
; #define SET_LED3 PORTD |= (1<<PD1)
; #define CLR_LED3 PORTD &= ~(1<<PD1)
;
; #define SET_LED4 PORTD |= (1<<PD0)
; #define CLR_LED4 PORTD &= ~(1<<PD0)
;
;
.dbline 39
; #define SET_COM1 PORTD |= (1<<PD7)
; #define CLR_COM1 PORTD &= ~(1<<PD7)
;
; #define SET_COM2 PORTD |= (1<<PD6)
; #define CLR_COM2 PORTD &= ~(1<<PD6)
;
lds R24,124
andi R24,240
or R24,R16
sts 124,R24
.dbline 41
; #define SET_COM3 PORTD |= (1<<PD5)
; #define CLR_COM3 PORTD &= ~(1<<PD5)
clr R22
clr R23
.dbline 43
;
; #define SET_OUT PORTD |= (1<<PD2)
clr R10
rjmp L6
L3:
.dbline 44
; #define CLR_OUT PORTD &= ~(1<<PD2)
.dbline 45
;
lds R24,122
ori R24,64
sts 122,R24
L7:
.dbline 46
L8:
.dbline 46
;
lds R2,122
sbrc R2,6
rjmp L7
.dbline 48
;
; static const uchar Char_tab[10] ={0x7D,0x41,0xEC,0xE5,0xD1,0xB5,0xBD,0x61,0xFD,0xF5};
lds R24,122
ori R24,64
sts 122,R24
L10:
.dbline 49
L11:
.dbline 49
lds R2,122
sbrc R2,6
rjmp L10
.dbline 51
lds R12,120
clr R13
.dbline 52
lds R24,121
clr R25
andi R24,3
andi R25,0
movw R14,R24
mov R15,R14
clr R14
.dbline 53
add R14,R12
adc R15,R13
.dbline 54
add R22,R14
adc R23,R15
.dbline 55
L4:
.dbline 43
inc R10
L6:
.dbline 43
mov R24,R10
cpi R24,4
brlo L3
.dbline 56
;
; union
; { uint temp;
; uchar data[2];
; }CH;
;
; uint V[4];
;
movw R20,R22
lsr R21
ror R20
lsr R21
ror R20
.dbline 57
; uchar flag_2ms;
movw R16,R20
.dbline -2
L2:
rcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r adh 20 i
.dbsym r ad_add 22 i
.dbsym r temp1 12 i
.dbsym r i 10 c
.dbsym r temp 14 i
.dbsym r CHn 16 c
.dbend
.area lit(rom, con, rel)
_Char_tab:
.byte 125,'A
.byte 236,229
.byte 209,181
.byte 189,'a
.byte 253,245
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
.dbsym s Char_tab _Char_tab A[10:10]kc
.area data(ram, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
_adc_ch::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
.dbsym e adc_ch _adc_ch c
_dp::
.blkb 1
.area idata
.byte 2
.area data(ram, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
.dbsym e dp _dp c
.area text(rom, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 85
; uchar flag_20ms;
;
; uint ad_temp;
; uchar adc_num,adc_ch=0;
; uchar batt;
;
; uchar dip_bit;
; uint batt_num;
;
; uchar mode,out_time;
; uint key,key1,key2;
; uchar pulse;
;
; uchar dp=0x02;
; uchar down,delay;
;
; uchar led_time,led_flag;
; uchar flas1,flas2,flas3,flas4;
;
;
;
;
; /*---------------------------------------------------------------
; 初始化
; ----------------------------------------------------------------*/
;
; void timer0_init(void)
; {
.dbline 86
; TCCR0B = 0x00; //stop
clr R2
out 0x25,R2
.dbline 87
; TCNT0 = 0x06; //set count
ldi R24,6
out 0x26,R24
.dbline 88
; TCCR0A = 0x00;
out 0x24,R2
.dbline 89
; TCCR0B = 0x03; //start timer
ldi R24,3
out 0x25,R24
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 94
; }
;
;
; void timer1_init(void)
; {
.dbline 95
; TCCR1A = 0x00;
clr R2
sts 128,R2
.dbline 96
; TCCR1B = 0x00;
sts 129,R2
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 102
; }
;
;
;
; void init_devices(void)
; {
.dbline 103
; CLI();
cli
.dbline 105
;
; DDRB = 0xFF;
ldi R24,255
out 0x4,R24
.dbline 106
; PORTB = 0x00;
clr R2
out 0x5,R2
.dbline 108
;
; DDRC = 0x00;
out 0x7,R2
.dbline 109
; PORTC = 0x0C;
ldi R24,12
out 0x8,R24
.dbline 111
;
; DDRD = 0xFF;
ldi R24,255
out 0xa,R24
.dbline 112
; PORTD = 0x00;
out 0xb,R2
.dbline 114
;
; adc_int();
rcall _adc_int
.dbline 115
; timer0_init();
rcall _timer0_init
.dbline 116
; timer1_init();
rcall _timer1_init
.dbline 118
;
; TIMSK0 = 0x01; //timer 0 interrupt sources
ldi R24,1
sts 110,R24
.dbline 119
; TIMSK1 = 0x00; //timer 1 interrupt sources
clr R2
sts 111,R2
.dbline 120
; TIMSK2 = 0x00; //timer 2 interrupt sources
sts 112,R2
.dbline 122
;
; SEI();
sei
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e bubble_sort _bubble_sort fV
; j -> R20,R21
; change -> R22,R23
; temp -> R10,R11
; k -> R14,R15
; len -> R12
; a -> y+10
.even
_bubble_sort::
rcall push_arg4
rcall push_gset5
mov R12,R18
.dbline -1
.dbline 131
; }
;
;
;
;
;
;
; void bubble_sort(uint *a,uchar len)
; {
.dbline 134
; int j,k;
; int temp;
; int change=1;
ldi R22,1
ldi R23,0
.dbline 136
;
; for (j=0;(j<len-1)&&change;j++)
clr R20
clr R21
rjmp L21
L18:
.dbline 137
; {
.dbline 138
; change=0;
clr R22
clr R23
.dbline 139
; for (k=j+1;k<len;k++)
movw R24,R20
adiw R24,1
movw R14,R24
rjmp L25
L22:
.dbline 140
; {
.dbline 141
; if (a[k-1]>a[k])
ldi R16,2
ldi R17,0
movw R18,R14
rcall empy16s
movw R2,R16
movw R30,R2
ldd R0,y+10
ldd R1,y+11
add R30,R0
adc R31,R1
ldd R4,z+0
ldd R5,z+1
movw R30,R2
sbiw R30,2
add R30,R0
adc R31,R1
ldd R2,z+0
ldd R3,z+1
cp R4,R2
cpc R5,R3
brlo X1
rjmp L26
X1:
.dbline 142
; {
.dbline 143
; change=1;
ldi R22,1
ldi R23,0
.dbline 144
; temp=a[k-1];
ldi R16,2
ldi R17,0
movw R18,R14
rcall empy16s
movw R30,R16
sbiw R30,2
ldd R0,y+10
ldd R1,y+11
add R30,R0
adc R31,R1
ldd R10,z+0
ldd R11,z+1
.dbline 145
; a[k-1]=a[k];
ldi R16,2
ldi R17,0
movw R18,R14
rcall empy16s
movw R2,R16
movw R30,R2
ldd R0,y+10
ldd R1,y+11
add R30,R0
adc R31,R1
ldd R4,z+0
ldd R5,z+1
movw R30,R2
sbiw R30,2
add R30,R0
adc R31,R1
std z+1,R5
std z+0,R4
.dbline 146
; a[k]=temp;
ldi R16,2
ldi R17,0
movw R18,R14
rcall empy16s
movw R30,R16
ldd R0,y+10
ldd R1,y+11
add R30,R0
adc R31,R1
std z+1,R11
std z+0,R10
.dbline 147
; }
L26:
.dbline 148
L23:
.dbline 139
movw R24,R14
adiw R24,1
movw R14,R24
L25:
.dbline 139
mov R2,R12
clr R3
cp R14,R2
cpc R15,R3
brge X2
rjmp L22
X2:
.dbline 149
L19:
.dbline 136
subi R20,255 ; offset = 1
sbci R21,255
L21:
.dbline 136
mov R24,R12
clr R25
sbiw R24,1
cp R20,R24
cpc R21,R25
brge L28
cpi R22,0
cpc R22,R23
breq X3
rjmp L18
X3:
X0:
L28:
.dbline -2
L17:
rcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r j 20 I
.dbsym r change 22 I
.dbsym r temp 10 I
.dbsym r k 14 I
.dbsym r len 12 c
.dbsym l a 10 pi
.dbend
.dbfunc e abcd _abcd fV
; temp -> y+0
.even
_abcd::
sbiw R28,8
.dbline -1
.dbline 156
; }
; }
; }
;
;
;
;
; void abcd(void)
; {
.dbline 159
; uint temp[4];
;
; if(batt==4)
lds R24,_batt
cpi R24,4
brne L30
.dbline 160
; {
.dbline 161
; temp[0] = V[0];
lds R2,_V
lds R3,_V+1
std y+1,R3
std y+0,R2
.dbline 162
; temp[1] = V[1]-V[0];
lds R4,_V+2
lds R5,_V+2+1
sub R4,R2
sbc R5,R3
std y+3,R5
std y+2,R4
.dbline 163
; temp[2] = V[2]-V[1];
lds R2,_V+2
lds R3,_V+2+1
lds R4,_V+4
lds R5,_V+4+1
sub R4,R2
sbc R5,R3
std y+5,R5
std y+4,R4
.dbline 164
; temp[3] = V[3]-V[2];
lds R2,_V+4
lds R3,_V+4+1
lds R4,_V+6
lds R5,_V+6+1
sub R4,R2
sbc R5,R3
std y+7,R5
std y+6,R4
.dbline 165
; }
rjmp L31
L30:
.dbline 166
; else if(batt==3)
lds R24,_batt
cpi R24,3
brne L40
.dbline 167
; {
.dbline 168
; temp[0] = V[0];
lds R2,_V
lds R3,_V+1
std y+1,R3
std y+0,R2
.dbline 169
; temp[1] = V[1]-V[0];
lds R4,_V+2
lds R5,_V+2+1
sub R4,R2
sbc R5,R3
std y+3,R5
std y+2,R4
.dbline 170
; temp[2] = V[2]-V[1];
lds R2,_V+2
lds R3,_V+2+1
lds R4,_V+4
lds R5,_V+4+1
sub R4,R2
sbc R5,R3
std y+5,R5
std y+4,R4
.dbline 171
; }
rjmp L41
L40:
.dbline 172
; else if(batt==2)
lds R24,_batt
cpi R24,2
brne L47
.dbline 173
; {
.dbline 174
; temp[0] = V[0];
lds R2,_V
lds R3,_V+1
std y+1,R3
std y+0,R2
.dbline 175
; temp[1] = V[1]-V[0];
lds R4,_V+2
lds R5,_V+2+1
sub R4,R2
sbc R5,R3
std y+3,R5
std y+2,R4
.dbline 176
; }
rjmp L48
L47:
.dbline 177
; else if(batt==1)
lds R24,_batt
cpi R24,1
breq X4
rjmp L29
X4:
.dbline 178
; {
.dbline 179
; temp[0] = V[0];
lds R2,_V
lds R3,_V+1
std y+1,R3
std y+0,R2
.dbline 180
; }
.dbline 181
; else return;
L52:
L48:
L41:
L31:
.dbline 184
;
;
; if(temp[1]<131) flas2 = 1;
ldd R24,y+2
ldd R25,y+3
cpi R24,131
ldi R30,0
cpc R25,R30
brsh L53
.dbline 184
ldi R24,1
sts _flas2,R24
L53:
.dbline 185
; if(temp[2]<131) flas3 = 1;
ldd R24,y+4
ldd R25,y+5
cpi R24,131
ldi R30,0
cpc R25,R30
brsh L56
.dbline 185
ldi R24,1
sts _flas3,R24
L56:
.dbline 186
; if(temp[3]<131) flas4 = 1;
ldd R24,y+6
ldd R25,y+7
cpi R24,131
ldi R30,0
cpc R25,R30
brsh L59
.dbline 186
ldi R24,1
sts _flas4,R24
L59:
.dbline 188
;
; bubble_sort(temp, batt);
lds R18,_batt
movw R16,R28
rcall _bubble_sort
.dbline 190
;
; if(batt==4)
lds R24,_batt
cpi R24,4
brne L62
.dbline 191
; {
.dbline 192
; if( (temp[0]-temp[3])>10 )
ldd R2,y+6
ldd R3,y+7
ldd R4,y+0
ldd R5,y+1
sub R4,R2
sbc R5,R3
ldi R24,10
ldi R25,0
cp R24,R4
cpc R25,R5
brsh L63
.dbline 193
; {
.dbline 194
; flas1 = 1;
ldi R24,1
sts _flas1,R24
.dbline 195
; flas2 = 1;
sts _flas2,R24
.dbline 196
; flas3 = 1;
sts _flas3,R24
.dbline 197
; flas4 = 1;
sts _flas4,R24
.dbline 198
; }
.dbline 199
; }
rjmp L63
L62:
.dbline 200
; else if(batt==3)
lds R24,_batt
cpi R24,3
brne L67
.dbline 201
; {
.dbline 202
; if(temp[0]> (temp[2]+5))
ldd R24,y+4
ldd R25,y+5
adiw R24,5
ldd R2,y+0
ldd R3,y+1
cp R24,R2
cpc R25,R3
brsh L68
.dbline 203
; {
.dbline 204
; flas1 = 1;
ldi R24,1
sts _flas1,R24
.dbline 205
; flas2 = 1;
sts _flas2,R24
.dbline 206
; flas3 = 1;
sts _flas3,R24
.dbline 207
; }
.dbline 208
; }
rjmp L68
L67:
.dbline 209
; else if(batt==2)
lds R24,_batt
cpi R24,2
brne L72
.dbline 210
; {
.dbline 211
; if( (temp[0]-temp[1])>10 )
ldd R2,y+2
ldd R3,y+3
ldd R4,y+0
ldd R5,y+1
sub R4,R2
sbc R5,R3
ldi R24,10
ldi R25,0
cp R24,R4
cpc R25,R5
brsh L74
.dbline 212
; {
.dbline 213
; flas1 = 1;
ldi R24,1
sts _flas1,R24
.dbline 214
; flas2 = 1;
sts _flas2,R24
.dbline 215
; }
L74:
.dbline 216
; }
L72:
L68:
L63:
.dbline -2
L29:
adiw R28,8
.dbline 0 ; func end
ret
.dbsym l temp 0 A[8:4]i
.dbend
.dbfunc e ADC_count _ADC_count fV
; temp -> R20,R21
.even
_ADC_count::
rcall push_gset1
.dbline -1
.dbline 228
;
; }
;
;
;
;
; /*---------------------------------------------------------------
; A/D 转换
; ----------------------------------------------------------------*/
;
; void ADC_count(void)
; {
.dbline 231
; uint temp;
;
; ad_temp += AD_CH(adc_ch);
lds R16,_adc_ch
rcall _AD_CH
lds R2,_ad_temp
lds R3,_ad_temp+1
add R2,R16
adc R3,R17
sts _ad_temp+1,R3
sts _ad_temp,R2
.dbline 232
; adc_num ++;
lds R24,_adc_num
subi R24,255 ; addi 1
sts _adc_num,R24
.dbline 233
; if(adc_num>=16)
cpi R24,16
brsh X5
rjmp L78
X5:
.dbline 234
; {
.dbline 235
; adc_num = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -