📄 main.s
字号:
.dbline 237
; if (micros_nu0==16)
lds R24,_micros_nu0
cpi R24,16
brne L32
.dbline 238
; {da_counter=da_counter+2;}
.dbline 238
lds R24,_da_counter
subi R24,254 ; addi 2
sts _da_counter,R24
.dbline 238
xjmp L33
L32:
.dbline 240
; else
; {
.dbline 241
; if (micros_nu0==8)
lds R24,_micros_nu0
cpi R24,8
brne L34
.dbline 242
; {da_counter=da_counter+4;}
.dbline 242
lds R24,_da_counter
subi R24,252 ; addi 4
sts _da_counter,R24
.dbline 242
xjmp L35
L34:
.dbline 244
; else
; {
.dbline 245
; if (micros_nu0==4)
lds R24,_micros_nu0
cpi R24,4
brne L36
.dbline 246
; {da_counter=da_counter+8;}
.dbline 246
lds R24,_da_counter
subi R24,248 ; addi 8
sts _da_counter,R24
.dbline 246
xjmp L37
L36:
.dbline 248
; else
; {
.dbline 249
; if (micros_nu0==2)
lds R24,_micros_nu0
cpi R24,2
brne L38
.dbline 250
; {da_counter=da_counter+16;}
.dbline 250
lds R24,_da_counter
subi R24,240 ; addi 16
sts _da_counter,R24
.dbline 250
xjmp L39
L38:
.dbline 252
; else
; {
.dbline 253
; if (micros_nu0==1)
lds R24,_micros_nu0
cpi R24,1
brne L40
.dbline 254
; {da_counter=da_counter+32;}
.dbline 254
lds R24,_da_counter
subi R24,224 ; addi 32
sts _da_counter,R24
.dbline 254
L40:
.dbline 255
; }
L39:
.dbline 256
; }
L37:
.dbline 257
; }
L35:
.dbline 258
; }
L33:
.dbline 259
L31:
.dbline -2
L1:
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R18,y+
ld R16,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r j 16 c
.dbsym r i 18 c
.dbend
.dbfunc e time2_int _time2_int fV
.even
_time2_int::
st -y,R2
st -y,R3
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 266
; }
; }
;
; /******************************************************
; 测量脉冲闸门时间波形中断函数(定时器2比较匹配中断)20-12KHZ 1-600RPM
; ******************************************************/
; void time2_int(void)
; {
.dbline 268
; //200MS闸门
; counter++;
lds R24,_counter
subi R24,255 ; addi 1
sts _counter,R24
.dbline 269
; if (counter==6)
cpi R24,6
brne L43
.dbline 270
; {OCR2=32;}
.dbline 270
ldi R24,32
out 0x23,R24
.dbline 270
L43:
.dbline 271
lds R24,_counter
cpi R24,7
brne L45
.dbline 272
.dbline 273
lds R2,_pull_number
lds R3,_pull_number+1
sts _speed_pull+1,R3
sts _speed_pull,R2
.dbline 274
clr R2
clr R3
sts _pull_number+1,R3
sts _pull_number,R2
.dbline 275
sts _counter,R2
.dbline 276
ldi R24,255
out 0x23,R24
.dbline 277
L45:
.dbline -2
L42:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e pull_int _pull_int fV
.even
_pull_int::
st -y,R2
st -y,R3
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 283
.dbline 284
lds R24,_pull_number
lds R25,_pull_number+1
adiw R24,1
sts _pull_number+1,R25
sts _pull_number,R24
.dbline 285
ldi R24,2400
ldi R25,9
lds R2,_pull_number
lds R3,_pull_number+1
cp R24,R2
cpc R25,R3
brsh L48
.dbline 286
.dbline 286
sts _pull_number+1,R25
sts _pull_number,R24
.dbline 286
L48:
.dbline -2
L47:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 292
; if (counter==7)
; {
; speed_pull=pull_number;
; pull_number=0;
; counter=0;
; OCR2=0XFF;
; }
; }
; /******************************************************
; 测量脉冲数中断函数(外部INT0中断)
; ******************************************************/
; void pull_int(void)
; {
; pull_number++;
; if (pull_number>2400)
; {pull_number=2400;}
; }
; /****************************************************************
; 定时器1初始化函数
; ****************************************************************/
; void timer1_init(void)
; {
.dbline 293
; TCCR1B = (1<<CS10)|(1<<WGM12); //time1的控制寄存器B,CTC模式,clk=系统时钟
ldi R24,9
out 0x2e,R24
.dbline 294
; TIMSK &=~(1<<OCIE1A); //定时中断屏蔽寄存器
in R24,0x39
andi R24,239
out 0x39,R24
.dbline -2
L50:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer2_init _timer2_init fV
.even
_timer2_init::
.dbline -1
.dbline 301
; }
;
; /****************************************************************
; 定时器2初始化函数
; ****************************************************************/
; void timer2_init(void)
; {
.dbline 302
; TCCR2=(1<<CS20)|(1<<CS21)|(1<<CS22)|(1<<WGM21);
ldi R24,15
out 0x25,R24
.dbline 303
; OCR2=0XFF;
ldi R24,255
out 0x23,R24
.dbline -2
L51:
.dbline 0 ; func end
ret
.dbend
.dbfunc e int0_init _int0_init fV
.even
_int0_init::
.dbline -1
.dbline 309
; }
; /****************************************************************
; INT0初始化函数
; ****************************************************************/
; void int0_init(void)
; {
.dbline 310
; DDRD&=~(1<PULL_IN);
cbi 0x11,0
.dbline 311
; MCUCR=(1<<ISC01)|(1<<ISC00);
ldi R24,3
out 0x35,R24
.dbline -2
L52:
.dbline 0 ; func end
ret
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 319
; }
;
;
; /****************************************************************
; 端口初始化
; ****************************************************************/
; void port_init(void)
; {
.dbline 328
; //PORTA = 0xff;
; //DDRA = 0xdf;
; //PORTB = 0x00;
; //DDRB = 0x00;
; //PORTC = 0b01111110;
; //DDRC = 0b10000001;
; //PORTD = 0xff;
; //DDRD = 0x00;
; PORTC&=~(1<<INT);
cbi 0x15,1
.dbline 329
; DDRC |=(1<<INT);
sbi 0x14,1
.dbline -2
L53:
.dbline 0 ; func end
ret
.dbend
.dbfunc e pull_start _pull_start fV
.even
_pull_start::
.dbline -1
.dbline 336
; }
;
; /******************************************************
; 脉冲输入开始函数
; ******************************************************/
; void pull_start(void)
; {
.dbline 337
; GICR|=(1<<INT0);
in R24,0x3b
ori R24,64
out 0x3b,R24
.dbline 338
; TIMSK|=(1<<OCIE2);
in R24,0x39
ori R24,128
out 0x39,R24
.dbline 339
; pull_number=0;
clr R2
clr R3
sts _pull_number+1,R3
sts _pull_number,R2
.dbline 340
; counter=0;
sts _counter,R2
.dbline 341
; OCR2=0XFF;
ldi R24,255
out 0x23,R24
.dbline -2
L54:
.dbline 0 ; func end
ret
.dbend
.dbfunc e pull_stop _pull_stop fV
.even
_pull_stop::
.dbline -1
.dbline 347
; }
; /******************************************************
; 脉冲输入开始函数
; ******************************************************/
; void pull_stop(void)
; {
.dbline 348
; GICR&=~(1<<INT0);
in R24,0x3b
andi R24,191
out 0x3b,R24
.dbline 349
; TIMSK&=~(1<<OCIE2);
in R24,0x39
andi R24,127
out 0x39,R24
.dbline -2
L55:
.dbline 0 ; func end
ret
.dbend
.dbfunc e da_init _da_init fV
.even
_da_init::
.dbline -1
.dbline 355
; }
; /******************************************************
; D/A初始化函数
; ******************************************************/
; void da_init(void)
; {
.dbline 356
; cal_timer1(speed);
lds R16,_speed
lds R17,_speed+1
xcall _cal_timer1
.dbline 357
; PORTA|=(1<<DA_WR);
sbi 0x1b,1
.dbline 358
; PORTD|=(1<<DA_CS);
sbi 0x12,6
.dbline 359
; DDRA|=(1<<DA_WR);
sbi 0x1a,1
.dbline 360
; DDRD|=(1<<DA_CS)|(1<<DA_AB);
in R24,0x11
ori R24,192
out 0x11,R24
.dbline 361
; DDRC|=(1<<DA_SIN)|(1<<DA_COS);
in R24,0x14
ori R24,192
out 0x14,R24
.dbline 362
; DATA_OUT=0x00;
clr R2
out 0x18,R2
.dbline 363
; DATA_IO=0xff;
ldi R24,255
out 0x17,R24
.dbline 364
; timer1_init();
xcall _timer1_init
.dbline -2
L56:
.dbline 0 ; func end
ret
.dbend
.dbfunc e adc_init _adc_init fV
.even
_adc_init::
.dbline -1
.dbline 372
; }
;
;
; /****************************************************************
; A/D初始化
; ****************************************************************/
; void adc_init(void)
; {
.dbline 373
; ADMUX=0b00000000; //选择ADC0做AD输入
clr R2
out 0x7,R2
.dbline 374
; ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADATE); //允许AD转换,128分频
ldi R24,167
out 0x6,R24
.dbline -2
L57:
.dbline 0 ; func end
ret
.dbend
.dbfunc e adc_change _adc_change fV
; l -> R22
; g -> R20,R21
; s -> y+0
; j -> R12,R13
; k -> R10
; i -> R14
.even
_adc_change::
xcall push_gset5
sbiw R28,20
.dbline -1
.dbline 380
; }
;
;
;
; void adc_change(void)
; {
.dbline 387
; unsigned char i;
; unsigned char k;
; unsigned int j;
; unsigned int g;
; unsigned char l;
; unsigned int s[10];
; g=0;
clr R20
clr R21
.dbline 388
; for (l=0;l<10;l++)
clr R22
xjmp L62
L59:
.dbline 389
; {
.dbline 390
; for (k=0;k<10;k++)
clr R10
xjmp L66
L63:
.dbline 391
; {
.dbline 392
; ADCSRA|=(1<<ADSC);
sbi 0x6,6
.dbline 393
; i=ADCSRA;
in R14,0x6
xjmp L68
L67:
.dbline 395
.dbline 395
in R14,0x6
.dbline 395
L68:
.dbline 394
sbrs R14,4
rjmp L67
.dbline 396
in R12,0x4
in R13,0x5
.dbline 397
ldi R24,2
mul R24,R10
movw R30,R0
movw R24,R28
add R30,R24
adc R31,R25
std z+1,R13
std z+0,R12
.dbline 398
sbi 0x6,4
.dbline 399
L64:
.dbline 390
inc R10
L66:
.dbline 390
mov R24,R10
cpi R24,10
brlo L63
.dbline 400
; while ((i&(1<<ADIF))==0)
; {i=ADCSRA;}
; j=ADC;
; s[k]=j;
; ADCSRA|=(1<<ADIF);
; }
; ins(s,10);
ldi R18,10
movw R16,R28
xcall _ins
.dbline 401
; j=0;
clr R12
clr R13
.dbline 402
; for (k=0;k<5;k++)
clr R10
xjmp L73
L70:
.dbline 403
.dbline 404
ldi R24,2
mul R24,R10
movw R30,R0
movw R24,R28
adiw R24,4
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
add R12,R2
adc R13,R3
.dbline 405
L71:
.dbline 402
inc R10
L73:
.dbline 402
mov R24,R10
cpi R24,5
brlo L70
.dbline 406
ldi R18,5
ldi R19,0
movw R16,R12
xcall div16u
movw R12,R16
.dbline 407
add R20,R16
adc R21,R17
.dbline 408
L60:
.dbline 388
inc R22
L62:
.dbline 388
cpi R22,10
brsh X0
xjmp L59
X0:
.dbline 409
; {
; j=j+s[k+2];
; }
; j=j/5;
; g=g+j;
; }
; g=g/10;
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
.dbline 410
; g=g*6/10;
ldi R16,6
ldi R17,0
movw R18,R20
xcall empy16s
ldi R18,10
ldi R19,0
xcall div16u
movw R20,R16
.dbline 411
; if (g<=6)
ldi R24,6
ldi R25,0
cp R24,R16
cpc R25,R17
brlo L75
.dbline 412
; {g=1;}
.dbline 412
ldi R20,1
ldi R21,0
.dbline 412
xjmp L76
L75:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -