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

📄 ptr8000.lis

📁 本代码实现了两块无线收发模块prt8000(核心芯片nrf905)的通信功能
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00F0                   .dbline 133
 00F0           ;  spi_init();
 00F0 E8DF              xcall _spi_init
 00F2                   .dbline 134
 00F2           ;  uart0_init();
 00F2 EFDF              xcall _uart0_init
 00F4                   .dbline 136
 00F4           ; 
 00F4           ;  MCUCR = 0x00;
 00F4 2224              clr R2
 00F6 25BE              out 0x35,R2
 00F8                   .dbline 137
 00F8           ;  GICR  = 0x00;
 00F8 2BBE              out 0x3b,R2
 00FA                   .dbline 138
 00FA           ;  TIMSK = 0x05; //timer interrupt sources
 00FA 85E0              ldi R24,5
 00FC 89BF              out 0x39,R24
 00FE                   .dbline 139
 00FE           ;  SEI(); //re-enable interrupts
 00FE 7894              sei
 0100                   .dbline -2
 0100           L13:
 0100                   .dbline 0 ; func end
 0100 0895              ret
 0102                   .dbend
 0102                   .dbfunc e main _main fV
                        .even
 0102           _main::
 0102                   .dbline -1
 0102                   .dbline 144
 0102           ;  //all peripherals are now initialized
 0102           ; }
 0102           ; 
 0102           ; void main()
 0102           ; {
 0102                   .dbline 145
 0102           ;    init_devices();
 0102 F2DF              xcall _init_devices
 0104                   .dbline 146
 0104           ;    SystemIni();
 0104 53D0              xcall _SystemIni
 0106                   .dbline 147
 0106           ;    nrf905_Init();
 0106 0E940000          xcall _nrf905_Init
 010A 0EC0              xjmp L16
 010C           L15:
 010C                   .dbline 150
 010C           ; 
 010C           ;    while (1)
 010C           ;    {  
 010C                   .dbline 151
 010C           ;       if (bTimer) TimerFunc();
 010C 20900300          lds R2,_bTimer
 0110 2220              tst R2
 0112 09F0              breq L18
 0114           X2:
 0114                   .dbline 151
 0114 40D0              xcall _TimerFunc
 0116           L18:
 0116                   .dbline 153
 0116           ;         #ifdef MASTER
 0116           ;           if (bRfSend)
 0116 20900200          lds R2,_bRfSend
 011A 2220              tst R2
 011C 21F0              breq L20
 011E           X3:
 011E                   .dbline 154
 011E           ;               { bRfSend=0;
 011E                   .dbline 154
 011E 2224              clr R2
 0120 20920200          sts _bRfSend,R2
 0124                   .dbline 155
 0124           ;                 RfSendProc();//发送测试
 0124 23D0              xcall _RfSendProc
 0126                   .dbline 156
 0126           ;               }
 0126           L20:
 0126                   .dbline 159
 0126           ;         #endif
 0126           ;         
 0126           ;         RfRecvProc();//接收处理
 0126 02D0              xcall _RfRecvProc
 0128                   .dbline 160
 0128           ;    };
 0128           L16:
 0128                   .dbline 149
 0128 F1CF              xjmp L15
 012A           X4:
 012A                   .dbline -2
 012A           L14:
 012A                   .dbline 0 ; func end
 012A 0895              ret
 012C                   .dbend
 012C                   .dbfunc e RfRecvProc _RfRecvProc fV
 012C           ;              i -> R20
                        .even
 012C           _RfRecvProc::
 012C 4A93              st -y,R20
 012E                   .dbline -1
 012E                   .dbline 165
 012E           ; }
 012E           ; 
 012E           ; //接收处理
 012E           ; void RfRecvProc()
 012E           ; {uchar i;
 012E                   .dbline 169
 012E           ; 
 012E           ;    //if ((PIND&(1<<AM))==0) return;//一般先AM=1指示地址匹配对
 012E           ;    
 012E           ;    if ((PIND&(1<<DR))==0) return;//DR=1时表示数据接收对而且Crc正确
 012E 8499              sbic 0x10,4
 0130 01C0              rjmp L23
 0132           X5:
 0132                   .dbline 169
 0132 1AC0              xjmp L22
 0134           L23:
 0134                   .dbline 172
 0134           ;    
 0134           ;    //已经接收到数据
 0134           ;    nrf905_ReadData();//读出...
 0134 0E940000          xcall _nrf905_ReadData
 0138                   .dbline 173
 0138           ;    for (i=0;i<32;i++)
 0138 4427              clr R20
 013A 0DC0              xjmp L28
 013C           L25:
 013C                   .dbline 174
 013C           ;    { if (RxBuf[i]!=(i+i)) 
 013C                   .dbline 174
 013C 242E              mov R2,R20
 013E 240E              add R2,R20
 0140 80E0              ldi R24,<_RxBuf
 0142 90E0              ldi R25,>_RxBuf
 0144 E42F              mov R30,R20
 0146 FF27              clr R31
 0148 E80F              add R30,R24
 014A F91F              adc R31,R25
 014C 3080              ldd R3,z+0
 014E 3214              cp R3,R2
 0150 09F0              breq L29
 0152           X6:
 0152                   .dbline 175
 0152           ;         return;
 0152 0AC0              xjmp L22
 0154           L29:
 0154                   .dbline 176
 0154           ;    }
 0154           L26:
 0154                   .dbline 173
 0154 4395              inc R20
 0156           L28:
 0156                   .dbline 173
 0156 4032              cpi R20,32
 0158 88F3              brlo L25
 015A           X7:
 015A                   .dbline 179
 015A           ;    
 015A           ;    //数据接收正确...灯指示
 015A           ;    CPL(PORTD,LED);
 015A 80E8              ldi R24,128
 015C 90E0              ldi R25,0
 015E 22B2              in R2,0x12
 0160 3324              clr R3
 0162 2826              eor R2,R24
 0164 3926              eor R3,R25
 0166 22BA              out 0x12,R2
 0168                   .dbline -2
 0168           L22:
 0168                   .dbline 0 ; func end
 0168 4991              ld R20,y+
 016A 0895              ret
 016C                   .dbsym r i 20 c
 016C                   .dbend
 016C                   .dbfunc e RfSendProc _RfSendProc fV
 016C           ;              i -> R20
                        .even
 016C           _RfSendProc::
 016C 4A93              st -y,R20
 016E                   .dbline -1
 016E                   .dbline 189
 016E           ;    
 016E           ;    //从机回送数据包,这样双方都能指示是否收到有效数据包
 016E           ;    #ifndef MASTER
 016E           ;      RfSendProc();
 016E           ;    #endif
 016E           ; }
 016E           ; 
 016E           ; //发送测试
 016E           ; void RfSendProc()
 016E           ; {uchar i;
 016E                   .dbline 190
 016E           ;    for (i=0;i<32;i++) TxBuf[i]=i+i;
 016E 4427              clr R20
 0170 0AC0              xjmp L35
 0172           L32:
 0172                   .dbline 190
 0172 242E              mov R2,R20
 0174 240E              add R2,R20
 0176 80E0              ldi R24,<_TxBuf
 0178 90E0              ldi R25,>_TxBuf
 017A E42F              mov R30,R20
 017C FF27              clr R31
 017E E80F              add R30,R24
 0180 F91F              adc R31,R25
 0182 2082              std z+0,R2
 0184           L33:
 0184                   .dbline 190
 0184 4395              inc R20
 0186           L35:
 0186                   .dbline 190
 0186 4032              cpi R20,32
 0188 A0F3              brlo L32
 018A           X8:
 018A                   .dbline 191
 018A           ;    nrf905_SendData();//发送测试数据
 018A 0E940000          xcall _nrf905_SendData
 018E                   .dbline 192
 018E           ;    nrf905_RxOn();//重新回到接收状态
 018E 0E940000          xcall _nrf905_RxOn
 0192                   .dbline -2
 0192           L31:
 0192                   .dbline 0 ; func end
 0192 4991              ld R20,y+
 0194 0895              ret
 0196                   .dbsym r i 20 c
 0196                   .dbend
 0196                   .dbfunc e TimerFunc _TimerFunc fV
                        .even
 0196           _TimerFunc::
 0196                   .dbline -1
 0196                   .dbline 196
 0196           ; }
 0196           ; 
 0196           ; void TimerFunc()
 0196           ; {
 0196                   .dbline 197
 0196           ;    bTimer=0;
 0196 2224              clr R2
 0198 20920300          sts _bTimer,R2
 019C                   .dbline 200
 019C           ;    //WDR();//clear WDT
 019C           ;    
 019C           ;    CPL(PORTD,LED);
 019C 80E8              ldi R24,128
 019E 90E0              ldi R25,0
 01A0 22B2              in R2,0x12
 01A2 3324              clr R3
 01A4 2826              eor R2,R24
 01A6 3926              eor R3,R25
 01A8 22BA              out 0x12,R2
 01AA                   .dbline -2
 01AA           L36:
 01AA                   .dbline 0 ; func end
 01AA 0895              ret
 01AC                   .dbend
 01AC                   .dbfunc e SystemIni _SystemIni fV
                        .even
 01AC           _SystemIni::
 01AC                   .dbline -1
 01AC                   .dbline 205
 01AC           ;    //SPDR=66;
 01AC           ; }
 01AC           ; 
 01AC           ; void SystemIni()
 01AC           ; {
 01AC                   .dbline 206
 01AC           ;   T0Cnt=T0N;
 01AC 89E1              ldi R24,25
 01AE 80930100          sts _T0Cnt,R24
 01B2                   .dbline 207
 01B2           ;   RfCnt=RFTN;
 01B2 8AE0              ldi R24,10
 01B4 80930000          sts _RfCnt,R24
 01B8                   .dbline -2
 01B8           L37:
 01B8                   .dbline 0 ; func end
 01B8 0895              ret
 01BA                   .dbend
 01BA                   .dbfunc e DelayMs _DelayMs fV
 01BA           ;              i -> R10
 01BA           ;             ms -> R12
                        .even
 01BA           _DelayMs::
 01BA AA92              st -y,R10
 01BC CA92              st -y,R12
 01BE C02E              mov R12,R16
 01C0                   .dbline -1
 01C0                   .dbline 211
 01C0           ; }
 01C0           ; 
 01C0           ; void DelayMs(uchar ms)
 01C0           ; {char i;
 01C0                   .dbline 212
 01C0           ; for (i=0;i<ms;i++)
 01C0 AA24              clr R10
 01C2 04C0              xjmp L42
 01C4           L39:
 01C4                   .dbline 213
 01C4           ;   {DelayUs(1000);
 01C4                   .dbline 213
 01C4 08EE              ldi R16,1000
 01C6 13E0              ldi R17,3
 01C8 06D0              xcall _DelayUs
 01CA                   .dbline 214
 01CA           ;   }
 01CA           L40:
 01CA                   .dbline 212
 01CA A394              inc R10
 01CC           L42:
 01CC                   .dbline 212
 01CC AC14              cp R10,R12
 01CE D0F3              brlo L39
 01D0           X9:
 01D0                   .dbline 215
 01D0           ;   return;
 01D0                   .dbline -2
 01D0           L38:
 01D0                   .dbline 0 ; func end
 01D0 C990              ld R12,y+
 01D2 A990              ld R10,y+
 01D4 0895              ret
 01D6                   .dbsym r i 10 c
 01D6                   .dbsym r ms 12 c
 01D6                   .dbend
 01D6                   .dbfunc e DelayUs _DelayUs fV
 01D6           ;              i -> R20,R21
 01D6           ;             us -> R16,R17
                        .even
 01D6           _DelayUs::
 01D6 4A93              st -y,R20
 01D8 5A93              st -y,R21
 01DA                   .dbline -1
 01DA                   .dbline 219
 01DA           ; }
 01DA           ; 
 01DA           ; void DelayUs(uint us)
 01DA           ; {uint i;
 01DA                   .dbline 220
 01DA           ;   for (i=0;i<us;i++)
 01DA 4427              clr R20
 01DC 5527              clr R21
 01DE 08C0              xjmp L47
 01E0           L44:
 01E0                   .dbline 221
 01E0           ;   {NOP();NOP();NOP();NOP();NOP();NOP();
 01E0                   .dbline 221
 01E0 0000              nop
 01E2                   .dbline 221
 01E2 0000              nop
 01E4                   .dbline 221
 01E4 0000              nop
 01E6                   .dbline 221
 01E6 0000              nop
 01E8                   .dbline 221
 01E8 0000              nop
 01EA                   .dbline 221
 01EA 0000              nop
 01EC                   .dbline 222
 01EC           ;   }
 01EC           L45:
 01EC                   .dbline 220
 01EC 4F5F              subi R20,255  ; offset = 1
 01EE 5F4F              sbci R21,255
 01F0           L47:
 01F0                   .dbline 220
 01F0 4017              cp R20,R16
 01F2 5107              cpc R21,R17
 01F4 A8F3              brlo L44
 01F6           X10:
 01F6                   .dbline -2
 01F6           L43:
 01F6                   .dbline 0 ; func end
 01F6 5991              ld R21,y+
 01F8 4991              ld R20,y+
 01FA 0895              ret
 01FC                   .dbsym r i 20 i
 01FC                   .dbsym r us 16 i
 01FC                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\无线通信\nRF905\ptr8000\PTR8000.C
 0000           _RfCnt::
 0000                   .blkb 1
 0001                   .dbsym e RfCnt _RfCnt c
 0001           _T0Cnt::
 0001                   .blkb 1
 0002                   .dbsym e T0Cnt _T0Cnt c
 0002           _bRfSend::
 0002                   .blkb 1
 0003                   .dbsym e bRfSend _bRfSend c
 0003           _bTimer::
 0003                   .blkb 1
 0004                   .dbsym e bTimer _bTimer c
 0004           ; }
 0004           ; 

⌨️ 快捷键说明

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