📄 main.s
字号:
inc R18
L75:
.dbline 262
cpi R18,8
brlo L77
.dbline 269
; while(!rxd_flag);
; temp += Timer;
; rxd_flag = 0;
; Timer= 0;
; }
; temp = (temp>>3);
movw R2,R16
lsr R3
ror R2
lsr R3
ror R2
lsr R3
ror R2
movw R16,R2
.dbline 271
;
; return temp;
.dbline -2
L71:
.dbline 0 ; func end
ret
.dbsym r temp 16 i
.dbsym r i 18 c
.dbend
.dbfunc e Buz _Buz fV
.even
_Buz::
.dbline -1
.dbline 276
; }
;
;
; void Buz()
; {
.dbline 277
; Pwm_set(20,1);
ldi R18,1
ldi R16,20
rcall _Pwm_set
.dbline 278
; delay(15);
ldi R16,15
ldi R17,0
rcall _delay
.dbline 279
; Pwm_set(0,0);
clr R18
clr R16
rcall _Pwm_set
.dbline 280
; delay(20);
ldi R16,20
ldi R17,0
rcall _delay
.dbline 281
; Pwm_set(20,1);
ldi R18,1
ldi R16,20
rcall _Pwm_set
.dbline 282
; delay(15);
ldi R16,15
ldi R17,0
rcall _delay
.dbline 283
; Pwm_set(0,0);
clr R18
clr R16
rcall _Pwm_set
.dbline -2
L79:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Rev_Setup _Rev_Setup fV
.even
_Rev_Setup::
.dbline -1
.dbline 287
; }
;
; void Rev_Setup()
; {
.dbline 288
; e2rom[6] = EEPROM_read(6);
ldi R16,6
rcall _EEPROM_read
sts _e2rom+6,R16
.dbline 290
;
; if(key()>3)
rcall _key
ldi R24,3
cp R24,R16
brsh L82
.dbline 291
; {
.dbline 292
; if(e2rom[6]) e2rom[6]=0;
lds R2,_e2rom+6
tst R2
breq L84
.dbline 292
clr R2
sts _e2rom+6,R2
rjmp L85
L84:
.dbline 293
; else e2rom[6] =1;
ldi R24,1
sts _e2rom+6,R24
L85:
.dbline 294
; Buz();
rcall _Buz
L89:
.dbline 295
L90:
.dbline 295
; while(!(PINB&0x80)); // 等待按键松开
sbis 0x3,7
rjmp L89
.dbline 296
; }
L82:
.dbline 297
; EEPROM_write(6,e2rom[6]);
lds R18,_e2rom+6
ldi R16,6
rcall _EEPROM_write
.dbline -2
L80:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Setup _Setup fV
; i -> R20
.even
_Setup::
rcall push_gset1
.dbline -1
.dbline 306
; }
;
;
;
; /*---------------------------------------------------------------
; 中点设置
; ----------------------------------------------------------------*/
; void Setup()
; {
.dbline 310
; uchar i;
;
;
; if(key()>3) // 设置
rcall _key
ldi R24,3
cp R24,R16
brlo X4
rjmp L94
X4:
.dbline 311
; {
L96:
.dbline 312
; loop: Buz();
rcall _Buz
.dbline 313
; middle = compute(); // 中位设置
rcall _compute
sts _middle+1,R17
sts _middle,R16
.dbline 315
;
; delay(50);
ldi R16,50
ldi R17,0
rcall _delay
rjmp L98
L97:
.dbline 317
.dbline 318
rcall _LED_set
.dbline 319
ldi R16,40
ldi R17,0
rcall _delay
.dbline 320
L98:
.dbline 316
; while(key()<3)
rcall _key
cpi R16,3
brlo L97
.dbline 321
; {
; LED_set();
; delay(40);
; }
; Buz();
rcall _Buz
L100:
.dbline 322
L101:
.dbline 322
; while(!(PINB&0x80));
sbis 0x3,7
rjmp L100
.dbline 323
; high = compute(); // 高位设置
rcall _compute
sts _high+1,R17
sts _high,R16
.dbline 325
;
; delay(50);
ldi R16,50
ldi R17,0
rcall _delay
rjmp L104
L103:
.dbline 328
.dbline 329
rcall _LED_set
.dbline 330
rcall _LED_set
.dbline 331
ldi R16,40
ldi R17,0
rcall _delay
.dbline 332
L104:
.dbline 327
;
; while(key()<3)
rcall _key
cpi R16,3
brlo L103
.dbline 333
; {
; LED_set();
; LED_set();
; delay(40);
; }
; Buz();
rcall _Buz
L106:
.dbline 334
L107:
.dbline 334
; while(!(PINB&0x80));
sbis 0x3,7
rjmp L106
.dbline 335
; low = compute(); // W低位设置
rcall _compute
sts _low+1,R17
sts _low,R16
.dbline 336
; delay(50);
ldi R16,50
ldi R17,0
rcall _delay
.dbline 339
;
; // 设置数据正确存盘
; if((low>800&&low<1300)&&(middle>1350&&middle<1650)&&(high>1700&&high<2200))
ldi R24,800
ldi R25,3
lds R2,_low
lds R3,_low+1
cp R24,R2
cpc R25,R3
brlo X5
rjmp L124
X5:
movw R24,R2
cpi R24,20
ldi R30,5
cpc R25,R30
brlo X6
rjmp L124
X6:
ldi R24,1350
ldi R25,5
lds R2,_middle
lds R3,_middle+1
cp R24,R2
cpc R25,R3
brlo X7
rjmp L124
X7:
movw R24,R2
cpi R24,114
ldi R30,6
cpc R25,R30
brlo X8
rjmp L124
X8:
ldi R24,1700
ldi R25,6
lds R2,_high
lds R3,_high+1
cp R24,R2
cpc R25,R3
brlo X9
rjmp L124
X9:
movw R24,R2
cpi R24,152
ldi R30,8
cpc R25,R30
brlo X10
rjmp L124
X10:
.dbline 340
; {
.dbline 341
; PE1 = ((high-middle)*10)/256+2;
lds R2,_middle
lds R3,_middle+1
movw R18,R24
sub R18,R2
sbc R19,R3
ldi R16,10
ldi R17,0
rcall empy16s
movw R24,R16
mov R24,R25
clr R25
adiw R24,2
sts _PE1+1,R25
sts _PE1,R24
.dbline 342
; PE2 = ((middle-low )*10)/256+2;
lds R2,_low
lds R3,_low+1
lds R18,_middle
lds R19,_middle+1
sub R18,R2
sbc R19,R3
ldi R16,10
ldi R17,0
rcall empy16s
movw R24,R16
mov R24,R25
clr R25
adiw R24,2
sts _PE2+1,R25
sts _PE2,R24
.dbline 344
;
; e2rom[0] = low/256;
lds R2,_low
lds R3,_low+1
mov R2,R3
clr R3
sts _e2rom,R2
.dbline 345
; e2rom[1] = low%256;
lds R24,_low
lds R25,_low+1
andi R25,0
sts _e2rom+1,R24
.dbline 347
;
; e2rom[2] = high/256;
lds R2,_high
lds R3,_high+1
mov R2,R3
clr R3
sts _e2rom+2,R2
.dbline 348
; e2rom[3] = high%256;
lds R24,_high
lds R25,_high+1
andi R25,0
sts _e2rom+3,R24
.dbline 350
;
; e2rom[4] = middle/256;
lds R2,_middle
lds R3,_middle+1
mov R2,R3
clr R3
sts _e2rom+4,R2
.dbline 351
; e2rom[5] = middle%256;
lds R24,_middle
lds R25,_middle+1
andi R25,0
sts _e2rom+5,R24
.dbline 353
;
; Buz();
rcall _Buz
.dbline 354
; for(i=0;i<6;i++) // 写EEPOM
clr R20
rjmp L119
L116:
.dbline 355
; {
.dbline 356
; EEPROM_write(i,e2rom[i]);
ldi R24,<_e2rom
ldi R25,>_e2rom
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R18,z+0
mov R16,R20
rcall _EEPROM_write
.dbline 357
; delay(5);
ldi R16,5
ldi R17,0
rcall _delay
L120:
.dbline 358
L121:
.dbline 358
rcall _compute
cpi R16,70
ldi R30,5
cpc R17,R30
brlo L120
rcall _compute
ldi R24,1650
ldi R25,6
cp R24,R16
cpc R25,R17
brlo L120
.dbline 359
L117:
.dbline 354
inc R20
L119:
.dbline 354
cpi R20,6
brlo L116
.dbline 360
; while(compute()<1350||compute()>1650);
; }
; LED_set();
rcall _LED_set
.dbline 361
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 362
; LED_set();
rcall _LED_set
.dbline 363
; }
rjmp L110
X3:
.dbline 365
; else // 设置不对重来
; {
L123:
.dbline 367
.dbline 368
rcall _LED_set
.dbline 369
L124:
.dbline 366
; while(key()<3)
rcall _key
cpi R16,3
brlo L123
.dbline 370
; {
; LED_set();
; }
; delay(100);
ldi R16,100
ldi R17,0
rcall _delay
.dbline 371
; goto loop;
rjmp L96
L110:
.dbline 374
L94:
.dbline -2
L93:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e Read_E2rom _Read_E2rom fV
; i -> R20
.even
_Read_E2rom::
rcall push_gset1
.dbline -1
.dbline 379
;
; }
; }
; }
;
;
; void Read_E2rom(void)
; {
.dbline 382
; uchar i;
;
; for(i=0;i<7;i++) // 读EEPOM
clr R20
rjmp L130
L127:
.dbline 383
.dbline 384
mov R16,R20
rcall _EEPROM_read
ldi R24,<_e2rom
ldi R25,>_e2rom
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 385
ldi R16,5
ldi R17,0
rcall _delay
.dbline 386
L128:
.dbline 382
inc R20
L130:
.dbline 382
cpi R20,7
brlo L127
.dbline 388
; {
; e2rom[i] = EEPROM_read(i);
; delay(5);
; }
;
; low = e2rom[0]*256+e2rom[1]; // 油门低位
lds R18,_e2rom
clr R19
ldi R16,256
ldi R17,1
rcall empy16s
movw R2,R16
lds R4,_e2rom+1
clr R5
add R2,R4
adc R3,R5
sts _low+1,R3
sts _low,R2
.dbline 389
; high = e2rom[2]*256+e2rom[3]; // 高位
lds R18,_e2rom+2
clr R19
ldi R16,256
ldi R17,1
rcall empy16s
movw R2,R16
lds R4,_e2rom+3
clr R5
add R2,R4
adc R3,R5
sts _high+1,R3
sts _high,R2
.dbline 390
; middle = e2rom[4]*256+e2rom[5]; // 中位
lds R18,_e2rom+4
clr R19
ldi R16,256
ldi R17,1
rcall empy16s
movw R2,R16
lds R4,_e2rom+5
clr R5
add R2,R4
adc R3,R5
sts _middle+1,R3
sts _middle,R2
.dbline 391
; REV = e2rom[6]; // 倒车标致
lds R2,_e2rom+6
sts _REV,R2
.dbline 393
;
; if((low>800&&low<1300)&&(middle>1350&&middle<1650)&&(high>1700&&high<2200))
ldi R24,800
ldi R25,3
lds R2,_low
lds R3,_low+1
cp R24,R2
cpc R25,R3
brlo X11
rjmp L137
X11:
movw R24,R2
cpi R24,20
ldi R30,5
cpc R25,R30
brlo X12
rjmp L137
X12:
ldi R24,1350
ldi R25,5
lds R2,_middle
lds R3,_middle+1
cp R24,R2
cpc R25,R3
brlo X13
rjmp L137
X13:
movw R24,R2
cpi R24,114
ldi R30,6
cpc R25,R30
brsh L137
ldi R24,1700
ldi R25,6
lds R2,_high
lds R3,_high+1
cp R24,R2
cpc R25,R3
brsh L137
movw R24,R2
cpi R24,152
ldi R30,8
cpc R25,R30
brsh L137
.dbline 394
; { // 读起的数据正确
.dbline 395
; PE1 = ((high-middle)*10)/256+2;
lds R2,_middle
lds R3,_middle+1
movw R18,R24
sub R18,R2
sbc R19,R3
ldi R16,10
ldi R17,0
rcall empy16s
movw R24,R16
mov R24,R25
clr R25
adiw R24,2
sts _PE1+1,R25
sts _PE1,R24
.dbline 396
; PE2 = ((middle-low )*10)/256+2;
lds R2,_low
lds R3,_low+1
lds R18,_middle
lds R19,_middle+1
sub R18,R2
sbc R19,R3
ldi R16,10
ldi R17,0
rcall empy16s
movw R24,R16
mov R24,R25
clr R25
adiw R24,2
sts _PE2+1,R25
sts _PE2,R24
.dbline 397
; }
rjmp L138
L137:
.dbline 399
.dbline 400
ldi R24,23
ldi R25,0
sts _PE1+1,R25
sts _PE1,R24
.dbline 401
sts _PE2+1,R25
sts _PE2,R24
.dbline 402
ldi R24,1500
ldi R25,5
sts _middle+1,R25
sts _middle,R24
.dbline 403
ldi R24,1100
ldi R25,4
sts _low+1,R25
sts _low,R24
.dbline 404
ldi R24,1900
ldi R25,7
sts _high+1,R25
sts _high,R24
.dbline 405
ldi R24,1
sts _REV,R24
.dbline 406
L138:
.dbline -2
L126:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.area vector(rom, abs)
.org 2
rjmp _int0_isr
.area text(rom, con, rel)
.dbfile E:\TWINTI~1\main.c
.dbfunc e int0_isr _int0_isr fV
.even
_int0_isr::
st -y,R2
st -y,R3
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 416
; else // 读起的数据不正确使用默认值
; {
; PE1 = 23;
; PE2 = 23;
; middle = 1500;
; low = 1100;
; high = 1900;
; REV = 1;
; }
; }
;
;
;
; /*---------------------------------------------------------------
; INT0 中断油门接收
; ----------------------------------------------------------------*/
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
.dbline 417
; if(EICRA==0x03) // 上升沿开始记时
lds R24,105
cpi R24,3
brne L140
.dbline 418
; {
.dbline 419
; TCNT1H = 0x00;
clr R2
sts 133,R2
.dbline 420
; TCNT1L = 0x00;
sts 132,R2
.dbline 421
; TCCR1B = 0x02; //start Timer1
ldi R24,2
sts 129,R24
.dbline 422
; EICRA = 0x02;
sts 105,R24
.dbline 423
; }
rjmp L141
L140:
.dbline 424
; else if(EICRA==0x02) // 下降沿读计时数据
lds R24,105
cpi R24,2
brne L142
.dbline 425
; {
.dbline 426
; time.data[0] = TCNT1L;
lds R2,132
sts _time,R2
.dbline 427
; time.data[1] = TCNT1H;
lds R2,133
sts _time+1,R2
.dbline 428
; Timer = time.temp;
lds R2,_time
lds R3,_time+1
sts _Timer+1,R3
sts _Timer,R2
.dbline 429
; TCNT1H = 0x00;
clr R2
sts 133,R2
.dbline 430
; TCNT1L = 0x00;
sts 132,R2
.dbline 431
; EICRA = 0x03;
ldi R24,3
sts 105,R24
.dbline 432
; rxd_flag =1; // 置接收 flag
ldi R24,1
sts _rxd_flag,R24
.dbline 433
; }
L142:
L141:
.dbline -2
L139:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 442
; }
;
;
; /*---------------------------------------------------------------
; main
; ----------------------------------------------------------------*/
;
; void main(void)
; {
.dbline 443
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 445
;
; init_devices(); // 初始化
rcall _init_devices
.dbline 447
;
; Rev_Setup();
rcall _Rev_Setup
.dbline 449
;
; Read_E2rom(); // 读EEPROM
rcall _Read_E2rom
L146:
.dbline 451
L147:
.dbline 451
;
; while(!rxd_flag); // 等待油门信号
lds R2,_rxd_flag
tst R2
breq L146
.dbline 452
; Buz();
rcall _Buz
.dbline 454
;
; LED_set();
rcall _LED_set
.dbline 455
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 456
; LED_set();
rcall _LED_set
.dbline 458
;
; rxd_flag = 0 ;
clr R2
sts _rxd_flag,R2
rjmp L150
L149:
.dbline 461
.dbline 462
rcall _Gun_set
.dbline 463
rcall _Setup
.dbline 464
L150:
.dbline 460
rjmp L149
X14:
.dbline -2
L145:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile E:\TWINTI~1\main.c
_time::
.blkb 2
.dbunion 0 2 .1
.dbfield 0 temp i
.dbfield 0 data A[2:2]c
.dbend
.dbsym e time _time S[.1]
_heat::
.blkb 1
.dbsym e heat _heat c
_power::
.blkb 1
.dbsym e power _power c
_REV::
.blkb 1
.dbsym e REV _REV c
_low::
.blkb 2
.dbsym e low _low i
_middle::
.blkb 2
.dbsym e middle _middle i
_high::
.blkb 2
.dbsym e high _high i
_Timer::
.blkb 2
.dbsym e Timer _Timer i
_PWM::
.blkb 1
.dbsym e PWM _PWM c
_rxd_flag::
.blkb 1
.dbsym e rxd_flag _rxd_flag c
_mode::
.blkb 1
.dbsym e mode _mode c
_PE2::
.blkb 2
.dbsym e PE2 _PE2 i
_PE1::
.blkb 2
.dbsym e PE1 _PE1 i
_e2rom::
.blkb 7
.dbsym e e2rom _e2rom A[7:7]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -