📄 mainbd.s
字号:
rjmp _Timer2_interrupt
.area text(rom, con, rel)
.dbfile E:\AVR\P_TEST\MainBd.c
.dbfunc e Timer2_interrupt _Timer2_interrupt fV
.even
_Timer2_interrupt::
rcall push_lset
.dbline -1
.dbline 320
;
; //---定时器2中断--//
; #pragma interrupt_handler Timer2_interrupt:iv_TIMER2_COMP
; void Timer2_interrupt(void)
; {
.dbline 322
;
; TimeForSend++;
lds R24,_TimeForSend
lds R25,_TimeForSend+1
adiw R24,1
sts _TimeForSend+1,R25
sts _TimeForSend,R24
.dbline 323
; if(!(NowSend-TimeForSend-100)) PTR2K_SEND(); //启动发送
mov R2,R24
mov R3,R25
lds R24,_NowSend
lds R25,_NowSend+1
sub R24,R2
sbc R25,R3
subi R24,100
sbci R25,0
brne L46
X1:
.dbline 323
rcall _PTR2K_SEND
L46:
.dbline 325
lds R2,_TimeForSend
lds R3,_TimeForSend+1
lds R4,_NowSend
lds R5,_NowSend+1
sub R4,R2
sbc R5,R3
brne L48
X2:
.dbline 326
.dbline 329
ldi R24,3
out 0x17,R24
.dbline 330
in R24,0x18
andi R24,253
out 0x18,R24
.dbline 333
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
sts _SendPoint+1,R25
sts _SendPoint,R24
.dbline 334
mov R30,R24
mov R31,R25
ldd R2,z+0
out 0xc,R2
.dbline 335
adiw R24,1
sts _SendPoint+1,R25
sts _SendPoint,R24
.dbline 337
clr R2
clr R3
sts _TimeForSend+1,R3
sts _TimeForSend,R2
.dbline 339
L48:
.dbline -2
.dbline 340
;
; if(!(NowSend-TimeForSend)) //定时时间到
; {
; // TCCR2=0; //关定时器2
; //---------选择PTR2000+ 发送---PB1=0;PB0=1
; DDRB=0X03;
; PORTB&=0XFD;
; //---------------------------
;
; SendPoint=SendSbuf;
; UDR=*SendPoint; //启动发送
; SendPoint++;
;
; TimeForSend=0;
;
; }
; }
L45:
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e ReadEEPROM _ReadEEPROM fV
; CRC -> R22
; jk -> R20
.even
_ReadEEPROM::
rcall push_gset2
sbiw R28,2
.dbline -1
.dbline 346
; /*---***********************************
; 读EEPROM
; ***********************************
; */
; void ReadEEPROM()
; {
.dbline 348
; unsigned char jk,CRC;
; CLI();
cli
.dbline 349
; 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 350
; CRC=0;
clr R22
.dbline 352
;
; if(SendSbuf[0]=='S')
lds R24,_SendSbuf
cpi R24,83
breq X3
rjmp L51
X3:
.dbline 353
; {
.dbline 354
; if(!(SendSbuf[12]-0x30)) //频率选择
lds R24,_SendSbuf+12
subi R24,48
brne L53
.dbline 355
; {
.dbline 356
; PORTD&=0XEF; //PD4=0;CS=0';
in R24,0x12
andi R24,239
out 0x12,R24
.dbline 357
; }
rjmp L54
L53:
.dbline 359
; else
; PORTD|=(1<<PD4); //CS=1;
sbi 0x12,4
L54:
.dbline 362
;
;
; if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
lds R24,_SendSbuf+14
cpi R24,71
brne L56
.dbline 362
ldi R24,71
sts _SendSbuf+15,R24
rjmp L57
L56:
.dbline 363
; else SendSbuf[15]=0; //停止
clr R2
sts _SendSbuf+15,R2
L57:
.dbline 366
;
; //发送:T-001-015<CRC> /\: T-001-015<CRC>G --最后车发送
; for(jk=0;jk<9;jk++) //把要发送的放在发送上
clr R20
rjmp L64
L61:
.dbline 367
.dbline 368
ldi R24,<_SendSbuf+2
ldi R25,>_SendSbuf+2
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 369
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
eor R22,R2
.dbline 370
L62:
.dbline 366
inc R20
L64:
.dbline 366
cpi R20,9
brlo L61
.dbline 372
; {
; SendSbuf[jk]=SendSbuf[jk+2];
; CRC^=SendSbuf[jk];
; }
;
; SendSbuf[jk]=CRC; //jk=9;
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R22
.dbline 373
; SendSbuf[10]=SendSbuf[15];
lds R2,_SendSbuf+15
sts _SendSbuf+10,R2
.dbline 374
; SendSbuf[11]=0;
clr R2
sts _SendSbuf+11,R2
.dbline 376
;
; NowSend=SendSbuf[2]-0x30;
lds R24,_SendSbuf+2
clr R25
sbiw R24,48
sts _NowSend+1,R25
sts _NowSend,R24
.dbline 377
; NowSend*=10;
mov R18,R24
mov R19,R25
ldi R16,10
ldi R17,0
rcall mpy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 378
; NowSend+=(SendSbuf[3]-0x30);
lds R24,_SendSbuf+3
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 379
; NowSend*=10;
mov R18,R2
mov R19,R3
ldi R16,10
ldi R17,0
rcall mpy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 380
; NowSend+=(SendSbuf[4]-0x30);
lds R24,_SendSbuf+4
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 382
; //===
; NowSend*=36;
mov R18,R2
mov R19,R3
ldi R16,36
ldi R17,0
rcall mpy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 384
;
; }//end if(SendSbuf[0]=='S')
rjmp L52
L51:
.dbline 385
; else{ //没有时候的默认值SET-001-000-0,1号车
.dbline 386
; jk=0;
clr R20
.dbline 387
; 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 388
; 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 389
; 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 390
; 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 391
; 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 392
; 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 393
; 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 394
; 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 395
; 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 396
; 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 397
; 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 398
; 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
ldi R24,78
std z+0,R24
.dbline 400
;
; NowSend=36;///???????????????????????????
ldi R24,36
ldi R25,0
sts _NowSend+1,R25
sts _NowSend,R24
.dbline 402
;
; PORTD&=0XEF; //PD4=0;CS=0';
in R24,0x12
andi R24,239
out 0x12,R24
.dbline 404
;
; }
L52:
.dbline 406
;
; SEI();
sei
.dbline -2
.dbline 407
; }
L50:
adiw R28,2
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r CRC 22 c
.dbsym r jk 20 c
.dbend
.dbfunc e WRITEEEPROM _WRITEEEPROM fV
; IDX -> R10
; CRC -> R22
; jk -> R20
.even
_WRITEEEPROM::
rcall push_gset3
sbiw R28,2
.dbline -1
.dbline 409
; void WRITEEEPROM()
; {
.dbline 411
; unsigned char jk,CRC,IDX;
; CLI();
cli
.dbline 412
; EEPROMWriteBytes(0, ReceiveSbuf, 18);
ldi R24,18
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_ReceiveSbuf
ldi R19,>_ReceiveSbuf
clr R16
clr R17
rcall _EEPROMWriteBytes
.dbline 413
; 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 414
; CRC=0;
clr R22
.dbline 416
;
; if(SendSbuf[0]=='S')
lds R24,_SendSbuf
cpi R24,83
breq X4
rjmp L73
X4:
.dbline 417
; {
.dbline 418
; if(SendSbuf[12]-0x30) //频率选择
lds R24,_SendSbuf+12
subi R24,48
breq L75
.dbline 419
; {
.dbline 420
; PORTD|=(1<<PD4); //CS=1;
sbi 0x12,4
.dbline 421
; }
rjmp L76
L75:
.dbline 423
; else
; PORTD&=0XEF; //PD4=0;CS=0';
in R24,0x12
andi R24,239
out 0x12,R24
L76:
.dbline 426
;
;
; if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
lds R24,_SendSbuf+14
cpi R24,71
brne L78
.dbline 426
ldi R24,71
sts _SendSbuf+15,R24
rjmp L79
L78:
.dbline 427
; else SendSbuf[15]=0; //停止
clr R2
sts _SendSbuf+15,R2
L79:
.dbline 430
;
; //发送:T-001-015<CRC> /\: T-001-015<CRC>G --最后车发送
; for(jk=0;jk<9;jk++) //把要发送的放在发送上
clr R20
rjmp L86
L83:
.dbline 431
.dbline 432
ldi R24,<_SendSbuf+2
ldi R25,>_SendSbuf+2
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 433
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
eor R22,R2
.dbline 434
L84:
.dbline 430
inc R20
L86:
.dbline 430
cpi R20,9
brlo L83
.dbline 437
; {
; SendSbuf[jk]=SendSbuf[jk+2];
; CRC^=SendSbuf[jk];
; }
; //------------------写 IC 卡= 司机号--------
; // I2C_Write(0,0X33); 12,14,16 IC卡存放处
; if(!(PIND&0X08)) // IC IN
sbic 0x10,3
rjmp L88
.dbline 438
; {
.dbline 439
; IDX=SendSbuf[6];
lds R10,_SendSbuf+6
.dbline 440
; I2C_Write(12,IDX);
mov R18,R10
ldi R16,12
rcall _I2C_Write
.dbline 441
; sdelay(200);
ldi R16,200
rcall _sdelay
.dbline 442
; IDX=SendSbuf[7];
lds R10,_SendSbuf+7
.dbline 443
; I2C_Write(14,IDX);
mov R18,R10
ldi R16,14
rcall _I2C_Write
.dbline 444
; sdelay(200);
ldi R16,200
rcall _sdelay
.dbline 445
; IDX=SendSbuf[8];
lds R10,_SendSbuf+8
.dbline 446
; I2C_Write(16,IDX);
mov R18,R10
ldi R16,16
rcall _I2C_Write
.dbline 447
; sdelay(200);
ldi R16,200
rcall _sdelay
.dbline 448
; }
L88:
.dbline 452
;
; //-----------------------------------------
;
; SendSbuf[jk]=CRC; //jk=9;
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R22
.dbline 453
; SendSbuf[++jk]=SendSbuf[15];
mov R24,R20
subi R24,255 ; addi 1
mov R2,R24
mov R20,R24
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
lds R2,_SendSbuf+15
std z+0,R2
.dbline 454
; SendSbuf[++jk]=0;
mov R24,R20
subi R24,255 ; addi 1
mov R2,R24
mov R20,R24
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R2
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 455
; NowSend=SendSbuf[2]-0x30;
lds R24,_SendSbuf+2
clr R25
sbiw R24,48
sts _NowSend+1,R25
sts _NowSend,R24
.dbline 456
; NowSend*=10;
mov R18,R24
mov R19,R25
ldi R16,10
ldi R17,0
rcall mpy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 457
; NowSend+=(SendSbuf[3]-0x30);
lds R24,_SendSbuf+3
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 458
; NowSend*=10;
mov R18,R2
mov R19,R3
ldi R16,10
ldi R17,0
rcall mpy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 459
; NowSend+=(SendSbuf[4]-0x30);
lds R24,_SendSbuf+4
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 460
; NowSend*=36;
mov R18,R2
mov R19,R3
ldi R16,36
ldi R17,0
rcall mpy16s
sts _NowSend+1,R17
sts _NowSend,R16
.dbline 462
;
; }//end if(SendSbuf[0]=='S')
L73:
.dbline 465
;
;
; SEI();
sei
.dbline -2
.dbline 466
; }
L72:
adiw R28,2
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r IDX 10 c
.dbsym r CRC 22 c
.dbsym r jk 20 c
.dbend
.dbfunc e PTR2K_SEND _PTR2K_SEND fV
.even
_PTR2K_SEND::
.dbline -1
.dbline 474
;
;
; /************************************************************
; PTR2000 SET FUNC
; *******************************************************
; */
; void PTR2K_SEND()
; {
.dbline 475
; PORTD|=(1<<PD6)|(1<<PD5);
in R24,0x12
ori R24,96
out 0x12,R24
.dbline -2
.dbline 476
; }
L97:
.dbline 0 ; func end
ret
.dbend
.dbfunc e PTR2K_RECEIVE _PTR2K_RECEIVE fV
.even
_PTR2K_RECEIVE::
.dbline -1
.dbline 479
;
; void PTR2K_RECEIVE()
; {
.dbline 480
; PORTD|=(1<<PD6)|(1<<PD5);
in R24,0x12
ori R24,96
out 0x12,R24
.dbline 481
; PORTD&=0XBF;
in R24,0x12
andi R24,191
out 0x12,R24
.dbline -2
.dbline 483
; //CS=0/1 在SET-后就设定好,以后不要动
; }
L98:
.dbline 0 ; func end
ret
.dbend
.dbfunc e sdelay _sdelay fV
; k -> R16
.even
_sdelay::
.dbline -1
.dbline 495
;
; /********************************
; I2C 模拟
;
; *************************************************************/
; //--i2c \
;
; //#define Start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
; //#define Stop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
; //#define Wait() {while(!(TWCR&(1<<TWINT)));}
; void sdelay(unsigned char k)
; {
L100:
.dbline 496
L101:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -