📄 smart.lst
字号:
(0489) //Delay100();
(0490) delay_nus(600);
01B9 E508 LDI R16,0x58
01BA E012 LDI R17,2
01BB DF7C RCALL _delay_nus
(0491) //CS=0; //CS 置低使配置有效
(0492) CS_CLR();
01BC 98AC CBI 0x15,4
(0493) //Delay100();
(0494) delay_nus(600);
01BD E508 LDI R16,0x58
01BE E012 LDI R17,2
01BF DF78 RCALL _delay_nus
01C0 940E03EE CALL pop_gset2
01C2 9508 RET
(0495) }
(0496)
(0497) void SetTxMode(void)
(0498) {
(0499) NRF_DDR|=((1<<CS)|(1<<CE)|(1<<PWR_UP)|(1<<DATA)|(1<<CLK1));
_SetTxMode:
01C3 B384 IN R24,0x14
01C4 638B ORI R24,0x3B
01C5 BB84 OUT 0x14,R24
(0500) //设置为配置模式
(0501) //PWR_UP=1;
(0502) //CE=0;
(0503) //CS=1;
(0504) PWR_UP_SET();
01C6 9AA8 SBI 0x15,0
(0505) CE_CLR();
01C7 98A9 CBI 0x15,1
(0506) CS_SET();
01C8 9AAC SBI 0x15,4
(0507) //Delay100();
(0508) delay_nus(600);
01C9 E508 LDI R16,0x58
01CA E012 LDI R17,2
01CB DF6C RCALL _delay_nus
(0509) //配置寄存器0 字节RXEN 设置为0:发送模式
(0510) //DATA =0;
(0511) //CLK1=1;
(0512) //CLK1=0;
(0513) DATA_CLR();
01CC 98AD CBI 0x15,5
(0514) CLK1_SET();
01CD 9AAB SBI 0x15,3
(0515) CLK1_CLR();
01CE 98AB CBI 0x15,3
(0516) //设置为Activemodes(Tx)
(0517) //CS=0;
(0518) //CE=1;
(0519) CS_CLR();
01CF 98AC CBI 0x15,4
(0520) CE_SET();
01D0 9AA9 SBI 0x15,1
(0521) //Delay100();
(0522) delay_nus(600);
01D1 E508 LDI R16,0x58
01D2 E012 LDI R17,2
01D3 DF64 RCALL _delay_nus
01D4 9508 RET
(0523) }
(0524)
(0525) void SetRxMode(void)
(0526) {
(0527) NRF_DDR|=((1<<CS)|(1<<CE)|(1<<PWR_UP)|(1<<DATA)|(1<<CLK1));
_SetRxMode:
01D5 B384 IN R24,0x14
01D6 638B ORI R24,0x3B
01D7 BB84 OUT 0x14,R24
(0528) //设置为配置模式
(0529) //PWR_UP = 1;
(0530) //CE=0;
(0531) //CS=1;
(0532) PWR_UP_SET();
01D8 9AA8 SBI 0x15,0
(0533) CE_CLR();
01D9 98A9 CBI 0x15,1
(0534) CS_SET();
01DA 9AAC SBI 0x15,4
(0535) //Delay100();
(0536) delay_nus(600);
01DB E508 LDI R16,0x58
01DC E012 LDI R17,2
01DD DF5A RCALL _delay_nus
(0537) //配置寄存器0 字节RXEN 设置为 1:接收模式
(0538) //DATA =1;
(0539) //CLK1=1;
(0540) //CLK1=0;
(0541) DATA_SET();
01DE 9AAD SBI 0x15,5
(0542) CLK1_SET();
01DF 9AAB SBI 0x15,3
(0543) CLK1_CLR();
01E0 98AB CBI 0x15,3
(0544) //设置为Activemodes(Rx)
(0545) //CS=0;
(0546) //CE=1;
(0547) CS_CLR();
01E1 98AC CBI 0x15,4
(0548) CE_SET()
01E2 9AA9 SBI 0x15,1
(0549) //Delay100();
(0550) delay_nus(600);
01E3 E508 LDI R16,0x58
01E4 E012 LDI R17,2
01E5 DF52 RCALL _delay_nus
(0551) NRF_DDR&=~(1<<DATA);
01E6 98A5 CBI 0x14,5
01E7 9508 RET
_nRF2401_TxPacket:
variable2 --> R20
i --> R22
TxBuf --> R10
01E8 940E03F8 CALL push_gset3
01EA 0158 MOVW R10,R16
(0552) }
(0553)
(0554) //接收方通道硬件地址
(0555) unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};
(0556) //nRF2401 数据发送函数
(0557) void nRF2401_TxPacket(unsigned char TxBuf[])
(0558) {
(0559) int i;
(0560) unsigned char variable2;
(0561) //CE=1;
(0562) CE_SET();
01EB 9AA9 SBI 0x15,1
(0563) //Delay100();
(0564) delay_nus(600);
01EC E508 LDI R16,0x58
01ED E012 LDI R17,2
01EE DF49 RCALL _delay_nus
(0565) for (i=0;i< (ADDR_W/8);i++)//写入接收地址(按字节对齐)
01EF 2766 CLR R22
01F0 2777 CLR R23
(0566) {
(0567) variable2=TxAddress[i];
01F1 E782 LDI R24,0x72
01F2 E090 LDI R25,0
01F3 01FB MOVW R30,R22
01F4 0FE8 ADD R30,R24
01F5 1FF9 ADC R31,R25
01F6 8140 LDD R20,Z+0
(0568) ByteWrite(variable2);
01F7 2F04 MOV R16,R20
01F8 DF86 RCALL _ByteWrite
01F9 5F6F SUBI R22,0xFF
01FA 4F7F SBCI R23,0xFF
01FB 3062 CPI R22,2
01FC E0E0 LDI R30,0
01FD 077E CPC R23,R30
01FE F394 BLT 0x01F1
(0569) }
(0570) for (i=0;i<(DATA1_W/8);i++)//写入需要发送的数据(按字节对齐)
01FF 2766 CLR R22
0200 2777 CLR R23
(0571) {
(0572) variable2=TxBuf[i];
0201 01FB MOVW R30,R22
0202 0DEA ADD R30,R10
0203 1DFB ADC R31,R11
0204 8140 LDD R20,Z+0
(0573) ByteWrite(variable2);
0205 2F04 MOV R16,R20
0206 DF78 RCALL _ByteWrite
0207 5F6F SUBI R22,0xFF
0208 4F7F SBCI R23,0xFF
0209 316C CPI R22,0x1C
020A E0E0 LDI R30,0
020B 077E CPC R23,R30
020C F3A4 BLT 0x0201
(0574) }
(0575) //CE=0; //CE 置低使发送有效
(0576) CE_CLR();
020D 98A9 CBI 0x15,1
(0577) //Delay100(); //时钟信号高电平保持
(0578) //Delay100();
(0579) delay_nus(1200);
020E EB00 LDI R16,0xB0
020F E014 LDI R17,4
0210 DF27 RCALL _delay_nus
0211 940E03F1 CALL pop_gset3
0213 9508 RET
_nRF2401_RxPacket:
i --> R20
RxBuf --> R22
0214 940E03FA CALL push_gset2
0216 01B8 MOVW R22,R16
(0580) }
(0581)
(0582) /*----------------------------------------------------------------*/
(0583) //检测并接收数据函数
(0584) //返回 0:没有数据接收
(0585) // 1:接收到数据
(0586) unsigned char nRF2401_RxPacket(unsigned char *RxBuf)
(0587) {
(0588) unsigned int i;
(0589) //DR1=1;
(0590) NRF_DDR&=~(1<<DR1);
0217 98A2 CBI 0x14,2
(0591) DR1_SET();
0218 9AAA SBI 0x15,2
(0592) //if (DR1)
(0593) if(DR1_STATE)
0219 B383 IN R24,0x13
021A 7084 ANDI R24,4
021B 3084 CPI R24,4
021C F481 BNE 0x022D
(0594) {
(0595) for (i=0; i<DATA1_W/8; i++)
021D 2744 CLR R20
021E 2755 CLR R21
021F C007 RJMP 0x0227
(0596) {
(0597) *RxBuf = ByteRead();
0220 DF3F RCALL _ByteRead
0221 01FB MOVW R30,R22
0222 8300 STD Z+0,R16
(0598) RxBuf++;
0223 5F6F SUBI R22,0xFF
0224 4F7F SBCI R23,0xFF
0225 5F4F SUBI R20,0xFF
0226 4F5F SBCI R21,0xFF
0227 314C CPI R20,0x1C
0228 E0E0 LDI R30,0
0229 075E CPC R21,R30
022A F3A8 BCS 0x0220
(0599) }
(0600) return 1;
022B E001 LDI R16,1
022C C001 RJMP 0x022E
(0601) }
(0602) return 0;
022D 2700 CLR R16
022E 940E03EE CALL pop_gset2
0230 9508 RET
_main:
add --> Y+1
i --> Y+1
ada --> Y+1
adcs --> Y+23
speedi --> Y+9
uartok --> Y+0
speedb --> R22
speeda --> R10
sj3 --> R20
sj1 --> R14
sj0 --> Y+35
sj2 --> R12
0231 97A5 SBIW R28,0x25
(0603) }
(0604)
(0605)
(0606)
(0607) ///////////////////////////////////////////////////////////////////////////////////////////////////
(0608)
(0609) unsigned char TxRxBuf[32];
(0610)
(0611)
(0612) void main (void)
(0613) {
(0614) unsigned int ada,i,add,sj0,sj1,sj2,sj3,speeda,speedb;
(0615) unsigned char uartok[] = "Uart OK ";
0232 E584 LDI R24,0x54
0233 E090 LDI R25,0
0234 01FE MOVW R30,R28
0235 E009 LDI R16,0x9
0236 E010 LDI R17,0
0237 93FA ST R31,-Y
0238 93EA ST R30,-Y
0239 939A ST R25,-Y
023A 938A ST R24,-Y
023B 940E0413 CALL asgncblk
(0616) unsigned char speedi[] = "Now speed is ";
023D E58D LDI R24,0x5D
023E E090 LDI R25,0
023F 01FE MOVW R30,R28
0240 9639 ADIW R30,0x9
0241 E00E LDI R16,0xE
0242 E010 LDI R17,0
0243 93FA ST R31,-Y
0244 93EA ST R30,-Y
0245 939A ST R25,-Y
0246 938A ST R24,-Y
0247 940E0413 CALL asgncblk
(0617) unsigned char adcs[] = "Now adc is ";
0249 E68B LDI R24,0x6B
024A E090 LDI R25,0
024B 01FE MOVW R30,R28
024C 9677 ADIW R30,0x17
024D E00C LDI R16,0xC
024E E010 LDI R17,0
024F 93FA ST R31,-Y
0250 93EA ST R30,-Y
0251 939A ST R25,-Y
0252 938A ST R24,-Y
0253 940E0413 CALL asgncblk
(0618) port_init();
0255 DE12 RCALL _port_init
(0619) motor_init();
0256 DE2F RCALL _motor_init
(0620) uart_init(19200);
0257 E000 LDI R16,0
0258 E41B LDI R17,0x4B
0259 DE46 RCALL _uart_init
(0621) adc_init();
025A DEC1 RCALL _adc_init
(0622) uart_senddata(uartok);
025B 018E MOVW R16,R28
025C DEAE RCALL _uart_senddata
(0623) Config2401();
025D DF3E RCALL _Config2401
(0624) delay_nus(600);
025E E508 LDI R16,0x58
025F E012 LDI R17,2
0260 DED7 RCALL _delay_nus
(0625) SetRxMode(); // 设置RF2401 为接收模式
0261 DF73 RCALL _SetRxMode
0262 C0CD RJMP 0x0330
(0626)
(0627) while(1)
(0628) {
(0629) delay_nms(1);
0263 E001 LDI R16,1
0264 E010 LDI R17,0
0265 DEEB RCALL _delay_nms
(0630) if (nRF2401_RxPacket(TxRxBuf)==1) //返回 1 表明有数据包接收到
0266 E706 LDI R16,0x76
0267 E010 LDI R17,0
0268 DFAB RCALL _nRF2401_RxPacket
0269 3001 CPI R16,1
026A F009 BEQ 0x026C
026B C0C4 RJMP 0x0330
(0631) {
(0632)
(0633) sj0 = TxRxBuf[0];
026C 90200076 LDS R2,TxRxBuf
026E 2433 CLR R3
026F A23C STD Y+36,R3
0270 A22B STD Y+35,R2
(0634) sj0 <<= 8;
0271 0101 MOVW R0,R2
0272 2C10 MOV R1,R0
0273 2400 CLR R0
0274 A21C STD Y+36,R1
0275 A20B STD Y+35,R0
(0635) sj0 |= TxRxBuf[1];
0276 90200077 LDS R2,TxRxBuf+1
0278 2433 CLR R3
0279 2802 OR R0,R2
027A 2813 OR R1,R3
027B A21C STD Y+36,R1
027C A20B STD Y+35,R0
(0636) sj1 = TxRxBuf[2];
027D 90E00078 LDS R14,TxRxBuf+2
027F 24FF CLR R15
(0637) sj1 <<= 8;
0280 2CFE MOV R15,R14
0281 24EE CLR R14
(0638) sj1 |= TxRxBuf[3];
0282 90200079 LDS R2,TxRxBuf+3
0284 2433 CLR R3
0285 28E2 OR R14,R2
0286 28F3 OR R15,R3
(0639) sj2 = TxRxBuf[4];
0287 90C0007A LDS R12,0x7A
0289 24DD CLR R13
(0640) sj2 <<= 8;
028A 2CDC MOV R13,R12
028B 24CC CLR R12
(0641) sj2 |= TxRxBuf[5];
028C 9020007B LDS R2,0x7B
028E 2433 CLR R3
028F 28C2 OR R12,R2
0290 28D3 OR R13,R3
(0642) sj3 = TxRxBuf[6];
0291 9140007C LDS R20,0x7C
0293 2755 CLR R21
(0643) sj3 <<= 8;
0294 2F54 MOV R21,R20
0295 2744 CLR R20
(0644) sj3 |= TxRxBuf[7];
0296 9020007D LDS R2,0x7D
0298 2433 CLR R3
0299 2942 OR R20,R2
029A 2953 OR R21,R3
(0645) uart_send(sj2);
029B 0186 MOVW R16,R12
029C DE36 RCALL _uart_send
(0646) uart_send(sj2);
029D 0186 MOVW R16,R12
029E DE34 RCALL _uart_send
(0647) uart_send(sj2);
029F 0186 MOVW R16,R12
02A0 DE32 RCALL _uart_send
(0648) uart_send(sj2);
02A1 0186 MOVW R16,R12
02A2 DE30 RCALL _uart_send
(0649) if(sj0>sj1)
02A3 A00B LDD R0,Y+35
02A4 A01C LDD R1,Y+36
02A5 14E0 CP R14,R0
02A6 04F1 CPC R15,R1
02A7 F4F8 BCC 0x02C7
(0650) {
(0651) speeda = sj0-sj1;
02A8 0150 MOVW R10,R0
02A9 18AE SUB R10,R14
02AA 08BF SBC R11,R15
(0652) if(speeda<50)
02AB 01C5 MOVW R24,R10
02AC 3382 CPI R24,0x32
02AD E0E0 LDI R30,0
02AE 079E CPC R25,R30
02AF F428 BCC 0x02B5
(0653) motor_a(1,0);
02B0 2722 CLR R18
02B1 2733 CLR R19
02B2 E001 LDI R16,1
02B3 DDBE RCALL _motor_a
02B4 C032 RJMP 0x02E7
(0654) else
(0655) {
(0656) speeda = 5*(speeda-50);
02B5 0195 MOVW R18,R10
02B6 5322 SUBI R18,0x32
02B7 4030 SBCI R19,0
02B8 E005 LDI R16,5
02B9 E010 LDI R17,0
02BA 940E03DE CALL empy16s
02BC 0158 MOVW R10,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -