⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 基于MEAG16的电机PID控制程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01D8 4427              clr R20
 01DA 5527              clr R21
 01DC                   .dbline 401
 01DC           ;    for (i=0;i<n;i++) 
 01DC 03C0              xjmp L48
 01DE           L45:
 01DE                   .dbline 402
 01DE EFDF              xcall _delay_1ms
 01E0           L46:
 01E0                   .dbline 401
 01E0 4F5F              subi R20,255  ; offset = 1
 01E2 5F4F              sbci R21,255
 01E4           L48:
 01E4                   .dbline 401
 01E4 4617              cp R20,R22
 01E6 5707              cpc R21,R23
 01E8 D0F3              brlo L45
 01EA                   .dbline -2
 01EA           L44:
 01EA 0E940000          xcall pop_gset2
 01EE                   .dbline 0 ; func end
 01EE 0895              ret
 01F0                   .dbsym r i 20 i
 01F0                   .dbsym r n 22 i
 01F0                   .dbend
 01F0                   .dbfunc e ByteRead _ByteRead fc
 01F0           ;              i -> R16
                        .even
 01F0           _ByteRead::
 01F0                   .dbline -1
 01F0                   .dbline 408
 01F0           ;    delay_1ms(); 
 01F0           ;   } 
 01F0           ; 
 01F0           ; 
 01F0           ; 
 01F0           ; unsigned char ByteRead(void)
 01F0           ; {
 01F0                   .dbline 410
 01F0           ;       unsigned char i;
 01F0           ;       for (i=0;i<8;i++)
 01F0 0027              clr R16
 01F2 18C0              xjmp L53
 01F4           L50:
 01F4                   .dbline 411
 01F4           ;       {
 01F4                   .dbline 412
 01F4           ;               DATA_BUF=DATA_BUF<<1;
 01F4 20902000          lds R2,_DATA_BUF
 01F8 220C              lsl R2
 01FA 20922000          sts _DATA_BUF,R2
 01FE                   .dbline 414
 01FE           ;               //CLK1=1;
 01FE           ;               CLK1_SET();
 01FE                   .dbline 414
 01FE AB9A              sbi 0x15,3
 0200                   .dbline 414
 0200                   .dbline 414
 0200                   .dbline 416
 0200           ;               //DATA=1;        //设置为输入状态
 0200           ;               NRF_DDR&=~(1<<DATA);
 0200 A598              cbi 0x14,5
 0202                   .dbline 417
 0202           ;               DATA_SET();
 0202                   .dbline 417
 0202 AD9A              sbi 0x15,5
 0204                   .dbline 417
 0204                   .dbline 417
 0204                   .dbline 419
 0204           ;               //if (DATA)      //读取最高位,保存至最末尾,通过左移位完成整个字节
 0204           ;               if(DATA_STATE)
 0204 83B3              in R24,0x13
 0206 8072              andi R24,32
 0208 8032              cpi R24,32
 020A 29F4              brne L54
 020C                   .dbline 420
 020C           ;               {
 020C                   .dbline 421
 020C           ;                       DATA_BUF|=BYTE_BIT0;
 020C 822D              mov R24,R2
 020E 8160              ori R24,1
 0210 80932000          sts _DATA_BUF,R24
 0214                   .dbline 422
 0214           ;               }
 0214 05C0              xjmp L55
 0216           L54:
 0216                   .dbline 424
 0216           ;               else
 0216           ;               {
 0216                   .dbline 425
 0216           ;                       DATA_BUF&=~BYTE_BIT0;
 0216 80912000          lds R24,_DATA_BUF
 021A 8E7F              andi R24,254
 021C 80932000          sts _DATA_BUF,R24
 0220                   .dbline 426
 0220           ;               }
 0220           L55:
 0220                   .dbline 428
 0220                   .dbline 428
 0220 AB98              cbi 0x15,3
 0222                   .dbline 428
 0222                   .dbline 428
 0222                   .dbline 429
 0222           L51:
 0222                   .dbline 410
 0222 0395              inc R16
 0224           L53:
 0224                   .dbline 410
 0224 0830              cpi R16,8
 0226 30F3              brlo L50
 0228                   .dbline 430
 0228           ;               //CLK1=0;
 0228           ;               CLK1_CLR();
 0228           ;       }
 0228           ;       return DATA_BUF;
 0228 00912000          lds R16,_DATA_BUF
 022C                   .dbline -2
 022C           L49:
 022C                   .dbline 0 ; func end
 022C 0895              ret
 022E                   .dbsym r i 16 c
 022E                   .dbend
 022E                   .dbfunc e ByteWrite _ByteWrite fV
 022E           ;              i -> R20
 022E           ;           send -> R16
                        .even
 022E           _ByteWrite::
 022E 0E940000          xcall push_gset1
 0232                   .dbline -1
 0232                   .dbline 434
 0232           ; }
 0232           ; 
 0232           ; void ByteWrite(unsigned char send)
 0232           ; {
 0232                   .dbline 436
 0232           ;       unsigned char i;
 0232           ;       DATA_BUF=send;
 0232 00932000          sts _DATA_BUF,R16
 0236                   .dbline 437
 0236           ;       NRF_DDR|=((1<<DATA)|(1<<CLK1));
 0236 84B3              in R24,0x14
 0238 8862              ori R24,40
 023A 84BB              out 0x14,R24
 023C                   .dbline 438
 023C           ;       for (i=0;i<8;i++)
 023C 4427              clr R20
 023E 0FC0              xjmp L60
 0240           L57:
 0240                   .dbline 439
 0240           ;       {
 0240                   .dbline 440
 0240           ;               if (DATA7)     //总是发送最高位
 0240 20902000          lds R2,_DATA_BUF
 0244 27FE              sbrs R2,7
 0246 02C0              rjmp L61
 0248                   .dbline 441
 0248           ;               {
 0248                   .dbline 443
 0248           ;                       //DATA=1;
 0248           ;                       DATA_SET();
 0248                   .dbline 443
 0248 AD9A              sbi 0x15,5
 024A                   .dbline 443
 024A                   .dbline 443
 024A                   .dbline 444
 024A           ;               }
 024A 01C0              xjmp L62
 024C           L61:
 024C                   .dbline 446
 024C           ;               else
 024C           ;               {
 024C                   .dbline 448
 024C           ;                       //DATA=0;
 024C           ;                       DATA_CLR();
 024C                   .dbline 448
 024C AD98              cbi 0x15,5
 024E                   .dbline 448
 024E                   .dbline 448
 024E                   .dbline 449
 024E           ;               }
 024E           L62:
 024E                   .dbline 451
 024E                   .dbline 451
 024E AB9A              sbi 0x15,3
 0250                   .dbline 451
 0250                   .dbline 451
 0250                   .dbline 452
 0250 20902000          lds R2,_DATA_BUF
 0254 220C              lsl R2
 0256 20922000          sts _DATA_BUF,R2
 025A                   .dbline 454
 025A                   .dbline 454
 025A AB98              cbi 0x15,3
 025C                   .dbline 454
 025C                   .dbline 454
 025C                   .dbline 455
 025C           L58:
 025C                   .dbline 438
 025C 4395              inc R20
 025E           L60:
 025E                   .dbline 438
 025E 4830              cpi R20,8
 0260 78F3              brlo L57
 0262                   .dbline -2
 0262           L56:
 0262 0E940000          xcall pop_gset1
 0266                   .dbline 0 ; func end
 0266 0895              ret
 0268                   .dbsym r i 20 c
 0268                   .dbsym r send 16 c
 0268                   .dbend
 0268                   .dbfunc e Config2401 _Config2401 fV
 0268           ;      variablel -> R20
 0268           ;              i -> R22,R23
                        .even
 0268           _Config2401::
 0268 0E940000          xcall push_gset2
 026C                   .dbline -1
 026C                   .dbline 470
 026C           ;               //CLK1=1;
 026C           ;               CLK1_SET();
 026C           ;               DATA_BUF=DATA_BUF<<1;
 026C           ;               //CLK1=0;
 026C           ;               CLK1_CLR();
 026C           ;       }
 026C           ; }
 026C           ; 
 026C           ; /*    <2401 配置寄存器的写入方式>
 026C           ; NOTE.
 026C           ; On the falling edge of CS, the nRF2401A updates the number of bits actually shifted
 026C           ; in during the last configuration.
 026C           ; Ex:
 026C           ; If the nRF2401A is to be configured for 2 channel RX in ShockBurst., a total of 120
 026C           ; bits must be shifted in during the first configuration after VDD is applied.
 026C           ; Once the wanted protocol, modus and RF channel are set, only one bit (RXEN) is
 026C           ; shifted in to switch between RX and TX.
 026C           ; 注意  :2401 配置寄存器的数据写入通过一移位寄存器完成
 026C           ; */
 026C           ; void Config2401(void)
 026C           ; {
 026C                   .dbline 476
 026C           ;       unsigned int i;
 026C           ;       unsigned char variablel;
 026C           ;       //CS=0;
 026C           ;       //CE=0;
 026C           ;       //PWR_UP=1; //上电
 026C           ;       NRF_DDR|=((1<<CS)|(1<<CE)|(1<<PWR_UP));
 026C 84B3              in R24,0x14
 026E 8361              ori R24,19
 0270 84BB              out 0x14,R24
 0272                   .dbline 477
 0272           ;       CS_CLR();
 0272                   .dbline 477
 0272 AC98              cbi 0x15,4
 0274                   .dbline 477
 0274                   .dbline 477
 0274                   .dbline 478
 0274           ;       CE_CLR();
 0274                   .dbline 478
 0274 A998              cbi 0x15,1
 0276                   .dbline 478
 0276                   .dbline 478
 0276                   .dbline 479
 0276           ;       PWR_UP_CLR();
 0276                   .dbline 479
 0276 A898              cbi 0x15,0
 0278                   .dbline 479
 0278                   .dbline 479
 0278                   .dbline 481
 0278           ;       //for (i=0;i<10;i++) Delay100();//从上电到进入配置模式需要3ms 的延时
 0278           ;       delay_nms(6);
 0278 06E0              ldi R16,6
 027A 10E0              ldi R17,0
 027C AADF              xcall _delay_nms
 027E                   .dbline 483
 027E           ;       //CS=1;     //使RF2401 进入配置方式
 027E           ;       CS_SET();
 027E                   .dbline 483
 027E AC9A              sbi 0x15,4
 0280                   .dbline 483
 0280                   .dbline 483
 0280                   .dbline 484
 0280           ;       for (i=0;i<18;i++)
 0280 6627              clr R22
 0282 7727              clr R23
 0284 0AC0              xjmp L67
 0286           L64:
 0286                   .dbline 485
 0286                   .dbline 486
 0286 80E0              ldi R24,<_nRF2401_Conf
 0288 90E0              ldi R25,>_nRF2401_Conf
 028A FB01              movw R30,R22
 028C E80F              add R30,R24
 028E F91F              adc R31,R25
 0290 4081              ldd R20,z+0
 0292                   .dbline 487
 0292 042F              mov R16,R20
 0294 CCDF              xcall _ByteWrite
 0296                   .dbline 488
 0296           L65:
 0296                   .dbline 484
 0296 6F5F              subi R22,255  ; offset = 1
 0298 7F4F              sbci R23,255
 029A           L67:
 029A                   .dbline 484
 029A 6231              cpi R22,18
 029C E0E0              ldi R30,0
 029E 7E07              cpc R23,R30
 02A0 90F3              brlo L64
 02A2                   .dbline 490

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -