📄 main.s
字号:
.dbline 550
; //Delay100();
; delay_nus(600);
ldi R16,600
ldi R17,2
xcall _delay_nus
.dbline 551
; NRF_DDR&=~(1<<DATA);
cbi 0x14,5
.dbline -2
L69:
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
_TxAddress::
.blkb 2
.area idata
.byte 204,204
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
.blkb 2
.area idata
.byte 204,204
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
.dbsym e TxAddress _TxAddress A[4:4]c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
.dbfunc e nRF2401_TxPacket _nRF2401_TxPacket fV
; variable2 -> R20
; i -> R22,R23
; TxBuf -> R10,R11
.even
_nRF2401_TxPacket::
xcall push_gset3
movw R10,R16
.dbline -1
.dbline 558
; }
;
; //接收方通道硬件地址
; unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};
; //nRF2401 数据发送函数
; void nRF2401_TxPacket(unsigned char TxBuf[])
; {
.dbline 562
; int i;
; unsigned char variable2;
; //CE=1;
; CE_SET();
.dbline 562
sbi 0x15,1
.dbline 562
.dbline 562
.dbline 564
; //Delay100();
; delay_nus(600);
ldi R16,600
ldi R17,2
xcall _delay_nus
.dbline 565
; for (i=0;i< (ADDR_W/8);i++)//写入接收地址(按字节对齐)
clr R22
clr R23
L71:
.dbline 566
.dbline 567
ldi R24,<_TxAddress
ldi R25,>_TxAddress
movw R30,R22
add R30,R24
adc R31,R25
ldd R20,z+0
.dbline 568
mov R16,R20
xcall _ByteWrite
.dbline 569
L72:
.dbline 565
subi R22,255 ; offset = 1
sbci R23,255
.dbline 565
cpi R22,2
ldi R30,0
cpc R23,R30
brlt L71
.dbline 570
; {
; variable2=TxAddress[i];
; ByteWrite(variable2);
; }
; for (i=0;i<(DATA1_W/8);i++)//写入需要发送的数据(按字节对齐)
clr R22
clr R23
L75:
.dbline 571
.dbline 572
movw R30,R22
add R30,R10
adc R31,R11
ldd R20,z+0
.dbline 573
mov R16,R20
xcall _ByteWrite
.dbline 574
L76:
.dbline 570
subi R22,255 ; offset = 1
sbci R23,255
.dbline 570
cpi R22,28
ldi R30,0
cpc R23,R30
brlt L75
.dbline 576
; {
; variable2=TxBuf[i];
; ByteWrite(variable2);
; }
; //CE=0; //CE 置低使发送有效
; CE_CLR();
.dbline 576
cbi 0x15,1
.dbline 576
.dbline 576
.dbline 579
; //Delay100(); //时钟信号高电平保持
; //Delay100();
; delay_nus(1200);
ldi R16,1200
ldi R17,4
xcall _delay_nus
.dbline -2
L70:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r variable2 20 c
.dbsym r i 22 I
.dbsym r TxBuf 10 pc
.dbend
.dbfunc e nRF2401_RxPacket _nRF2401_RxPacket fc
; i -> R20,R21
; RxBuf -> R22,R23
.even
_nRF2401_RxPacket::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 587
; }
;
; /*----------------------------------------------------------------*/
; //检测并接收数据函数
; //返回 0:没有数据接收
; // 1:接收到数据
; unsigned char nRF2401_RxPacket(unsigned char *RxBuf)
; {
.dbline 590
; unsigned int i;
; //DR1=1;
; NRF_DDR&=~(1<<DR1);
cbi 0x14,2
.dbline 591
; DR1_SET();
.dbline 591
sbi 0x15,2
.dbline 591
.dbline 591
.dbline 593
; //if (DR1)
; if(DR1_STATE)
in R24,0x13
andi R24,4
cpi R24,4
brne L80
.dbline 594
; {
.dbline 595
; for (i=0; i<DATA1_W/8; i++)
clr R20
clr R21
xjmp L85
L82:
.dbline 596
.dbline 597
xcall _ByteRead
movw R30,R22
std z+0,R16
.dbline 598
subi R22,255 ; offset = 1
sbci R23,255
.dbline 599
L83:
.dbline 595
subi R20,255 ; offset = 1
sbci R21,255
L85:
.dbline 595
cpi R20,28
ldi R30,0
cpc R21,R30
brlo L82
.dbline 600
; {
; *RxBuf = ByteRead();
; RxBuf++;
; }
; return 1;
ldi R16,1
xjmp L79
L80:
.dbline 602
; }
; return 0;
clr R16
.dbline -2
L79:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r RxBuf 22 pc
.dbend
.area lit(rom, con, rel)
L87:
.byte 'U,'a,'r,'t,32,'O,'K,32,0
L88:
.byte 'N,'o,'w,32,'s,'p,'e,'e,'d,32,'i,'s,32,0
L89:
.byte 'N,'o,'w,32,'a,'d,'c,32,'i,'s,32,0
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
.dbfunc e main _main fV
; add -> <dead>
; i -> <dead>
; ada -> <dead>
; adcs -> y+23
; speedi -> y+9
; uartok -> y+0
; speedb -> R22,R23
; speeda -> R10,R11
; sj3 -> R20,R21
; sj1 -> R14,R15
; sj0 -> y+35
; sj2 -> R12,R13
.even
_main::
sbiw R28,37
.dbline -1
.dbline 613
; }
;
;
;
; ///////////////////////////////////////////////////////////////////////////////////////////////////
;
; unsigned char TxRxBuf[32];
;
;
; void main (void)
; {
.dbline 615
; unsigned int ada,i,add,sj0,sj1,sj2,sj3,speeda,speedb;
; unsigned char uartok[] = "Uart OK ";
ldi R24,<L87
ldi R25,>L87
movw R30,R28
ldi R16,9
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 616
; unsigned char speedi[] = "Now speed is ";
ldi R24,<L88
ldi R25,>L88
movw R30,R28
adiw R30,9
ldi R16,14
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 617
; unsigned char adcs[] = "Now adc is ";
ldi R24,<L89
ldi R25,>L89
movw R30,R28
adiw R30,23
ldi R16,12
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 618
; port_init();
xcall _port_init
.dbline 619
; motor_init();
xcall _motor_init
.dbline 620
; uart_init(19200);
ldi R16,19200
ldi R17,75
xcall _uart_init
.dbline 621
; adc_init();
xcall _adc_init
.dbline 622
; uart_senddata(uartok);
movw R16,R28
xcall _uart_senddata
.dbline 623
; Config2401();
xcall _Config2401
.dbline 624
; delay_nus(600);
ldi R16,600
ldi R17,2
xcall _delay_nus
.dbline 625
; SetRxMode(); // 设置RF2401 为接收模式
xcall _SetRxMode
xjmp L91
L90:
.dbline 628
;
; while(1)
; {
.dbline 629
; delay_nms(1);
ldi R16,1
ldi R17,0
xcall _delay_nms
.dbline 630
; if (nRF2401_RxPacket(TxRxBuf)==1) //返回 1 表明有数据包接收到
ldi R16,<_TxRxBuf
ldi R17,>_TxRxBuf
xcall _nRF2401_RxPacket
cpi R16,1
breq X1
xjmp L93
X1:
.dbline 631
; {
.dbline 633
;
; sj0 = TxRxBuf[0];
lds R2,_TxRxBuf
clr R3
std y+36,R3
std y+35,R2
.dbline 634
; sj0 <<= 8;
movw R0,R2
mov R1,R0
clr R0
std y+36,R1
std y+35,R0
.dbline 635
; sj0 |= TxRxBuf[1];
lds R2,_TxRxBuf+1
clr R3
or R0,R2
or R1,R3
std y+36,R1
std y+35,R0
.dbline 636
; sj1 = TxRxBuf[2];
lds R14,_TxRxBuf+2
clr R15
.dbline 637
; sj1 <<= 8;
mov R15,R14
clr R14
.dbline 638
; sj1 |= TxRxBuf[3];
lds R2,_TxRxBuf+3
clr R3
or R14,R2
or R15,R3
.dbline 639
; sj2 = TxRxBuf[4];
lds R12,_TxRxBuf+4
clr R13
.dbline 640
; sj2 <<= 8;
mov R13,R12
clr R12
.dbline 641
; sj2 |= TxRxBuf[5];
lds R2,_TxRxBuf+5
clr R3
or R12,R2
or R13,R3
.dbline 642
; sj3 = TxRxBuf[6];
lds R20,_TxRxBuf+6
clr R21
.dbline 643
; sj3 <<= 8;
mov R21,R20
clr R20
.dbline 644
; sj3 |= TxRxBuf[7];
lds R2,_TxRxBuf+7
clr R3
or R20,R2
or R21,R3
.dbline 645
; uart_send(sj2);
movw R16,R12
xcall _uart_send
.dbline 646
; uart_send(sj2);
movw R16,R12
xcall _uart_send
.dbline 647
; uart_send(sj2);
movw R16,R12
xcall _uart_send
.dbline 648
; uart_send(sj2);
movw R16,R12
xcall _uart_send
.dbline 649
; if(sj0>sj1)
ldd R0,y+35
ldd R1,y+36
cp R14,R0
cpc R15,R1
brsh L102
.dbline 650
; {
.dbline 651
; speeda = sj0-sj1;
movw R10,R0
sub R10,R14
sbc R11,R15
.dbline 652
; if(speeda<50)
movw R24,R10
cpi R24,50
ldi R30,0
cpc R25,R30
brsh L104
.dbline 653
; motor_a(1,0);
clr R18
clr R19
ldi R16,1
xcall _motor_a
xjmp L103
L104:
.dbline 655
; else
; {
.dbline 656
; speeda = 5*(speeda-50);
movw R18,R10
subi R18,50
sbci R19,0
ldi R16,5
ldi R17,0
xcall empy16s
movw R10,R16
.dbline 657
; if(speeda > 1020)
ldi R24,1020
ldi R25,3
cp R24,R16
cpc R25,R17
brsh L106
.dbline 658
; speeda = 1020;
movw R10,R24
L106:
.dbline 659
; motor_a(1,speeda);
movw R18,R10
ldi R16,1
xcall _motor_a
.dbline 660
; }
.dbline 661
; }
xjmp L103
L102:
.dbline 663
; else
; {
.dbline 664
; speeda = sj1-sj0;
movw R10,R14
ldd R0,y+35
ldd R1,y+36
sub R10,R0
sbc R11,R1
.dbline 665
; if(speeda<50)
movw R24,R10
cpi R24,50
ldi R30,0
cpc R25,R30
brsh L108
.dbline 666
; motor_a(0,0);
clr R18
clr R19
clr R16
xcall _motor_a
xjmp L109
L108:
.dbline 668
; else
; {
.dbline 669
; speeda = 5*(speeda-50);
movw R18,R10
subi R18,50
sbci R19,0
ldi R16,5
ldi R17,0
xcall empy16s
movw R10,R16
.dbline 670
; if(speeda > 1020)
ldi R24,1020
ldi R25,3
cp R24,R16
cpc R25,R17
brsh L110
.dbline 671
; speeda = 1020;
movw R10,R24
L110:
.dbline 672
; motor_a(0,speeda);
movw R18,R10
clr R16
xcall _motor_a
.dbline 673
; }
L109:
.dbline 674
; }
L103:
.dbline 675
; if(sj2>sj3)
cp R20,R12
cpc R21,R13
brsh L112
.dbline 676
; {
.dbline 677
; speedb = sj2-sj3;
movw R22,R12
sub R22,R20
sbc R23,R21
.dbline 678
; if(speedb<50)
cpi R22,50
ldi R30,0
cpc R23,R30
brsh L114
.dbline 679
; motor_b(1,0);
clr R18
clr R19
ldi R16,1
xcall _motor_b
xjmp L113
L114:
.dbline 681
; else
; {
.dbline 682
; speedb = 5*(speedb-50);
movw R18,R22
subi R18,50
sbci R19,0
ldi R16,5
ldi R17,0
xcall empy16s
movw R22,R16
.dbline 683
; if(speedb > 1020)
ldi R24,1020
ldi R25,3
cp R24,R16
cpc R25,R17
brsh L116
.dbline 684
; speedb = 1020;
ldi R22,1020
ldi R23,3
L116:
.dbline 685
; motor_b(1,speedb);
movw R18,R22
ldi R16,1
xcall _motor_b
.dbline 686
; }
.dbline 687
; }
xjmp L113
L112:
.dbline 689
; else
; {
.dbline 690
; speedb = sj1-sj0;
movw R22,R14
ldd R0,y+35
ldd R1,y+36
sub R22,R0
sbc R23,R1
.dbline 691
; if(speedb<50)
cpi R22,50
ldi R30,0
cpc R23,R30
brsh L118
.dbline 692
; motor_b(0,0);
clr R18
clr R19
clr R16
xcall _motor_b
xjmp L119
L118:
.dbline 694
; else
; {
.dbline 695
; speedb = 5*(speedb-50);
movw R18,R22
subi R18,50
sbci R19,0
ldi R16,5
ldi R17,0
xcall empy16s
movw R22,R16
.dbline 696
; if(speedb > 1020)
ldi R24,1020
ldi R25,3
cp R24,R16
cpc R25,R17
brsh L120
.dbline 697
; speedb = 1020;
ldi R22,1020
ldi R23,3
L120:
.dbline 698
; motor_b(0,5*(speedb-50));
movw R18,R22
subi R18,50
sbci R19,0
ldi R16,5
ldi R17,0
xcall empy16s
movw R18,R16
clr R16
xcall _motor_b
.dbline 699
; }
L119:
.dbline 700
; }
L113:
.dbline 702
;
; }
L93:
.dbline 704
L91:
.dbline 627
xjmp L90
X0:
.dbline -2
L86:
adiw R28,37
.dbline 0 ; func end
ret
.dbsym l add 1 i
.dbsym l i 1 i
.dbsym l ada 1 i
.dbsym l adcs 23 A[12:12]c
.dbsym l speedi 9 A[14:14]c
.dbsym l uartok 0 A[9:9]c
.dbsym r speedb 22 i
.dbsym r speeda 10 i
.dbsym r sj3 20 i
.dbsym r sj1 14 i
.dbsym l sj0 35 i
.dbsym r sj2 12 i
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
_TxRxBuf::
.blkb 32
.dbsym e TxRxBuf _TxRxBuf A[32:32]c
_DATA_BUF::
.blkb 1
.dbsym e DATA_BUF _DATA_BUF c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -