📄 test2.s
字号:
.dbend
.area vector(rom, abs)
.org 22
rjmp _Receive_using_interrupt
.area text(rom, con, rel)
.dbfile E:\AVR\P_TEST\testAVR\TEST2.C
.dbfunc e Receive_using_interrupt _Receive_using_interrupt fV
; i -> R16
.even
_Receive_using_interrupt::
st -y,R2
st -y,R3
st -y,R16
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
.dbline -1
.dbline 304
;
; //---接收中断--//
; #pragma interrupt_handler Receive_using_interrupt:iv_USART_RX
; void Receive_using_interrupt(void)
; {
.dbline 307
; //"SET- "-- AND --"CF"
; char i;
; Sbufx=UDR;
in R2,0xc
sts _Sbufx,R2
.dbline 309
;
; NowSbuf[0]=NowSbuf[1];
lds R2,_NowSbuf+1
sts _NowSbuf,R2
.dbline 310
; NowSbuf[1]=NowSbuf[2];
lds R2,_NowSbuf+2
sts _NowSbuf+1,R2
.dbline 311
; NowSbuf[2]=NowSbuf[3];
lds R2,_NowSbuf+3
sts _NowSbuf+2,R2
.dbline 312
; NowSbuf[3]=NowSbuf[4];
lds R2,_NowSbuf+4
sts _NowSbuf+3,R2
.dbline 313
; NowSbuf[4]=NowSbuf[5];
lds R2,_NowSbuf+5
sts _NowSbuf+4,R2
.dbline 314
; NowSbuf[5]=NowSbuf[6];
lds R2,_NowSbuf+6
sts _NowSbuf+5,R2
.dbline 315
; NowSbuf[6]=NowSbuf[7];
lds R2,_NowSbuf+7
sts _NowSbuf+6,R2
.dbline 316
; NowSbuf[7]=NowSbuf[8];
lds R2,_NowSbuf+8
sts _NowSbuf+7,R2
.dbline 317
; NowSbuf[8]=NowSbuf[9];
lds R2,_NowSbuf+9
sts _NowSbuf+8,R2
.dbline 318
; NowSbuf[9]=NowSbuf[10];
lds R2,_NowSbuf+10
sts _NowSbuf+9,R2
.dbline 319
; NowSbuf[10]=NowSbuf[11];
lds R2,_NowSbuf+11
sts _NowSbuf+10,R2
.dbline 320
; NowSbuf[11]=NowSbuf[12];
lds R2,_NowSbuf+12
sts _NowSbuf+11,R2
.dbline 321
; NowSbuf[12]=Sbufx;
lds R2,_Sbufx
sts _NowSbuf+12,R2
.dbline 322
; if((NowSbuf[0]=='S')&&(NowSbuf[1]=='E')&&(NowSbuf[2]=='T'))
lds R24,_NowSbuf
cpi R24,83
brne L92
lds R24,_NowSbuf+1
cpi R24,69
brne L92
lds R24,_NowSbuf+2
cpi R24,84
brne L92
.dbline 323
; {
.dbline 324
; SET_flag=1;
ldi R24,1
sts _SET_flag,R24
.dbline 325
; for(i=0;i<13;i++)
clr R16
rjmp L99
L96:
.dbline 326
ldi R24,<_NowSbuf
ldi R25,>_NowSbuf
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_ReceiveSbuf
ldi R25,>_ReceiveSbuf
mov R30,R16
clr R31
add R30,R24
adc R31,R25
std z+0,R2
L97:
.dbline 325
inc R16
L99:
.dbline 325
cpi R16,13
brlo L96
.dbline 329
; ReceiveSbuf[i]=NowSbuf[i];
;
;
; }
L92:
.dbline 331
lds R24,_NowSbuf
cpi R24,67
brne L100
lds R24,_NowSbuf+1
cpi R24,70
brne L100
lds R24,_NowSbuf+2
cpi R24,77
brne L100
.dbline 332
.dbline 333
ldi R24,180
out 0x23,R24
.dbline 334
clr R2
clr R3
sts _TimeForSend+1,R3
sts _TimeForSend,R2
.dbline 335
ldi R24,10
out 0x25,R24
.dbline 336
L100:
.dbline -2
.dbline 371
; //-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(); //启动发送
; }
; */
;
; }
L67:
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R16,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r i 16 c
.dbend
.area vector(rom, abs)
.org 18
rjmp _Timer0_interrupt
.area text(rom, con, rel)
.dbfile E:\AVR\P_TEST\testAVR\TEST2.C
.dbfunc e Timer0_interrupt _Timer0_interrupt fV
.even
_Timer0_interrupt::
st -y,R24
st -y,R25
in R24,0x3f
st -y,R24
.dbline -1
.dbline 378
;
;
; ///====定时器0中断函数====//
; #pragma interrupt_handler Timer0_interrupt:iv_TIMER0_OVF
;
; void Timer0_interrupt(void)
; {
.dbline 379
; TCNT0=238;//256-(baud/1024)/200; //定时0.005s
ldi R24,238
out 0x32,R24
.dbline 380
; T0_Count++;
lds R24,_T0_Count
subi R24,255 ; addi 1
sts _T0_Count,R24
.dbline 382
;
; TimeForCall++;
lds R24,_TimeForCall
subi R24,255 ; addi 1
sts _TimeForCall,R24
.dbline 386
;
;
; // if(TimeForCall>596)
; {//PTR2000,从接收改为发送//
.dbline 388
;
; }
.dbline -2
.dbline 390
;
; }
L104:
ld R24,y+
out 0x3f,R24
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 394
;
; //--定时器2精确定时用---//
; void Timer2_initial()
; {
.dbline 395
; OCR2=180;//90;//0.2ms--180=>0.4ms
ldi R24,180
out 0x23,R24
.dbline 397
; //=x1;
; TCNT2=0;
clr R2
out 0x24,R2
.dbline 398
; TIMSK|=(1<<OCIE2); //匹配中断使能
in R24,0x39
ori R24,128
out 0x39,R24
.dbline 400
; // TCCR2=(1<<WGM21)|(1<<CS21); //8分频率 ,TCT比较输出MODE
; TimeForSend=0;
clr R3
sts _TimeForSend+1,R3
sts _TimeForSend,R2
.dbline -2
.dbline 401
; }
L105:
.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\testAVR\TEST2.C
.dbfunc e Timer2_interrupt _Timer2_interrupt fV
.even
_Timer2_interrupt::
rcall push_lset
.dbline -1
.dbline 406
;
; //---定时器2中断--//
; #pragma interrupt_handler Timer2_interrupt:iv_TIMER2_COMP
; void Timer2_interrupt(void)
; {
.dbline 410
; //unsigned int nowSend;
;
; // nowSend=NowSend*30-1;
; TimeForSend++;
lds R24,_TimeForSend
lds R25,_TimeForSend+1
adiw R24,1
sts _TimeForSend+1,R25
sts _TimeForSend,R24
.dbline 413
; // PORTC=0XFF; ///test USE NowSend
;
; if(!(NowSend-TimeForSend-400))
mov R2,R24
mov R3,R25
lds R24,_NowSend
lds R25,_NowSend+1
sub R24,R2
sbc R25,R3
subi R24,144
sbci R25,1
brne L107
X1:
.dbline 414
; PTR2K_SEND(); //提前 100ms启动发送
rcall _PTR2K_SEND
L107:
.dbline 416
;
; if(!(NowSend-TimeForSend)) //定时时间到
lds R2,_TimeForSend
lds R3,_TimeForSend+1
lds R4,_NowSend
lds R5,_NowSend+1
sub R4,R2
sbc R5,R3
brne L109
X2:
.dbline 417
; {
.dbline 420
; //
;
; SendPoint=SendSbuf;
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
sts _SendPoint+1,R25
sts _SendPoint,R24
.dbline 421
; UDR=*SendPoint; //启动发送
mov R30,R24
mov R31,R25
ldd R2,z+0
out 0xc,R2
.dbline 422
; SendPoint++;
adiw R24,1
sts _SendPoint+1,R25
sts _SendPoint,R24
.dbline 431
;
;
;
; // TimeForSend=0;
; ///test use
; //UDR=NowSend>>8;
; // PORTC=0;
; //PORTC=~PORTC;
; }
L109:
.dbline 432
lds R24,_TimeForSend
lds R25,_TimeForSend+1
subi R24,144
sbci R25,1
lds R2,_NowSend
lds R3,_NowSend+1
sub R2,R24
sbc R3,R25
brne L111
X3:
.dbline 433
.dbline 434
rcall _PTR2K_RECEIVE
.dbline 435
clr R2
clr R3
sts _TimeForSend+1,R3
sts _TimeForSend,R2
.dbline 436
out 0x25,R2
.dbline 437
L111:
.dbline -2
.dbline 438
; if(!(NowSend-(TimeForSend-400)))
; {
; PTR2K_RECEIVE(); //延时100ms启动接收
; TimeForSend=0;
; TCCR2=0; //关定时器2
; }
; }
L106:
rcall pop_lset
.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 444
; /*---***********************************
; 读EEPROM
; ***********************************
; */
; void ReadEEPROM()
; {
.dbline 446
; unsigned char jk,k,CRC,temp;
; CLI();
cli
.dbline 447
; 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 448
; CRC=0;
clr R22
.dbline 450
;
; if(SendSbuf[0]=='S')
lds R24,_SendSbuf
cpi R24,83
breq X4
rjmp L114
X4:
.dbline 451
; {
.dbline 452
; if(!(SendSbuf[12]-0x31)) //频率选择
lds R24,_SendSbuf+12
subi R24,49
brne L116
.dbline 453
; {
.dbline 454
; PORTD|=(1<<PD4); //CS=1;
sbi 0x12,4
.dbline 455
; }
rjmp L117
L116:
.dbline 457
; else
; PORTD&=0XEF; //PD4=0;CS=0';
in R24,0x12
andi R24,239
out 0x12,R24
L117:
.dbline 460
;
;
; if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
lds R24,_SendSbuf+14
cpi R24,71
brne L119
.dbline 460
ldi R24,71
sts _SendSbuf+15,R24
rjmp L120
L119:
.dbline 461
; else SendSbuf[15]=0; //停止
clr R2
sts _SendSbuf+15,R2
L120:
.dbline 465
;
; //发送: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 466
; NowSend*=10;
mov R18,R24
mov R19,R25
ldi R16,10
ldi R17,0
rcall mpy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 467
; NowSend+=(SendSbuf[5]-0x30);
lds R24,_SendSbuf+5
clr R25
sbiw R24,48
mov R2,R16
mov R3,R17
add R2,R24
adc R3,R25
sts _NowSend+1,R3
sts _NowSend,R2
.dbline 469
; //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 471
;
; NowSend*=36;
mov R18,R2
mov R19,R3
ldi R16,36
ldi R17,0
rcall mpy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 472
; NowSend+=1000;
mov R24,R16
mov R25,R17
subi R24,24 ; offset = 1000
sbci R25,252
sts _NowSend+1,R25
sts _NowSend,R24
.dbline 473
; NowSend2=NowSend;
mov R2,R24
mov R3,R25
sts _NowSend2+1,R3
sts _NowSend2,R2
.dbline 475
;
; for(jk=2;jk<5;jk++) //把要发送的放在发送上
ldi R20,2
rjmp L130
L127:
.dbline 476
.dbline 479
ldi R24,<_SendSbuf+6
ldi R25,>_SendSbuf+6
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R10,z+0
.dbline 480
mov R24,R20
subi R24,1
mov R12,R24
lsl R12
.dbline 481
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 482
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 483
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 484
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 486
L128:
.dbline 475
inc R20
L130:
.dbline 475
cpi R20,5
brsh X5
rjmp L127
X5:
.dbline 488
; {
; // 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 489
; SendSbuf[11]=SendSbuf[15];
lds R2,_SendSbuf+15
sts _SendSbuf+11,R2
.dbline 490
; SendSbuf[12]=0;
clr R2
sts _SendSbuf+12,R2
.dbline 492
; //-----
; SendSbuf[0]='T';
ldi R24,84
sts _SendSbuf,R24
.dbline 493
; SendSbuf[1]='-';
ldi R24,45
sts _SendSbuf+1,R24
.dbline 497
;
;
;
; }//end if(SendSbuf[0]=='S')
rjmp L115
L114:
.dbline 498
; else{ //没有时候的默认值SET-001-000-0,1号车
.dbline 499
; jk=0;
clr R20
.dbline 500
; 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 501
; 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 502
; 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 503
; 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 504
; 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 505
; 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -