📄 p_test.s
字号:
in R2,0xc
sts _Sbufx,R2
.dbline 304
lds R2,_NowSbuf+1
sts _NowSbuf,R2
.dbline 305
lds R2,_NowSbuf+2
sts _NowSbuf+1,R2
.dbline 306
lds R2,_NowSbuf+3
sts _NowSbuf+2,R2
.dbline 307
lds R2,_NowSbuf+4
sts _NowSbuf+3,R2
.dbline 308
lds R2,_NowSbuf+5
sts _NowSbuf+4,R2
.dbline 309
lds R2,_NowSbuf+6
sts _NowSbuf+5,R2
.dbline 310
lds R2,_NowSbuf+7
sts _NowSbuf+6,R2
.dbline 311
lds R2,_NowSbuf+8
sts _NowSbuf+7,R2
.dbline 312
lds R2,_NowSbuf+9
sts _NowSbuf+8,R2
.dbline 313
lds R2,_NowSbuf+10
sts _NowSbuf+9,R2
.dbline 314
lds R2,_NowSbuf+11
sts _NowSbuf+10,R2
.dbline 315
lds R2,_NowSbuf+12
sts _NowSbuf+11,R2
.dbline 316
lds R2,_Sbufx
sts _NowSbuf+12,R2
.dbline 326
lds R24,_NowSbuf
cpi R24,67
brne L80
lds R24,_NowSbuf+1
cpi R24,70
brne L80
lds R24,_NowSbuf+2
cpi R24,77
brne L80
.dbline 327
.dbline 328
ldi R24,180
out 0x23,R24
.dbline 329
clr R2
clr R3
sts _TimeForSend+1,R3
sts _TimeForSend,R2
.dbline 330
ldi R24,10
out 0x25,R24
.dbline 331
L80:
.dbline -2
.dbline 366
;
; //---接收中断--//
; #pragma interrupt_handler Receive_using_interrupt:iv_USART_RX
; void Receive_using_interrupt(void)
; {
; //"SET- "-- AND --"CF"
; char i;
; Sbufx=UDR;
;
; NowSbuf[0]=NowSbuf[1];
; NowSbuf[1]=NowSbuf[2];
; NowSbuf[2]=NowSbuf[3];
; NowSbuf[3]=NowSbuf[4];
; NowSbuf[4]=NowSbuf[5];
; NowSbuf[5]=NowSbuf[6];
; NowSbuf[6]=NowSbuf[7];
; NowSbuf[7]=NowSbuf[8];
; NowSbuf[8]=NowSbuf[9];
; NowSbuf[9]=NowSbuf[10];
; NowSbuf[10]=NowSbuf[11];
; NowSbuf[11]=NowSbuf[12];
; NowSbuf[12]=Sbufx;
; /*
; if((NowSbuf[0]=='S')&&(NowSbuf[1]=='E')&&(NowSbuf[2]=='T'))
; {
; SET_flag=1;
; for(i=0;i<13;i++)
; ReceiveSbuf[i]=NowSbuf[i];
; }
; */
; //-SEND SIGNED
; if((NowSbuf[0]=='C')&&(NowSbuf[1]=='F')&&(NowSbuf[2]=='M'))
; {
; OCR2=180; //90;//0.2ms,
; TimeForSend=0; //30<=>12ms
; TCCR2=(1<<WGM21)|(1<<CS21); //8分频率 ,TCT比较输出MODE
; }
;
; // else SET_flag=0;
;
; /*
; if(Sbufx==CF[kr1]){kr1++; kr2+=2;}
; else if(Sbufx==SET[kr1]){kr1++; kr2--;}
;
; if((Sbufx=='C')||(Sbufx=='S'))
; {
; kr1=1;
; krec=0;
; ReceiveSbuf[0]=Sbufx;
; kr2=100;
; }
;
; // if(krec>18)kcr=0;
; if((Sbufx>9)&&(Sbufx<128))
; {
; if(krec<19) ReceiveSbuf[krec]=Sbufx;
; krec++;
; // UDR=Sbufx; ///把收到的马上发送给COMPUTER test only
; }
; */
; /*
; if((Sbufx=='M')&&(kr2>101)) //--同步定时信号,T2
; {
; kr2=100;
; TCNT2=0;
;
; //--PTR2000 SEND MODE--//
; // PTR2K_SEND(); //启动发送
; }
; */
;
; }
L55:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym l i 1 c
.dbend
.area vector(rom, abs)
.org 18
rjmp _Timer0_interrupt
.area text(rom, con, rel)
.dbfile E:\AVR\P_TEST\P_TEST.C
.dbfunc e Timer0_interrupt _Timer0_interrupt fV
.even
_Timer0_interrupt::
st -y,R24
st -y,R25
st -y,R30
in R24,0x3f
st -y,R24
.dbline -1
.dbline 373
.dbline 374
ldi R24,238
out 0x32,R24
.dbline 375
lds R24,_T0_Count
subi R24,255 ; addi 1
sts _T0_Count,R24
.dbline 377
lds R24,_TimeForCall
subi R24,255 ; addi 1
sts _TimeForCall,R24
.dbline 379
lds R24,_TimeForWDG
lds R25,_TimeForWDG+1
cpi R24,136
ldi R30,19
cpc R25,R30
brsh L85
.dbline 380
wdr
L85:
.dbline -2
.dbline 383
;
;
; ///====定时器0中断函数====//
; #pragma interrupt_handler Timer0_interrupt:iv_TIMER0_OVF
;
; void Timer0_interrupt(void)
; {
; TCNT0=238;//256-(baud/1024)/200; //定时0.005s
; T0_Count++;
;
; TimeForCall++;
;
; if( TimeForWDG<5000)
; WDR(); ///看门狗清零
;
;
; }
L84:
ld R24,y+
out 0x3f,R24
ld R30,y+
ld R25,y+
ld R24,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e Timer2_initial _Timer2_initial fV
.even
_Timer2_initial::
.dbline -1
.dbline 387
;
; //--定时器2精确定时用---//
; void Timer2_initial()
; {
.dbline 388
; OCR2=180;//90;//0.2ms--180=>0.4ms
ldi R24,180
out 0x23,R24
.dbline 390
; //=x1;
; TCNT2=0;
clr R2
out 0x24,R2
.dbline 391
; TIMSK|=(1<<OCIE2); //匹配中断使能
in R24,0x39
ori R24,128
out 0x39,R24
.dbline 393
; // TCCR2=(1<<WGM21)|(1<<CS21); //8分频率 ,TCT比较输出MODE
; TimeForSend=0;
clr R3
sts _TimeForSend+1,R3
sts _TimeForSend,R2
.dbline -2
.dbline 394
; }
L87:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 6
rjmp _Timer2_interrupt
.area text(rom, con, rel)
.dbfile E:\AVR\P_TEST\P_TEST.C
.dbfunc e Timer2_interrupt _Timer2_interrupt fV
.even
_Timer2_interrupt::
st -y,R2
st -y,R4
st -y,R5
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
.dbline -1
.dbline 399
.dbline 403
lds R24,_TimeForSend
lds R25,_TimeForSend+1
adiw R24,1
sts _TimeForSend+1,R25
sts _TimeForSend,R24
.dbline 406
lds R4,_NowSend
lds R5,_NowSend+1
sub R4,R24
sbc R5,R25
brne L89
X1:
.dbline 407
.dbline 410
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
sts _SendPoint+1,R25
sts _SendPoint,R24
.dbline 411
movw R30,R24
ldd R2,z+0
out 0xc,R2
.dbline 412
adiw R24,1
sts _SendPoint+1,R25
sts _SendPoint,R24
.dbline 415
L89:
.dbline -2
.dbline 424
;
; //---定时器2中断--//
; #pragma interrupt_handler Timer2_interrupt:iv_TIMER2_COMP
; void Timer2_interrupt(void)
; {
;
;
;
; TimeForSend++;
;
;
; if(!(NowSend-TimeForSend)) //定时时间到
; {
; //
;
; SendPoint=SendSbuf;
; UDR=*SendPoint; //启动发送
; SendPoint++;
;
;
; }
; /*
; if(!(NowSend-(TimeForSend-400)))
; {
; PTR2K_RECEIVE(); //延时100ms启动接收
; TimeForSend=0;
; TCCR2=0; //关定时器2
; }
; */
; }
L88:
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R5,y+
ld R4,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e ReadEEPROM _ReadEEPROM fV
; CRC -> R22
; temp -> R10
; k -> R12
; jk -> R20
.even
_ReadEEPROM::
rcall push_gset4
sbiw R28,2
.dbline -1
.dbline 430
; /*---***********************************
; 读EEPROM
; ***********************************
; */
; void ReadEEPROM()
; {
.dbline 432
; unsigned char jk,k,CRC,temp;
; CLI();
cli
.dbline 433
; EEPROMReadBytes(0, SendSbuf, 18);
ldi R24,18
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_SendSbuf
ldi R19,>_SendSbuf
clr R16
clr R17
rcall _EEPROMReadBytes
.dbline 434
; CRC=0;
clr R22
.dbline 436
;
; if(SendSbuf[0]=='S')
lds R24,_SendSbuf
cpi R24,83
breq X2
rjmp L92
X2:
.dbline 437
; {
.dbline 438
; if(!(SendSbuf[12]-0x31)) //频率选择
lds R24,_SendSbuf+12
subi R24,49
brne L94
.dbline 439
; {
.dbline 440
; PORTD|=(1<<PD4); //CS=1;
sbi 0x12,4
.dbline 441
; }
rjmp L95
L94:
.dbline 443
; else
; PORTD&=0XEF; //PD4=0;CS=0';
in R24,0x12
andi R24,239
out 0x12,R24
L95:
.dbline 446
;
;
; if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
lds R24,_SendSbuf+14
cpi R24,71
brne L97
.dbline 446
ldi R24,71
sts _SendSbuf+15,R24
rjmp L98
L97:
.dbline 447
; else SendSbuf[15]=0; //停止
clr R2
sts _SendSbuf+15,R2
L98:
.dbline 451
;
; //发送:T-001-015<CRC> /\: T-001-015<CRC>G --最后车发送
; //--求车辆等待时间 ---
; NowSend=SendSbuf[4]-0x30;
lds R24,_SendSbuf+4
clr R25
sbiw R24,48
sts _NowSend+1,R25
sts _NowSend,R24
.dbline 452
; NowSend*=10;
movw R18,R24
ldi R16,10
ldi R17,0
rcall empy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 453
; NowSend+=(SendSbuf[5]-0x30);
lds R24,_SendSbuf+5
clr R25
sbiw R24,48
movw R2,R16
add R2,R24
adc R3,R25
sts _NowSend+1,R3
sts _NowSend,R2
.dbline 455
; //NowSend*=10;
; NowSend+=(SendSbuf[6]-0x30);
lds R24,_SendSbuf+6
clr R25
sbiw R24,48
add R2,R24
adc R3,R25
sts _NowSend+1,R3
sts _NowSend,R2
.dbline 457
;
; NowSend*=36;
movw R18,R2
ldi R16,36
ldi R17,0
rcall empy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 458
; NowSend+=1000;
movw R24,R16
subi R24,24 ; offset = 1000
sbci R25,252
sts _NowSend+1,R25
sts _NowSend,R24
.dbline 459
; NowSend2=NowSend;
movw R2,R24
sts _NowSend2+1,R3
sts _NowSend2,R2
.dbline 461
;
; for(jk=2;jk<5;jk++) //把要发送的放在发送上
ldi R20,2
rjmp L108
L105:
.dbline 462
.dbline 465
ldi R24,<_SendSbuf+6
ldi R25,>_SendSbuf+6
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R10,z+0
.dbline 466
ldi R24,2
mul R24,R20
mov R24,R0
subi R24,2
mov R12,R24
.dbline 467
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R12
clr R31
add R30,R24
adc R31,R25
mov R24,R10
swap R24
andi R24,#0x0F
subi R24,208 ; addi 48
std z+0,R24
.dbline 468
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
eor R22,R2
.dbline 469
ldi R24,<_SendSbuf+1
ldi R25,>_SendSbuf+1
mov R30,R12
clr R31
add R30,R24
adc R31,R25
mov R24,R10
andi R24,15
subi R24,208 ; addi 48
std z+0,R24
.dbline 470
ldi R24,<_SendSbuf+1
ldi R25,>_SendSbuf+1
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
eor R22,R2
.dbline 472
L106:
.dbline 461
inc R20
L108:
.dbline 461
cpi R20,5
brsh X3
rjmp L105
X3:
.dbline 474
; {
; // SendSbuf[jk]=SendSbuf[jk+2];
; //CRC^=SendSbuf[jk];
; temp=SendSbuf[jk+6];
; k=2*(jk-1);
; SendSbuf[k]=(temp>>4)+0x30;
; CRC^=SendSbuf[k];
; SendSbuf[k+1]=(temp&0x0f)+0x30;
; CRC^=SendSbuf[k+1];
;
; }
;
; SendSbuf[10]=CRC; //jk=9;
sts _SendSbuf+10,R22
.dbline 475
; SendSbuf[11]=SendSbuf[15];
lds R2,_SendSbuf+15
sts _SendSbuf+11,R2
.dbline 476
; SendSbuf[12]=0;
clr R2
sts _SendSbuf+12,R2
.dbline 478
; //-----
; SendSbuf[0]='T';
ldi R24,84
sts _SendSbuf,R24
.dbline 479
; SendSbuf[1]='-';
ldi R24,45
sts _SendSbuf+1,R24
.dbline 483
;
;
;
; }//end if(SendSbuf[0]=='S')
rjmp L93
L92:
.dbline 484
; else{ //没有时候的默认值SET-001-000-0,1号车
.dbline 485
; jk=0;
clr R20
.dbline 486
; SendSbuf[jk++]='T';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,84
std z+0,R24
.dbline 487
; SendSbuf[jk++]='-';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,45
std z+0,R24
.dbline 488
; SendSbuf[jk++]='0';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,48
std z+0,R24
.dbline 489
; SendSbuf[jk++]='0';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,48
std z+0,R24
.dbline 490
; SendSbuf[jk++]='1';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,49
std z+0,R24
.dbline 491
; SendSbuf[jk++]='-';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,45
std z+0,R24
.dbline 492
; SendSbuf[jk++]='0';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,48
std z+0,R24
.dbline 493
; SendSbuf[jk++]='0';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,48
std z+0,R24
.dbline 494
; SendSbuf[jk++]='0';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,48
std z+0,R24
.dbline 495
; SendSbuf[jk++]='-';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,45
std z+0,R24
.dbline 496
; SendSbuf[jk++]='0';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldi R24,48
std z+0,R24
.dbline 497
; SendSbuf[jk++]='N';
mov R2,R20
clr R3
subi R20,255 ; addi 1
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -